diff --git a/docker-compose.yml b/docker-compose.yml index 9106d067..d07fa41d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -27,7 +27,7 @@ services: build: ./frontend container_name: npm-dev restart: always - command: npm run dev + command: npm run build volumes: - ./frontend:/usr/src/frontend diff --git a/frontend/src/components/BookPage.js b/frontend/src/components/BookPage.js index e6ac7f84..27410bcd 100644 --- a/frontend/src/components/BookPage.js +++ b/frontend/src/components/BookPage.js @@ -144,7 +144,7 @@ class BookPage extends Component { }}, { field: 'payment_method', headerName: t("Payment Method"), width: 180 , renderCell: (params) => {return ( -
+
)} }, { field: 'price', headerName: t("Price"), type: 'number', width: 140, renderCell: (params) => {return ( @@ -224,7 +224,7 @@ class BookPage extends Component { { field: 'payment_method', headerName: t("Payment Method"), width: 180, hide:'true'}, { field: 'payment_icons', headerName: t("Pay"), width: 75 , renderCell: (params) => {return ( -
+
)} }, { field: 'price', headerName: t("Price"), type: 'number', width: 140, hide:'true', renderCell: (params) => {return ( @@ -293,7 +293,7 @@ class BookPage extends Component { style: {textAlign:"center"} }} onChange={this.handleCurrencyChange} - > {t("🌍 ANY")} + > {"🌍 "+t("ANY_currency")} { Object.entries(currencyDict) .map( ([key, value]) =>
{getFlags(value)}{" "+value}
) diff --git a/frontend/src/components/BottomBar.js b/frontend/src/components/BottomBar.js index 6679863e..818579d1 100644 --- a/frontend/src/components/BottomBar.js +++ b/frontend/src/components/BottomBar.js @@ -235,7 +235,7 @@ class BottomBar extends Component { - + @@ -606,10 +606,10 @@ bottomBarDesktop =()=>{ }} onChange={this.handleChangeLang}> EN - ES - DE - RU - CN + ES + DE + RU + ZH ) } diff --git a/frontend/src/components/InfoDialog.js b/frontend/src/components/InfoDialog.js index 1c988eaf..53476d3b 100644 --- a/frontend/src/components/InfoDialog.js +++ b/frontend/src/components/InfoDialog.js @@ -14,7 +14,7 @@ class InfoDialog extends Component { - {t("What is + {t("What is RoboSats?")}

{t("It is a BTC/FIAT peer-to-peer exchange over lightning.")}
{t("It simplifies matchmaking and minimizes the need of trust. RoboSats focuses in privacy and speed.")}

@@ -43,7 +43,7 @@ class InfoDialog extends Component { width='100%' src={window.location.origin +'/static/assets/images/robosats_0.1.0_banner.png'} /> -

{t("RoboSats is an open source project")} {t("RoboSats is an open source project ")} {t("(GitHub).")}

diff --git a/frontend/src/components/OrderPage.js b/frontend/src/components/OrderPage.js index cf85c148..98aee4f0 100644 --- a/frontend/src/components/OrderPage.js +++ b/frontend/src/components/OrderPage.js @@ -561,7 +561,7 @@ class OrderPage extends Component { - } secondary={this.state.currency==1000 ? t("Swap destination"):t("Accepted payment methods")}/> + } secondary={this.state.currency==1000 ? t("Swap destination"):t("Accepted payment methods")}/> @@ -618,7 +618,7 @@ class OrderPage extends Component { - {t("{{nickname}} is asking for a collaboratice cancel", {nickname: this.state.is_maker ? this.state.taker_nick : this.state.maker_nick})} + {t("{{nickname}} is asking for a collaborative cancel", {nickname: this.state.is_maker ? this.state.taker_nick : this.state.maker_nick})} @@ -719,7 +719,7 @@ class OrderPage extends Component {
{/* IMPLEMENT I18N for bad_request */} - {this.state.bad_request}
+ {t(this.state.bad_request)}
diff --git a/frontend/src/components/PaymentText.js b/frontend/src/components/PaymentText.js index 261ffaf8..385ac1a0 100644 --- a/frontend/src/components/PaymentText.js +++ b/frontend/src/components/PaymentText.js @@ -66,9 +66,9 @@ export default class PaymentText extends Component { // Adds a Custom icon if there are words that do not match var chars_left = custom_methods.replace(' ','') chars_left = chars_left.replace(' ','') - + if(chars_left.length > 0){rows.push( - +
diff --git a/frontend/src/components/TradeBox.js b/frontend/src/components/TradeBox.js index 9fac3e5e..770188d5 100644 --- a/frontend/src/components/TradeBox.js +++ b/frontend/src/components/TradeBox.js @@ -255,6 +255,7 @@ class TradeBox extends Component { } showBondIsSettled=()=>{ + const { t } = this.props; return ( @@ -268,6 +269,7 @@ class TradeBox extends Component { } showBondIsReturned=()=>{ + const { t } = this.props; return ( @@ -281,6 +283,7 @@ class TradeBox extends Component { } showEscrowQRInvoice=()=>{ + const { t } = this.props; return ( {/* Make confirmation sound for HTLC received. */} @@ -889,7 +892,7 @@ handleRatingRobosatsChange=(e)=>{ */} - What do you think of 🤖RoboSats⚡? + What do you think of 🤖RoboSats⚡? @@ -907,7 +910,7 @@ handleRatingRobosatsChange=(e)=>{

{t("Thank you for using Robosats!")}

-

Let us know how the platform could improve (Telegram / Github)

+

Let us know how the platform could improve (Telegram / Github)

: null} diff --git a/frontend/src/components/i18n.js b/frontend/src/components/i18n.js index 7120cc10..376583ac 100644 --- a/frontend/src/components/i18n.js +++ b/frontend/src/components/i18n.js @@ -3,11 +3,11 @@ import LanguageDetector from "i18next-browser-languagedetector"; import { initReactI18next } from "react-i18next"; import HttpApi from 'i18next-http-backend'; -import translationEN from "./locales/en.json"; -import translationES from "./locales/es.json"; -import translationDE from "./locales/de.json"; -import translationRU from "./locales/ru.json"; -import translationCN from "./locales/cn.json"; +import translationEN from "../locales/en.json"; +import translationES from "../locales/es.json"; +import translationDE from "../locales/de.json"; +import translationRU from "../locales/ru.json"; +import translationZH from "../locales/zh.json"; i18n .use(HttpApi) @@ -19,7 +19,7 @@ i18n es: {translations: translationES}, ru: {translations: translationRU}, de: {translations: translationDE}, - cn: {translations: translationCN}, + zh: {translations: translationZH}, }, fallbackLng: "en", diff --git a/frontend/src/components/locales/cn.json b/frontend/src/components/locales/cn.json deleted file mode 100644 index 27b57a02..00000000 --- a/frontend/src/components/locales/cn.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "UserGenPage": "User Generation Page and Landing Page", - "Simple and Private LN P2P Exchange": "Simple and Private LN P2P Exchange" -} \ No newline at end of file diff --git a/frontend/src/components/locales/de.json b/frontend/src/components/locales/de.json deleted file mode 100644 index 27b57a02..00000000 --- a/frontend/src/components/locales/de.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "UserGenPage": "User Generation Page and Landing Page", - "Simple and Private LN P2P Exchange": "Simple and Private LN P2P Exchange" -} \ No newline at end of file diff --git a/frontend/src/components/locales/es.json b/frontend/src/components/locales/es.json deleted file mode 100644 index b6d42140..00000000 --- a/frontend/src/components/locales/es.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "UNSAFE-ALERT": "Alert that shows on top when browsing from the unsafe clearnet sites", - "You are not using RoboSats privately": "No estás usando RoboSats de forma privada", - "desktop_unsafe_alert": "Some features are disabled for your protection (e.g. chat) and you will not be able to complete a trade without them. To protect your privacy and fully enable RoboSats, use <1>Tor Browser and visit the <3>Onion site.", - "phone_unsafe_alert": "You will not be able to complete a trade. Use <1>Tor Browser and visit the <3>Onion site.", - "Hide":"Hide", - - "UserGenPage": "User Generation Page and Landing Page", - "Simple and Private LN P2P Exchange":"Intercambio LN P2P Fácil y Privado", - "This is your trading avatar":"Este es tu avatar de compraventa" - } \ No newline at end of file diff --git a/frontend/src/components/locales/ru.json b/frontend/src/components/locales/ru.json deleted file mode 100644 index 27b57a02..00000000 --- a/frontend/src/components/locales/ru.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "UserGenPage": "User Generation Page and Landing Page", - "Simple and Private LN P2P Exchange": "Simple and Private LN P2P Exchange" -} \ No newline at end of file diff --git a/frontend/src/locales/CONTRIBUTING.MD b/frontend/src/locales/CONTRIBUTING.MD new file mode 100644 index 00000000..16c951e8 --- /dev/null +++ b/frontend/src/locales/CONTRIBUTING.MD @@ -0,0 +1,35 @@ +# Contributing Translations to RoboSats +RoboSats is a way to exchange BTC for **any currency of the world**. As such, for many users this tool might only be useful if it is available in a language they can understand. Translating RoboSats into a new language is one of the most valuable contributions to the project, as it makes it available to new audience, increasing the reach of this cool freedom tool. + +There isn't a lot of text in RoboSats, however it might be bst to split the work with another contributor. You can poll in the telegram community @RoboSats and find users willing to split the task. + +## How to contribute a new translation. + +Simply create a new translation file in `frontend/src/locales` (Same folder where you are reading these instructions). In `locales` there is a single file with a json dictionary for every language. In order to create a new translation, simply copy `en.json` (the master text) into a new file named after the language's [ISO 639 two character code](https://www.loc.gov/standards/iso639-2/php/English_list.php). + +## Guidelines + +Each language .json dictionary contains pairs of keys and values in the following format { "key1":"value1", "key2":"value2", ...}. Most keys are the literal English sentence. These simply have to be translated on the right side, for example, in order to translate the `Make Order` button to Spanish we should change the file to look like this `{... "Make Order":"Crear Orden",...}`. + +1. **Not all keys are explicit sentences.** Some keys are variable names e.g. "phone_unsafe_alert". In these case you must take a look at the value originally in `en.json`. + +2. **The language dictionary is split into 9 sections.** The first key of each section is a reference and does not need to be translated. For example, the second section starts with the key:value `"USER GENERATION PAGE - UserGenPage.js": "Landing Page and User Generation"` . It does not need to be translated, it is just information for the translator to understand what part of the app he will be working on. + +3. **Try to keep a similar length to the original sentence.** In most cases it will be okay if the translation is shorter. However, translations that result in a higher character count might break the UI! Of course, it might not always be possible to stick to the length of the English sentence. In those cases the UI might have to be changed, contact the responsible person for such a change. + +4. **Some sentences contain variables**, for example, {{currencyCode}}. It will insert the currency code where the variable is found. E.g., `"Pay 30 {{currencyCode}}"` will render into "Pay 30 USD". + +5. **Some sentences contain HTML tags.** These tags are usually hyperlinks. For example in `{"phone_unsafe_alert": "Use <1>Tor Browser and visit the <3>Onion site."}` the children text of <1> (Tor Browser) will link to the Tor Download website, and the children of <3> will link to the RoboSats Onion site. + +6. **Some text is high priority, some other text is low priority.** Some keys are likely to change soon or they might not be so relevant for the user of the app. The translation files are sorted from top to bottom by the priority of the translation. The keys by the end of the translation file are more likely to change. It is best to translate from top to bottom. + +7. Use a spell checker ;) + +8. **Understand the context of where the translation will be displayed.** Literal translations might not work well to some languages. While in English the wording is always similar, in some languages it might be very different if you are translating a button (the user is taking an action) or if you are simply translating a tooltip. + +To understand the context it might be clever to translate the strings while looking at the app. However, many strings can only be found while trading. The testnet RoboSats site is great for this as you can explore the whole app simply interacting with it with testnet bitcoin. However, in case of doubt where a text is displayed, it might be faster to simply write a message on the community group @robosats in Telegram. + +9. Congratulate yourself! Seriously, it's so awesome you are looking into building up freedom tools!! + + + diff --git a/frontend/src/locales/de.json b/frontend/src/locales/de.json new file mode 100644 index 00000000..08d05939 --- /dev/null +++ b/frontend/src/locales/de.json @@ -0,0 +1,354 @@ +{ + "UNSAFE ALERT - UnsafeAlert.js": "Alert that shows on top when browsing from the unsafe clearnet sites", + "You are not using RoboSats privately": "You are not using RoboSats privately", + "desktop_unsafe_alert": "Some features are disabled for your protection (e.g. chat) and you will not be able to complete a trade without them. To protect your privacy and fully enable RoboSats, use <1>Tor Browser and visit the <3>Onion site.", + "phone_unsafe_alert": "You will not be able to complete a trade. Use <1>Tor Browser and visit the <3>Onion site.", + "Hide":"Hide", + + + "USER GENERATION PAGE - UserGenPage.js": "Landing Page and User Generation", + "Simple and Private LN P2P Exchange": "Simple and Private LN P2P Exchange", + "This is your trading avatar":"This is your trading avatar", + "Store your token safely":"Store your token safely", + "A robot avatar was found, welcome back!":"A robot avatar was found, welcome back!", + "Copied!":"Copied!", + "Generate a new token":"Generate a new token", + "Generate Robot":"Generate Robot", + "You must enter a new token first":"You must enter a new token first", + "Make Order":"Make Order", + "Info":"Info", + "View Book":"View Book", + + + "MAKER PAGE - MakerPage.js": "This is the page where users can create new orders", + "Order":"Order", + "Customize":"Customize", + "Buy or Sell Bitcoin?":"Buy or Sell Bitcoin?", + "Buy":"Buy", + "Sell":"Sell", + "Amount":"Amount", + "Amount of fiat to exchange for bitcoin":"Amount of fiat to exchange for bitcoin", + "Invalid":"Invalid", + "Enter your preferred fiat payment methods. Fast methods are highly recommended.":"Enter your preferred fiat payment methods. Fast methods are highly recommended.", + "Must be shorter than 65 characters":"Must be shorter than 65 characters", + "Swap Destination(s)":"Swap Destination(s)", + "Fiat Payment Method(s)":"Fiat Payment Method(s)", + "You can add any method":"You can add any method", + "Add New":"Add New", + "Choose a Pricing Method":"Choose a Pricing Method", + "Relative":"Relative", + "Let the price move with the market":"Let the price move with the market", + "Premium over Market (%)":"Premium over Market (%)", + "Explicit":"Explicit", + "Set a fix amount of satoshis":"Set a fix amount of satoshis", + "Satoshis":"Satoshis", + "Let the taker chose an amount within the range":"Let the taker chose an amount within the range", + "Enable Amount Range":"Enable Amount Range", + "From": "From", + "to":"to", + "Public Duration (HH:mm)":"Public Duration (HH:mm)", + "Set the skin-in-the-game, increase for higher safety assurance":"Set the skin-in-the-game, increase for higher safety assurance", + "Fidelity Bond Size":"Fidelity Bond Size", + "Allow bondless takers":"Allow bondless takers", + "COMING SOON - High risk! Limited to {{limitSats}}K Sats":"COMING SOON - High risk! Limited to {{limitSats}}K Sats", + "You must fill the order correctly":"You must fill the order correctly", + "Create Order":"Create Order", + "Back":"Back", + "Create a BTC buy order for ":"Create a BTC buy order for ", + "Create a BTC sell order for ":"Create a BTC sell order for ", + " of {{satoshis}} Satoshis":" of {{satoshis}} Satoshis", + " at market price":" at market price", + " at a {{premium}}% premium":" at a {{premium}}% premium", + " at a {{discount}}% discount":" at a {{discount}}% discount", + "Must be less than {{max}}%":"Must be less than {{max}}%", + "Must be more than {{min}}%":"Must be more than {{min}}%", + "Must be less than {{maxSats}": "Must be less than {{maxSats}}", + "Must be more than {{minSats}}": "Must be more than {{minSats}}", + + + "BOOK PAGE - BookPage.js":"The Book Order page", + "Seller":"Seller", + "Buyer":"Buyer", + "I want to":"I want to", + "Select Order Type":"Select Order Type", + "ANY_type":"ANY", + "ANY_currency":"ANY", + "BUY":"BUY", + "SELL":"SELL", + "and receive":"and receive", + "and pay with":"and pay with", + "and use":"and use", + "Select Payment Currency":"Select Payment Currency", + "Robot":"Robot", + "Is":"Is", + "Currency":"Currency", + "Payment Method":"Payment Method", + "Pay":"Pay", + "Price":"Price", + "Premium":"Premium", + "You are SELLING BTC for {{currencyCode}}":"You are SELLING BTC for {{currencyCode}}", + "You are BUYING BTC for {{currencyCode}}":"You are BUYING BTC for {{currencyCode}}", + "You are looking at all":"You are looking at all", + "No orders found to sell BTC for {{currencyCode}}":"No orders found to sell BTC for {{currencyCode}}", + "No orders found to buy BTC for {{currencyCode}}":"No orders found to buy BTC for {{currencyCode}}", + "Be the first one to create an order":"Be the first one to create an order", + + + "BOTTOM BAR AND MISC - BottomBar.js":"Bottom Bar user profile and miscellaneous dialogs", + "Stats For Nerds":"Stats For Nerds", + "LND version":"LND version", + "Currently running commit hash":"Currently running commit hash", + "24h contracted volume":"24h contracted volume", + "Lifetime contracted volume":"Lifetime contracted volume", + "Made with":"Made with", + "and":"and", + "... somewhere on Earth!":"... somewhere on Earth!", + "Community":"Community", + "Support is only offered via public channels. Join our Telegram community if you have questions or want to hang out with other cool robots. Please, use our Github Issues if you find a bug or want to see new features!":"Support is only offered via public channels. Join our Telegram community if you have questions or want to hang out with other cool robots. Please, use our Github Issues if you find a bug or want to see new features!", + "Join the RoboSats group":"Join the RoboSats group", + "Telegram (English / Main)":"Telegram (English / Main)", + "RoboSats Telegram Communities":"RoboSats Telegram Communities", + "Join RoboSats Spanish speaking community!":"Join RoboSats Spanish speaking community!", + "Join RoboSats Russian speaking community!":"Join RoboSats Russian speaking community!", + "Join RoboSats Chinese speaking community!":"Join RoboSats Chinese speaking community!", + "Join RoboSats English speaking community!":"Join RoboSats English speaking community!", + "Tell us about a new feature or a bug":"Tell us about a new feature or a bug", + "Github Issues - The Robotic Satoshis Open Source Project":"Github Issues - The Robotic Satoshis Open Source Project", + "Your Profile":"Your Profile", + "Your robot":"Your robot", + "One active order #{{orderID}}":"One active order #{{orderID}}", + "Your current order":"Your current order", + "No active orders":"No active orders", + "Your token (will not remain here)":"Your token (will not remain here)", + "Back it up!":"Back it up!", + "Cannot remember":"Cannot remember", + "Rewards and compensations":"Rewards and compensations", + "Share to earn 100 Sats per trade":"Share to earn 100 Sats per trade", + "Your referral link":"Your referral link", + "Your earned rewards":"Your earned rewards", + "Claim":"Claim", + "Invoice for {{amountSats}} Sats":"Invoice for {{amountSats}} Sats", + "Submit":"Submit", + "There it goes, thank you!🥇":"There it goes, thank you!🥇", + "You have an active order":"You have an active order", + "You can claim satoshis!":"You can claim satoshis!", + "Public Buy Orders":"Public Buy Orders", + "Public Sell Orders":"Public Sell Orders", + "Today Active Robots":"Today Active Robots", + "24h Avg Premium":"24h Avg Premium", + "Trade Fee":"Trade Fee", + "Show community and support links":"Show community and support links", + "Show stats for nerds":"Show stats for nerds", + "Exchange Summary":"Exchange Summary", + "Public buy orders":"Public buy orders", + "Public sell orders":"Public sell orders", + "Book liquidity":"Book liquidity", + "Today active robots":"Today active robots", + "24h non-KYC bitcoin premium":"24h non-KYC bitcoin premium", + "Maker fee":"Maker fee", + "Taker fee":"Taker fee", + "Number of public BUY orders":"Number of public BUY orders", + "Number of public SELL orders":"Number of public SELL orders", + + + "ORDER PAGE - OrderPage.js": "Order details page", + "Order Box":"Order Box", + "Contract":"Contract", + "Active":"Active", + "Seen recently":"Seen recently", + "Inactive":"Inactive", + "(Seller)":"(Seller)", + "(Buyer)":"(Buyer)", + "Order maker":"Order maker", + "Order taker":"Order taker", + "Order Details":"Order Details", + "Order status":"Order status", + "Waiting for maker bond":"Waiting for maker bond", + "Public":"Public", + "Waiting for taker bond":"Waiting for taker bond", + "Cancelled":"Cancelled", + "Expired":"Expired", + "Waiting for trade collateral and buyer invoice":"Waiting for trade collateral and buyer invoice", + "Waiting only for seller trade collateral":"Waiting only for seller trade collateral", + "Waiting only for buyer invoice":"Waiting only for buyer invoice", + "Sending fiat - In chatroom":"Sending fiat - In chatroom", + "Fiat sent - In chatroom":"Fiat sent - In chatroom", + "In dispute":"In dispute", + "Collaboratively cancelled":"Collaboratively cancelled", + "Sending satoshis to buyer":"Sending satoshis to buyer", + "Sucessful trade":"Successful trade", + "Failed lightning network routing":"Failed lightning network routing", + "Wait for dispute resolution":"Wait for dispute resolution", + "Maker lost dispute":"Maker lost dispute", + "Taker lost dispute":"Taker lost dispute", + "Amount range":"Amount range", + "Swap destination":"Swap destination", + "Accepted payment methods":"Accepted payment methods", + "Others":"Others", + "{{price}} {{currencyCode}}/BTC - Premium: {{premium}}%":"{{price}} {{currencyCode}}/BTC - Premium: {{premium}}%", + "Price and Premium":"Price and Premium", + "Amount of Satoshis":"Amount of Satoshis", + "Premium over market price":"Premium over market price", + "Order ID":"Order ID", + "Expires in":"Expires in", + "{{nickname}} is asking for a collaborative cancel":"{{nickname}} is asking for a collaborative cancel", + "You asked for a collaborative cancellation":"You asked for a collaborative cancellation", + "Invoice expired. You did not confirm publishing the order in time. Make a new order.":"Invoice expired. You did not confirm publishing the order in time. Make a new order.", + "This order has been cancelled by the maker":"This order has been cancelled by the maker", + "Penalty lifted, good to go!":"Penalty lifted, good to go!", + "You cannot take an order yet! Wait {{timeMin}}m {{timeSec}}s":"You cannot take an order yet! Wait {{timeMin}}m {{timeSec}}s", + "Too low":"Too low", + "Too high":"Too high", + "Enter amount of fiat to exchange for bitcoin":"Enter amount of fiat to exchange for bitcoin", + "Amount {{currencyCode}}":"Amount {{currencyCode}}", + "You must specify an amount first":"You must specify an amount first", + "Take Order":"Take Order", + "Wait until you can take an order":"Wait until you can take an order", + "Cancel the order?":"Cancel the order?", + "If the order is cancelled now you will lose your bond.":"If the order is cancelled now you will lose your bond.", + "Confirm Cancel":"Confirm Cancel", + "The maker is away":"The maker is away", + "By taking this order you risk wasting your time. If the maker does not proceed in time, you will be compensated in satoshis for 50% of the maker bond.":"By taking this order you risk wasting your time. If the maker does not proceed in time, you will be compensated in satoshis for 50% of the maker bond.", + "Collaborative cancel the order?":"Collaborative cancel the order?", + "The trade escrow has been posted. The order can be cancelled only if both, maker and taker, agree to cancel.":"The trade escrow has been posted. The order can be cancelled only if both, maker and taker, agree to cancel.", + "Ask for Cancel":"Ask for Cancel", + "Cancel":"Cancel", + "Collaborative Cancel":"Collaborative Cancel", + "Invalid Order Id":"Invalid Order Id", + "You must have a robot avatar to see the order details":"You must have a robot avatar to see the order details", + "This order has been cancelled collaborativelly":"This order has been cancelled collaborativelly", + "You are not allowed to see this order":"You are not allowed to see this order", + "The Robotic Satoshis working in the warehouse did not understand you. Please, fill a Bug Issue in Github https://github.com/reckless-satoshi/robosats/issues":"The Robotic Satoshis working in the warehouse did not understand you. Please, fill a Bug Issue in Github https://github.com/reckless-satoshi/robosats/issues", + + "CHAT BOX - Chat.js":"Chat Box", + "You":"You", + "Peer":"Peer", + "connected":"connected", + "disconnected":"disconnected", + "Type a message":"Type a message", + "Connecting...":"Connecting...", + "Send":"Send", + "The chat has no memory: if you leave, messages are lost.":"The chat has no memory: if you leave, messages are lost.", + "Learn easy PGP encryption.":"Learn easy PGP encryption.", + + "CONTRACT BOX - TradeBox.js": "The Contract Box that guides users trough the whole trade pipeline", + "Contract Box":"Contract Box", + "Robots show commitment to their peers": "Robots show commitment to their peers", + "Lock {{amountSats}} Sats to PUBLISH order": "Lock {{amountSats}} Sats to PUBLISH order", + "Lock {{amountSats}} Sats to TAKE order": "Lock {{amountSats}} Sats to TAKE order", + "Lock {{amountSats}} Sats as collateral": "Lock {{amountSats}} Sats as collateral", + "Copy to clipboard":"Copy to clipboard", + "This is a hold invoice, it will freeze in your wallet. It will be charged only if you cancel or lose a dispute.":"This is a hold invoice, it will freeze in your wallet. It will be charged only if you cancel or lose a dispute.", + "This is a hold invoice, it will freeze in your wallet. It will be released to the buyer once you confirm to have received the {{currencyCode}}.":"This is a hold invoice, it will freeze in your wallet. It will be released to the buyer once you confirm to have received the {{currencyCode}}.", + "Your maker bond is locked":"Your maker bond is locked", + "Your taker bond is locked":"Your taker bond is locked", + "Your maker bond was settled":"Your maker bond was settled", + "Your taker bond was settled":"Your taker bond was settled", + "Your maker bond was unlock":"Your maker bond was unlock", + "Your taker bond was unlocked":"Your taker bond was unlocked", + "Your order is public":"Your order is public", + "Be patient while robots check the book. It might take some time. This box will ring 🔊 once a robot takes your order.":"Be patient while robots check the book. It might take some time. This box will ring 🔊 once a robot takes your order.", + "Please note that if your premium is excessive or your currency or payment methods are not popular, your order might expire untaken. Your bond will return to you (no action needed).":"Please note that if your premium is excessive or your currency or payment methods are not popular, your order might expire untaken. Your bond will return to you (no action needed).", + "Enable Telegram Notifications":"Enable Telegram Notifications", + "Enable TG Notifications":"Enable TG Notifications", + "You will be taken to a conversation with RoboSats telegram bot. Simply open the chat and press Start. Note that by enabling telegram notifications you might lower your level of anonymity.":"You will be taken to a conversation with RoboSats telegram bot. Simply open the chat and press Start. Note that by enabling telegram notifications you might lower your level of anonymity.", + "Go back":"Go back", + "Enable":"Enable", + "Telegram enabled":"Telegram enabled", + "Public orders for {{currencyCode}}":"Public orders for {{currencyCode}}", + "Premium rank": "Premium rank", + "Among public {{currencyCode}} orders (higher is cheaper)": "Among public {{currencyCode}} orders (higher is cheaper)", + "A taker has been found!":"A taker has been found!", + "Please wait for the taker to lock a bond. If the taker does not lock a bond in time, the order will be made public again.":"Please wait for the taker to lock a bond. If the taker does not lock a bond in time, the order will be made public again.", + "Submit an invoice for {{amountSats}} Sats":"Submit an invoice for {{amountSats}} Sats", + "The taker is committed! Before letting you send {{amountFiat}} {{currencyCode}}, we want to make sure you are able to receive the BTC. Please provide a valid invoice for {{amountSats}} Satoshis.":"The taker is committed! Before letting you send {{amountFiat}} {{currencyCode}}, we want to make sure you are able to receive the BTC. Please provide a valid invoice for {{amountSats}} Satoshis.", + "Payout Lightning Invoice":"Payout Lightning Invoice", + "Your invoice looks good!":"Your invoice looks good!", + "We are waiting for the seller lock the trade amount.":"We are waiting for the seller lock the trade amount.", + "Just hang on for a moment. If the seller does not deposit, you will get your bond back automatically. In addition, you will receive a compensation (check the rewards in your profile).":"Just hang on for a moment. If the seller does not deposit, you will get your bond back automatically. In addition, you will receive a compensation (check the rewards in your profile).", + "The trade collateral is locked!":"The trade collateral is locked!", + "We are waiting for the buyer to post a lightning invoice. Once he does, you will be able to directly communicate the fiat payment details.":"We are waiting for the buyer to post a lightning invoice. Once he does, you will be able to directly communicate the fiat payment details.", + "Just hang on for a moment. If the buyer does not cooperate, you will get back the trade collateral and your bond automatically. In addition, you will receive a compensation (check the rewards in your profile).":"Just hang on for a moment. If the buyer does not cooperate, you will get back the trade collateral and your bond automatically. In addition, you will receive a compensation (check the rewards in your profile).", + "Confirm {{currencyCode}} sent":"Confirm {{currencyCode}} sent", + "Confirm {{currencyCode}} received":"Confirm {{currencyCode}} received", + "Open Dispute":"Open Dispute", + "The order has expired":"The order has expired", + "Chat with the buyer":"Chat with the buyer", + "Chat with the seller":"Chat with the seller", + "Say hi! Be helpful and concise. Let them know how to send you {{currencyCode}}.":"Say hi! Be helpful and concise. Let them know how to send you {{currencyCode}}.", + "The buyer has sent the fiat. Click 'Confirm Received' once you receive it.":"The buyer has sent the fiat. Click 'Confirm Received' once you receive it.", + "Say hi! Ask for payment details and click 'Confirm Sent' as soon as the payment is sent.":"Say hi! Ask for payment details and click 'Confirm Sent' as soon as the payment is sent.", + "Wait for the seller to confirm he has received the payment.":"Wait for the seller to confirm he has received the payment.", + "Confirm you received {{currencyCode}}?":"Confirm you received {{currencyCode}}?", + "Confirming that you received the fiat will finalize the trade. The satoshis in the escrow will be released to the buyer. Only confirm after the {{currencyCode}} has arrived to your account. In addition, if you have received {{currencyCode}} and do not confirm the receipt, you risk losing your bond.":"Confirming that you received the fiat will finalize the trade. The satoshis in the escrow will be released to the buyer. Only confirm after the {{currencyCode}} has arrived to your account. In addition, if you have received {{currencyCode}} and do not confirm the receipt, you risk losing your bond.", + "Confirm":"Confirm", + "🎉Trade finished!🥳":"🎉Trade finished!🥳", + "rate_robosats":"What do you think of 🤖<1>RoboSats⚡?", + "Thank you! RoboSats loves you too ❤️":"Thank you! RoboSats loves you too ❤️", + "RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!":"RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!", + "Thank you for using Robosats!":"Thank you for using Robosats!", + "let_us_know_hot_to_improve":"Let us know how the platform could improve (<1>Telegram / <3>Github)", + "Start Again":"Start Again", + "Attempting Lightning Payment":"Attempting Lightning Payment", + "RoboSats is trying to pay your lightning invoice. Remember that lightning nodes must be online in order to receive payments.":"RoboSats is trying to pay your lightning invoice. Remember that lightning nodes must be online in order to receive payments.", + "Retrying!":"Retrying!", + "Lightning Routing Failed":"Lightning Routing Failed", + "Your invoice has expired or more than 3 payment attempts have been made. Muun wallet is not recommended. ":"Your invoice has expired or more than 3 payment attempts have been made. Muun wallet is not recommended. ", + "Check the list of compatible wallets":"Check the list of compatible wallets", + "RoboSats will try to pay your invoice 3 times every 5 minutes. If it keeps failing, you will be able to submit a new invoice. Check whether you have enough inbound liquidity. Remember that lightning nodes must be online in order to receive payments.":"RoboSats will try to pay your invoice 3 times every 5 minutes. If it keeps failing, you will be able to submit a new invoice. Check whether you have enough inbound liquidity. Remember that lightning nodes must be online in order to receive payments.", + "Next attempt in":"Next attempt in", + "Do you want to open a dispute?":"Do you want to open a dispute?", + "The RoboSats staff will examine the statements and evidence provided. You need to build a complete case, as the staff cannot read the chat. It is best to provide a burner contact method with your statement. The satoshis in the trade escrow will be sent to the dispute winner, while the dispute loser will lose the bond.":"The RoboSats staff will examine the statements and evidence provided. You need to build a complete case, as the staff cannot read the chat. It is best to provide a burner contact method with your statement. The satoshis in the trade escrow will be sent to the dispute winner, while the dispute loser will lose the bond.", + "Disagree":"Disagree", + "Agree and open dispute":"Agree and open dispute", + "A dispute has been opened":"A dispute has been opened", + "Please, submit your statement. Be clear and specific about what happened and provide the necessary evidence. You MUST provide a contact method: burner email, XMPP or telegram username to follow up with the staff. Disputes are solved at the discretion of real robots (aka humans), so be as helpful as possible to ensure a fair outcome. Max 5000 chars.":"Please, submit your statement. Be clear and specific about what happened and provide the necessary evidence. You MUST provide a contact method: burner email, XMPP or telegram username to follow up with the staff. Disputes are solved at the discretion of real robots (aka humans), so be as helpful as possible to ensure a fair outcome. Max 5000 chars.", + "Submit dispute statement":"Submit dispute statement", + "We have received your statement":"We have received your statement", + "We are waiting for your trade counterpart statement. If you are hesitant about the state of the dispute or want to add more information, contact robosats@protonmail.com.":"We are waiting for your trade counterpart statement. If you are hesitant about the state of the dispute or want to add more information, contact robosats@protonmail.com.", + "Please, save the information needed to identify your order and your payments: order ID; payment hashes of the bonds or escrow (check on your lightning wallet); exact amount of satoshis; and robot nickname. You will have to identify yourself as the user involved in this trade via email (or other contact methods).":"Please, save the information needed to identify your order and your payments: order ID; payment hashes of the bonds or escrow (check on your lightning wallet); exact amount of satoshis; and robot nickname. You will have to identify yourself as the user involved in this trade via email (or other contact methods).", + "We have the statements":"We have the statements", + "Both statements have been received, wait for the staff to resolve the dispute. If you are hesitant about the state of the dispute or want to add more information, contact robosats@protonmail.com. If you did not provide a contact method, or are unsure whether you wrote it right, write us immediately.":"Both statements have been received, wait for the staff to resolve the dispute. If you are hesitant about the state of the dispute or want to add more information, contact robosats@protonmail.com. If you did not provide a contact method, or are unsure whether you wrote it right, write us immediately.", + "You have won the dispute":"You have won the dispute", + "You can claim the dispute resolution amount (escrow and fidelity bond) from your profile rewards. If there is anything the staff can help with, do not hesitate to contact to robosats@protonmail.com (or via your provided burner contact method).":"You can claim the dispute resolution amount (escrow and fidelity bond) from your profile rewards. If there is anything the staff can help with, do not hesitate to contact to robosats@protonmail.com (or via your provided burner contact method).", + "You have lost the dispute":"You have lost the dispute", + "Unfortunately you have lost the dispute. If you think this is a mistake you can ask to re-open the case via email to robosats@protonmail.com. However, chances of it being investigated again are low.":"Unfortunately you have lost the dispute. If you think this is a mistake you can ask to re-open the case via email to robosats@protonmail.com. However, chances of it being investigated again are low.", + + "INFO DIALOG - InfoDiagog.js":"App information and clarifications and terms of use", + "Close":"Close", + "What is RoboSats?":"What is RoboSats?", + "It is a BTC/FIAT peer-to-peer exchange over lightning.":"It is a BTC/FIAT peer-to-peer exchange over lightning.", + "RoboSats is an open source project ":"RoboSats is an open source project ", + "It simplifies matchmaking and minimizes the need of trust. RoboSats focuses in privacy and speed.":"It simplifies matchmaking and minimizes the need of trust. RoboSats focuses in privacy and speed.", + "(GitHub).":"(GitHub).", + "How does it work?":"How does it work?", + "AnonymousAlice01 wants to sell bitcoin. She posts a sell order. BafflingBob02 wants to buy bitcoin and he takes Alice's order. Both have to post a small bond using lightning to prove they are real robots. Then, Alice posts the trade collateral also using a lightning hold invoice. RoboSats locks the invoice until Alice confirms she received the fiat, then the satoshis are released to Bob. Enjoy your satoshis, Bob!":"AnonymousAlice01 wants to sell bitcoin. She posts a sell order. BafflingBob02 wants to buy bitcoin and he takes Alice's order. Both have to post a small bond using lightning to prove they are real robots. Then, Alice posts the trade collateral also using a lightning hold invoice. RoboSats locks the invoice until Alice confirms she received the fiat, then the satoshis are released to Bob. Enjoy your satoshis, Bob!", + "At no point, AnonymousAlice01 and BafflingBob02 have to entrust the bitcoin funds to each other. In case they have a conflict, RoboSats staff will help resolving the dispute.":"At no point, AnonymousAlice01 and BafflingBob02 have to entrust the bitcoin funds to each other. In case they have a conflict, RoboSats staff will help resolving the dispute.", + "You can find a step-by-step description of the trade pipeline in ":"You can find a step-by-step description of the trade pipeline in ", + "How it works":"How it works", + "You can also check the full guide in ":"You can also check the full guide in ", + "How to use":"How to use", + "What payment methods are accepted?":"What payment methods are accepted?", + "All of them as long as they are fast. You can write down your preferred payment method(s). You will have to match with a peer who also accepts that method. The step to exchange fiat has a expiry time of 24 hours before a dispute is automatically open. We highly recommend using instant fiat payment rails.":"All of them as long as they are fast. You can write down your preferred payment method(s). You will have to match with a peer who also accepts that method. The step to exchange fiat has a expiry time of 24 hours before a dispute is automatically open. We highly recommend using instant fiat payment rails.", + "Are there trade limits?":"Are there trade limits?", + "Maximum single trade size is {{maxAmount}} Satoshis to minimize lightning routing failure. There is no limits to the number of trades per day. A robot can only have one order at a time. However, you can use multiple robots simultaneously in different browsers (remember to back up your robot tokens!).":"Maximum single trade size is {{maxAmount}} Satoshis to minimize lightning routing failure. There is no limits to the number of trades per day. A robot can only have one order at a time. However, you can use multiple robots simultaneously in different browsers (remember to back up your robot tokens!).", + "Is RoboSats private?":"Is RoboSats private?", + "RoboSats will never ask you for your name, country or ID. RoboSats does not custody your funds and does not care who you are. RoboSats does not collect or custody any personal data. For best anonymity use Tor Browser and access the .onion hidden service.":"RoboSats will never ask you for your name, country or ID. RoboSats does not custody your funds and does not care who you are. RoboSats does not collect or custody any personal data. For best anonymity use Tor Browser and access the .onion hidden service.", + "Your trading peer is the only one who can potentially guess anything about you. Keep your chat short and concise. Avoid providing non-essential information other than strictly necessary for the fiat payment.":"Your trading peer is the only one who can potentially guess anything about you. Keep your chat short and concise. Avoid providing non-essential information other than strictly necessary for the fiat payment.", + "What are the risks?":"What are the risks?", + "This is an experimental application, things could go wrong. Trade small amounts!":"This is an experimental application, things could go wrong. Trade small amounts!", + "The seller faces the same charge-back risk as with any other peer-to-peer service. Paypal or credit cards are not recommended.":"The seller faces the same charge-back risk as with any other peer-to-peer service. Paypal or credit cards are not recommended.", + "What is the trust model?":"What is the trust model?", + "The buyer and the seller never have to trust each other. Some trust on RoboSats is needed since linking the seller's hold invoice and buyer payment is not atomic (yet). In addition, disputes are solved by the RoboSats staff.":"The buyer and the seller never have to trust each other. Some trust on RoboSats is needed since linking the seller's hold invoice and buyer payment is not atomic (yet). In addition, disputes are solved by the RoboSats staff.", + "To be totally clear. Trust requirements are minimized. However, there is still one way RoboSats could run away with your satoshis: by not releasing the satoshis to the buyer. It could be argued that such move is not in RoboSats' interest as it would damage the reputation for a small payout. However, you should hesitate and only trade small quantities at a time. For large amounts use an onchain escrow service such as Bisq":"To be totally clear. Trust requirements are minimized. However, there is still one way RoboSats could run away with your satoshis: by not releasing the satoshis to the buyer. It could be argued that such move is not in RoboSats' interest as it would damage the reputation for a small payout. However, you should hesitate and only trade small quantities at a time. For large amounts use an onchain escrow service such as Bisq", + "You can build more trust on RoboSats by inspecting the source code.":"You can build more trust on RoboSats by inspecting the source code.", + "Project source code":"Project source code", + "What happens if RoboSats suddenly disappears?":"What happens if RoboSats suddenly disappears?", + "Your sats will return to you. Any hold invoice that is not settled would be automatically returned even if RoboSats goes down forever. This is true for both, locked bonds and trading escrows. However, there is a small window between the seller confirms FIAT RECEIVED and the moment the buyer receives the satoshis when the funds could be permanently lost if RoboSats disappears. This window is about 1 second long. Make sure to have enough inbound liquidity to avoid routing failures. If you have any problem, reach out trough the RoboSats public channels.":"Your sats will return to you. Any hold invoice that is not settled would be automatically returned even if RoboSats goes down forever. This is true for both, locked bonds and trading escrows. However, there is a small window between the seller confirms FIAT RECEIVED and the moment the buyer receives the satoshis when the funds could be permanently lost if RoboSats disappears. This window is about 1 second long. Make sure to have enough inbound liquidity to avoid routing failures. If you have any problem, reach out trough the RoboSats public channels.", + "In many countries using RoboSats is no different than using Ebay or Craiglist. Your regulation may vary. It is your responsibility to comply.":"In many countries using RoboSats is no different than using Ebay or Craiglist. Your regulation may vary. It is your responsibility to comply.", + "Is RoboSats legal in my country?":"Is RoboSats legal in my country?", + "Disclaimer":"Disclaimer", + "This lightning application is provided as is. It is in active development: trade with the utmost caution. There is no private support. Support is only offered via public channels ":"This lightning application is provided as is. It is in active development: trade with the utmost caution. There is no private support. Support is only offered via public channels ", + "(Telegram)":"(Telegram)", + ". RoboSats will never contact you. RoboSats will definitely never ask for your robot token.":". RoboSats will never contact you. RoboSats will definitely never ask for your robot token." +} \ No newline at end of file diff --git a/frontend/src/components/locales/en.json b/frontend/src/locales/en.json similarity index 96% rename from frontend/src/components/locales/en.json rename to frontend/src/locales/en.json index 49d0f274..08d05939 100644 --- a/frontend/src/components/locales/en.json +++ b/frontend/src/locales/en.json @@ -79,11 +79,11 @@ "and pay with":"and pay with", "and use":"and use", "Select Payment Currency":"Select Payment Currency", - "🌍 ANY":"🌍 ANY", "Robot":"Robot", "Is":"Is", "Currency":"Currency", "Payment Method":"Payment Method", + "Pay":"Pay", "Price":"Price", "Premium":"Premium", "You are SELLING BTC for {{currencyCode}}":"You are SELLING BTC for {{currencyCode}}", @@ -94,7 +94,7 @@ "Be the first one to create an order":"Be the first one to create an order", - "BOTTOM BAR AND MISC - BottomBar.js":"Bottom Bar user profile and miscelaneous dialogs", + "BOTTOM BAR AND MISC - BottomBar.js":"Bottom Bar user profile and miscellaneous dialogs", "Stats For Nerds":"Stats For Nerds", "LND version":"LND version", "Currently running commit hash":"Currently running commit hash", @@ -110,7 +110,7 @@ "RoboSats Telegram Communities":"RoboSats Telegram Communities", "Join RoboSats Spanish speaking community!":"Join RoboSats Spanish speaking community!", "Join RoboSats Russian speaking community!":"Join RoboSats Russian speaking community!", - "Join RoboSats Chinesse speaking community!":"Join RoboSats Chinesse speaking community!", + "Join RoboSats Chinese speaking community!":"Join RoboSats Chinese speaking community!", "Join RoboSats English speaking community!":"Join RoboSats English speaking community!", "Tell us about a new feature or a bug":"Tell us about a new feature or a bug", "Github Issues - The Robotic Satoshis Open Source Project":"Github Issues - The Robotic Satoshis Open Source Project", @@ -176,7 +176,7 @@ "In dispute":"In dispute", "Collaboratively cancelled":"Collaboratively cancelled", "Sending satoshis to buyer":"Sending satoshis to buyer", - "Sucessful trade":"Sucessful trade", + "Sucessful trade":"Successful trade", "Failed lightning network routing":"Failed lightning network routing", "Wait for dispute resolution":"Wait for dispute resolution", "Maker lost dispute":"Maker lost dispute", @@ -184,15 +184,17 @@ "Amount range":"Amount range", "Swap destination":"Swap destination", "Accepted payment methods":"Accepted payment methods", + "Others":"Others", "{{price}} {{currencyCode}}/BTC - Premium: {{premium}}%":"{{price}} {{currencyCode}}/BTC - Premium: {{premium}}%", "Price and Premium":"Price and Premium", "Amount of Satoshis":"Amount of Satoshis", "Premium over market price":"Premium over market price", "Order ID":"Order ID", "Expires in":"Expires in", - "{{nickname}} is asking for a collaboratice cancel":"{{nickname}} is asking for a collaboratice cancel", + "{{nickname}} is asking for a collaborative cancel":"{{nickname}} is asking for a collaborative cancel", "You asked for a collaborative cancellation":"You asked for a collaborative cancellation", "Invoice expired. You did not confirm publishing the order in time. Make a new order.":"Invoice expired. You did not confirm publishing the order in time. Make a new order.", + "This order has been cancelled by the maker":"This order has been cancelled by the maker", "Penalty lifted, good to go!":"Penalty lifted, good to go!", "You cannot take an order yet! Wait {{timeMin}}m {{timeSec}}s":"You cannot take an order yet! Wait {{timeMin}}m {{timeSec}}s", "Too low":"Too low", @@ -212,7 +214,11 @@ "Ask for Cancel":"Ask for Cancel", "Cancel":"Cancel", "Collaborative Cancel":"Collaborative Cancel", - + "Invalid Order Id":"Invalid Order Id", + "You must have a robot avatar to see the order details":"You must have a robot avatar to see the order details", + "This order has been cancelled collaborativelly":"This order has been cancelled collaborativelly", + "You are not allowed to see this order":"You are not allowed to see this order", + "The Robotic Satoshis working in the warehouse did not understand you. Please, fill a Bug Issue in Github https://github.com/reckless-satoshi/robosats/issues":"The Robotic Satoshis working in the warehouse did not understand you. Please, fill a Bug Issue in Github https://github.com/reckless-satoshi/robosats/issues", "CHAT BOX - Chat.js":"Chat Box", "You":"You", @@ -310,7 +316,7 @@ "INFO DIALOG - InfoDiagog.js":"App information and clarifications and terms of use", "Close":"Close", - "What is RoboSats?":"What is Tor Browser and visit the <3>Onion site.", + "phone_unsafe_alert": "You will not be able to complete a trade. Use <1>Tor Browser and visit the <3>Onion site.", + "Hide":"Hide", + + + "UserGenPage": "User Generation Page and Landing Page", + "Simple and Private LN P2P Exchange":"Intercambio LN P2P Fácil y Privado", + "This is your trading avatar":"Este es tu avatar de compraventa", + "Store your token safely":"Store your token safely", + "A robot avatar was found, welcome back!":"A robot avatar was found, welcome back!", + "Copied!":"Copied!", + "Generate a new token":"Generate a new token", + "Generate Robot":"Generate Robot", + "You must enter a new token first":"You must enter a new token first", + "Make Order":"Make Order", + "Info":"Info", + "View Book":"View Book", + + + "MAKER PAGE - MakerPage.js": "This is the page where users can create new orders", + "Order":"Order", + "Customize":"Customize", + "Buy or Sell Bitcoin?":"Buy or Sell Bitcoin?", + "Buy":"Buy", + "Sell":"Sell", + "Amount":"Amount", + "Amount of fiat to exchange for bitcoin":"Amount of fiat to exchange for bitcoin", + "Invalid":"Invalid", + "Enter your preferred fiat payment methods. Fast methods are highly recommended.":"Enter your preferred fiat payment methods. Fast methods are highly recommended.", + "Must be shorter than 65 characters":"Must be shorter than 65 characters", + "Swap Destination(s)":"Swap Destination(s)", + "Fiat Payment Method(s)":"Fiat Payment Method(s)", + "You can add any method":"You can add any method", + "Add New":"Add New", + "Choose a Pricing Method":"Choose a Pricing Method", + "Relative":"Relative", + "Let the price move with the market":"Let the price move with the market", + "Premium over Market (%)":"Premium over Market (%)", + "Explicit":"Explicit", + "Set a fix amount of satoshis":"Set a fix amount of satoshis", + "Satoshis":"Satoshis", + "Let the taker chose an amount within the range":"Let the taker chose an amount within the range", + "Enable Amount Range":"Enable Amount Range", + "From": "From", + "to":"to", + "Public Duration (HH:mm)":"Public Duration (HH:mm)", + "Set the skin-in-the-game, increase for higher safety assurance":"Set the skin-in-the-game, increase for higher safety assurance", + "Fidelity Bond Size":"Fidelity Bond Size", + "Allow bondless takers":"Allow bondless takers", + "COMING SOON - High risk! Limited to {{limitSats}}K Sats":"COMING SOON - High risk! Limited to {{limitSats}}K Sats", + "You must fill the order correctly":"You must fill the order correctly", + "Create Order":"Create Order", + "Back":"Back", + "Create a BTC buy order for ":"Create a BTC buy order for ", + "Create a BTC sell order for ":"Create a BTC sell order for ", + " of {{satoshis}} Satoshis":" of {{satoshis}} Satoshis", + " at market price":" at market price", + " at a {{premium}}% premium":" at a {{premium}}% premium", + " at a {{discount}}% discount":" at a {{discount}}% discount", + "Must be less than {{max}}%":"Must be less than {{max}}%", + "Must be more than {{min}}%":"Must be more than {{min}}%", + "Must be less than {{maxSats}": "Must be less than {{maxSats}}", + "Must be more than {{minSats}}": "Must be more than {{minSats}}", + + + "BOOK PAGE - BookPage.js":"The Book Order page", + "Seller":"Seller", + "Buyer":"Buyer", + "I want to":"I want to", + "Select Order Type":"Select Order Type", + "ANY_type":"ANY", + "ANY_currency":"ANY", + "BUY":"BUY", + "SELL":"SELL", + "and receive":"and receive", + "and pay with":"and pay with", + "and use":"and use", + "Select Payment Currency":"Select Payment Currency", + "Robot":"Robot", + "Is":"Is", + "Currency":"Currency", + "Payment Method":"Payment Method", + "Pay":"Pay", + "Price":"Price", + "Premium":"Premium", + "You are SELLING BTC for {{currencyCode}}":"You are SELLING BTC for {{currencyCode}}", + "You are BUYING BTC for {{currencyCode}}":"You are BUYING BTC for {{currencyCode}}", + "You are looking at all":"You are looking at all", + "No orders found to sell BTC for {{currencyCode}}":"No orders found to sell BTC for {{currencyCode}}", + "No orders found to buy BTC for {{currencyCode}}":"No orders found to buy BTC for {{currencyCode}}", + "Be the first one to create an order":"Be the first one to create an order", + + + "BOTTOM BAR AND MISC - BottomBar.js":"Bottom Bar user profile and miscellaneous dialogs", + "Stats For Nerds":"Stats For Nerds", + "LND version":"LND version", + "Currently running commit hash":"Currently running commit hash", + "24h contracted volume":"24h contracted volume", + "Lifetime contracted volume":"Lifetime contracted volume", + "Made with":"Made with", + "and":"and", + "... somewhere on Earth!":"... somewhere on Earth!", + "Community":"Community", + "Support is only offered via public channels. Join our Telegram community if you have questions or want to hang out with other cool robots. Please, use our Github Issues if you find a bug or want to see new features!":"Support is only offered via public channels. Join our Telegram community if you have questions or want to hang out with other cool robots. Please, use our Github Issues if you find a bug or want to see new features!", + "Join the RoboSats group":"Join the RoboSats group", + "Telegram (English / Main)":"Telegram (English / Main)", + "RoboSats Telegram Communities":"RoboSats Telegram Communities", + "Join RoboSats Spanish speaking community!":"Join RoboSats Spanish speaking community!", + "Join RoboSats Russian speaking community!":"Join RoboSats Russian speaking community!", + "Join RoboSats Chinese speaking community!":"Join RoboSats Chinese speaking community!", + "Join RoboSats English speaking community!":"Join RoboSats English speaking community!", + "Tell us about a new feature or a bug":"Tell us about a new feature or a bug", + "Github Issues - The Robotic Satoshis Open Source Project":"Github Issues - The Robotic Satoshis Open Source Project", + "Your Profile":"Your Profile", + "Your robot":"Your robot", + "One active order #{{orderID}}":"One active order #{{orderID}}", + "Your current order":"Your current order", + "No active orders":"No active orders", + "Your token (will not remain here)":"Your token (will not remain here)", + "Back it up!":"Back it up!", + "Cannot remember":"Cannot remember", + "Rewards and compensations":"Rewards and compensations", + "Share to earn 100 Sats per trade":"Share to earn 100 Sats per trade", + "Your referral link":"Your referral link", + "Your earned rewards":"Your earned rewards", + "Claim":"Claim", + "Invoice for {{amountSats}} Sats":"Invoice for {{amountSats}} Sats", + "Submit":"Submit", + "There it goes, thank you!🥇":"There it goes, thank you!🥇", + "You have an active order":"You have an active order", + "You can claim satoshis!":"You can claim satoshis!", + "Public Buy Orders":"Public Buy Orders", + "Public Sell Orders":"Public Sell Orders", + "Today Active Robots":"Today Active Robots", + "24h Avg Premium":"24h Avg Premium", + "Trade Fee":"Trade Fee", + "Show community and support links":"Show community and support links", + "Show stats for nerds":"Show stats for nerds", + "Exchange Summary":"Exchange Summary", + "Public buy orders":"Public buy orders", + "Public sell orders":"Public sell orders", + "Book liquidity":"Book liquidity", + "Today active robots":"Today active robots", + "24h non-KYC bitcoin premium":"24h non-KYC bitcoin premium", + "Maker fee":"Maker fee", + "Taker fee":"Taker fee", + "Number of public BUY orders":"Number of public BUY orders", + "Number of public SELL orders":"Number of public SELL orders", + + + "ORDER PAGE - OrderPage.js": "Order details page", + "Order Box":"Order Box", + "Contract":"Contract", + "Active":"Active", + "Seen recently":"Seen recently", + "Inactive":"Inactive", + "(Seller)":"(Seller)", + "(Buyer)":"(Buyer)", + "Order maker":"Order maker", + "Order taker":"Order taker", + "Order Details":"Order Details", + "Order status":"Order status", + "Waiting for maker bond":"Waiting for maker bond", + "Public":"Public", + "Waiting for taker bond":"Waiting for taker bond", + "Cancelled":"Cancelled", + "Expired":"Expired", + "Waiting for trade collateral and buyer invoice":"Waiting for trade collateral and buyer invoice", + "Waiting only for seller trade collateral":"Waiting only for seller trade collateral", + "Waiting only for buyer invoice":"Waiting only for buyer invoice", + "Sending fiat - In chatroom":"Sending fiat - In chatroom", + "Fiat sent - In chatroom":"Fiat sent - In chatroom", + "In dispute":"In dispute", + "Collaboratively cancelled":"Collaboratively cancelled", + "Sending satoshis to buyer":"Sending satoshis to buyer", + "Sucessful trade":"Successful trade", + "Failed lightning network routing":"Failed lightning network routing", + "Wait for dispute resolution":"Wait for dispute resolution", + "Maker lost dispute":"Maker lost dispute", + "Taker lost dispute":"Taker lost dispute", + "Amount range":"Amount range", + "Swap destination":"Swap destination", + "Accepted payment methods":"Accepted payment methods", + "Others":"Others", + "{{price}} {{currencyCode}}/BTC - Premium: {{premium}}%":"{{price}} {{currencyCode}}/BTC - Premium: {{premium}}%", + "Price and Premium":"Price and Premium", + "Amount of Satoshis":"Amount of Satoshis", + "Premium over market price":"Premium over market price", + "Order ID":"Order ID", + "Expires in":"Expires in", + "{{nickname}} is asking for a collaborative cancel":"{{nickname}} is asking for a collaborative cancel", + "You asked for a collaborative cancellation":"You asked for a collaborative cancellation", + "Invoice expired. You did not confirm publishing the order in time. Make a new order.":"Invoice expired. You did not confirm publishing the order in time. Make a new order.", + "This order has been cancelled by the maker":"This order has been cancelled by the maker", + "Penalty lifted, good to go!":"Penalty lifted, good to go!", + "You cannot take an order yet! Wait {{timeMin}}m {{timeSec}}s":"You cannot take an order yet! Wait {{timeMin}}m {{timeSec}}s", + "Too low":"Too low", + "Too high":"Too high", + "Enter amount of fiat to exchange for bitcoin":"Enter amount of fiat to exchange for bitcoin", + "Amount {{currencyCode}}":"Amount {{currencyCode}}", + "You must specify an amount first":"You must specify an amount first", + "Take Order":"Take Order", + "Wait until you can take an order":"Wait until you can take an order", + "Cancel the order?":"Cancel the order?", + "If the order is cancelled now you will lose your bond.":"If the order is cancelled now you will lose your bond.", + "Confirm Cancel":"Confirm Cancel", + "The maker is away":"The maker is away", + "By taking this order you risk wasting your time. If the maker does not proceed in time, you will be compensated in satoshis for 50% of the maker bond.":"By taking this order you risk wasting your time. If the maker does not proceed in time, you will be compensated in satoshis for 50% of the maker bond.", + "Collaborative cancel the order?":"Collaborative cancel the order?", + "The trade escrow has been posted. The order can be cancelled only if both, maker and taker, agree to cancel.":"The trade escrow has been posted. The order can be cancelled only if both, maker and taker, agree to cancel.", + "Ask for Cancel":"Ask for Cancel", + "Cancel":"Cancel", + "Collaborative Cancel":"Collaborative Cancel", + "Invalid Order Id":"Invalid Order Id", + "You must have a robot avatar to see the order details":"You must have a robot avatar to see the order details", + "This order has been cancelled collaborativelly":"This order has been cancelled collaborativelly", + "You are not allowed to see this order":"You are not allowed to see this order", + "The Robotic Satoshis working in the warehouse did not understand you. Please, fill a Bug Issue in Github https://github.com/reckless-satoshi/robosats/issues":"The Robotic Satoshis working in the warehouse did not understand you. Please, fill a Bug Issue in Github https://github.com/reckless-satoshi/robosats/issues", + + "CHAT BOX - Chat.js":"Chat Box", + "You":"You", + "Peer":"Peer", + "connected":"connected", + "disconnected":"disconnected", + "Type a message":"Type a message", + "Connecting...":"Connecting...", + "Send":"Send", + "The chat has no memory: if you leave, messages are lost.":"The chat has no memory: if you leave, messages are lost.", + "Learn easy PGP encryption.":"Learn easy PGP encryption.", + + "CONTRACT BOX - TradeBox.js": "The Contract Box that guides users trough the whole trade pipeline", + "Contract Box":"Contract Box", + "Robots show commitment to their peers": "Robots show commitment to their peers", + "Lock {{amountSats}} Sats to PUBLISH order": "Lock {{amountSats}} Sats to PUBLISH order", + "Lock {{amountSats}} Sats to TAKE order": "Lock {{amountSats}} Sats to TAKE order", + "Lock {{amountSats}} Sats as collateral": "Lock {{amountSats}} Sats as collateral", + "Copy to clipboard":"Copy to clipboard", + "This is a hold invoice, it will freeze in your wallet. It will be charged only if you cancel or lose a dispute.":"This is a hold invoice, it will freeze in your wallet. It will be charged only if you cancel or lose a dispute.", + "This is a hold invoice, it will freeze in your wallet. It will be released to the buyer once you confirm to have received the {{currencyCode}}.":"This is a hold invoice, it will freeze in your wallet. It will be released to the buyer once you confirm to have received the {{currencyCode}}.", + "Your maker bond is locked":"Your maker bond is locked", + "Your taker bond is locked":"Your taker bond is locked", + "Your maker bond was settled":"Your maker bond was settled", + "Your taker bond was settled":"Your taker bond was settled", + "Your maker bond was unlock":"Your maker bond was unlock", + "Your taker bond was unlocked":"Your taker bond was unlocked", + "Your order is public":"Your order is public", + "Be patient while robots check the book. It might take some time. This box will ring 🔊 once a robot takes your order.":"Be patient while robots check the book. It might take some time. This box will ring 🔊 once a robot takes your order.", + "Please note that if your premium is excessive or your currency or payment methods are not popular, your order might expire untaken. Your bond will return to you (no action needed).":"Please note that if your premium is excessive or your currency or payment methods are not popular, your order might expire untaken. Your bond will return to you (no action needed).", + "Enable Telegram Notifications":"Enable Telegram Notifications", + "Enable TG Notifications":"Enable TG Notifications", + "You will be taken to a conversation with RoboSats telegram bot. Simply open the chat and press Start. Note that by enabling telegram notifications you might lower your level of anonymity.":"You will be taken to a conversation with RoboSats telegram bot. Simply open the chat and press Start. Note that by enabling telegram notifications you might lower your level of anonymity.", + "Go back":"Go back", + "Enable":"Enable", + "Telegram enabled":"Telegram enabled", + "Public orders for {{currencyCode}}":"Public orders for {{currencyCode}}", + "Premium rank": "Premium rank", + "Among public {{currencyCode}} orders (higher is cheaper)": "Among public {{currencyCode}} orders (higher is cheaper)", + "A taker has been found!":"A taker has been found!", + "Please wait for the taker to lock a bond. If the taker does not lock a bond in time, the order will be made public again.":"Please wait for the taker to lock a bond. If the taker does not lock a bond in time, the order will be made public again.", + "Submit an invoice for {{amountSats}} Sats":"Submit an invoice for {{amountSats}} Sats", + "The taker is committed! Before letting you send {{amountFiat}} {{currencyCode}}, we want to make sure you are able to receive the BTC. Please provide a valid invoice for {{amountSats}} Satoshis.":"The taker is committed! Before letting you send {{amountFiat}} {{currencyCode}}, we want to make sure you are able to receive the BTC. Please provide a valid invoice for {{amountSats}} Satoshis.", + "Payout Lightning Invoice":"Payout Lightning Invoice", + "Your invoice looks good!":"Your invoice looks good!", + "We are waiting for the seller lock the trade amount.":"We are waiting for the seller lock the trade amount.", + "Just hang on for a moment. If the seller does not deposit, you will get your bond back automatically. In addition, you will receive a compensation (check the rewards in your profile).":"Just hang on for a moment. If the seller does not deposit, you will get your bond back automatically. In addition, you will receive a compensation (check the rewards in your profile).", + "The trade collateral is locked!":"The trade collateral is locked!", + "We are waiting for the buyer to post a lightning invoice. Once he does, you will be able to directly communicate the fiat payment details.":"We are waiting for the buyer to post a lightning invoice. Once he does, you will be able to directly communicate the fiat payment details.", + "Just hang on for a moment. If the buyer does not cooperate, you will get back the trade collateral and your bond automatically. In addition, you will receive a compensation (check the rewards in your profile).":"Just hang on for a moment. If the buyer does not cooperate, you will get back the trade collateral and your bond automatically. In addition, you will receive a compensation (check the rewards in your profile).", + "Confirm {{currencyCode}} sent":"Confirm {{currencyCode}} sent", + "Confirm {{currencyCode}} received":"Confirm {{currencyCode}} received", + "Open Dispute":"Open Dispute", + "The order has expired":"The order has expired", + "Chat with the buyer":"Chat with the buyer", + "Chat with the seller":"Chat with the seller", + "Say hi! Be helpful and concise. Let them know how to send you {{currencyCode}}.":"Say hi! Be helpful and concise. Let them know how to send you {{currencyCode}}.", + "The buyer has sent the fiat. Click 'Confirm Received' once you receive it.":"The buyer has sent the fiat. Click 'Confirm Received' once you receive it.", + "Say hi! Ask for payment details and click 'Confirm Sent' as soon as the payment is sent.":"Say hi! Ask for payment details and click 'Confirm Sent' as soon as the payment is sent.", + "Wait for the seller to confirm he has received the payment.":"Wait for the seller to confirm he has received the payment.", + "Confirm you received {{currencyCode}}?":"Confirm you received {{currencyCode}}?", + "Confirming that you received the fiat will finalize the trade. The satoshis in the escrow will be released to the buyer. Only confirm after the {{currencyCode}} has arrived to your account. In addition, if you have received {{currencyCode}} and do not confirm the receipt, you risk losing your bond.":"Confirming that you received the fiat will finalize the trade. The satoshis in the escrow will be released to the buyer. Only confirm after the {{currencyCode}} has arrived to your account. In addition, if you have received {{currencyCode}} and do not confirm the receipt, you risk losing your bond.", + "Confirm":"Confirm", + "🎉Trade finished!🥳":"🎉Trade finished!🥳", + "rate_robosats":"What do you think of 🤖<1>RoboSats⚡?", + "Thank you! RoboSats loves you too ❤️":"Thank you! RoboSats loves you too ❤️", + "RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!":"RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!", + "Thank you for using Robosats!":"Thank you for using Robosats!", + "let_us_know_hot_to_improve":"Let us know how the platform could improve (<1>Telegram / <3>Github)", + "Start Again":"Start Again", + "Attempting Lightning Payment":"Attempting Lightning Payment", + "RoboSats is trying to pay your lightning invoice. Remember that lightning nodes must be online in order to receive payments.":"RoboSats is trying to pay your lightning invoice. Remember that lightning nodes must be online in order to receive payments.", + "Retrying!":"Retrying!", + "Lightning Routing Failed":"Lightning Routing Failed", + "Your invoice has expired or more than 3 payment attempts have been made. Muun wallet is not recommended. ":"Your invoice has expired or more than 3 payment attempts have been made. Muun wallet is not recommended. ", + "Check the list of compatible wallets":"Check the list of compatible wallets", + "RoboSats will try to pay your invoice 3 times every 5 minutes. If it keeps failing, you will be able to submit a new invoice. Check whether you have enough inbound liquidity. Remember that lightning nodes must be online in order to receive payments.":"RoboSats will try to pay your invoice 3 times every 5 minutes. If it keeps failing, you will be able to submit a new invoice. Check whether you have enough inbound liquidity. Remember that lightning nodes must be online in order to receive payments.", + "Next attempt in":"Next attempt in", + "Do you want to open a dispute?":"Do you want to open a dispute?", + "The RoboSats staff will examine the statements and evidence provided. You need to build a complete case, as the staff cannot read the chat. It is best to provide a burner contact method with your statement. The satoshis in the trade escrow will be sent to the dispute winner, while the dispute loser will lose the bond.":"The RoboSats staff will examine the statements and evidence provided. You need to build a complete case, as the staff cannot read the chat. It is best to provide a burner contact method with your statement. The satoshis in the trade escrow will be sent to the dispute winner, while the dispute loser will lose the bond.", + "Disagree":"Disagree", + "Agree and open dispute":"Agree and open dispute", + "A dispute has been opened":"A dispute has been opened", + "Please, submit your statement. Be clear and specific about what happened and provide the necessary evidence. You MUST provide a contact method: burner email, XMPP or telegram username to follow up with the staff. Disputes are solved at the discretion of real robots (aka humans), so be as helpful as possible to ensure a fair outcome. Max 5000 chars.":"Please, submit your statement. Be clear and specific about what happened and provide the necessary evidence. You MUST provide a contact method: burner email, XMPP or telegram username to follow up with the staff. Disputes are solved at the discretion of real robots (aka humans), so be as helpful as possible to ensure a fair outcome. Max 5000 chars.", + "Submit dispute statement":"Submit dispute statement", + "We have received your statement":"We have received your statement", + "We are waiting for your trade counterpart statement. If you are hesitant about the state of the dispute or want to add more information, contact robosats@protonmail.com.":"We are waiting for your trade counterpart statement. If you are hesitant about the state of the dispute or want to add more information, contact robosats@protonmail.com.", + "Please, save the information needed to identify your order and your payments: order ID; payment hashes of the bonds or escrow (check on your lightning wallet); exact amount of satoshis; and robot nickname. You will have to identify yourself as the user involved in this trade via email (or other contact methods).":"Please, save the information needed to identify your order and your payments: order ID; payment hashes of the bonds or escrow (check on your lightning wallet); exact amount of satoshis; and robot nickname. You will have to identify yourself as the user involved in this trade via email (or other contact methods).", + "We have the statements":"We have the statements", + "Both statements have been received, wait for the staff to resolve the dispute. If you are hesitant about the state of the dispute or want to add more information, contact robosats@protonmail.com. If you did not provide a contact method, or are unsure whether you wrote it right, write us immediately.":"Both statements have been received, wait for the staff to resolve the dispute. If you are hesitant about the state of the dispute or want to add more information, contact robosats@protonmail.com. If you did not provide a contact method, or are unsure whether you wrote it right, write us immediately.", + "You have won the dispute":"You have won the dispute", + "You can claim the dispute resolution amount (escrow and fidelity bond) from your profile rewards. If there is anything the staff can help with, do not hesitate to contact to robosats@protonmail.com (or via your provided burner contact method).":"You can claim the dispute resolution amount (escrow and fidelity bond) from your profile rewards. If there is anything the staff can help with, do not hesitate to contact to robosats@protonmail.com (or via your provided burner contact method).", + "You have lost the dispute":"You have lost the dispute", + "Unfortunately you have lost the dispute. If you think this is a mistake you can ask to re-open the case via email to robosats@protonmail.com. However, chances of it being investigated again are low.":"Unfortunately you have lost the dispute. If you think this is a mistake you can ask to re-open the case via email to robosats@protonmail.com. However, chances of it being investigated again are low.", + + "INFO DIALOG - InfoDiagog.js":"App information and clarifications and terms of use", + "Close":"Close", + "What is RoboSats?":"What is RoboSats?", + "It is a BTC/FIAT peer-to-peer exchange over lightning.":"It is a BTC/FIAT peer-to-peer exchange over lightning.", + "RoboSats is an open source project ":"RoboSats is an open source project ", + "It simplifies matchmaking and minimizes the need of trust. RoboSats focuses in privacy and speed.":"It simplifies matchmaking and minimizes the need of trust. RoboSats focuses in privacy and speed.", + "(GitHub).":"(GitHub).", + "How does it work?":"How does it work?", + "AnonymousAlice01 wants to sell bitcoin. She posts a sell order. BafflingBob02 wants to buy bitcoin and he takes Alice's order. Both have to post a small bond using lightning to prove they are real robots. Then, Alice posts the trade collateral also using a lightning hold invoice. RoboSats locks the invoice until Alice confirms she received the fiat, then the satoshis are released to Bob. Enjoy your satoshis, Bob!":"AnonymousAlice01 wants to sell bitcoin. She posts a sell order. BafflingBob02 wants to buy bitcoin and he takes Alice's order. Both have to post a small bond using lightning to prove they are real robots. Then, Alice posts the trade collateral also using a lightning hold invoice. RoboSats locks the invoice until Alice confirms she received the fiat, then the satoshis are released to Bob. Enjoy your satoshis, Bob!", + "At no point, AnonymousAlice01 and BafflingBob02 have to entrust the bitcoin funds to each other. In case they have a conflict, RoboSats staff will help resolving the dispute.":"At no point, AnonymousAlice01 and BafflingBob02 have to entrust the bitcoin funds to each other. In case they have a conflict, RoboSats staff will help resolving the dispute.", + "You can find a step-by-step description of the trade pipeline in ":"You can find a step-by-step description of the trade pipeline in ", + "How it works":"How it works", + "You can also check the full guide in ":"You can also check the full guide in ", + "How to use":"How to use", + "What payment methods are accepted?":"What payment methods are accepted?", + "All of them as long as they are fast. You can write down your preferred payment method(s). You will have to match with a peer who also accepts that method. The step to exchange fiat has a expiry time of 24 hours before a dispute is automatically open. We highly recommend using instant fiat payment rails.":"All of them as long as they are fast. You can write down your preferred payment method(s). You will have to match with a peer who also accepts that method. The step to exchange fiat has a expiry time of 24 hours before a dispute is automatically open. We highly recommend using instant fiat payment rails.", + "Are there trade limits?":"Are there trade limits?", + "Maximum single trade size is {{maxAmount}} Satoshis to minimize lightning routing failure. There is no limits to the number of trades per day. A robot can only have one order at a time. However, you can use multiple robots simultaneously in different browsers (remember to back up your robot tokens!).":"Maximum single trade size is {{maxAmount}} Satoshis to minimize lightning routing failure. There is no limits to the number of trades per day. A robot can only have one order at a time. However, you can use multiple robots simultaneously in different browsers (remember to back up your robot tokens!).", + "Is RoboSats private?":"Is RoboSats private?", + "RoboSats will never ask you for your name, country or ID. RoboSats does not custody your funds and does not care who you are. RoboSats does not collect or custody any personal data. For best anonymity use Tor Browser and access the .onion hidden service.":"RoboSats will never ask you for your name, country or ID. RoboSats does not custody your funds and does not care who you are. RoboSats does not collect or custody any personal data. For best anonymity use Tor Browser and access the .onion hidden service.", + "Your trading peer is the only one who can potentially guess anything about you. Keep your chat short and concise. Avoid providing non-essential information other than strictly necessary for the fiat payment.":"Your trading peer is the only one who can potentially guess anything about you. Keep your chat short and concise. Avoid providing non-essential information other than strictly necessary for the fiat payment.", + "What are the risks?":"What are the risks?", + "This is an experimental application, things could go wrong. Trade small amounts!":"This is an experimental application, things could go wrong. Trade small amounts!", + "The seller faces the same charge-back risk as with any other peer-to-peer service. Paypal or credit cards are not recommended.":"The seller faces the same charge-back risk as with any other peer-to-peer service. Paypal or credit cards are not recommended.", + "What is the trust model?":"What is the trust model?", + "The buyer and the seller never have to trust each other. Some trust on RoboSats is needed since linking the seller's hold invoice and buyer payment is not atomic (yet). In addition, disputes are solved by the RoboSats staff.":"The buyer and the seller never have to trust each other. Some trust on RoboSats is needed since linking the seller's hold invoice and buyer payment is not atomic (yet). In addition, disputes are solved by the RoboSats staff.", + "To be totally clear. Trust requirements are minimized. However, there is still one way RoboSats could run away with your satoshis: by not releasing the satoshis to the buyer. It could be argued that such move is not in RoboSats' interest as it would damage the reputation for a small payout. However, you should hesitate and only trade small quantities at a time. For large amounts use an onchain escrow service such as Bisq":"To be totally clear. Trust requirements are minimized. However, there is still one way RoboSats could run away with your satoshis: by not releasing the satoshis to the buyer. It could be argued that such move is not in RoboSats' interest as it would damage the reputation for a small payout. However, you should hesitate and only trade small quantities at a time. For large amounts use an onchain escrow service such as Bisq", + "You can build more trust on RoboSats by inspecting the source code.":"You can build more trust on RoboSats by inspecting the source code.", + "Project source code":"Project source code", + "What happens if RoboSats suddenly disappears?":"What happens if RoboSats suddenly disappears?", + "Your sats will return to you. Any hold invoice that is not settled would be automatically returned even if RoboSats goes down forever. This is true for both, locked bonds and trading escrows. However, there is a small window between the seller confirms FIAT RECEIVED and the moment the buyer receives the satoshis when the funds could be permanently lost if RoboSats disappears. This window is about 1 second long. Make sure to have enough inbound liquidity to avoid routing failures. If you have any problem, reach out trough the RoboSats public channels.":"Your sats will return to you. Any hold invoice that is not settled would be automatically returned even if RoboSats goes down forever. This is true for both, locked bonds and trading escrows. However, there is a small window between the seller confirms FIAT RECEIVED and the moment the buyer receives the satoshis when the funds could be permanently lost if RoboSats disappears. This window is about 1 second long. Make sure to have enough inbound liquidity to avoid routing failures. If you have any problem, reach out trough the RoboSats public channels.", + "In many countries using RoboSats is no different than using Ebay or Craiglist. Your regulation may vary. It is your responsibility to comply.":"In many countries using RoboSats is no different than using Ebay or Craiglist. Your regulation may vary. It is your responsibility to comply.", + "Is RoboSats legal in my country?":"Is RoboSats legal in my country?", + "Disclaimer":"Disclaimer", + "This lightning application is provided as is. It is in active development: trade with the utmost caution. There is no private support. Support is only offered via public channels ":"This lightning application is provided as is. It is in active development: trade with the utmost caution. There is no private support. Support is only offered via public channels ", + "(Telegram)":"(Telegram)", + ". RoboSats will never contact you. RoboSats will definitely never ask for your robot token.":". RoboSats will never contact you. RoboSats will definitely never ask for your robot token." +} \ No newline at end of file diff --git a/frontend/src/locales/ru.json b/frontend/src/locales/ru.json new file mode 100644 index 00000000..08d05939 --- /dev/null +++ b/frontend/src/locales/ru.json @@ -0,0 +1,354 @@ +{ + "UNSAFE ALERT - UnsafeAlert.js": "Alert that shows on top when browsing from the unsafe clearnet sites", + "You are not using RoboSats privately": "You are not using RoboSats privately", + "desktop_unsafe_alert": "Some features are disabled for your protection (e.g. chat) and you will not be able to complete a trade without them. To protect your privacy and fully enable RoboSats, use <1>Tor Browser and visit the <3>Onion site.", + "phone_unsafe_alert": "You will not be able to complete a trade. Use <1>Tor Browser and visit the <3>Onion site.", + "Hide":"Hide", + + + "USER GENERATION PAGE - UserGenPage.js": "Landing Page and User Generation", + "Simple and Private LN P2P Exchange": "Simple and Private LN P2P Exchange", + "This is your trading avatar":"This is your trading avatar", + "Store your token safely":"Store your token safely", + "A robot avatar was found, welcome back!":"A robot avatar was found, welcome back!", + "Copied!":"Copied!", + "Generate a new token":"Generate a new token", + "Generate Robot":"Generate Robot", + "You must enter a new token first":"You must enter a new token first", + "Make Order":"Make Order", + "Info":"Info", + "View Book":"View Book", + + + "MAKER PAGE - MakerPage.js": "This is the page where users can create new orders", + "Order":"Order", + "Customize":"Customize", + "Buy or Sell Bitcoin?":"Buy or Sell Bitcoin?", + "Buy":"Buy", + "Sell":"Sell", + "Amount":"Amount", + "Amount of fiat to exchange for bitcoin":"Amount of fiat to exchange for bitcoin", + "Invalid":"Invalid", + "Enter your preferred fiat payment methods. Fast methods are highly recommended.":"Enter your preferred fiat payment methods. Fast methods are highly recommended.", + "Must be shorter than 65 characters":"Must be shorter than 65 characters", + "Swap Destination(s)":"Swap Destination(s)", + "Fiat Payment Method(s)":"Fiat Payment Method(s)", + "You can add any method":"You can add any method", + "Add New":"Add New", + "Choose a Pricing Method":"Choose a Pricing Method", + "Relative":"Relative", + "Let the price move with the market":"Let the price move with the market", + "Premium over Market (%)":"Premium over Market (%)", + "Explicit":"Explicit", + "Set a fix amount of satoshis":"Set a fix amount of satoshis", + "Satoshis":"Satoshis", + "Let the taker chose an amount within the range":"Let the taker chose an amount within the range", + "Enable Amount Range":"Enable Amount Range", + "From": "From", + "to":"to", + "Public Duration (HH:mm)":"Public Duration (HH:mm)", + "Set the skin-in-the-game, increase for higher safety assurance":"Set the skin-in-the-game, increase for higher safety assurance", + "Fidelity Bond Size":"Fidelity Bond Size", + "Allow bondless takers":"Allow bondless takers", + "COMING SOON - High risk! Limited to {{limitSats}}K Sats":"COMING SOON - High risk! Limited to {{limitSats}}K Sats", + "You must fill the order correctly":"You must fill the order correctly", + "Create Order":"Create Order", + "Back":"Back", + "Create a BTC buy order for ":"Create a BTC buy order for ", + "Create a BTC sell order for ":"Create a BTC sell order for ", + " of {{satoshis}} Satoshis":" of {{satoshis}} Satoshis", + " at market price":" at market price", + " at a {{premium}}% premium":" at a {{premium}}% premium", + " at a {{discount}}% discount":" at a {{discount}}% discount", + "Must be less than {{max}}%":"Must be less than {{max}}%", + "Must be more than {{min}}%":"Must be more than {{min}}%", + "Must be less than {{maxSats}": "Must be less than {{maxSats}}", + "Must be more than {{minSats}}": "Must be more than {{minSats}}", + + + "BOOK PAGE - BookPage.js":"The Book Order page", + "Seller":"Seller", + "Buyer":"Buyer", + "I want to":"I want to", + "Select Order Type":"Select Order Type", + "ANY_type":"ANY", + "ANY_currency":"ANY", + "BUY":"BUY", + "SELL":"SELL", + "and receive":"and receive", + "and pay with":"and pay with", + "and use":"and use", + "Select Payment Currency":"Select Payment Currency", + "Robot":"Robot", + "Is":"Is", + "Currency":"Currency", + "Payment Method":"Payment Method", + "Pay":"Pay", + "Price":"Price", + "Premium":"Premium", + "You are SELLING BTC for {{currencyCode}}":"You are SELLING BTC for {{currencyCode}}", + "You are BUYING BTC for {{currencyCode}}":"You are BUYING BTC for {{currencyCode}}", + "You are looking at all":"You are looking at all", + "No orders found to sell BTC for {{currencyCode}}":"No orders found to sell BTC for {{currencyCode}}", + "No orders found to buy BTC for {{currencyCode}}":"No orders found to buy BTC for {{currencyCode}}", + "Be the first one to create an order":"Be the first one to create an order", + + + "BOTTOM BAR AND MISC - BottomBar.js":"Bottom Bar user profile and miscellaneous dialogs", + "Stats For Nerds":"Stats For Nerds", + "LND version":"LND version", + "Currently running commit hash":"Currently running commit hash", + "24h contracted volume":"24h contracted volume", + "Lifetime contracted volume":"Lifetime contracted volume", + "Made with":"Made with", + "and":"and", + "... somewhere on Earth!":"... somewhere on Earth!", + "Community":"Community", + "Support is only offered via public channels. Join our Telegram community if you have questions or want to hang out with other cool robots. Please, use our Github Issues if you find a bug or want to see new features!":"Support is only offered via public channels. Join our Telegram community if you have questions or want to hang out with other cool robots. Please, use our Github Issues if you find a bug or want to see new features!", + "Join the RoboSats group":"Join the RoboSats group", + "Telegram (English / Main)":"Telegram (English / Main)", + "RoboSats Telegram Communities":"RoboSats Telegram Communities", + "Join RoboSats Spanish speaking community!":"Join RoboSats Spanish speaking community!", + "Join RoboSats Russian speaking community!":"Join RoboSats Russian speaking community!", + "Join RoboSats Chinese speaking community!":"Join RoboSats Chinese speaking community!", + "Join RoboSats English speaking community!":"Join RoboSats English speaking community!", + "Tell us about a new feature or a bug":"Tell us about a new feature or a bug", + "Github Issues - The Robotic Satoshis Open Source Project":"Github Issues - The Robotic Satoshis Open Source Project", + "Your Profile":"Your Profile", + "Your robot":"Your robot", + "One active order #{{orderID}}":"One active order #{{orderID}}", + "Your current order":"Your current order", + "No active orders":"No active orders", + "Your token (will not remain here)":"Your token (will not remain here)", + "Back it up!":"Back it up!", + "Cannot remember":"Cannot remember", + "Rewards and compensations":"Rewards and compensations", + "Share to earn 100 Sats per trade":"Share to earn 100 Sats per trade", + "Your referral link":"Your referral link", + "Your earned rewards":"Your earned rewards", + "Claim":"Claim", + "Invoice for {{amountSats}} Sats":"Invoice for {{amountSats}} Sats", + "Submit":"Submit", + "There it goes, thank you!🥇":"There it goes, thank you!🥇", + "You have an active order":"You have an active order", + "You can claim satoshis!":"You can claim satoshis!", + "Public Buy Orders":"Public Buy Orders", + "Public Sell Orders":"Public Sell Orders", + "Today Active Robots":"Today Active Robots", + "24h Avg Premium":"24h Avg Premium", + "Trade Fee":"Trade Fee", + "Show community and support links":"Show community and support links", + "Show stats for nerds":"Show stats for nerds", + "Exchange Summary":"Exchange Summary", + "Public buy orders":"Public buy orders", + "Public sell orders":"Public sell orders", + "Book liquidity":"Book liquidity", + "Today active robots":"Today active robots", + "24h non-KYC bitcoin premium":"24h non-KYC bitcoin premium", + "Maker fee":"Maker fee", + "Taker fee":"Taker fee", + "Number of public BUY orders":"Number of public BUY orders", + "Number of public SELL orders":"Number of public SELL orders", + + + "ORDER PAGE - OrderPage.js": "Order details page", + "Order Box":"Order Box", + "Contract":"Contract", + "Active":"Active", + "Seen recently":"Seen recently", + "Inactive":"Inactive", + "(Seller)":"(Seller)", + "(Buyer)":"(Buyer)", + "Order maker":"Order maker", + "Order taker":"Order taker", + "Order Details":"Order Details", + "Order status":"Order status", + "Waiting for maker bond":"Waiting for maker bond", + "Public":"Public", + "Waiting for taker bond":"Waiting for taker bond", + "Cancelled":"Cancelled", + "Expired":"Expired", + "Waiting for trade collateral and buyer invoice":"Waiting for trade collateral and buyer invoice", + "Waiting only for seller trade collateral":"Waiting only for seller trade collateral", + "Waiting only for buyer invoice":"Waiting only for buyer invoice", + "Sending fiat - In chatroom":"Sending fiat - In chatroom", + "Fiat sent - In chatroom":"Fiat sent - In chatroom", + "In dispute":"In dispute", + "Collaboratively cancelled":"Collaboratively cancelled", + "Sending satoshis to buyer":"Sending satoshis to buyer", + "Sucessful trade":"Successful trade", + "Failed lightning network routing":"Failed lightning network routing", + "Wait for dispute resolution":"Wait for dispute resolution", + "Maker lost dispute":"Maker lost dispute", + "Taker lost dispute":"Taker lost dispute", + "Amount range":"Amount range", + "Swap destination":"Swap destination", + "Accepted payment methods":"Accepted payment methods", + "Others":"Others", + "{{price}} {{currencyCode}}/BTC - Premium: {{premium}}%":"{{price}} {{currencyCode}}/BTC - Premium: {{premium}}%", + "Price and Premium":"Price and Premium", + "Amount of Satoshis":"Amount of Satoshis", + "Premium over market price":"Premium over market price", + "Order ID":"Order ID", + "Expires in":"Expires in", + "{{nickname}} is asking for a collaborative cancel":"{{nickname}} is asking for a collaborative cancel", + "You asked for a collaborative cancellation":"You asked for a collaborative cancellation", + "Invoice expired. You did not confirm publishing the order in time. Make a new order.":"Invoice expired. You did not confirm publishing the order in time. Make a new order.", + "This order has been cancelled by the maker":"This order has been cancelled by the maker", + "Penalty lifted, good to go!":"Penalty lifted, good to go!", + "You cannot take an order yet! Wait {{timeMin}}m {{timeSec}}s":"You cannot take an order yet! Wait {{timeMin}}m {{timeSec}}s", + "Too low":"Too low", + "Too high":"Too high", + "Enter amount of fiat to exchange for bitcoin":"Enter amount of fiat to exchange for bitcoin", + "Amount {{currencyCode}}":"Amount {{currencyCode}}", + "You must specify an amount first":"You must specify an amount first", + "Take Order":"Take Order", + "Wait until you can take an order":"Wait until you can take an order", + "Cancel the order?":"Cancel the order?", + "If the order is cancelled now you will lose your bond.":"If the order is cancelled now you will lose your bond.", + "Confirm Cancel":"Confirm Cancel", + "The maker is away":"The maker is away", + "By taking this order you risk wasting your time. If the maker does not proceed in time, you will be compensated in satoshis for 50% of the maker bond.":"By taking this order you risk wasting your time. If the maker does not proceed in time, you will be compensated in satoshis for 50% of the maker bond.", + "Collaborative cancel the order?":"Collaborative cancel the order?", + "The trade escrow has been posted. The order can be cancelled only if both, maker and taker, agree to cancel.":"The trade escrow has been posted. The order can be cancelled only if both, maker and taker, agree to cancel.", + "Ask for Cancel":"Ask for Cancel", + "Cancel":"Cancel", + "Collaborative Cancel":"Collaborative Cancel", + "Invalid Order Id":"Invalid Order Id", + "You must have a robot avatar to see the order details":"You must have a robot avatar to see the order details", + "This order has been cancelled collaborativelly":"This order has been cancelled collaborativelly", + "You are not allowed to see this order":"You are not allowed to see this order", + "The Robotic Satoshis working in the warehouse did not understand you. Please, fill a Bug Issue in Github https://github.com/reckless-satoshi/robosats/issues":"The Robotic Satoshis working in the warehouse did not understand you. Please, fill a Bug Issue in Github https://github.com/reckless-satoshi/robosats/issues", + + "CHAT BOX - Chat.js":"Chat Box", + "You":"You", + "Peer":"Peer", + "connected":"connected", + "disconnected":"disconnected", + "Type a message":"Type a message", + "Connecting...":"Connecting...", + "Send":"Send", + "The chat has no memory: if you leave, messages are lost.":"The chat has no memory: if you leave, messages are lost.", + "Learn easy PGP encryption.":"Learn easy PGP encryption.", + + "CONTRACT BOX - TradeBox.js": "The Contract Box that guides users trough the whole trade pipeline", + "Contract Box":"Contract Box", + "Robots show commitment to their peers": "Robots show commitment to their peers", + "Lock {{amountSats}} Sats to PUBLISH order": "Lock {{amountSats}} Sats to PUBLISH order", + "Lock {{amountSats}} Sats to TAKE order": "Lock {{amountSats}} Sats to TAKE order", + "Lock {{amountSats}} Sats as collateral": "Lock {{amountSats}} Sats as collateral", + "Copy to clipboard":"Copy to clipboard", + "This is a hold invoice, it will freeze in your wallet. It will be charged only if you cancel or lose a dispute.":"This is a hold invoice, it will freeze in your wallet. It will be charged only if you cancel or lose a dispute.", + "This is a hold invoice, it will freeze in your wallet. It will be released to the buyer once you confirm to have received the {{currencyCode}}.":"This is a hold invoice, it will freeze in your wallet. It will be released to the buyer once you confirm to have received the {{currencyCode}}.", + "Your maker bond is locked":"Your maker bond is locked", + "Your taker bond is locked":"Your taker bond is locked", + "Your maker bond was settled":"Your maker bond was settled", + "Your taker bond was settled":"Your taker bond was settled", + "Your maker bond was unlock":"Your maker bond was unlock", + "Your taker bond was unlocked":"Your taker bond was unlocked", + "Your order is public":"Your order is public", + "Be patient while robots check the book. It might take some time. This box will ring 🔊 once a robot takes your order.":"Be patient while robots check the book. It might take some time. This box will ring 🔊 once a robot takes your order.", + "Please note that if your premium is excessive or your currency or payment methods are not popular, your order might expire untaken. Your bond will return to you (no action needed).":"Please note that if your premium is excessive or your currency or payment methods are not popular, your order might expire untaken. Your bond will return to you (no action needed).", + "Enable Telegram Notifications":"Enable Telegram Notifications", + "Enable TG Notifications":"Enable TG Notifications", + "You will be taken to a conversation with RoboSats telegram bot. Simply open the chat and press Start. Note that by enabling telegram notifications you might lower your level of anonymity.":"You will be taken to a conversation with RoboSats telegram bot. Simply open the chat and press Start. Note that by enabling telegram notifications you might lower your level of anonymity.", + "Go back":"Go back", + "Enable":"Enable", + "Telegram enabled":"Telegram enabled", + "Public orders for {{currencyCode}}":"Public orders for {{currencyCode}}", + "Premium rank": "Premium rank", + "Among public {{currencyCode}} orders (higher is cheaper)": "Among public {{currencyCode}} orders (higher is cheaper)", + "A taker has been found!":"A taker has been found!", + "Please wait for the taker to lock a bond. If the taker does not lock a bond in time, the order will be made public again.":"Please wait for the taker to lock a bond. If the taker does not lock a bond in time, the order will be made public again.", + "Submit an invoice for {{amountSats}} Sats":"Submit an invoice for {{amountSats}} Sats", + "The taker is committed! Before letting you send {{amountFiat}} {{currencyCode}}, we want to make sure you are able to receive the BTC. Please provide a valid invoice for {{amountSats}} Satoshis.":"The taker is committed! Before letting you send {{amountFiat}} {{currencyCode}}, we want to make sure you are able to receive the BTC. Please provide a valid invoice for {{amountSats}} Satoshis.", + "Payout Lightning Invoice":"Payout Lightning Invoice", + "Your invoice looks good!":"Your invoice looks good!", + "We are waiting for the seller lock the trade amount.":"We are waiting for the seller lock the trade amount.", + "Just hang on for a moment. If the seller does not deposit, you will get your bond back automatically. In addition, you will receive a compensation (check the rewards in your profile).":"Just hang on for a moment. If the seller does not deposit, you will get your bond back automatically. In addition, you will receive a compensation (check the rewards in your profile).", + "The trade collateral is locked!":"The trade collateral is locked!", + "We are waiting for the buyer to post a lightning invoice. Once he does, you will be able to directly communicate the fiat payment details.":"We are waiting for the buyer to post a lightning invoice. Once he does, you will be able to directly communicate the fiat payment details.", + "Just hang on for a moment. If the buyer does not cooperate, you will get back the trade collateral and your bond automatically. In addition, you will receive a compensation (check the rewards in your profile).":"Just hang on for a moment. If the buyer does not cooperate, you will get back the trade collateral and your bond automatically. In addition, you will receive a compensation (check the rewards in your profile).", + "Confirm {{currencyCode}} sent":"Confirm {{currencyCode}} sent", + "Confirm {{currencyCode}} received":"Confirm {{currencyCode}} received", + "Open Dispute":"Open Dispute", + "The order has expired":"The order has expired", + "Chat with the buyer":"Chat with the buyer", + "Chat with the seller":"Chat with the seller", + "Say hi! Be helpful and concise. Let them know how to send you {{currencyCode}}.":"Say hi! Be helpful and concise. Let them know how to send you {{currencyCode}}.", + "The buyer has sent the fiat. Click 'Confirm Received' once you receive it.":"The buyer has sent the fiat. Click 'Confirm Received' once you receive it.", + "Say hi! Ask for payment details and click 'Confirm Sent' as soon as the payment is sent.":"Say hi! Ask for payment details and click 'Confirm Sent' as soon as the payment is sent.", + "Wait for the seller to confirm he has received the payment.":"Wait for the seller to confirm he has received the payment.", + "Confirm you received {{currencyCode}}?":"Confirm you received {{currencyCode}}?", + "Confirming that you received the fiat will finalize the trade. The satoshis in the escrow will be released to the buyer. Only confirm after the {{currencyCode}} has arrived to your account. In addition, if you have received {{currencyCode}} and do not confirm the receipt, you risk losing your bond.":"Confirming that you received the fiat will finalize the trade. The satoshis in the escrow will be released to the buyer. Only confirm after the {{currencyCode}} has arrived to your account. In addition, if you have received {{currencyCode}} and do not confirm the receipt, you risk losing your bond.", + "Confirm":"Confirm", + "🎉Trade finished!🥳":"🎉Trade finished!🥳", + "rate_robosats":"What do you think of 🤖<1>RoboSats⚡?", + "Thank you! RoboSats loves you too ❤️":"Thank you! RoboSats loves you too ❤️", + "RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!":"RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!", + "Thank you for using Robosats!":"Thank you for using Robosats!", + "let_us_know_hot_to_improve":"Let us know how the platform could improve (<1>Telegram / <3>Github)", + "Start Again":"Start Again", + "Attempting Lightning Payment":"Attempting Lightning Payment", + "RoboSats is trying to pay your lightning invoice. Remember that lightning nodes must be online in order to receive payments.":"RoboSats is trying to pay your lightning invoice. Remember that lightning nodes must be online in order to receive payments.", + "Retrying!":"Retrying!", + "Lightning Routing Failed":"Lightning Routing Failed", + "Your invoice has expired or more than 3 payment attempts have been made. Muun wallet is not recommended. ":"Your invoice has expired or more than 3 payment attempts have been made. Muun wallet is not recommended. ", + "Check the list of compatible wallets":"Check the list of compatible wallets", + "RoboSats will try to pay your invoice 3 times every 5 minutes. If it keeps failing, you will be able to submit a new invoice. Check whether you have enough inbound liquidity. Remember that lightning nodes must be online in order to receive payments.":"RoboSats will try to pay your invoice 3 times every 5 minutes. If it keeps failing, you will be able to submit a new invoice. Check whether you have enough inbound liquidity. Remember that lightning nodes must be online in order to receive payments.", + "Next attempt in":"Next attempt in", + "Do you want to open a dispute?":"Do you want to open a dispute?", + "The RoboSats staff will examine the statements and evidence provided. You need to build a complete case, as the staff cannot read the chat. It is best to provide a burner contact method with your statement. The satoshis in the trade escrow will be sent to the dispute winner, while the dispute loser will lose the bond.":"The RoboSats staff will examine the statements and evidence provided. You need to build a complete case, as the staff cannot read the chat. It is best to provide a burner contact method with your statement. The satoshis in the trade escrow will be sent to the dispute winner, while the dispute loser will lose the bond.", + "Disagree":"Disagree", + "Agree and open dispute":"Agree and open dispute", + "A dispute has been opened":"A dispute has been opened", + "Please, submit your statement. Be clear and specific about what happened and provide the necessary evidence. You MUST provide a contact method: burner email, XMPP or telegram username to follow up with the staff. Disputes are solved at the discretion of real robots (aka humans), so be as helpful as possible to ensure a fair outcome. Max 5000 chars.":"Please, submit your statement. Be clear and specific about what happened and provide the necessary evidence. You MUST provide a contact method: burner email, XMPP or telegram username to follow up with the staff. Disputes are solved at the discretion of real robots (aka humans), so be as helpful as possible to ensure a fair outcome. Max 5000 chars.", + "Submit dispute statement":"Submit dispute statement", + "We have received your statement":"We have received your statement", + "We are waiting for your trade counterpart statement. If you are hesitant about the state of the dispute or want to add more information, contact robosats@protonmail.com.":"We are waiting for your trade counterpart statement. If you are hesitant about the state of the dispute or want to add more information, contact robosats@protonmail.com.", + "Please, save the information needed to identify your order and your payments: order ID; payment hashes of the bonds or escrow (check on your lightning wallet); exact amount of satoshis; and robot nickname. You will have to identify yourself as the user involved in this trade via email (or other contact methods).":"Please, save the information needed to identify your order and your payments: order ID; payment hashes of the bonds or escrow (check on your lightning wallet); exact amount of satoshis; and robot nickname. You will have to identify yourself as the user involved in this trade via email (or other contact methods).", + "We have the statements":"We have the statements", + "Both statements have been received, wait for the staff to resolve the dispute. If you are hesitant about the state of the dispute or want to add more information, contact robosats@protonmail.com. If you did not provide a contact method, or are unsure whether you wrote it right, write us immediately.":"Both statements have been received, wait for the staff to resolve the dispute. If you are hesitant about the state of the dispute or want to add more information, contact robosats@protonmail.com. If you did not provide a contact method, or are unsure whether you wrote it right, write us immediately.", + "You have won the dispute":"You have won the dispute", + "You can claim the dispute resolution amount (escrow and fidelity bond) from your profile rewards. If there is anything the staff can help with, do not hesitate to contact to robosats@protonmail.com (or via your provided burner contact method).":"You can claim the dispute resolution amount (escrow and fidelity bond) from your profile rewards. If there is anything the staff can help with, do not hesitate to contact to robosats@protonmail.com (or via your provided burner contact method).", + "You have lost the dispute":"You have lost the dispute", + "Unfortunately you have lost the dispute. If you think this is a mistake you can ask to re-open the case via email to robosats@protonmail.com. However, chances of it being investigated again are low.":"Unfortunately you have lost the dispute. If you think this is a mistake you can ask to re-open the case via email to robosats@protonmail.com. However, chances of it being investigated again are low.", + + "INFO DIALOG - InfoDiagog.js":"App information and clarifications and terms of use", + "Close":"Close", + "What is RoboSats?":"What is RoboSats?", + "It is a BTC/FIAT peer-to-peer exchange over lightning.":"It is a BTC/FIAT peer-to-peer exchange over lightning.", + "RoboSats is an open source project ":"RoboSats is an open source project ", + "It simplifies matchmaking and minimizes the need of trust. RoboSats focuses in privacy and speed.":"It simplifies matchmaking and minimizes the need of trust. RoboSats focuses in privacy and speed.", + "(GitHub).":"(GitHub).", + "How does it work?":"How does it work?", + "AnonymousAlice01 wants to sell bitcoin. She posts a sell order. BafflingBob02 wants to buy bitcoin and he takes Alice's order. Both have to post a small bond using lightning to prove they are real robots. Then, Alice posts the trade collateral also using a lightning hold invoice. RoboSats locks the invoice until Alice confirms she received the fiat, then the satoshis are released to Bob. Enjoy your satoshis, Bob!":"AnonymousAlice01 wants to sell bitcoin. She posts a sell order. BafflingBob02 wants to buy bitcoin and he takes Alice's order. Both have to post a small bond using lightning to prove they are real robots. Then, Alice posts the trade collateral also using a lightning hold invoice. RoboSats locks the invoice until Alice confirms she received the fiat, then the satoshis are released to Bob. Enjoy your satoshis, Bob!", + "At no point, AnonymousAlice01 and BafflingBob02 have to entrust the bitcoin funds to each other. In case they have a conflict, RoboSats staff will help resolving the dispute.":"At no point, AnonymousAlice01 and BafflingBob02 have to entrust the bitcoin funds to each other. In case they have a conflict, RoboSats staff will help resolving the dispute.", + "You can find a step-by-step description of the trade pipeline in ":"You can find a step-by-step description of the trade pipeline in ", + "How it works":"How it works", + "You can also check the full guide in ":"You can also check the full guide in ", + "How to use":"How to use", + "What payment methods are accepted?":"What payment methods are accepted?", + "All of them as long as they are fast. You can write down your preferred payment method(s). You will have to match with a peer who also accepts that method. The step to exchange fiat has a expiry time of 24 hours before a dispute is automatically open. We highly recommend using instant fiat payment rails.":"All of them as long as they are fast. You can write down your preferred payment method(s). You will have to match with a peer who also accepts that method. The step to exchange fiat has a expiry time of 24 hours before a dispute is automatically open. We highly recommend using instant fiat payment rails.", + "Are there trade limits?":"Are there trade limits?", + "Maximum single trade size is {{maxAmount}} Satoshis to minimize lightning routing failure. There is no limits to the number of trades per day. A robot can only have one order at a time. However, you can use multiple robots simultaneously in different browsers (remember to back up your robot tokens!).":"Maximum single trade size is {{maxAmount}} Satoshis to minimize lightning routing failure. There is no limits to the number of trades per day. A robot can only have one order at a time. However, you can use multiple robots simultaneously in different browsers (remember to back up your robot tokens!).", + "Is RoboSats private?":"Is RoboSats private?", + "RoboSats will never ask you for your name, country or ID. RoboSats does not custody your funds and does not care who you are. RoboSats does not collect or custody any personal data. For best anonymity use Tor Browser and access the .onion hidden service.":"RoboSats will never ask you for your name, country or ID. RoboSats does not custody your funds and does not care who you are. RoboSats does not collect or custody any personal data. For best anonymity use Tor Browser and access the .onion hidden service.", + "Your trading peer is the only one who can potentially guess anything about you. Keep your chat short and concise. Avoid providing non-essential information other than strictly necessary for the fiat payment.":"Your trading peer is the only one who can potentially guess anything about you. Keep your chat short and concise. Avoid providing non-essential information other than strictly necessary for the fiat payment.", + "What are the risks?":"What are the risks?", + "This is an experimental application, things could go wrong. Trade small amounts!":"This is an experimental application, things could go wrong. Trade small amounts!", + "The seller faces the same charge-back risk as with any other peer-to-peer service. Paypal or credit cards are not recommended.":"The seller faces the same charge-back risk as with any other peer-to-peer service. Paypal or credit cards are not recommended.", + "What is the trust model?":"What is the trust model?", + "The buyer and the seller never have to trust each other. Some trust on RoboSats is needed since linking the seller's hold invoice and buyer payment is not atomic (yet). In addition, disputes are solved by the RoboSats staff.":"The buyer and the seller never have to trust each other. Some trust on RoboSats is needed since linking the seller's hold invoice and buyer payment is not atomic (yet). In addition, disputes are solved by the RoboSats staff.", + "To be totally clear. Trust requirements are minimized. However, there is still one way RoboSats could run away with your satoshis: by not releasing the satoshis to the buyer. It could be argued that such move is not in RoboSats' interest as it would damage the reputation for a small payout. However, you should hesitate and only trade small quantities at a time. For large amounts use an onchain escrow service such as Bisq":"To be totally clear. Trust requirements are minimized. However, there is still one way RoboSats could run away with your satoshis: by not releasing the satoshis to the buyer. It could be argued that such move is not in RoboSats' interest as it would damage the reputation for a small payout. However, you should hesitate and only trade small quantities at a time. For large amounts use an onchain escrow service such as Bisq", + "You can build more trust on RoboSats by inspecting the source code.":"You can build more trust on RoboSats by inspecting the source code.", + "Project source code":"Project source code", + "What happens if RoboSats suddenly disappears?":"What happens if RoboSats suddenly disappears?", + "Your sats will return to you. Any hold invoice that is not settled would be automatically returned even if RoboSats goes down forever. This is true for both, locked bonds and trading escrows. However, there is a small window between the seller confirms FIAT RECEIVED and the moment the buyer receives the satoshis when the funds could be permanently lost if RoboSats disappears. This window is about 1 second long. Make sure to have enough inbound liquidity to avoid routing failures. If you have any problem, reach out trough the RoboSats public channels.":"Your sats will return to you. Any hold invoice that is not settled would be automatically returned even if RoboSats goes down forever. This is true for both, locked bonds and trading escrows. However, there is a small window between the seller confirms FIAT RECEIVED and the moment the buyer receives the satoshis when the funds could be permanently lost if RoboSats disappears. This window is about 1 second long. Make sure to have enough inbound liquidity to avoid routing failures. If you have any problem, reach out trough the RoboSats public channels.", + "In many countries using RoboSats is no different than using Ebay or Craiglist. Your regulation may vary. It is your responsibility to comply.":"In many countries using RoboSats is no different than using Ebay or Craiglist. Your regulation may vary. It is your responsibility to comply.", + "Is RoboSats legal in my country?":"Is RoboSats legal in my country?", + "Disclaimer":"Disclaimer", + "This lightning application is provided as is. It is in active development: trade with the utmost caution. There is no private support. Support is only offered via public channels ":"This lightning application is provided as is. It is in active development: trade with the utmost caution. There is no private support. Support is only offered via public channels ", + "(Telegram)":"(Telegram)", + ". RoboSats will never contact you. RoboSats will definitely never ask for your robot token.":". RoboSats will never contact you. RoboSats will definitely never ask for your robot token." +} \ No newline at end of file diff --git a/frontend/src/locales/zh.json b/frontend/src/locales/zh.json new file mode 100644 index 00000000..08d05939 --- /dev/null +++ b/frontend/src/locales/zh.json @@ -0,0 +1,354 @@ +{ + "UNSAFE ALERT - UnsafeAlert.js": "Alert that shows on top when browsing from the unsafe clearnet sites", + "You are not using RoboSats privately": "You are not using RoboSats privately", + "desktop_unsafe_alert": "Some features are disabled for your protection (e.g. chat) and you will not be able to complete a trade without them. To protect your privacy and fully enable RoboSats, use <1>Tor Browser and visit the <3>Onion site.", + "phone_unsafe_alert": "You will not be able to complete a trade. Use <1>Tor Browser and visit the <3>Onion site.", + "Hide":"Hide", + + + "USER GENERATION PAGE - UserGenPage.js": "Landing Page and User Generation", + "Simple and Private LN P2P Exchange": "Simple and Private LN P2P Exchange", + "This is your trading avatar":"This is your trading avatar", + "Store your token safely":"Store your token safely", + "A robot avatar was found, welcome back!":"A robot avatar was found, welcome back!", + "Copied!":"Copied!", + "Generate a new token":"Generate a new token", + "Generate Robot":"Generate Robot", + "You must enter a new token first":"You must enter a new token first", + "Make Order":"Make Order", + "Info":"Info", + "View Book":"View Book", + + + "MAKER PAGE - MakerPage.js": "This is the page where users can create new orders", + "Order":"Order", + "Customize":"Customize", + "Buy or Sell Bitcoin?":"Buy or Sell Bitcoin?", + "Buy":"Buy", + "Sell":"Sell", + "Amount":"Amount", + "Amount of fiat to exchange for bitcoin":"Amount of fiat to exchange for bitcoin", + "Invalid":"Invalid", + "Enter your preferred fiat payment methods. Fast methods are highly recommended.":"Enter your preferred fiat payment methods. Fast methods are highly recommended.", + "Must be shorter than 65 characters":"Must be shorter than 65 characters", + "Swap Destination(s)":"Swap Destination(s)", + "Fiat Payment Method(s)":"Fiat Payment Method(s)", + "You can add any method":"You can add any method", + "Add New":"Add New", + "Choose a Pricing Method":"Choose a Pricing Method", + "Relative":"Relative", + "Let the price move with the market":"Let the price move with the market", + "Premium over Market (%)":"Premium over Market (%)", + "Explicit":"Explicit", + "Set a fix amount of satoshis":"Set a fix amount of satoshis", + "Satoshis":"Satoshis", + "Let the taker chose an amount within the range":"Let the taker chose an amount within the range", + "Enable Amount Range":"Enable Amount Range", + "From": "From", + "to":"to", + "Public Duration (HH:mm)":"Public Duration (HH:mm)", + "Set the skin-in-the-game, increase for higher safety assurance":"Set the skin-in-the-game, increase for higher safety assurance", + "Fidelity Bond Size":"Fidelity Bond Size", + "Allow bondless takers":"Allow bondless takers", + "COMING SOON - High risk! Limited to {{limitSats}}K Sats":"COMING SOON - High risk! Limited to {{limitSats}}K Sats", + "You must fill the order correctly":"You must fill the order correctly", + "Create Order":"Create Order", + "Back":"Back", + "Create a BTC buy order for ":"Create a BTC buy order for ", + "Create a BTC sell order for ":"Create a BTC sell order for ", + " of {{satoshis}} Satoshis":" of {{satoshis}} Satoshis", + " at market price":" at market price", + " at a {{premium}}% premium":" at a {{premium}}% premium", + " at a {{discount}}% discount":" at a {{discount}}% discount", + "Must be less than {{max}}%":"Must be less than {{max}}%", + "Must be more than {{min}}%":"Must be more than {{min}}%", + "Must be less than {{maxSats}": "Must be less than {{maxSats}}", + "Must be more than {{minSats}}": "Must be more than {{minSats}}", + + + "BOOK PAGE - BookPage.js":"The Book Order page", + "Seller":"Seller", + "Buyer":"Buyer", + "I want to":"I want to", + "Select Order Type":"Select Order Type", + "ANY_type":"ANY", + "ANY_currency":"ANY", + "BUY":"BUY", + "SELL":"SELL", + "and receive":"and receive", + "and pay with":"and pay with", + "and use":"and use", + "Select Payment Currency":"Select Payment Currency", + "Robot":"Robot", + "Is":"Is", + "Currency":"Currency", + "Payment Method":"Payment Method", + "Pay":"Pay", + "Price":"Price", + "Premium":"Premium", + "You are SELLING BTC for {{currencyCode}}":"You are SELLING BTC for {{currencyCode}}", + "You are BUYING BTC for {{currencyCode}}":"You are BUYING BTC for {{currencyCode}}", + "You are looking at all":"You are looking at all", + "No orders found to sell BTC for {{currencyCode}}":"No orders found to sell BTC for {{currencyCode}}", + "No orders found to buy BTC for {{currencyCode}}":"No orders found to buy BTC for {{currencyCode}}", + "Be the first one to create an order":"Be the first one to create an order", + + + "BOTTOM BAR AND MISC - BottomBar.js":"Bottom Bar user profile and miscellaneous dialogs", + "Stats For Nerds":"Stats For Nerds", + "LND version":"LND version", + "Currently running commit hash":"Currently running commit hash", + "24h contracted volume":"24h contracted volume", + "Lifetime contracted volume":"Lifetime contracted volume", + "Made with":"Made with", + "and":"and", + "... somewhere on Earth!":"... somewhere on Earth!", + "Community":"Community", + "Support is only offered via public channels. Join our Telegram community if you have questions or want to hang out with other cool robots. Please, use our Github Issues if you find a bug or want to see new features!":"Support is only offered via public channels. Join our Telegram community if you have questions or want to hang out with other cool robots. Please, use our Github Issues if you find a bug or want to see new features!", + "Join the RoboSats group":"Join the RoboSats group", + "Telegram (English / Main)":"Telegram (English / Main)", + "RoboSats Telegram Communities":"RoboSats Telegram Communities", + "Join RoboSats Spanish speaking community!":"Join RoboSats Spanish speaking community!", + "Join RoboSats Russian speaking community!":"Join RoboSats Russian speaking community!", + "Join RoboSats Chinese speaking community!":"Join RoboSats Chinese speaking community!", + "Join RoboSats English speaking community!":"Join RoboSats English speaking community!", + "Tell us about a new feature or a bug":"Tell us about a new feature or a bug", + "Github Issues - The Robotic Satoshis Open Source Project":"Github Issues - The Robotic Satoshis Open Source Project", + "Your Profile":"Your Profile", + "Your robot":"Your robot", + "One active order #{{orderID}}":"One active order #{{orderID}}", + "Your current order":"Your current order", + "No active orders":"No active orders", + "Your token (will not remain here)":"Your token (will not remain here)", + "Back it up!":"Back it up!", + "Cannot remember":"Cannot remember", + "Rewards and compensations":"Rewards and compensations", + "Share to earn 100 Sats per trade":"Share to earn 100 Sats per trade", + "Your referral link":"Your referral link", + "Your earned rewards":"Your earned rewards", + "Claim":"Claim", + "Invoice for {{amountSats}} Sats":"Invoice for {{amountSats}} Sats", + "Submit":"Submit", + "There it goes, thank you!🥇":"There it goes, thank you!🥇", + "You have an active order":"You have an active order", + "You can claim satoshis!":"You can claim satoshis!", + "Public Buy Orders":"Public Buy Orders", + "Public Sell Orders":"Public Sell Orders", + "Today Active Robots":"Today Active Robots", + "24h Avg Premium":"24h Avg Premium", + "Trade Fee":"Trade Fee", + "Show community and support links":"Show community and support links", + "Show stats for nerds":"Show stats for nerds", + "Exchange Summary":"Exchange Summary", + "Public buy orders":"Public buy orders", + "Public sell orders":"Public sell orders", + "Book liquidity":"Book liquidity", + "Today active robots":"Today active robots", + "24h non-KYC bitcoin premium":"24h non-KYC bitcoin premium", + "Maker fee":"Maker fee", + "Taker fee":"Taker fee", + "Number of public BUY orders":"Number of public BUY orders", + "Number of public SELL orders":"Number of public SELL orders", + + + "ORDER PAGE - OrderPage.js": "Order details page", + "Order Box":"Order Box", + "Contract":"Contract", + "Active":"Active", + "Seen recently":"Seen recently", + "Inactive":"Inactive", + "(Seller)":"(Seller)", + "(Buyer)":"(Buyer)", + "Order maker":"Order maker", + "Order taker":"Order taker", + "Order Details":"Order Details", + "Order status":"Order status", + "Waiting for maker bond":"Waiting for maker bond", + "Public":"Public", + "Waiting for taker bond":"Waiting for taker bond", + "Cancelled":"Cancelled", + "Expired":"Expired", + "Waiting for trade collateral and buyer invoice":"Waiting for trade collateral and buyer invoice", + "Waiting only for seller trade collateral":"Waiting only for seller trade collateral", + "Waiting only for buyer invoice":"Waiting only for buyer invoice", + "Sending fiat - In chatroom":"Sending fiat - In chatroom", + "Fiat sent - In chatroom":"Fiat sent - In chatroom", + "In dispute":"In dispute", + "Collaboratively cancelled":"Collaboratively cancelled", + "Sending satoshis to buyer":"Sending satoshis to buyer", + "Sucessful trade":"Successful trade", + "Failed lightning network routing":"Failed lightning network routing", + "Wait for dispute resolution":"Wait for dispute resolution", + "Maker lost dispute":"Maker lost dispute", + "Taker lost dispute":"Taker lost dispute", + "Amount range":"Amount range", + "Swap destination":"Swap destination", + "Accepted payment methods":"Accepted payment methods", + "Others":"Others", + "{{price}} {{currencyCode}}/BTC - Premium: {{premium}}%":"{{price}} {{currencyCode}}/BTC - Premium: {{premium}}%", + "Price and Premium":"Price and Premium", + "Amount of Satoshis":"Amount of Satoshis", + "Premium over market price":"Premium over market price", + "Order ID":"Order ID", + "Expires in":"Expires in", + "{{nickname}} is asking for a collaborative cancel":"{{nickname}} is asking for a collaborative cancel", + "You asked for a collaborative cancellation":"You asked for a collaborative cancellation", + "Invoice expired. You did not confirm publishing the order in time. Make a new order.":"Invoice expired. You did not confirm publishing the order in time. Make a new order.", + "This order has been cancelled by the maker":"This order has been cancelled by the maker", + "Penalty lifted, good to go!":"Penalty lifted, good to go!", + "You cannot take an order yet! Wait {{timeMin}}m {{timeSec}}s":"You cannot take an order yet! Wait {{timeMin}}m {{timeSec}}s", + "Too low":"Too low", + "Too high":"Too high", + "Enter amount of fiat to exchange for bitcoin":"Enter amount of fiat to exchange for bitcoin", + "Amount {{currencyCode}}":"Amount {{currencyCode}}", + "You must specify an amount first":"You must specify an amount first", + "Take Order":"Take Order", + "Wait until you can take an order":"Wait until you can take an order", + "Cancel the order?":"Cancel the order?", + "If the order is cancelled now you will lose your bond.":"If the order is cancelled now you will lose your bond.", + "Confirm Cancel":"Confirm Cancel", + "The maker is away":"The maker is away", + "By taking this order you risk wasting your time. If the maker does not proceed in time, you will be compensated in satoshis for 50% of the maker bond.":"By taking this order you risk wasting your time. If the maker does not proceed in time, you will be compensated in satoshis for 50% of the maker bond.", + "Collaborative cancel the order?":"Collaborative cancel the order?", + "The trade escrow has been posted. The order can be cancelled only if both, maker and taker, agree to cancel.":"The trade escrow has been posted. The order can be cancelled only if both, maker and taker, agree to cancel.", + "Ask for Cancel":"Ask for Cancel", + "Cancel":"Cancel", + "Collaborative Cancel":"Collaborative Cancel", + "Invalid Order Id":"Invalid Order Id", + "You must have a robot avatar to see the order details":"You must have a robot avatar to see the order details", + "This order has been cancelled collaborativelly":"This order has been cancelled collaborativelly", + "You are not allowed to see this order":"You are not allowed to see this order", + "The Robotic Satoshis working in the warehouse did not understand you. Please, fill a Bug Issue in Github https://github.com/reckless-satoshi/robosats/issues":"The Robotic Satoshis working in the warehouse did not understand you. Please, fill a Bug Issue in Github https://github.com/reckless-satoshi/robosats/issues", + + "CHAT BOX - Chat.js":"Chat Box", + "You":"You", + "Peer":"Peer", + "connected":"connected", + "disconnected":"disconnected", + "Type a message":"Type a message", + "Connecting...":"Connecting...", + "Send":"Send", + "The chat has no memory: if you leave, messages are lost.":"The chat has no memory: if you leave, messages are lost.", + "Learn easy PGP encryption.":"Learn easy PGP encryption.", + + "CONTRACT BOX - TradeBox.js": "The Contract Box that guides users trough the whole trade pipeline", + "Contract Box":"Contract Box", + "Robots show commitment to their peers": "Robots show commitment to their peers", + "Lock {{amountSats}} Sats to PUBLISH order": "Lock {{amountSats}} Sats to PUBLISH order", + "Lock {{amountSats}} Sats to TAKE order": "Lock {{amountSats}} Sats to TAKE order", + "Lock {{amountSats}} Sats as collateral": "Lock {{amountSats}} Sats as collateral", + "Copy to clipboard":"Copy to clipboard", + "This is a hold invoice, it will freeze in your wallet. It will be charged only if you cancel or lose a dispute.":"This is a hold invoice, it will freeze in your wallet. It will be charged only if you cancel or lose a dispute.", + "This is a hold invoice, it will freeze in your wallet. It will be released to the buyer once you confirm to have received the {{currencyCode}}.":"This is a hold invoice, it will freeze in your wallet. It will be released to the buyer once you confirm to have received the {{currencyCode}}.", + "Your maker bond is locked":"Your maker bond is locked", + "Your taker bond is locked":"Your taker bond is locked", + "Your maker bond was settled":"Your maker bond was settled", + "Your taker bond was settled":"Your taker bond was settled", + "Your maker bond was unlock":"Your maker bond was unlock", + "Your taker bond was unlocked":"Your taker bond was unlocked", + "Your order is public":"Your order is public", + "Be patient while robots check the book. It might take some time. This box will ring 🔊 once a robot takes your order.":"Be patient while robots check the book. It might take some time. This box will ring 🔊 once a robot takes your order.", + "Please note that if your premium is excessive or your currency or payment methods are not popular, your order might expire untaken. Your bond will return to you (no action needed).":"Please note that if your premium is excessive or your currency or payment methods are not popular, your order might expire untaken. Your bond will return to you (no action needed).", + "Enable Telegram Notifications":"Enable Telegram Notifications", + "Enable TG Notifications":"Enable TG Notifications", + "You will be taken to a conversation with RoboSats telegram bot. Simply open the chat and press Start. Note that by enabling telegram notifications you might lower your level of anonymity.":"You will be taken to a conversation with RoboSats telegram bot. Simply open the chat and press Start. Note that by enabling telegram notifications you might lower your level of anonymity.", + "Go back":"Go back", + "Enable":"Enable", + "Telegram enabled":"Telegram enabled", + "Public orders for {{currencyCode}}":"Public orders for {{currencyCode}}", + "Premium rank": "Premium rank", + "Among public {{currencyCode}} orders (higher is cheaper)": "Among public {{currencyCode}} orders (higher is cheaper)", + "A taker has been found!":"A taker has been found!", + "Please wait for the taker to lock a bond. If the taker does not lock a bond in time, the order will be made public again.":"Please wait for the taker to lock a bond. If the taker does not lock a bond in time, the order will be made public again.", + "Submit an invoice for {{amountSats}} Sats":"Submit an invoice for {{amountSats}} Sats", + "The taker is committed! Before letting you send {{amountFiat}} {{currencyCode}}, we want to make sure you are able to receive the BTC. Please provide a valid invoice for {{amountSats}} Satoshis.":"The taker is committed! Before letting you send {{amountFiat}} {{currencyCode}}, we want to make sure you are able to receive the BTC. Please provide a valid invoice for {{amountSats}} Satoshis.", + "Payout Lightning Invoice":"Payout Lightning Invoice", + "Your invoice looks good!":"Your invoice looks good!", + "We are waiting for the seller lock the trade amount.":"We are waiting for the seller lock the trade amount.", + "Just hang on for a moment. If the seller does not deposit, you will get your bond back automatically. In addition, you will receive a compensation (check the rewards in your profile).":"Just hang on for a moment. If the seller does not deposit, you will get your bond back automatically. In addition, you will receive a compensation (check the rewards in your profile).", + "The trade collateral is locked!":"The trade collateral is locked!", + "We are waiting for the buyer to post a lightning invoice. Once he does, you will be able to directly communicate the fiat payment details.":"We are waiting for the buyer to post a lightning invoice. Once he does, you will be able to directly communicate the fiat payment details.", + "Just hang on for a moment. If the buyer does not cooperate, you will get back the trade collateral and your bond automatically. In addition, you will receive a compensation (check the rewards in your profile).":"Just hang on for a moment. If the buyer does not cooperate, you will get back the trade collateral and your bond automatically. In addition, you will receive a compensation (check the rewards in your profile).", + "Confirm {{currencyCode}} sent":"Confirm {{currencyCode}} sent", + "Confirm {{currencyCode}} received":"Confirm {{currencyCode}} received", + "Open Dispute":"Open Dispute", + "The order has expired":"The order has expired", + "Chat with the buyer":"Chat with the buyer", + "Chat with the seller":"Chat with the seller", + "Say hi! Be helpful and concise. Let them know how to send you {{currencyCode}}.":"Say hi! Be helpful and concise. Let them know how to send you {{currencyCode}}.", + "The buyer has sent the fiat. Click 'Confirm Received' once you receive it.":"The buyer has sent the fiat. Click 'Confirm Received' once you receive it.", + "Say hi! Ask for payment details and click 'Confirm Sent' as soon as the payment is sent.":"Say hi! Ask for payment details and click 'Confirm Sent' as soon as the payment is sent.", + "Wait for the seller to confirm he has received the payment.":"Wait for the seller to confirm he has received the payment.", + "Confirm you received {{currencyCode}}?":"Confirm you received {{currencyCode}}?", + "Confirming that you received the fiat will finalize the trade. The satoshis in the escrow will be released to the buyer. Only confirm after the {{currencyCode}} has arrived to your account. In addition, if you have received {{currencyCode}} and do not confirm the receipt, you risk losing your bond.":"Confirming that you received the fiat will finalize the trade. The satoshis in the escrow will be released to the buyer. Only confirm after the {{currencyCode}} has arrived to your account. In addition, if you have received {{currencyCode}} and do not confirm the receipt, you risk losing your bond.", + "Confirm":"Confirm", + "🎉Trade finished!🥳":"🎉Trade finished!🥳", + "rate_robosats":"What do you think of 🤖<1>RoboSats⚡?", + "Thank you! RoboSats loves you too ❤️":"Thank you! RoboSats loves you too ❤️", + "RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!":"RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!", + "Thank you for using Robosats!":"Thank you for using Robosats!", + "let_us_know_hot_to_improve":"Let us know how the platform could improve (<1>Telegram / <3>Github)", + "Start Again":"Start Again", + "Attempting Lightning Payment":"Attempting Lightning Payment", + "RoboSats is trying to pay your lightning invoice. Remember that lightning nodes must be online in order to receive payments.":"RoboSats is trying to pay your lightning invoice. Remember that lightning nodes must be online in order to receive payments.", + "Retrying!":"Retrying!", + "Lightning Routing Failed":"Lightning Routing Failed", + "Your invoice has expired or more than 3 payment attempts have been made. Muun wallet is not recommended. ":"Your invoice has expired or more than 3 payment attempts have been made. Muun wallet is not recommended. ", + "Check the list of compatible wallets":"Check the list of compatible wallets", + "RoboSats will try to pay your invoice 3 times every 5 minutes. If it keeps failing, you will be able to submit a new invoice. Check whether you have enough inbound liquidity. Remember that lightning nodes must be online in order to receive payments.":"RoboSats will try to pay your invoice 3 times every 5 minutes. If it keeps failing, you will be able to submit a new invoice. Check whether you have enough inbound liquidity. Remember that lightning nodes must be online in order to receive payments.", + "Next attempt in":"Next attempt in", + "Do you want to open a dispute?":"Do you want to open a dispute?", + "The RoboSats staff will examine the statements and evidence provided. You need to build a complete case, as the staff cannot read the chat. It is best to provide a burner contact method with your statement. The satoshis in the trade escrow will be sent to the dispute winner, while the dispute loser will lose the bond.":"The RoboSats staff will examine the statements and evidence provided. You need to build a complete case, as the staff cannot read the chat. It is best to provide a burner contact method with your statement. The satoshis in the trade escrow will be sent to the dispute winner, while the dispute loser will lose the bond.", + "Disagree":"Disagree", + "Agree and open dispute":"Agree and open dispute", + "A dispute has been opened":"A dispute has been opened", + "Please, submit your statement. Be clear and specific about what happened and provide the necessary evidence. You MUST provide a contact method: burner email, XMPP or telegram username to follow up with the staff. Disputes are solved at the discretion of real robots (aka humans), so be as helpful as possible to ensure a fair outcome. Max 5000 chars.":"Please, submit your statement. Be clear and specific about what happened and provide the necessary evidence. You MUST provide a contact method: burner email, XMPP or telegram username to follow up with the staff. Disputes are solved at the discretion of real robots (aka humans), so be as helpful as possible to ensure a fair outcome. Max 5000 chars.", + "Submit dispute statement":"Submit dispute statement", + "We have received your statement":"We have received your statement", + "We are waiting for your trade counterpart statement. If you are hesitant about the state of the dispute or want to add more information, contact robosats@protonmail.com.":"We are waiting for your trade counterpart statement. If you are hesitant about the state of the dispute or want to add more information, contact robosats@protonmail.com.", + "Please, save the information needed to identify your order and your payments: order ID; payment hashes of the bonds or escrow (check on your lightning wallet); exact amount of satoshis; and robot nickname. You will have to identify yourself as the user involved in this trade via email (or other contact methods).":"Please, save the information needed to identify your order and your payments: order ID; payment hashes of the bonds or escrow (check on your lightning wallet); exact amount of satoshis; and robot nickname. You will have to identify yourself as the user involved in this trade via email (or other contact methods).", + "We have the statements":"We have the statements", + "Both statements have been received, wait for the staff to resolve the dispute. If you are hesitant about the state of the dispute or want to add more information, contact robosats@protonmail.com. If you did not provide a contact method, or are unsure whether you wrote it right, write us immediately.":"Both statements have been received, wait for the staff to resolve the dispute. If you are hesitant about the state of the dispute or want to add more information, contact robosats@protonmail.com. If you did not provide a contact method, or are unsure whether you wrote it right, write us immediately.", + "You have won the dispute":"You have won the dispute", + "You can claim the dispute resolution amount (escrow and fidelity bond) from your profile rewards. If there is anything the staff can help with, do not hesitate to contact to robosats@protonmail.com (or via your provided burner contact method).":"You can claim the dispute resolution amount (escrow and fidelity bond) from your profile rewards. If there is anything the staff can help with, do not hesitate to contact to robosats@protonmail.com (or via your provided burner contact method).", + "You have lost the dispute":"You have lost the dispute", + "Unfortunately you have lost the dispute. If you think this is a mistake you can ask to re-open the case via email to robosats@protonmail.com. However, chances of it being investigated again are low.":"Unfortunately you have lost the dispute. If you think this is a mistake you can ask to re-open the case via email to robosats@protonmail.com. However, chances of it being investigated again are low.", + + "INFO DIALOG - InfoDiagog.js":"App information and clarifications and terms of use", + "Close":"Close", + "What is RoboSats?":"What is RoboSats?", + "It is a BTC/FIAT peer-to-peer exchange over lightning.":"It is a BTC/FIAT peer-to-peer exchange over lightning.", + "RoboSats is an open source project ":"RoboSats is an open source project ", + "It simplifies matchmaking and minimizes the need of trust. RoboSats focuses in privacy and speed.":"It simplifies matchmaking and minimizes the need of trust. RoboSats focuses in privacy and speed.", + "(GitHub).":"(GitHub).", + "How does it work?":"How does it work?", + "AnonymousAlice01 wants to sell bitcoin. She posts a sell order. BafflingBob02 wants to buy bitcoin and he takes Alice's order. Both have to post a small bond using lightning to prove they are real robots. Then, Alice posts the trade collateral also using a lightning hold invoice. RoboSats locks the invoice until Alice confirms she received the fiat, then the satoshis are released to Bob. Enjoy your satoshis, Bob!":"AnonymousAlice01 wants to sell bitcoin. She posts a sell order. BafflingBob02 wants to buy bitcoin and he takes Alice's order. Both have to post a small bond using lightning to prove they are real robots. Then, Alice posts the trade collateral also using a lightning hold invoice. RoboSats locks the invoice until Alice confirms she received the fiat, then the satoshis are released to Bob. Enjoy your satoshis, Bob!", + "At no point, AnonymousAlice01 and BafflingBob02 have to entrust the bitcoin funds to each other. In case they have a conflict, RoboSats staff will help resolving the dispute.":"At no point, AnonymousAlice01 and BafflingBob02 have to entrust the bitcoin funds to each other. In case they have a conflict, RoboSats staff will help resolving the dispute.", + "You can find a step-by-step description of the trade pipeline in ":"You can find a step-by-step description of the trade pipeline in ", + "How it works":"How it works", + "You can also check the full guide in ":"You can also check the full guide in ", + "How to use":"How to use", + "What payment methods are accepted?":"What payment methods are accepted?", + "All of them as long as they are fast. You can write down your preferred payment method(s). You will have to match with a peer who also accepts that method. The step to exchange fiat has a expiry time of 24 hours before a dispute is automatically open. We highly recommend using instant fiat payment rails.":"All of them as long as they are fast. You can write down your preferred payment method(s). You will have to match with a peer who also accepts that method. The step to exchange fiat has a expiry time of 24 hours before a dispute is automatically open. We highly recommend using instant fiat payment rails.", + "Are there trade limits?":"Are there trade limits?", + "Maximum single trade size is {{maxAmount}} Satoshis to minimize lightning routing failure. There is no limits to the number of trades per day. A robot can only have one order at a time. However, you can use multiple robots simultaneously in different browsers (remember to back up your robot tokens!).":"Maximum single trade size is {{maxAmount}} Satoshis to minimize lightning routing failure. There is no limits to the number of trades per day. A robot can only have one order at a time. However, you can use multiple robots simultaneously in different browsers (remember to back up your robot tokens!).", + "Is RoboSats private?":"Is RoboSats private?", + "RoboSats will never ask you for your name, country or ID. RoboSats does not custody your funds and does not care who you are. RoboSats does not collect or custody any personal data. For best anonymity use Tor Browser and access the .onion hidden service.":"RoboSats will never ask you for your name, country or ID. RoboSats does not custody your funds and does not care who you are. RoboSats does not collect or custody any personal data. For best anonymity use Tor Browser and access the .onion hidden service.", + "Your trading peer is the only one who can potentially guess anything about you. Keep your chat short and concise. Avoid providing non-essential information other than strictly necessary for the fiat payment.":"Your trading peer is the only one who can potentially guess anything about you. Keep your chat short and concise. Avoid providing non-essential information other than strictly necessary for the fiat payment.", + "What are the risks?":"What are the risks?", + "This is an experimental application, things could go wrong. Trade small amounts!":"This is an experimental application, things could go wrong. Trade small amounts!", + "The seller faces the same charge-back risk as with any other peer-to-peer service. Paypal or credit cards are not recommended.":"The seller faces the same charge-back risk as with any other peer-to-peer service. Paypal or credit cards are not recommended.", + "What is the trust model?":"What is the trust model?", + "The buyer and the seller never have to trust each other. Some trust on RoboSats is needed since linking the seller's hold invoice and buyer payment is not atomic (yet). In addition, disputes are solved by the RoboSats staff.":"The buyer and the seller never have to trust each other. Some trust on RoboSats is needed since linking the seller's hold invoice and buyer payment is not atomic (yet). In addition, disputes are solved by the RoboSats staff.", + "To be totally clear. Trust requirements are minimized. However, there is still one way RoboSats could run away with your satoshis: by not releasing the satoshis to the buyer. It could be argued that such move is not in RoboSats' interest as it would damage the reputation for a small payout. However, you should hesitate and only trade small quantities at a time. For large amounts use an onchain escrow service such as Bisq":"To be totally clear. Trust requirements are minimized. However, there is still one way RoboSats could run away with your satoshis: by not releasing the satoshis to the buyer. It could be argued that such move is not in RoboSats' interest as it would damage the reputation for a small payout. However, you should hesitate and only trade small quantities at a time. For large amounts use an onchain escrow service such as Bisq", + "You can build more trust on RoboSats by inspecting the source code.":"You can build more trust on RoboSats by inspecting the source code.", + "Project source code":"Project source code", + "What happens if RoboSats suddenly disappears?":"What happens if RoboSats suddenly disappears?", + "Your sats will return to you. Any hold invoice that is not settled would be automatically returned even if RoboSats goes down forever. This is true for both, locked bonds and trading escrows. However, there is a small window between the seller confirms FIAT RECEIVED and the moment the buyer receives the satoshis when the funds could be permanently lost if RoboSats disappears. This window is about 1 second long. Make sure to have enough inbound liquidity to avoid routing failures. If you have any problem, reach out trough the RoboSats public channels.":"Your sats will return to you. Any hold invoice that is not settled would be automatically returned even if RoboSats goes down forever. This is true for both, locked bonds and trading escrows. However, there is a small window between the seller confirms FIAT RECEIVED and the moment the buyer receives the satoshis when the funds could be permanently lost if RoboSats disappears. This window is about 1 second long. Make sure to have enough inbound liquidity to avoid routing failures. If you have any problem, reach out trough the RoboSats public channels.", + "In many countries using RoboSats is no different than using Ebay or Craiglist. Your regulation may vary. It is your responsibility to comply.":"In many countries using RoboSats is no different than using Ebay or Craiglist. Your regulation may vary. It is your responsibility to comply.", + "Is RoboSats legal in my country?":"Is RoboSats legal in my country?", + "Disclaimer":"Disclaimer", + "This lightning application is provided as is. It is in active development: trade with the utmost caution. There is no private support. Support is only offered via public channels ":"This lightning application is provided as is. It is in active development: trade with the utmost caution. There is no private support. Support is only offered via public channels ", + "(Telegram)":"(Telegram)", + ". RoboSats will never contact you. RoboSats will definitely never ask for your robot token.":". RoboSats will never contact you. RoboSats will definitely never ask for your robot token." +} \ No newline at end of file diff --git a/frontend/static/frontend/main.js b/frontend/static/frontend/main.js index 20cef7c7..82df1854 100644 --- a/frontend/static/frontend/main.js +++ b/frontend/static/frontend/main.js @@ -1,2 +1,155 @@ /*! For license information please see main.js.LICENSE.txt */ -(()=>{var __webpack_modules__={"./node_modules/@babel/runtime/helpers/interopRequireDefault.js":module=>{eval('function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n "default": obj\n };\n}\n\nmodule.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports["default"] = module.exports;\n\n//# sourceURL=webpack://frontend/./node_modules/@babel/runtime/helpers/interopRequireDefault.js?')},"./node_modules/@babel/runtime/helpers/interopRequireWildcard.js":(module,__unused_webpack_exports,__webpack_require__)=>{eval('var _typeof = (__webpack_require__(/*! ./typeof.js */ "./node_modules/@babel/runtime/helpers/typeof.js")["default"]);\n\nfunction _getRequireWildcardCache(nodeInterop) {\n if (typeof WeakMap !== "function") return null;\n var cacheBabelInterop = new WeakMap();\n var cacheNodeInterop = new WeakMap();\n return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) {\n return nodeInterop ? cacheNodeInterop : cacheBabelInterop;\n })(nodeInterop);\n}\n\nfunction _interopRequireWildcard(obj, nodeInterop) {\n if (!nodeInterop && obj && obj.__esModule) {\n return obj;\n }\n\n if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") {\n return {\n "default": obj\n };\n }\n\n var cache = _getRequireWildcardCache(nodeInterop);\n\n if (cache && cache.has(obj)) {\n return cache.get(obj);\n }\n\n var newObj = {};\n var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n\n for (var key in obj) {\n if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n\n if (desc && (desc.get || desc.set)) {\n Object.defineProperty(newObj, key, desc);\n } else {\n newObj[key] = obj[key];\n }\n }\n }\n\n newObj["default"] = obj;\n\n if (cache) {\n cache.set(obj, newObj);\n }\n\n return newObj;\n}\n\nmodule.exports = _interopRequireWildcard, module.exports.__esModule = true, module.exports["default"] = module.exports;\n\n//# sourceURL=webpack://frontend/./node_modules/@babel/runtime/helpers/interopRequireWildcard.js?')},"./node_modules/@babel/runtime/helpers/typeof.js":module=>{eval('function _typeof(obj) {\n "@babel/helpers - typeof";\n\n return (module.exports = _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;\n }, module.exports.__esModule = true, module.exports["default"] = module.exports), _typeof(obj);\n}\n\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports["default"] = module.exports;\n\n//# sourceURL=webpack://frontend/./node_modules/@babel/runtime/helpers/typeof.js?')},"./node_modules/@date-io/date-fns/build/index.esm.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ DateFnsUtils)\n/* harmony export */ });\n/* harmony import */ var date_fns_addDays__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! date-fns/addDays */ "./node_modules/date-fns/esm/addDays/index.js");\n/* harmony import */ var date_fns_addSeconds__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! date-fns/addSeconds */ "./node_modules/date-fns/esm/addSeconds/index.js");\n/* harmony import */ var date_fns_addMinutes__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! date-fns/addMinutes */ "./node_modules/date-fns/esm/addMinutes/index.js");\n/* harmony import */ var date_fns_addHours__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! date-fns/addHours */ "./node_modules/date-fns/esm/addHours/index.js");\n/* harmony import */ var date_fns_addWeeks__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! date-fns/addWeeks */ "./node_modules/date-fns/esm/addWeeks/index.js");\n/* harmony import */ var date_fns_addMonths__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! date-fns/addMonths */ "./node_modules/date-fns/esm/addMonths/index.js");\n/* harmony import */ var date_fns_addYears__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! date-fns/addYears */ "./node_modules/date-fns/esm/addYears/index.js");\n/* harmony import */ var date_fns_differenceInYears__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! date-fns/differenceInYears */ "./node_modules/date-fns/esm/differenceInYears/index.js");\n/* harmony import */ var date_fns_differenceInQuarters__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! date-fns/differenceInQuarters */ "./node_modules/date-fns/esm/differenceInQuarters/index.js");\n/* harmony import */ var date_fns_differenceInMonths__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! date-fns/differenceInMonths */ "./node_modules/date-fns/esm/differenceInMonths/index.js");\n/* harmony import */ var date_fns_differenceInWeeks__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! date-fns/differenceInWeeks */ "./node_modules/date-fns/esm/differenceInWeeks/index.js");\n/* harmony import */ var date_fns_differenceInDays__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! date-fns/differenceInDays */ "./node_modules/date-fns/esm/differenceInDays/index.js");\n/* harmony import */ var date_fns_differenceInHours__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! date-fns/differenceInHours */ "./node_modules/date-fns/esm/differenceInHours/index.js");\n/* harmony import */ var date_fns_differenceInMinutes__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! date-fns/differenceInMinutes */ "./node_modules/date-fns/esm/differenceInMinutes/index.js");\n/* harmony import */ var date_fns_differenceInSeconds__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! date-fns/differenceInSeconds */ "./node_modules/date-fns/esm/differenceInSeconds/index.js");\n/* harmony import */ var date_fns_differenceInMilliseconds__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! date-fns/differenceInMilliseconds */ "./node_modules/date-fns/esm/differenceInMilliseconds/index.js");\n/* harmony import */ var date_fns_eachDayOfInterval__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! date-fns/eachDayOfInterval */ "./node_modules/date-fns/esm/eachDayOfInterval/index.js");\n/* harmony import */ var date_fns_endOfDay__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! date-fns/endOfDay */ "./node_modules/date-fns/esm/endOfDay/index.js");\n/* harmony import */ var date_fns_endOfWeek__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! date-fns/endOfWeek */ "./node_modules/date-fns/esm/endOfWeek/index.js");\n/* harmony import */ var date_fns_endOfYear__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! date-fns/endOfYear */ "./node_modules/date-fns/esm/endOfYear/index.js");\n/* harmony import */ var date_fns_format__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! date-fns/format */ "./node_modules/date-fns/esm/format/index.js");\n/* harmony import */ var date_fns_getHours__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! date-fns/getHours */ "./node_modules/date-fns/esm/getHours/index.js");\n/* harmony import */ var date_fns_getSeconds__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! date-fns/getSeconds */ "./node_modules/date-fns/esm/getSeconds/index.js");\n/* harmony import */ var date_fns_getYear__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! date-fns/getYear */ "./node_modules/date-fns/esm/getYear/index.js");\n/* harmony import */ var date_fns_isAfter__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! date-fns/isAfter */ "./node_modules/date-fns/esm/isAfter/index.js");\n/* harmony import */ var date_fns_isBefore__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! date-fns/isBefore */ "./node_modules/date-fns/esm/isBefore/index.js");\n/* harmony import */ var date_fns_isEqual__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! date-fns/isEqual */ "./node_modules/date-fns/esm/isEqual/index.js");\n/* harmony import */ var date_fns_isSameDay__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! date-fns/isSameDay */ "./node_modules/date-fns/esm/isSameDay/index.js");\n/* harmony import */ var date_fns_isSameYear__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! date-fns/isSameYear */ "./node_modules/date-fns/esm/isSameYear/index.js");\n/* harmony import */ var date_fns_isSameMonth__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! date-fns/isSameMonth */ "./node_modules/date-fns/esm/isSameMonth/index.js");\n/* harmony import */ var date_fns_isSameHour__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! date-fns/isSameHour */ "./node_modules/date-fns/esm/isSameHour/index.js");\n/* harmony import */ var date_fns_isValid__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! date-fns/isValid */ "./node_modules/date-fns/esm/isValid/index.js");\n/* harmony import */ var date_fns_parse__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! date-fns/parse */ "./node_modules/date-fns/esm/parse/index.js");\n/* harmony import */ var date_fns_setHours__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! date-fns/setHours */ "./node_modules/date-fns/esm/setHours/index.js");\n/* harmony import */ var date_fns_setMinutes__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! date-fns/setMinutes */ "./node_modules/date-fns/esm/setMinutes/index.js");\n/* harmony import */ var date_fns_setMonth__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! date-fns/setMonth */ "./node_modules/date-fns/esm/setMonth/index.js");\n/* harmony import */ var date_fns_getDay__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! date-fns/getDay */ "./node_modules/date-fns/esm/getDay/index.js");\n/* harmony import */ var date_fns_getDaysInMonth__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! date-fns/getDaysInMonth */ "./node_modules/date-fns/esm/getDaysInMonth/index.js");\n/* harmony import */ var date_fns_setSeconds__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! date-fns/setSeconds */ "./node_modules/date-fns/esm/setSeconds/index.js");\n/* harmony import */ var date_fns_setYear__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! date-fns/setYear */ "./node_modules/date-fns/esm/setYear/index.js");\n/* harmony import */ var date_fns_startOfDay__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! date-fns/startOfDay */ "./node_modules/date-fns/esm/startOfDay/index.js");\n/* harmony import */ var date_fns_startOfMonth__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! date-fns/startOfMonth */ "./node_modules/date-fns/esm/startOfMonth/index.js");\n/* harmony import */ var date_fns_endOfMonth__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! date-fns/endOfMonth */ "./node_modules/date-fns/esm/endOfMonth/index.js");\n/* harmony import */ var date_fns_startOfWeek__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! date-fns/startOfWeek */ "./node_modules/date-fns/esm/startOfWeek/index.js");\n/* harmony import */ var date_fns_startOfYear__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! date-fns/startOfYear */ "./node_modules/date-fns/esm/startOfYear/index.js");\n/* harmony import */ var date_fns_parseISO__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! date-fns/parseISO */ "./node_modules/date-fns/esm/parseISO/index.js");\n/* harmony import */ var date_fns_formatISO__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! date-fns/formatISO */ "./node_modules/date-fns/esm/formatISO/index.js");\n/* harmony import */ var date_fns_isWithinInterval__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! date-fns/isWithinInterval */ "./node_modules/date-fns/esm/isWithinInterval/index.js");\n/* harmony import */ var date_fns_lib_format_longFormatters__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! date-fns/_lib/format/longFormatters */ "./node_modules/date-fns/_lib/format/longFormatters/index.js");\n/* harmony import */ var date_fns_lib_format_longFormatters__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(date_fns_lib_format_longFormatters__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var date_fns_locale_en_US__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! date-fns/locale/en-US */ "./node_modules/date-fns/esm/locale/en-US/index.js");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar defaultFormats = {\n dayOfMonth: "d",\n fullDate: "PP",\n fullDateWithWeekday: "PPPP",\n fullDateTime: "PP p",\n fullDateTime12h: "PP hh:mm aaa",\n fullDateTime24h: "PP HH:mm",\n fullTime: "p",\n fullTime12h: "hh:mm aaa",\n fullTime24h: "HH:mm",\n hours12h: "hh",\n hours24h: "HH",\n keyboardDate: "P",\n keyboardDateTime: "P p",\n keyboardDateTime12h: "P hh:mm aaa",\n keyboardDateTime24h: "P HH:mm",\n minutes: "mm",\n month: "LLLL",\n monthAndDate: "MMMM d",\n monthAndYear: "LLLL yyyy",\n monthShort: "MMM",\n weekday: "EEEE",\n weekdayShort: "EEE",\n normalDate: "d MMMM",\n normalDateWithWeekday: "EEE, MMM d",\n seconds: "ss",\n shortDate: "MMM d",\n year: "yyyy",\n};\nvar DateFnsUtils = /** @class */ (function () {\n function DateFnsUtils(_a) {\n var _this = this;\n var _b = _a === void 0 ? {} : _a, locale = _b.locale, formats = _b.formats;\n this.lib = "date-fns";\n // Note: date-fns input types are more lenient than this adapter, so we need to expose our more\n // strict signature and delegate to the more lenient signature. Otherwise, we have downstream type errors upon usage.\n this.is12HourCycleInCurrentLocale = function () {\n if (_this.locale) {\n return /a/.test(_this.locale.formatLong.time());\n }\n // By default date-fns is using en-US locale with am/pm enabled\n return true;\n };\n this.getFormatHelperText = function (format) {\n // @see https://github.com/date-fns/date-fns/blob/master/src/format/index.js#L31\n var longFormatRegexp = /P+p+|P+|p+|\'\'|\'(\'\'|[^\'])+(\'|$)|./g;\n var locale = _this.locale || date_fns_locale_en_US__WEBPACK_IMPORTED_MODULE_0__["default"];\n return format\n .match(longFormatRegexp)\n .map(function (token) {\n var firstCharacter = token[0];\n if (firstCharacter === "p" || firstCharacter === "P") {\n var longFormatter = (date_fns_lib_format_longFormatters__WEBPACK_IMPORTED_MODULE_1___default())[firstCharacter];\n return longFormatter(token, locale.formatLong, {});\n }\n return token;\n })\n .join("")\n .replace(/(aaa|aa|a)/g, "(a|p)m")\n .toLocaleLowerCase();\n };\n this.parseISO = function (isoString) {\n return (0,date_fns_parseISO__WEBPACK_IMPORTED_MODULE_2__["default"])(isoString);\n };\n this.toISO = function (value) {\n return (0,date_fns_formatISO__WEBPACK_IMPORTED_MODULE_3__["default"])(value, { format: "extended" });\n };\n this.getCurrentLocaleCode = function () {\n var _a;\n return ((_a = _this.locale) === null || _a === void 0 ? void 0 : _a.code) || "en-US";\n };\n this.addSeconds = function (value, count) {\n return (0,date_fns_addSeconds__WEBPACK_IMPORTED_MODULE_4__["default"])(value, count);\n };\n this.addMinutes = function (value, count) {\n return (0,date_fns_addMinutes__WEBPACK_IMPORTED_MODULE_5__["default"])(value, count);\n };\n this.addHours = function (value, count) {\n return (0,date_fns_addHours__WEBPACK_IMPORTED_MODULE_6__["default"])(value, count);\n };\n this.addDays = function (value, count) {\n return (0,date_fns_addDays__WEBPACK_IMPORTED_MODULE_7__["default"])(value, count);\n };\n this.addWeeks = function (value, count) {\n return (0,date_fns_addWeeks__WEBPACK_IMPORTED_MODULE_8__["default"])(value, count);\n };\n this.addMonths = function (value, count) {\n return (0,date_fns_addMonths__WEBPACK_IMPORTED_MODULE_9__["default"])(value, count);\n };\n this.isValid = function (value) {\n return (0,date_fns_isValid__WEBPACK_IMPORTED_MODULE_10__["default"])(_this.date(value));\n };\n this.getDiff = function (value, comparing, unit) {\n switch (unit) {\n case "years":\n return (0,date_fns_differenceInYears__WEBPACK_IMPORTED_MODULE_11__["default"])(value, _this.date(comparing));\n case "quarters":\n return (0,date_fns_differenceInQuarters__WEBPACK_IMPORTED_MODULE_12__["default"])(value, _this.date(comparing));\n case "months":\n return (0,date_fns_differenceInMonths__WEBPACK_IMPORTED_MODULE_13__["default"])(value, _this.date(comparing));\n case "weeks":\n return (0,date_fns_differenceInWeeks__WEBPACK_IMPORTED_MODULE_14__["default"])(value, _this.date(comparing));\n case "days":\n return (0,date_fns_differenceInDays__WEBPACK_IMPORTED_MODULE_15__["default"])(value, _this.date(comparing));\n case "hours":\n return (0,date_fns_differenceInHours__WEBPACK_IMPORTED_MODULE_16__["default"])(value, _this.date(comparing));\n case "minutes":\n return (0,date_fns_differenceInMinutes__WEBPACK_IMPORTED_MODULE_17__["default"])(value, _this.date(comparing));\n case "seconds":\n return (0,date_fns_differenceInSeconds__WEBPACK_IMPORTED_MODULE_18__["default"])(value, _this.date(comparing));\n default: {\n return (0,date_fns_differenceInMilliseconds__WEBPACK_IMPORTED_MODULE_19__["default"])(value, _this.date(comparing));\n }\n }\n };\n this.isAfter = function (value, comparing) {\n return (0,date_fns_isAfter__WEBPACK_IMPORTED_MODULE_20__["default"])(value, comparing);\n };\n this.isBefore = function (value, comparing) {\n return (0,date_fns_isBefore__WEBPACK_IMPORTED_MODULE_21__["default"])(value, comparing);\n };\n this.startOfDay = function (value) {\n return (0,date_fns_startOfDay__WEBPACK_IMPORTED_MODULE_22__["default"])(value);\n };\n this.endOfDay = function (value) {\n return (0,date_fns_endOfDay__WEBPACK_IMPORTED_MODULE_23__["default"])(value);\n };\n this.getHours = function (value) {\n return (0,date_fns_getHours__WEBPACK_IMPORTED_MODULE_24__["default"])(value);\n };\n this.setHours = function (value, count) {\n return (0,date_fns_setHours__WEBPACK_IMPORTED_MODULE_25__["default"])(value, count);\n };\n this.setMinutes = function (value, count) {\n return (0,date_fns_setMinutes__WEBPACK_IMPORTED_MODULE_26__["default"])(value, count);\n };\n this.getSeconds = function (value) {\n return (0,date_fns_getSeconds__WEBPACK_IMPORTED_MODULE_27__["default"])(value);\n };\n this.setSeconds = function (value, count) {\n return (0,date_fns_setSeconds__WEBPACK_IMPORTED_MODULE_28__["default"])(value, count);\n };\n this.isSameDay = function (value, comparing) {\n return (0,date_fns_isSameDay__WEBPACK_IMPORTED_MODULE_29__["default"])(value, comparing);\n };\n this.isSameMonth = function (value, comparing) {\n return (0,date_fns_isSameMonth__WEBPACK_IMPORTED_MODULE_30__["default"])(value, comparing);\n };\n this.isSameYear = function (value, comparing) {\n return (0,date_fns_isSameYear__WEBPACK_IMPORTED_MODULE_31__["default"])(value, comparing);\n };\n this.isSameHour = function (value, comparing) {\n return (0,date_fns_isSameHour__WEBPACK_IMPORTED_MODULE_32__["default"])(value, comparing);\n };\n this.startOfMonth = function (value) {\n return (0,date_fns_startOfMonth__WEBPACK_IMPORTED_MODULE_33__["default"])(value);\n };\n this.endOfMonth = function (value) {\n return (0,date_fns_endOfMonth__WEBPACK_IMPORTED_MODULE_34__["default"])(value);\n };\n this.startOfWeek = function (value) {\n return (0,date_fns_startOfWeek__WEBPACK_IMPORTED_MODULE_35__["default"])(value, { locale: _this.locale });\n };\n this.endOfWeek = function (value) {\n return (0,date_fns_endOfWeek__WEBPACK_IMPORTED_MODULE_36__["default"])(value, { locale: _this.locale });\n };\n this.getYear = function (value) {\n return (0,date_fns_getYear__WEBPACK_IMPORTED_MODULE_37__["default"])(value);\n };\n this.setYear = function (value, count) {\n return (0,date_fns_setYear__WEBPACK_IMPORTED_MODULE_38__["default"])(value, count);\n };\n this.date = function (value) {\n if (typeof value === "undefined") {\n return new Date();\n }\n if (value === null) {\n return null;\n }\n return new Date(value);\n };\n this.toJsDate = function (value) {\n return value;\n };\n this.parse = function (value, formatString) {\n if (value === "") {\n return null;\n }\n return (0,date_fns_parse__WEBPACK_IMPORTED_MODULE_39__["default"])(value, formatString, new Date(), { locale: _this.locale });\n };\n this.format = function (date, formatKey) {\n return _this.formatByString(date, _this.formats[formatKey]);\n };\n this.formatByString = function (date, formatString) {\n return (0,date_fns_format__WEBPACK_IMPORTED_MODULE_40__["default"])(date, formatString, { locale: _this.locale });\n };\n this.isEqual = function (date, comparing) {\n if (date === null && comparing === null) {\n return true;\n }\n return (0,date_fns_isEqual__WEBPACK_IMPORTED_MODULE_41__["default"])(date, comparing);\n };\n this.isNull = function (date) {\n return date === null;\n };\n this.isAfterDay = function (date, value) {\n return (0,date_fns_isAfter__WEBPACK_IMPORTED_MODULE_20__["default"])(date, (0,date_fns_endOfDay__WEBPACK_IMPORTED_MODULE_23__["default"])(value));\n };\n this.isBeforeDay = function (date, value) {\n return (0,date_fns_isBefore__WEBPACK_IMPORTED_MODULE_21__["default"])(date, (0,date_fns_startOfDay__WEBPACK_IMPORTED_MODULE_22__["default"])(value));\n };\n this.isBeforeYear = function (date, value) {\n return (0,date_fns_isBefore__WEBPACK_IMPORTED_MODULE_21__["default"])(date, (0,date_fns_startOfYear__WEBPACK_IMPORTED_MODULE_42__["default"])(value));\n };\n this.isAfterYear = function (date, value) {\n return (0,date_fns_isAfter__WEBPACK_IMPORTED_MODULE_20__["default"])(date, (0,date_fns_endOfYear__WEBPACK_IMPORTED_MODULE_43__["default"])(value));\n };\n this.isWithinRange = function (date, _a) {\n var start = _a[0], end = _a[1];\n return (0,date_fns_isWithinInterval__WEBPACK_IMPORTED_MODULE_44__["default"])(date, { start: start, end: end });\n };\n this.formatNumber = function (numberToFormat) {\n return numberToFormat;\n };\n this.getMinutes = function (date) {\n return date.getMinutes();\n };\n this.getMonth = function (date) {\n return date.getMonth();\n };\n this.getDaysInMonth = function (date) {\n return (0,date_fns_getDaysInMonth__WEBPACK_IMPORTED_MODULE_45__["default"])(date);\n };\n this.setMonth = function (date, count) {\n return (0,date_fns_setMonth__WEBPACK_IMPORTED_MODULE_46__["default"])(date, count);\n };\n this.getMeridiemText = function (ampm) {\n return ampm === "am" ? "AM" : "PM";\n };\n this.getNextMonth = function (date) {\n return (0,date_fns_addMonths__WEBPACK_IMPORTED_MODULE_9__["default"])(date, 1);\n };\n this.getPreviousMonth = function (date) {\n return (0,date_fns_addMonths__WEBPACK_IMPORTED_MODULE_9__["default"])(date, -1);\n };\n this.getMonthArray = function (date) {\n var firstMonth = (0,date_fns_startOfYear__WEBPACK_IMPORTED_MODULE_42__["default"])(date);\n var monthArray = [firstMonth];\n while (monthArray.length < 12) {\n var prevMonth = monthArray[monthArray.length - 1];\n monthArray.push(_this.getNextMonth(prevMonth));\n }\n return monthArray;\n };\n this.mergeDateAndTime = function (date, time) {\n return _this.setSeconds(_this.setMinutes(_this.setHours(date, _this.getHours(time)), _this.getMinutes(time)), _this.getSeconds(time));\n };\n this.getWeekdays = function () {\n var now = new Date();\n return (0,date_fns_eachDayOfInterval__WEBPACK_IMPORTED_MODULE_47__["default"])({\n start: (0,date_fns_startOfWeek__WEBPACK_IMPORTED_MODULE_35__["default"])(now, { locale: _this.locale }),\n end: (0,date_fns_endOfWeek__WEBPACK_IMPORTED_MODULE_36__["default"])(now, { locale: _this.locale }),\n }).map(function (day) { return _this.formatByString(day, "EEEEEE"); });\n };\n this.getWeekArray = function (date) {\n var start = (0,date_fns_startOfWeek__WEBPACK_IMPORTED_MODULE_35__["default"])((0,date_fns_startOfMonth__WEBPACK_IMPORTED_MODULE_33__["default"])(date), { locale: _this.locale });\n var end = (0,date_fns_endOfWeek__WEBPACK_IMPORTED_MODULE_36__["default"])((0,date_fns_endOfMonth__WEBPACK_IMPORTED_MODULE_34__["default"])(date), { locale: _this.locale });\n var count = 0;\n var current = start;\n var nestedWeeks = [];\n var lastDay = null;\n while ((0,date_fns_isBefore__WEBPACK_IMPORTED_MODULE_21__["default"])(current, end)) {\n var weekNumber = Math.floor(count / 7);\n nestedWeeks[weekNumber] = nestedWeeks[weekNumber] || [];\n var day = (0,date_fns_getDay__WEBPACK_IMPORTED_MODULE_48__["default"])(current);\n if (lastDay !== day) {\n lastDay = day;\n nestedWeeks[weekNumber].push(current);\n count += 1;\n }\n current = (0,date_fns_addDays__WEBPACK_IMPORTED_MODULE_7__["default"])(current, 1);\n }\n return nestedWeeks;\n };\n this.getYearRange = function (start, end) {\n var startDate = (0,date_fns_startOfYear__WEBPACK_IMPORTED_MODULE_42__["default"])(start);\n var endDate = (0,date_fns_endOfYear__WEBPACK_IMPORTED_MODULE_43__["default"])(end);\n var years = [];\n var current = startDate;\n while ((0,date_fns_isBefore__WEBPACK_IMPORTED_MODULE_21__["default"])(current, endDate)) {\n years.push(current);\n current = (0,date_fns_addYears__WEBPACK_IMPORTED_MODULE_49__["default"])(current, 1);\n }\n return years;\n };\n this.locale = locale;\n this.formats = Object.assign({}, defaultFormats, formats);\n }\n return DateFnsUtils;\n}());\n\n\n\n\n//# sourceURL=webpack://frontend/./node_modules/@date-io/date-fns/build/index.esm.js?')},"./node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _emotion_sheet__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @emotion/sheet */ "./node_modules/@emotion/sheet/dist/emotion-sheet.browser.esm.js");\n/* harmony import */ var stylis__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! stylis */ "./node_modules/stylis/src/Tokenizer.js");\n/* harmony import */ var stylis__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! stylis */ "./node_modules/stylis/src/Utility.js");\n/* harmony import */ var stylis__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! stylis */ "./node_modules/stylis/src/Middleware.js");\n/* harmony import */ var stylis__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! stylis */ "./node_modules/stylis/src/Serializer.js");\n/* harmony import */ var stylis__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! stylis */ "./node_modules/stylis/src/Parser.js");\n/* harmony import */ var _emotion_weak_memoize__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @emotion/weak-memoize */ "./node_modules/@emotion/weak-memoize/dist/weak-memoize.browser.esm.js");\n/* harmony import */ var _emotion_memoize__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @emotion/memoize */ "./node_modules/@emotion/memoize/dist/emotion-memoize.browser.esm.js");\n\n\n\n\n\nvar last = function last(arr) {\n return arr.length ? arr[arr.length - 1] : null;\n}; // based on https://github.com/thysultan/stylis.js/blob/e6843c373ebcbbfade25ebcc23f540ed8508da0a/src/Tokenizer.js#L239-L244\n\n\nvar identifierWithPointTracking = function identifierWithPointTracking(begin, points, index) {\n var previous = 0;\n var character = 0;\n\n while (true) {\n previous = character;\n character = (0,stylis__WEBPACK_IMPORTED_MODULE_3__.peek)(); // &\\f\n\n if (previous === 38 && character === 12) {\n points[index] = 1;\n }\n\n if ((0,stylis__WEBPACK_IMPORTED_MODULE_3__.token)(character)) {\n break;\n }\n\n (0,stylis__WEBPACK_IMPORTED_MODULE_3__.next)();\n }\n\n return (0,stylis__WEBPACK_IMPORTED_MODULE_3__.slice)(begin, stylis__WEBPACK_IMPORTED_MODULE_3__.position);\n};\n\nvar toRules = function toRules(parsed, points) {\n // pretend we\'ve started with a comma\n var index = -1;\n var character = 44;\n\n do {\n switch ((0,stylis__WEBPACK_IMPORTED_MODULE_3__.token)(character)) {\n case 0:\n // &\\f\n if (character === 38 && (0,stylis__WEBPACK_IMPORTED_MODULE_3__.peek)() === 12) {\n // this is not 100% correct, we don\'t account for literal sequences here - like for example quoted strings\n // stylis inserts \\f after & to know when & where it should replace this sequence with the context selector\n // and when it should just concatenate the outer and inner selectors\n // it\'s very unlikely for this sequence to actually appear in a different context, so we just leverage this fact here\n points[index] = 1;\n }\n\n parsed[index] += identifierWithPointTracking(stylis__WEBPACK_IMPORTED_MODULE_3__.position - 1, points, index);\n break;\n\n case 2:\n parsed[index] += (0,stylis__WEBPACK_IMPORTED_MODULE_3__.delimit)(character);\n break;\n\n case 4:\n // comma\n if (character === 44) {\n // colon\n parsed[++index] = (0,stylis__WEBPACK_IMPORTED_MODULE_3__.peek)() === 58 ? \'&\\f\' : \'\';\n points[index] = parsed[index].length;\n break;\n }\n\n // fallthrough\n\n default:\n parsed[index] += (0,stylis__WEBPACK_IMPORTED_MODULE_4__.from)(character);\n }\n } while (character = (0,stylis__WEBPACK_IMPORTED_MODULE_3__.next)());\n\n return parsed;\n};\n\nvar getRules = function getRules(value, points) {\n return (0,stylis__WEBPACK_IMPORTED_MODULE_3__.dealloc)(toRules((0,stylis__WEBPACK_IMPORTED_MODULE_3__.alloc)(value), points));\n}; // WeakSet would be more appropriate, but only WeakMap is supported in IE11\n\n\nvar fixedElements = /* #__PURE__ */new WeakMap();\nvar compat = function compat(element) {\n if (element.type !== \'rule\' || !element.parent || // positive .length indicates that this rule contains pseudo\n // negative .length indicates that this rule has been already prefixed\n element.length < 1) {\n return;\n }\n\n var value = element.value,\n parent = element.parent;\n var isImplicitRule = element.column === parent.column && element.line === parent.line;\n\n while (parent.type !== \'rule\') {\n parent = parent.parent;\n if (!parent) return;\n } // short-circuit for the simplest case\n\n\n if (element.props.length === 1 && value.charCodeAt(0) !== 58\n /* colon */\n && !fixedElements.get(parent)) {\n return;\n } // if this is an implicitly inserted rule (the one eagerly inserted at the each new nested level)\n // then the props has already been manipulated beforehand as they that array is shared between it and its "rule parent"\n\n\n if (isImplicitRule) {\n return;\n }\n\n fixedElements.set(element, true);\n var points = [];\n var rules = getRules(value, points);\n var parentRules = parent.props;\n\n for (var i = 0, k = 0; i < rules.length; i++) {\n for (var j = 0; j < parentRules.length; j++, k++) {\n element.props[k] = points[i] ? rules[i].replace(/&\\f/g, parentRules[j]) : parentRules[j] + " " + rules[i];\n }\n }\n};\nvar removeLabel = function removeLabel(element) {\n if (element.type === \'decl\') {\n var value = element.value;\n\n if ( // charcode for l\n value.charCodeAt(0) === 108 && // charcode for b\n value.charCodeAt(2) === 98) {\n // this ignores label\n element["return"] = \'\';\n element.value = \'\';\n }\n }\n};\nvar ignoreFlag = \'emotion-disable-server-rendering-unsafe-selector-warning-please-do-not-use-this-the-warning-exists-for-a-reason\';\n\nvar isIgnoringComment = function isIgnoringComment(element) {\n return !!element && element.type === \'comm\' && element.children.indexOf(ignoreFlag) > -1;\n};\n\nvar createUnsafeSelectorsAlarm = function createUnsafeSelectorsAlarm(cache) {\n return function (element, index, children) {\n if (element.type !== \'rule\') return;\n var unsafePseudoClasses = element.value.match(/(:first|:nth|:nth-last)-child/g);\n\n if (unsafePseudoClasses && cache.compat !== true) {\n var prevElement = index > 0 ? children[index - 1] : null;\n\n if (prevElement && isIgnoringComment(last(prevElement.children))) {\n return;\n }\n\n unsafePseudoClasses.forEach(function (unsafePseudoClass) {\n console.error("The pseudo class \\"" + unsafePseudoClass + "\\" is potentially unsafe when doing server-side rendering. Try changing it to \\"" + unsafePseudoClass.split(\'-child\')[0] + "-of-type\\".");\n });\n }\n };\n};\n\nvar isImportRule = function isImportRule(element) {\n return element.type.charCodeAt(1) === 105 && element.type.charCodeAt(0) === 64;\n};\n\nvar isPrependedWithRegularRules = function isPrependedWithRegularRules(index, children) {\n for (var i = index - 1; i >= 0; i--) {\n if (!isImportRule(children[i])) {\n return true;\n }\n }\n\n return false;\n}; // use this to remove incorrect elements from further processing\n// so they don\'t get handed to the `sheet` (or anything else)\n// as that could potentially lead to additional logs which in turn could be overhelming to the user\n\n\nvar nullifyElement = function nullifyElement(element) {\n element.type = \'\';\n element.value = \'\';\n element["return"] = \'\';\n element.children = \'\';\n element.props = \'\';\n};\n\nvar incorrectImportAlarm = function incorrectImportAlarm(element, index, children) {\n if (!isImportRule(element)) {\n return;\n }\n\n if (element.parent) {\n console.error("`@import` rules can\'t be nested inside other rules. Please move it to the top level and put it before regular rules. Keep in mind that they can only be used within global styles.");\n nullifyElement(element);\n } else if (isPrependedWithRegularRules(index, children)) {\n console.error("`@import` rules can\'t be after other rules. Please put your `@import` rules before your other rules.");\n nullifyElement(element);\n }\n};\n\nvar defaultStylisPlugins = [stylis__WEBPACK_IMPORTED_MODULE_5__.prefixer];\n\nvar createCache = function createCache(options) {\n var key = options.key;\n\n if (false) {}\n\n if ( key === \'css\') {\n var ssrStyles = document.querySelectorAll("style[data-emotion]:not([data-s])"); // get SSRed styles out of the way of React\'s hydration\n // document.head is a safe place to move them to(though note document.head is not necessarily the last place they will be)\n // note this very very intentionally targets all style elements regardless of the key to ensure\n // that creating a cache works inside of render of a React component\n\n Array.prototype.forEach.call(ssrStyles, function (node) {\n // we want to only move elements which have a space in the data-emotion attribute value\n // because that indicates that it is an Emotion 11 server-side rendered style elements\n // while we will already ignore Emotion 11 client-side inserted styles because of the :not([data-s]) part in the selector\n // Emotion 10 client-side inserted styles did not have data-s (but importantly did not have a space in their data-emotion attributes)\n // so checking for the space ensures that loading Emotion 11 after Emotion 10 has inserted some styles\n // will not result in the Emotion 10 styles being destroyed\n var dataEmotionAttribute = node.getAttribute(\'data-emotion\');\n\n if (dataEmotionAttribute.indexOf(\' \') === -1) {\n return;\n }\n document.head.appendChild(node);\n node.setAttribute(\'data-s\', \'\');\n });\n }\n\n var stylisPlugins = options.stylisPlugins || defaultStylisPlugins;\n\n if (false) {}\n\n var inserted = {}; // $FlowFixMe\n\n var container;\n var nodesToHydrate = [];\n\n {\n container = options.container || document.head;\n Array.prototype.forEach.call( // this means we will ignore elements which don\'t have a space in them which\n // means that the style elements we\'re looking at are only Emotion 11 server-rendered style elements\n document.querySelectorAll("style[data-emotion^=\\"" + key + " \\"]"), function (node) {\n var attrib = node.getAttribute("data-emotion").split(\' \'); // $FlowFixMe\n\n for (var i = 1; i < attrib.length; i++) {\n inserted[attrib[i]] = true;\n }\n\n nodesToHydrate.push(node);\n });\n }\n\n var _insert;\n\n var omnipresentPlugins = [compat, removeLabel];\n\n if (false) {}\n\n {\n var currentSheet;\n var finalizingPlugins = [stylis__WEBPACK_IMPORTED_MODULE_6__.stringify, false ? 0 : (0,stylis__WEBPACK_IMPORTED_MODULE_5__.rulesheet)(function (rule) {\n currentSheet.insert(rule);\n })];\n var serializer = (0,stylis__WEBPACK_IMPORTED_MODULE_5__.middleware)(omnipresentPlugins.concat(stylisPlugins, finalizingPlugins));\n\n var stylis = function stylis(styles) {\n return (0,stylis__WEBPACK_IMPORTED_MODULE_6__.serialize)((0,stylis__WEBPACK_IMPORTED_MODULE_7__.compile)(styles), serializer);\n };\n\n _insert = function insert(selector, serialized, sheet, shouldCache) {\n currentSheet = sheet;\n\n if (false) {}\n\n stylis(selector ? selector + "{" + serialized.styles + "}" : serialized.styles);\n\n if (shouldCache) {\n cache.inserted[serialized.name] = true;\n }\n };\n }\n\n var cache = {\n key: key,\n sheet: new _emotion_sheet__WEBPACK_IMPORTED_MODULE_0__.StyleSheet({\n key: key,\n container: container,\n nonce: options.nonce,\n speedy: options.speedy,\n prepend: options.prepend,\n insertionPoint: options.insertionPoint\n }),\n nonce: options.nonce,\n inserted: inserted,\n registered: {},\n insert: _insert\n };\n cache.sheet.hydrate(nodesToHydrate);\n return cache;\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (createCache);\n\n\n//# sourceURL=webpack://frontend/./node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js?')},"./node_modules/@emotion/hash/dist/hash.browser.esm.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* eslint-disable */\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str) {\n // 'm' and 'r' are mixing constants generated offline.\n // They're not really 'magic', they just happen to work well.\n // const m = 0x5bd1e995;\n // const r = 24;\n // Initialize the hash\n var h = 0; // Mix 4 bytes at a time into the hash\n\n var k,\n i = 0,\n len = str.length;\n\n for (; len >= 4; ++i, len -= 4) {\n k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n k =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);\n k ^=\n /* k >>> r: */\n k >>> 24;\n h =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Handle the last few bytes of the input array\n\n\n switch (len) {\n case 3:\n h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\n case 2:\n h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\n case 1:\n h ^= str.charCodeAt(i) & 0xff;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Do a few final mixes of the hash to ensure the last few\n // bytes are well-incorporated.\n\n\n h ^= h >>> 13;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n return ((h ^ h >>> 15) >>> 0).toString(36);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (murmur2);\n\n\n//# sourceURL=webpack://frontend/./node_modules/@emotion/hash/dist/hash.browser.esm.js?")},"./node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.browser.esm.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _emotion_memoize__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @emotion/memoize */ "./node_modules/@emotion/memoize/dist/emotion-memoize.browser.esm.js");\n\n\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar isPropValid = /* #__PURE__ */(0,_emotion_memoize__WEBPACK_IMPORTED_MODULE_0__["default"])(function (prop) {\n return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n /* o */\n && prop.charCodeAt(1) === 110\n /* n */\n && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isPropValid);\n\n\n//# sourceURL=webpack://frontend/./node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.browser.esm.js?')},"./node_modules/@emotion/memoize/dist/emotion-memoize.browser.esm.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction memoize(fn) {\n var cache = Object.create(null);\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (memoize);\n\n\n//# sourceURL=webpack://frontend/./node_modules/@emotion/memoize/dist/emotion-memoize.browser.esm.js?')},"./node_modules/@emotion/react/_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! hoist-non-react-statics */ "./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js");\n/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_0__);\n\n\n// this file isolates this package that is not tree-shakeable\n// and if this module doesn\'t actually contain any logic of its own\n// then Rollup just use \'hoist-non-react-statics\' directly in other chunks\n\nvar hoistNonReactStatics = (function (targetComponent, sourceComponent) {\n return hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_0___default()(targetComponent, sourceComponent);\n});\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hoistNonReactStatics);\n\n\n//# sourceURL=webpack://frontend/./node_modules/@emotion/react/_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js?')},"./node_modules/@emotion/react/dist/emotion-element-699e6908.browser.esm.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "C": () => (/* binding */ CacheProvider),\n/* harmony export */ "E": () => (/* binding */ Emotion),\n/* harmony export */ "T": () => (/* binding */ ThemeContext),\n/* harmony export */ "_": () => (/* binding */ __unsafe_useEmotionCache),\n/* harmony export */ "a": () => (/* binding */ ThemeProvider),\n/* harmony export */ "b": () => (/* binding */ withTheme),\n/* harmony export */ "c": () => (/* binding */ createEmotionProps),\n/* harmony export */ "h": () => (/* binding */ hasOwnProperty),\n/* harmony export */ "u": () => (/* binding */ useTheme),\n/* harmony export */ "w": () => (/* binding */ withEmotionCache)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");\n/* harmony import */ var _emotion_cache__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @emotion/cache */ "./node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js");\n/* harmony import */ var _emotion_weak_memoize__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @emotion/weak-memoize */ "./node_modules/@emotion/weak-memoize/dist/weak-memoize.browser.esm.js");\n/* harmony import */ var _isolated_hnrs_dist_emotion_react_isolated_hnrs_browser_esm_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js */ "./node_modules/@emotion/react/_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js");\n/* harmony import */ var _emotion_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @emotion/utils */ "./node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js");\n/* harmony import */ var _emotion_serialize__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @emotion/serialize */ "./node_modules/@emotion/serialize/dist/emotion-serialize.browser.esm.js");\n\n\n\n\n\n\n\n\nvar hasOwnProperty = {}.hasOwnProperty;\n\nvar EmotionCacheContext = /* #__PURE__ */(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)( // we\'re doing this to avoid preconstruct\'s dead code elimination in this one case\n// because this module is primarily intended for the browser and node\n// but it\'s also required in react native and similar environments sometimes\n// and we could have a special build just for that\n// but this is much easier and the native packages\n// might use a different theme context in the future anyway\ntypeof HTMLElement !== \'undefined\' ? /* #__PURE__ */(0,_emotion_cache__WEBPACK_IMPORTED_MODULE_1__["default"])({\n key: \'css\'\n}) : null);\n\nif (false) {}\n\nvar CacheProvider = EmotionCacheContext.Provider;\nvar __unsafe_useEmotionCache = function useEmotionCache() {\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(EmotionCacheContext);\n};\n\nvar withEmotionCache = function withEmotionCache(func) {\n // $FlowFixMe\n return /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(function (props, ref) {\n // the cache will never be null in the browser\n var cache = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(EmotionCacheContext);\n return func(props, cache, ref);\n });\n};\n\nvar ThemeContext = /* #__PURE__ */(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({});\n\nif (false) {}\n\nvar useTheme = function useTheme() {\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(ThemeContext);\n};\n\nvar getTheme = function getTheme(outerTheme, theme) {\n if (typeof theme === \'function\') {\n var mergedTheme = theme(outerTheme);\n\n if (false) {}\n\n return mergedTheme;\n }\n\n if (false) {}\n\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__["default"])({}, outerTheme, theme);\n};\n\nvar createCacheWithTheme = /* #__PURE__ */(0,_emotion_weak_memoize__WEBPACK_IMPORTED_MODULE_3__["default"])(function (outerTheme) {\n return (0,_emotion_weak_memoize__WEBPACK_IMPORTED_MODULE_3__["default"])(function (theme) {\n return getTheme(outerTheme, theme);\n });\n});\nvar ThemeProvider = function ThemeProvider(props) {\n var theme = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(ThemeContext);\n\n if (props.theme !== theme) {\n theme = createCacheWithTheme(theme)(props.theme);\n }\n\n return /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(ThemeContext.Provider, {\n value: theme\n }, props.children);\n};\nfunction withTheme(Component) {\n var componentName = Component.displayName || Component.name || \'Component\';\n\n var render = function render(props, ref) {\n var theme = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(ThemeContext);\n return /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(Component, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__["default"])({\n theme: theme,\n ref: ref\n }, props));\n }; // $FlowFixMe\n\n\n var WithTheme = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(render);\n WithTheme.displayName = "WithTheme(" + componentName + ")";\n return (0,_isolated_hnrs_dist_emotion_react_isolated_hnrs_browser_esm_js__WEBPACK_IMPORTED_MODULE_6__["default"])(WithTheme, Component);\n}\n\nvar getFunctionNameFromStackTraceLine = function getFunctionNameFromStackTraceLine(line) {\n // V8\n var match = /^\\s+at\\s+([A-Za-z0-9$.]+)\\s/.exec(line);\n\n if (match) {\n // The match may be something like \'Object.createEmotionProps\'\n var parts = match[1].split(\'.\');\n return parts[parts.length - 1];\n } // Safari / Firefox\n\n\n match = /^([A-Za-z0-9$.]+)@/.exec(line);\n if (match) return match[1];\n return undefined;\n};\n\nvar internalReactFunctionNames = /* #__PURE__ */new Set([\'renderWithHooks\', \'processChild\', \'finishClassComponent\', \'renderToString\']); // These identifiers come from error stacks, so they have to be valid JS\n// identifiers, thus we only need to replace what is a valid character for JS,\n// but not for CSS.\n\nvar sanitizeIdentifier = function sanitizeIdentifier(identifier) {\n return identifier.replace(/\\$/g, \'-\');\n};\n\nvar getLabelFromStackTrace = function getLabelFromStackTrace(stackTrace) {\n if (!stackTrace) return undefined;\n var lines = stackTrace.split(\'\\n\');\n\n for (var i = 0; i < lines.length; i++) {\n var functionName = getFunctionNameFromStackTraceLine(lines[i]); // The first line of V8 stack traces is just "Error"\n\n if (!functionName) continue; // If we reach one of these, we have gone too far and should quit\n\n if (internalReactFunctionNames.has(functionName)) break; // The component name is the first function in the stack that starts with an\n // uppercase letter\n\n if (/^[A-Z]/.test(functionName)) return sanitizeIdentifier(functionName);\n }\n\n return undefined;\n};\n\nvar typePropName = \'__EMOTION_TYPE_PLEASE_DO_NOT_USE__\';\nvar labelPropName = \'__EMOTION_LABEL_PLEASE_DO_NOT_USE__\';\nvar createEmotionProps = function createEmotionProps(type, props) {\n if (false) {}\n\n var newProps = {};\n\n for (var key in props) {\n if (hasOwnProperty.call(props, key)) {\n newProps[key] = props[key];\n }\n }\n\n newProps[typePropName] = type; // For performance, only call getLabelFromStackTrace in development and when\n // the label hasn\'t already been computed\n\n if (false) { var label; }\n\n return newProps;\n};\n\nvar Noop = function Noop() {\n return null;\n};\n\nvar Emotion = /* #__PURE__ */withEmotionCache(function (props, cache, ref) {\n var cssProp = props.css; // so that using `css` from `emotion` and passing the result to the css prop works\n // not passing the registered cache to serializeStyles because it would\n // make certain babel optimisations not possible\n\n if (typeof cssProp === \'string\' && cache.registered[cssProp] !== undefined) {\n cssProp = cache.registered[cssProp];\n }\n\n var type = props[typePropName];\n var registeredStyles = [cssProp];\n var className = \'\';\n\n if (typeof props.className === \'string\') {\n className = (0,_emotion_utils__WEBPACK_IMPORTED_MODULE_4__.getRegisteredStyles)(cache.registered, registeredStyles, props.className);\n } else if (props.className != null) {\n className = props.className + " ";\n }\n\n var serialized = (0,_emotion_serialize__WEBPACK_IMPORTED_MODULE_5__.serializeStyles)(registeredStyles, undefined, (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(ThemeContext));\n\n if (false) { var labelFromStack; }\n\n var rules = (0,_emotion_utils__WEBPACK_IMPORTED_MODULE_4__.insertStyles)(cache, serialized, typeof type === \'string\');\n className += cache.key + "-" + serialized.name;\n var newProps = {};\n\n for (var key in props) {\n if (hasOwnProperty.call(props, key) && key !== \'css\' && key !== typePropName && ( true || 0)) {\n newProps[key] = props[key];\n }\n }\n\n newProps.ref = ref;\n newProps.className = className;\n var ele = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(type, newProps);\n var possiblyStyleElement = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(Noop, null);\n\n\n return /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, possiblyStyleElement, ele);\n});\n\nif (false) {}\n\n\n\n\n//# sourceURL=webpack://frontend/./node_modules/@emotion/react/dist/emotion-element-699e6908.browser.esm.js?')},"./node_modules/@emotion/react/dist/emotion-react.browser.esm.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "CacheProvider": () => (/* reexport safe */ _emotion_element_699e6908_browser_esm_js__WEBPACK_IMPORTED_MODULE_2__.C),\n/* harmony export */ "ThemeContext": () => (/* reexport safe */ _emotion_element_699e6908_browser_esm_js__WEBPACK_IMPORTED_MODULE_2__.T),\n/* harmony export */ "ThemeProvider": () => (/* reexport safe */ _emotion_element_699e6908_browser_esm_js__WEBPACK_IMPORTED_MODULE_2__.a),\n/* harmony export */ "__unsafe_useEmotionCache": () => (/* reexport safe */ _emotion_element_699e6908_browser_esm_js__WEBPACK_IMPORTED_MODULE_2__._),\n/* harmony export */ "useTheme": () => (/* reexport safe */ _emotion_element_699e6908_browser_esm_js__WEBPACK_IMPORTED_MODULE_2__.u),\n/* harmony export */ "withEmotionCache": () => (/* reexport safe */ _emotion_element_699e6908_browser_esm_js__WEBPACK_IMPORTED_MODULE_2__.w),\n/* harmony export */ "withTheme": () => (/* reexport safe */ _emotion_element_699e6908_browser_esm_js__WEBPACK_IMPORTED_MODULE_2__.b),\n/* harmony export */ "ClassNames": () => (/* binding */ ClassNames),\n/* harmony export */ "Global": () => (/* binding */ Global),\n/* harmony export */ "createElement": () => (/* binding */ jsx),\n/* harmony export */ "css": () => (/* binding */ css),\n/* harmony export */ "jsx": () => (/* binding */ jsx),\n/* harmony export */ "keyframes": () => (/* binding */ keyframes)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");\n/* harmony import */ var _emotion_cache__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @emotion/cache */ "./node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js");\n/* harmony import */ var _emotion_element_699e6908_browser_esm_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./emotion-element-699e6908.browser.esm.js */ "./node_modules/@emotion/react/dist/emotion-element-699e6908.browser.esm.js");\n/* harmony import */ var _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js");\n/* harmony import */ var _emotion_weak_memoize__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @emotion/weak-memoize */ "./node_modules/@emotion/weak-memoize/dist/weak-memoize.browser.esm.js");\n/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! hoist-non-react-statics */ "./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js");\n/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _emotion_utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @emotion/utils */ "./node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js");\n/* harmony import */ var _emotion_serialize__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @emotion/serialize */ "./node_modules/@emotion/serialize/dist/emotion-serialize.browser.esm.js");\n/* harmony import */ var _emotion_sheet__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @emotion/sheet */ "./node_modules/@emotion/sheet/dist/emotion-sheet.browser.esm.js");\n\n\n\n\n\n\n\n\n\n\n\n\nvar pkg = {\n\tname: "@emotion/react",\n\tversion: "11.7.1",\n\tmain: "dist/emotion-react.cjs.js",\n\tmodule: "dist/emotion-react.esm.js",\n\tbrowser: {\n\t\t"./dist/emotion-react.cjs.js": "./dist/emotion-react.browser.cjs.js",\n\t\t"./dist/emotion-react.esm.js": "./dist/emotion-react.browser.esm.js"\n\t},\n\ttypes: "types/index.d.ts",\n\tfiles: [\n\t\t"src",\n\t\t"dist",\n\t\t"jsx-runtime",\n\t\t"jsx-dev-runtime",\n\t\t"_isolated-hnrs",\n\t\t"types/*.d.ts",\n\t\t"macro.js",\n\t\t"macro.d.ts",\n\t\t"macro.js.flow"\n\t],\n\tsideEffects: false,\n\tauthor: "mitchellhamilton ",\n\tlicense: "MIT",\n\tscripts: {\n\t\t"test:typescript": "dtslint types"\n\t},\n\tdependencies: {\n\t\t"@babel/runtime": "^7.13.10",\n\t\t"@emotion/cache": "^11.7.1",\n\t\t"@emotion/serialize": "^1.0.2",\n\t\t"@emotion/sheet": "^1.1.0",\n\t\t"@emotion/utils": "^1.0.0",\n\t\t"@emotion/weak-memoize": "^0.2.5",\n\t\t"hoist-non-react-statics": "^3.3.1"\n\t},\n\tpeerDependencies: {\n\t\t"@babel/core": "^7.0.0",\n\t\treact: ">=16.8.0"\n\t},\n\tpeerDependenciesMeta: {\n\t\t"@babel/core": {\n\t\t\toptional: true\n\t\t},\n\t\t"@types/react": {\n\t\t\toptional: true\n\t\t}\n\t},\n\tdevDependencies: {\n\t\t"@babel/core": "^7.13.10",\n\t\t"@emotion/css": "11.7.1",\n\t\t"@emotion/css-prettifier": "1.0.1",\n\t\t"@emotion/server": "11.4.0",\n\t\t"@emotion/styled": "11.6.0",\n\t\t"@types/react": "^16.9.11",\n\t\tdtslint: "^0.3.0",\n\t\t"html-tag-names": "^1.1.2",\n\t\treact: "16.14.0",\n\t\t"svg-tag-names": "^1.1.1"\n\t},\n\trepository: "https://github.com/emotion-js/emotion/tree/main/packages/react",\n\tpublishConfig: {\n\t\taccess: "public"\n\t},\n\t"umd:main": "dist/emotion-react.umd.min.js",\n\tpreconstruct: {\n\t\tentrypoints: [\n\t\t\t"./index.js",\n\t\t\t"./jsx-runtime.js",\n\t\t\t"./jsx-dev-runtime.js",\n\t\t\t"./_isolated-hnrs.js"\n\t\t],\n\t\tumdName: "emotionReact"\n\t}\n};\n\nvar jsx = function jsx(type, props) {\n var args = arguments;\n\n if (props == null || !_emotion_element_699e6908_browser_esm_js__WEBPACK_IMPORTED_MODULE_2__.h.call(props, \'css\')) {\n // $FlowFixMe\n return react__WEBPACK_IMPORTED_MODULE_0__.createElement.apply(undefined, args);\n }\n\n var argsLength = args.length;\n var createElementArgArray = new Array(argsLength);\n createElementArgArray[0] = _emotion_element_699e6908_browser_esm_js__WEBPACK_IMPORTED_MODULE_2__.E;\n createElementArgArray[1] = (0,_emotion_element_699e6908_browser_esm_js__WEBPACK_IMPORTED_MODULE_2__.c)(type, props);\n\n for (var i = 2; i < argsLength; i++) {\n createElementArgArray[i] = args[i];\n } // $FlowFixMe\n\n\n return react__WEBPACK_IMPORTED_MODULE_0__.createElement.apply(null, createElementArgArray);\n};\n\nvar warnedAboutCssPropForGlobal = false; // maintain place over rerenders.\n// initial render from browser, insertBefore context.sheet.tags[0] or if a style hasn\'t been inserted there yet, appendChild\n// initial client-side render from SSR, use place of hydrating tag\n\nvar Global = /* #__PURE__ */(0,_emotion_element_699e6908_browser_esm_js__WEBPACK_IMPORTED_MODULE_2__.w)(function (props, cache) {\n if (false) {}\n\n var styles = props.styles;\n var serialized = (0,_emotion_serialize__WEBPACK_IMPORTED_MODULE_7__.serializeStyles)([styles], undefined, (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_emotion_element_699e6908_browser_esm_js__WEBPACK_IMPORTED_MODULE_2__.T));\n // but it is based on a constant that will never change at runtime\n // it\'s effectively like having two implementations and switching them out\n // so it\'s not actually breaking anything\n\n\n var sheetRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect)(function () {\n var key = cache.key + "-global";\n var sheet = new _emotion_sheet__WEBPACK_IMPORTED_MODULE_8__.StyleSheet({\n key: key,\n nonce: cache.sheet.nonce,\n container: cache.sheet.container,\n speedy: cache.sheet.isSpeedy\n });\n var rehydrating = false; // $FlowFixMe\n\n var node = document.querySelector("style[data-emotion=\\"" + key + " " + serialized.name + "\\"]");\n\n if (cache.sheet.tags.length) {\n sheet.before = cache.sheet.tags[0];\n }\n\n if (node !== null) {\n rehydrating = true; // clear the hash so this node won\'t be recognizable as rehydratable by other s\n\n node.setAttribute(\'data-emotion\', key);\n sheet.hydrate([node]);\n }\n\n sheetRef.current = [sheet, rehydrating];\n return function () {\n sheet.flush();\n };\n }, [cache]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect)(function () {\n var sheetRefCurrent = sheetRef.current;\n var sheet = sheetRefCurrent[0],\n rehydrating = sheetRefCurrent[1];\n\n if (rehydrating) {\n sheetRefCurrent[1] = false;\n return;\n }\n\n if (serialized.next !== undefined) {\n // insert keyframes\n (0,_emotion_utils__WEBPACK_IMPORTED_MODULE_6__.insertStyles)(cache, serialized.next, true);\n }\n\n if (sheet.tags.length) {\n // if this doesn\'t exist then it will be null so the style element will be appended\n var element = sheet.tags[sheet.tags.length - 1].nextElementSibling;\n sheet.before = element;\n sheet.flush();\n }\n\n cache.insert("", serialized, sheet, false);\n }, [cache, serialized.name]);\n return null;\n});\n\nif (false) {}\n\nfunction css() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return (0,_emotion_serialize__WEBPACK_IMPORTED_MODULE_7__.serializeStyles)(args);\n}\n\nvar keyframes = function keyframes() {\n var insertable = css.apply(void 0, arguments);\n var name = "animation-" + insertable.name; // $FlowFixMe\n\n return {\n name: name,\n styles: "@keyframes " + name + "{" + insertable.styles + "}",\n anim: 1,\n toString: function toString() {\n return "_EMO_" + this.name + "_" + this.styles + "_EMO_";\n }\n };\n};\n\nvar classnames = function classnames(args) {\n var len = args.length;\n var i = 0;\n var cls = \'\';\n\n for (; i < len; i++) {\n var arg = args[i];\n if (arg == null) continue;\n var toAdd = void 0;\n\n switch (typeof arg) {\n case \'boolean\':\n break;\n\n case \'object\':\n {\n if (Array.isArray(arg)) {\n toAdd = classnames(arg);\n } else {\n if (false) {}\n\n toAdd = \'\';\n\n for (var k in arg) {\n if (arg[k] && k) {\n toAdd && (toAdd += \' \');\n toAdd += k;\n }\n }\n }\n\n break;\n }\n\n default:\n {\n toAdd = arg;\n }\n }\n\n if (toAdd) {\n cls && (cls += \' \');\n cls += toAdd;\n }\n }\n\n return cls;\n};\n\nfunction merge(registered, css, className) {\n var registeredStyles = [];\n var rawClassName = (0,_emotion_utils__WEBPACK_IMPORTED_MODULE_6__.getRegisteredStyles)(registered, registeredStyles, className);\n\n if (registeredStyles.length < 2) {\n return className;\n }\n\n return rawClassName + css(registeredStyles);\n}\n\nvar Noop = function Noop() {\n return null;\n};\n\nvar ClassNames = /* #__PURE__ */(0,_emotion_element_699e6908_browser_esm_js__WEBPACK_IMPORTED_MODULE_2__.w)(function (props, cache) {\n var hasRendered = false;\n\n var css = function css() {\n if (hasRendered && "production" !== \'production\') {}\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var serialized = (0,_emotion_serialize__WEBPACK_IMPORTED_MODULE_7__.serializeStyles)(args, cache.registered);\n\n {\n (0,_emotion_utils__WEBPACK_IMPORTED_MODULE_6__.insertStyles)(cache, serialized, false);\n }\n\n return cache.key + "-" + serialized.name;\n };\n\n var cx = function cx() {\n if (hasRendered && "production" !== \'production\') {}\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return merge(cache.registered, css, classnames(args));\n };\n\n var content = {\n css: css,\n cx: cx,\n theme: (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_emotion_element_699e6908_browser_esm_js__WEBPACK_IMPORTED_MODULE_2__.T)\n };\n var ele = props.children(content);\n hasRendered = true;\n var possiblyStyleElement = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(Noop, null);\n\n\n return /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, possiblyStyleElement, ele);\n});\n\nif (false) {}\n\nif (false) { var globalKey, globalContext, isJest, isBrowser; }\n\n\n\n\n//# sourceURL=webpack://frontend/./node_modules/@emotion/react/dist/emotion-react.browser.esm.js?')},"./node_modules/@emotion/serialize/dist/emotion-serialize.browser.esm.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"serializeStyles\": () => (/* binding */ serializeStyles)\n/* harmony export */ });\n/* harmony import */ var _emotion_hash__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @emotion/hash */ \"./node_modules/@emotion/hash/dist/hash.browser.esm.js\");\n/* harmony import */ var _emotion_unitless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @emotion/unitless */ \"./node_modules/@emotion/unitless/dist/unitless.browser.esm.js\");\n/* harmony import */ var _emotion_memoize__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @emotion/memoize */ \"./node_modules/@emotion/memoize/dist/emotion-memoize.browser.esm.js\");\n\n\n\n\nvar ILLEGAL_ESCAPE_SEQUENCE_ERROR = \"You have illegal escape sequence in your template literal, most likely inside content's property value.\\nBecause you write your CSS inside a JavaScript string you actually have to do double escaping, so for example \\\"content: '\\\\00d7';\\\" should become \\\"content: '\\\\\\\\00d7';\\\".\\nYou can read more about this here:\\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences\";\nvar UNDEFINED_AS_OBJECT_KEY_ERROR = \"You have passed in falsy value as style object's key (can happen when in example you pass unexported component as computed key).\";\nvar hyphenateRegex = /[A-Z]|^ms/g;\nvar animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g;\n\nvar isCustomProperty = function isCustomProperty(property) {\n return property.charCodeAt(1) === 45;\n};\n\nvar isProcessableValue = function isProcessableValue(value) {\n return value != null && typeof value !== 'boolean';\n};\n\nvar processStyleName = /* #__PURE__ */(0,_emotion_memoize__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(function (styleName) {\n return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, '-$&').toLowerCase();\n});\n\nvar processStyleValue = function processStyleValue(key, value) {\n switch (key) {\n case 'animation':\n case 'animationName':\n {\n if (typeof value === 'string') {\n return value.replace(animationRegex, function (match, p1, p2) {\n cursor = {\n name: p1,\n styles: p2,\n next: cursor\n };\n return p1;\n });\n }\n }\n }\n\n if (_emotion_unitless__WEBPACK_IMPORTED_MODULE_1__[\"default\"][key] !== 1 && !isCustomProperty(key) && typeof value === 'number' && value !== 0) {\n return value + 'px';\n }\n\n return value;\n};\n\nif (false) { var hyphenatedCache, hyphenPattern, msPattern, oldProcessStyleValue, contentValues, contentValuePattern; }\n\nfunction handleInterpolation(mergedProps, registered, interpolation) {\n if (interpolation == null) {\n return '';\n }\n\n if (interpolation.__emotion_styles !== undefined) {\n if (false) {}\n\n return interpolation;\n }\n\n switch (typeof interpolation) {\n case 'boolean':\n {\n return '';\n }\n\n case 'object':\n {\n if (interpolation.anim === 1) {\n cursor = {\n name: interpolation.name,\n styles: interpolation.styles,\n next: cursor\n };\n return interpolation.name;\n }\n\n if (interpolation.styles !== undefined) {\n var next = interpolation.next;\n\n if (next !== undefined) {\n // not the most efficient thing ever but this is a pretty rare case\n // and there will be very few iterations of this generally\n while (next !== undefined) {\n cursor = {\n name: next.name,\n styles: next.styles,\n next: cursor\n };\n next = next.next;\n }\n }\n\n var styles = interpolation.styles + \";\";\n\n if (false) {}\n\n return styles;\n }\n\n return createStringFromObject(mergedProps, registered, interpolation);\n }\n\n case 'function':\n {\n if (mergedProps !== undefined) {\n var previousCursor = cursor;\n var result = interpolation(mergedProps);\n cursor = previousCursor;\n return handleInterpolation(mergedProps, registered, result);\n } else if (false) {}\n\n break;\n }\n\n case 'string':\n if (false) { var replaced, matched; }\n\n break;\n } // finalize string values (regular strings and functions interpolated into css calls)\n\n\n if (registered == null) {\n return interpolation;\n }\n\n var cached = registered[interpolation];\n return cached !== undefined ? cached : interpolation;\n}\n\nfunction createStringFromObject(mergedProps, registered, obj) {\n var string = '';\n\n if (Array.isArray(obj)) {\n for (var i = 0; i < obj.length; i++) {\n string += handleInterpolation(mergedProps, registered, obj[i]) + \";\";\n }\n } else {\n for (var _key in obj) {\n var value = obj[_key];\n\n if (typeof value !== 'object') {\n if (registered != null && registered[value] !== undefined) {\n string += _key + \"{\" + registered[value] + \"}\";\n } else if (isProcessableValue(value)) {\n string += processStyleName(_key) + \":\" + processStyleValue(_key, value) + \";\";\n }\n } else {\n if (_key === 'NO_COMPONENT_SELECTOR' && \"production\" !== 'production') {}\n\n if (Array.isArray(value) && typeof value[0] === 'string' && (registered == null || registered[value[0]] === undefined)) {\n for (var _i = 0; _i < value.length; _i++) {\n if (isProcessableValue(value[_i])) {\n string += processStyleName(_key) + \":\" + processStyleValue(_key, value[_i]) + \";\";\n }\n }\n } else {\n var interpolated = handleInterpolation(mergedProps, registered, value);\n\n switch (_key) {\n case 'animation':\n case 'animationName':\n {\n string += processStyleName(_key) + \":\" + interpolated + \";\";\n break;\n }\n\n default:\n {\n if (false) {}\n\n string += _key + \"{\" + interpolated + \"}\";\n }\n }\n }\n }\n }\n }\n\n return string;\n}\n\nvar labelPattern = /label:\\s*([^\\s;\\n{]+)\\s*(;|$)/g;\nvar sourceMapPattern;\n\nif (false) {} // this is the cursor for keyframes\n// keyframes are stored on the SerializedStyles object as a linked list\n\n\nvar cursor;\nvar serializeStyles = function serializeStyles(args, registered, mergedProps) {\n if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null && args[0].styles !== undefined) {\n return args[0];\n }\n\n var stringMode = true;\n var styles = '';\n cursor = undefined;\n var strings = args[0];\n\n if (strings == null || strings.raw === undefined) {\n stringMode = false;\n styles += handleInterpolation(mergedProps, registered, strings);\n } else {\n if (false) {}\n\n styles += strings[0];\n } // we start at 1 since we've already handled the first arg\n\n\n for (var i = 1; i < args.length; i++) {\n styles += handleInterpolation(mergedProps, registered, args[i]);\n\n if (stringMode) {\n if (false) {}\n\n styles += strings[i];\n }\n }\n\n var sourceMap;\n\n if (false) {} // using a global regex with .exec is stateful so lastIndex has to be reset each time\n\n\n labelPattern.lastIndex = 0;\n var identifierName = '';\n var match; // https://esbench.com/bench/5b809c2cf2949800a0f61fb5\n\n while ((match = labelPattern.exec(styles)) !== null) {\n identifierName += '-' + // $FlowFixMe we know it's not null\n match[1];\n }\n\n var name = (0,_emotion_hash__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(styles) + identifierName;\n\n if (false) {}\n\n return {\n name: name,\n styles: styles,\n next: cursor\n };\n};\n\n\n\n\n//# sourceURL=webpack://frontend/./node_modules/@emotion/serialize/dist/emotion-serialize.browser.esm.js?")},"./node_modules/@emotion/sheet/dist/emotion-sheet.browser.esm.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"StyleSheet\": () => (/* binding */ StyleSheet)\n/* harmony export */ });\n/*\n\nBased off glamor's StyleSheet, thanks Sunil ❤️\n\nhigh performance StyleSheet for css-in-js systems\n\n- uses multiple style tags behind the scenes for millions of rules\n- uses `insertRule` for appending in production for *much* faster performance\n\n// usage\n\nimport { StyleSheet } from '@emotion/sheet'\n\nlet styleSheet = new StyleSheet({ key: '', container: document.head })\n\nstyleSheet.insert('#box { border: 1px solid red; }')\n- appends a css rule into the stylesheet\n\nstyleSheet.flush()\n- empties the stylesheet of all its contents\n\n*/\n// $FlowFixMe\nfunction sheetForTag(tag) {\n if (tag.sheet) {\n // $FlowFixMe\n return tag.sheet;\n } // this weirdness brought to you by firefox\n\n /* istanbul ignore next */\n\n\n for (var i = 0; i < document.styleSheets.length; i++) {\n if (document.styleSheets[i].ownerNode === tag) {\n // $FlowFixMe\n return document.styleSheets[i];\n }\n }\n}\n\nfunction createStyleElement(options) {\n var tag = document.createElement('style');\n tag.setAttribute('data-emotion', options.key);\n\n if (options.nonce !== undefined) {\n tag.setAttribute('nonce', options.nonce);\n }\n\n tag.appendChild(document.createTextNode(''));\n tag.setAttribute('data-s', '');\n return tag;\n}\n\nvar StyleSheet = /*#__PURE__*/function () {\n function StyleSheet(options) {\n var _this = this;\n\n this._insertTag = function (tag) {\n var before;\n\n if (_this.tags.length === 0) {\n if (_this.insertionPoint) {\n before = _this.insertionPoint.nextSibling;\n } else if (_this.prepend) {\n before = _this.container.firstChild;\n } else {\n before = _this.before;\n }\n } else {\n before = _this.tags[_this.tags.length - 1].nextSibling;\n }\n\n _this.container.insertBefore(tag, before);\n\n _this.tags.push(tag);\n };\n\n this.isSpeedy = options.speedy === undefined ? \"production\" === 'production' : options.speedy;\n this.tags = [];\n this.ctr = 0;\n this.nonce = options.nonce; // key is the value of the data-emotion attribute, it's used to identify different sheets\n\n this.key = options.key;\n this.container = options.container;\n this.prepend = options.prepend;\n this.insertionPoint = options.insertionPoint;\n this.before = null;\n }\n\n var _proto = StyleSheet.prototype;\n\n _proto.hydrate = function hydrate(nodes) {\n nodes.forEach(this._insertTag);\n };\n\n _proto.insert = function insert(rule) {\n // the max length is how many rules we have per style tag, it's 65000 in speedy mode\n // it's 1 in dev because we insert source maps that map a single rule to a location\n // and you can only have one source map per style tag\n if (this.ctr % (this.isSpeedy ? 65000 : 1) === 0) {\n this._insertTag(createStyleElement(this));\n }\n\n var tag = this.tags[this.tags.length - 1];\n\n if (false) { var isImportRule; }\n\n if (this.isSpeedy) {\n var sheet = sheetForTag(tag);\n\n try {\n // this is the ultrafast version, works across browsers\n // the big drawback is that the css won't be editable in devtools\n sheet.insertRule(rule, sheet.cssRules.length);\n } catch (e) {\n if (false) {}\n }\n } else {\n tag.appendChild(document.createTextNode(rule));\n }\n\n this.ctr++;\n };\n\n _proto.flush = function flush() {\n // $FlowFixMe\n this.tags.forEach(function (tag) {\n return tag.parentNode && tag.parentNode.removeChild(tag);\n });\n this.tags = [];\n this.ctr = 0;\n\n if (false) {}\n };\n\n return StyleSheet;\n}();\n\n\n\n\n//# sourceURL=webpack://frontend/./node_modules/@emotion/sheet/dist/emotion-sheet.browser.esm.js?")},"./node_modules/@emotion/styled/base/dist/emotion-styled-base.browser.esm.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");\n/* harmony import */ var _emotion_is_prop_valid__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @emotion/is-prop-valid */ "./node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.browser.esm.js");\n/* harmony import */ var _emotion_react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @emotion/react */ "./node_modules/@emotion/react/dist/emotion-element-699e6908.browser.esm.js");\n/* harmony import */ var _emotion_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @emotion/utils */ "./node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js");\n/* harmony import */ var _emotion_serialize__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @emotion/serialize */ "./node_modules/@emotion/serialize/dist/emotion-serialize.browser.esm.js");\n\n\n\n\n\n\n\nvar testOmitPropsOnStringTag = _emotion_is_prop_valid__WEBPACK_IMPORTED_MODULE_2__["default"];\n\nvar testOmitPropsOnComponent = function testOmitPropsOnComponent(key) {\n return key !== \'theme\';\n};\n\nvar getDefaultShouldForwardProp = function getDefaultShouldForwardProp(tag) {\n return typeof tag === \'string\' && // 96 is one less than the char code\n // for "a" so this is checking that\n // it\'s a lowercase character\n tag.charCodeAt(0) > 96 ? testOmitPropsOnStringTag : testOmitPropsOnComponent;\n};\nvar composeShouldForwardProps = function composeShouldForwardProps(tag, options, isReal) {\n var shouldForwardProp;\n\n if (options) {\n var optionsShouldForwardProp = options.shouldForwardProp;\n shouldForwardProp = tag.__emotion_forwardProp && optionsShouldForwardProp ? function (propName) {\n return tag.__emotion_forwardProp(propName) && optionsShouldForwardProp(propName);\n } : optionsShouldForwardProp;\n }\n\n if (typeof shouldForwardProp !== \'function\' && isReal) {\n shouldForwardProp = tag.__emotion_forwardProp;\n }\n\n return shouldForwardProp;\n};\n\nvar ILLEGAL_ESCAPE_SEQUENCE_ERROR = "You have illegal escape sequence in your template literal, most likely inside content\'s property value.\\nBecause you write your CSS inside a JavaScript string you actually have to do double escaping, so for example \\"content: \'\\\\00d7\';\\" should become \\"content: \'\\\\\\\\00d7\';\\".\\nYou can read more about this here:\\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences";\n\nvar Noop = function Noop() {\n return null;\n};\n\nvar createStyled = function createStyled(tag, options) {\n if (false) {}\n\n var isReal = tag.__emotion_real === tag;\n var baseTag = isReal && tag.__emotion_base || tag;\n var identifierName;\n var targetClassName;\n\n if (options !== undefined) {\n identifierName = options.label;\n targetClassName = options.target;\n }\n\n var shouldForwardProp = composeShouldForwardProps(tag, options, isReal);\n var defaultShouldForwardProp = shouldForwardProp || getDefaultShouldForwardProp(baseTag);\n var shouldUseAs = !defaultShouldForwardProp(\'as\');\n return function () {\n var args = arguments;\n var styles = isReal && tag.__emotion_styles !== undefined ? tag.__emotion_styles.slice(0) : [];\n\n if (identifierName !== undefined) {\n styles.push("label:" + identifierName + ";");\n }\n\n if (args[0] == null || args[0].raw === undefined) {\n styles.push.apply(styles, args);\n } else {\n if (false) {}\n\n styles.push(args[0][0]);\n var len = args.length;\n var i = 1;\n\n for (; i < len; i++) {\n if (false) {}\n\n styles.push(args[i], args[0][i]);\n }\n } // $FlowFixMe: we need to cast StatelessFunctionalComponent to our PrivateStyledComponent class\n\n\n var Styled = (0,_emotion_react__WEBPACK_IMPORTED_MODULE_5__.w)(function (props, cache, ref) {\n var finalTag = shouldUseAs && props.as || baseTag;\n var className = \'\';\n var classInterpolations = [];\n var mergedProps = props;\n\n if (props.theme == null) {\n mergedProps = {};\n\n for (var key in props) {\n mergedProps[key] = props[key];\n }\n\n mergedProps.theme = (0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)(_emotion_react__WEBPACK_IMPORTED_MODULE_5__.T);\n }\n\n if (typeof props.className === \'string\') {\n className = (0,_emotion_utils__WEBPACK_IMPORTED_MODULE_3__.getRegisteredStyles)(cache.registered, classInterpolations, props.className);\n } else if (props.className != null) {\n className = props.className + " ";\n }\n\n var serialized = (0,_emotion_serialize__WEBPACK_IMPORTED_MODULE_4__.serializeStyles)(styles.concat(classInterpolations), cache.registered, mergedProps);\n var rules = (0,_emotion_utils__WEBPACK_IMPORTED_MODULE_3__.insertStyles)(cache, serialized, typeof finalTag === \'string\');\n className += cache.key + "-" + serialized.name;\n\n if (targetClassName !== undefined) {\n className += " " + targetClassName;\n }\n\n var finalShouldForwardProp = shouldUseAs && shouldForwardProp === undefined ? getDefaultShouldForwardProp(finalTag) : defaultShouldForwardProp;\n var newProps = {};\n\n for (var _key in props) {\n if (shouldUseAs && _key === \'as\') continue;\n\n if ( // $FlowFixMe\n finalShouldForwardProp(_key)) {\n newProps[_key] = props[_key];\n }\n }\n\n newProps.className = className;\n newProps.ref = ref;\n var ele = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_1__.createElement)(finalTag, newProps);\n var possiblyStyleElement = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_1__.createElement)(Noop, null);\n\n\n return /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_1__.createElement)(react__WEBPACK_IMPORTED_MODULE_1__.Fragment, null, possiblyStyleElement, ele);\n });\n Styled.displayName = identifierName !== undefined ? identifierName : "Styled(" + (typeof baseTag === \'string\' ? baseTag : baseTag.displayName || baseTag.name || \'Component\') + ")";\n Styled.defaultProps = tag.defaultProps;\n Styled.__emotion_real = Styled;\n Styled.__emotion_base = baseTag;\n Styled.__emotion_styles = styles;\n Styled.__emotion_forwardProp = shouldForwardProp;\n Object.defineProperty(Styled, \'toString\', {\n value: function value() {\n if (targetClassName === undefined && "production" !== \'production\') {} // $FlowFixMe: coerce undefined to string\n\n\n return "." + targetClassName;\n }\n });\n\n Styled.withComponent = function (nextTag, nextOptions) {\n return createStyled(nextTag, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, options, nextOptions, {\n shouldForwardProp: composeShouldForwardProps(Styled, nextOptions, true)\n })).apply(void 0, styles);\n };\n\n return Styled;\n };\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (createStyled);\n\n\n//# sourceURL=webpack://frontend/./node_modules/@emotion/styled/base/dist/emotion-styled-base.browser.esm.js?')},"./node_modules/@emotion/styled/dist/emotion-styled.browser.esm.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/extends */ \"./node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var _emotion_is_prop_valid__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @emotion/is-prop-valid */ \"./node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.browser.esm.js\");\n/* harmony import */ var _base_dist_emotion_styled_base_browser_esm_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../base/dist/emotion-styled-base.browser.esm.js */ \"./node_modules/@emotion/styled/base/dist/emotion-styled-base.browser.esm.js\");\n/* harmony import */ var _emotion_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @emotion/utils */ \"./node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js\");\n/* harmony import */ var _emotion_serialize__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @emotion/serialize */ \"./node_modules/@emotion/serialize/dist/emotion-serialize.browser.esm.js\");\n\n\n\n\n\n\n\n\nvar tags = ['a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b', 'base', 'bdi', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'cite', 'code', 'col', 'colgroup', 'data', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'keygen', 'label', 'legend', 'li', 'link', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meta', 'meter', 'nav', 'noscript', 'object', 'ol', 'optgroup', 'option', 'output', 'p', 'param', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'script', 'section', 'select', 'small', 'source', 'span', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'track', 'u', 'ul', 'var', 'video', 'wbr', // SVG\n'circle', 'clipPath', 'defs', 'ellipse', 'foreignObject', 'g', 'image', 'line', 'linearGradient', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'svg', 'text', 'tspan'];\n\nvar newStyled = _base_dist_emotion_styled_base_browser_esm_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].bind();\ntags.forEach(function (tagName) {\n // $FlowFixMe: we can ignore this because its exposed type is defined by the CreateStyled type\n newStyled[tagName] = newStyled(tagName);\n});\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (newStyled);\n\n\n//# sourceURL=webpack://frontend/./node_modules/@emotion/styled/dist/emotion-styled.browser.esm.js?")},"./node_modules/@emotion/unitless/dist/unitless.browser.esm.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar unitlessKeys = {\n animationIterationCount: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (unitlessKeys);\n\n\n//# sourceURL=webpack://frontend/./node_modules/@emotion/unitless/dist/unitless.browser.esm.js?')},"./node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "getRegisteredStyles": () => (/* binding */ getRegisteredStyles),\n/* harmony export */ "insertStyles": () => (/* binding */ insertStyles)\n/* harmony export */ });\nvar isBrowser = "object" !== \'undefined\';\nfunction getRegisteredStyles(registered, registeredStyles, classNames) {\n var rawClassName = \'\';\n classNames.split(\' \').forEach(function (className) {\n if (registered[className] !== undefined) {\n registeredStyles.push(registered[className] + ";");\n } else {\n rawClassName += className + " ";\n }\n });\n return rawClassName;\n}\nvar insertStyles = function insertStyles(cache, serialized, isStringTag) {\n var className = cache.key + "-" + serialized.name;\n\n if ( // we only need to add the styles to the registered cache if the\n // class name could be used further down\n // the tree but if it\'s a string tag, we know it won\'t\n // so we don\'t have to add it to registered cache.\n // this improves memory usage since we can avoid storing the whole style string\n (isStringTag === false || // we need to always store it if we\'re in compat mode and\n // in node since emotion-server relies on whether a style is in\n // the registered cache to know whether a style is global or not\n // also, note that this check will be dead code eliminated in the browser\n isBrowser === false ) && cache.registered[className] === undefined) {\n cache.registered[className] = serialized.styles;\n }\n\n if (cache.inserted[serialized.name] === undefined) {\n var current = serialized;\n\n do {\n var maybeStyles = cache.insert(serialized === current ? "." + className : \'\', current, cache.sheet, true);\n\n current = current.next;\n } while (current !== undefined);\n }\n};\n\n\n\n\n//# sourceURL=webpack://frontend/./node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js?')},"./node_modules/@emotion/weak-memoize/dist/weak-memoize.browser.esm.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar weakMemoize = function weakMemoize(func) {\n // $FlowFixMe flow doesn\'t include all non-primitive types as allowed for weakmaps\n var cache = new WeakMap();\n return function (arg) {\n if (cache.has(arg)) {\n // $FlowFixMe\n return cache.get(arg);\n }\n\n var ret = func(arg);\n cache.set(arg, ret);\n return ret;\n };\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (weakMemoize);\n\n\n//# sourceURL=webpack://frontend/./node_modules/@emotion/weak-memoize/dist/weak-memoize.browser.esm.js?')},"./node_modules/@material-ui/core/colors/common.js":(__unused_webpack_module,exports)=>{"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", ({\n value: true\n}));\nexports["default"] = void 0;\nvar common = {\n black: \'#000\',\n white: \'#fff\'\n};\nvar _default = common;\nexports["default"] = _default;\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/colors/common.js?')},"./node_modules/@material-ui/core/colors/grey.js":(__unused_webpack_module,exports)=>{"use strict";eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports[\"default\"] = void 0;\nvar grey = {\n 50: '#fafafa',\n 100: '#f5f5f5',\n 200: '#eeeeee',\n 300: '#e0e0e0',\n 400: '#bdbdbd',\n 500: '#9e9e9e',\n 600: '#757575',\n 700: '#616161',\n 800: '#424242',\n 900: '#212121',\n A100: '#d5d5d5',\n A200: '#aaaaaa',\n A400: '#303030',\n A700: '#616161'\n};\nvar _default = grey;\nexports[\"default\"] = _default;\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/colors/grey.js?")},"./node_modules/@material-ui/core/esm/CircularProgress/CircularProgress.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "styles": () => (/* binding */ styles),\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! clsx */ "./node_modules/clsx/dist/clsx.m.js");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../styles/withStyles */ "./node_modules/@material-ui/core/esm/styles/withStyles.js");\n/* harmony import */ var _utils_capitalize__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/capitalize */ "./node_modules/@material-ui/core/esm/utils/capitalize.js");\n\n\n\n\n\n\n\n\nvar SIZE = 44;\nvar styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n display: \'inline-block\'\n },\n\n /* Styles applied to the root element if `variant="static"`. */\n static: {\n transition: theme.transitions.create(\'transform\')\n },\n\n /* Styles applied to the root element if `variant="indeterminate"`. */\n indeterminate: {\n animation: \'$circular-rotate 1.4s linear infinite\'\n },\n\n /* Styles applied to the root element if `variant="determinate"`. */\n determinate: {\n transition: theme.transitions.create(\'transform\')\n },\n\n /* Styles applied to the root element if `color="primary"`. */\n colorPrimary: {\n color: theme.palette.primary.main\n },\n\n /* Styles applied to the root element if `color="secondary"`. */\n colorSecondary: {\n color: theme.palette.secondary.main\n },\n\n /* Styles applied to the `svg` element. */\n svg: {\n display: \'block\' // Keeps the progress centered\n\n },\n\n /* Styles applied to the `circle` svg path. */\n circle: {\n stroke: \'currentColor\' // Use butt to follow the specification, by chance, it\'s already the default CSS value.\n // strokeLinecap: \'butt\',\n\n },\n\n /* Styles applied to the `circle` svg path if `variant="static"`. */\n circleStatic: {\n transition: theme.transitions.create(\'stroke-dashoffset\')\n },\n\n /* Styles applied to the `circle` svg path if `variant="indeterminate"`. */\n circleIndeterminate: {\n animation: \'$circular-dash 1.4s ease-in-out infinite\',\n // Some default value that looks fine waiting for the animation to kicks in.\n strokeDasharray: \'80px, 200px\',\n strokeDashoffset: \'0px\' // Add the unit to fix a Edge 16 and below bug.\n\n },\n\n /* Styles applied to the `circle` svg path if `variant="determinate"`. */\n circleDeterminate: {\n transition: theme.transitions.create(\'stroke-dashoffset\')\n },\n \'@keyframes circular-rotate\': {\n \'0%\': {\n // Fix IE 11 wobbly\n transformOrigin: \'50% 50%\'\n },\n \'100%\': {\n transform: \'rotate(360deg)\'\n }\n },\n \'@keyframes circular-dash\': {\n \'0%\': {\n strokeDasharray: \'1px, 200px\',\n strokeDashoffset: \'0px\'\n },\n \'50%\': {\n strokeDasharray: \'100px, 200px\',\n strokeDashoffset: \'-15px\'\n },\n \'100%\': {\n strokeDasharray: \'100px, 200px\',\n strokeDashoffset: \'-125px\'\n }\n },\n\n /* Styles applied to the `circle` svg path if `disableShrink={true}`. */\n circleDisableShrink: {\n animation: \'none\'\n }\n };\n};\n/**\n * ## ARIA\n *\n * If the progress bar is describing the loading progress of a particular region of a page,\n * you should use `aria-describedby` to point to the progress bar, and set the `aria-busy`\n * attribute to `true` on that region until it has finished loading.\n */\n\nvar CircularProgress = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.forwardRef(function CircularProgress(props, ref) {\n var classes = props.classes,\n className = props.className,\n _props$color = props.color,\n color = _props$color === void 0 ? \'primary\' : _props$color,\n _props$disableShrink = props.disableShrink,\n disableShrink = _props$disableShrink === void 0 ? false : _props$disableShrink,\n _props$size = props.size,\n size = _props$size === void 0 ? 40 : _props$size,\n style = props.style,\n _props$thickness = props.thickness,\n thickness = _props$thickness === void 0 ? 3.6 : _props$thickness,\n _props$value = props.value,\n value = _props$value === void 0 ? 0 : _props$value,\n _props$variant = props.variant,\n variant = _props$variant === void 0 ? \'indeterminate\' : _props$variant,\n other = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__["default"])(props, ["classes", "className", "color", "disableShrink", "size", "style", "thickness", "value", "variant"]);\n\n var circleStyle = {};\n var rootStyle = {};\n var rootProps = {};\n\n if (variant === \'determinate\' || variant === \'static\') {\n var circumference = 2 * Math.PI * ((SIZE - thickness) / 2);\n circleStyle.strokeDasharray = circumference.toFixed(3);\n rootProps[\'aria-valuenow\'] = Math.round(value);\n circleStyle.strokeDashoffset = "".concat(((100 - value) / 100 * circumference).toFixed(3), "px");\n rootStyle.transform = \'rotate(-90deg)\';\n }\n\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement("div", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({\n className: (0,clsx__WEBPACK_IMPORTED_MODULE_3__["default"])(classes.root, className, color !== \'inherit\' && classes["color".concat((0,_utils_capitalize__WEBPACK_IMPORTED_MODULE_4__["default"])(color))], {\n \'determinate\': classes.determinate,\n \'indeterminate\': classes.indeterminate,\n \'static\': classes.static\n }[variant]),\n style: (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({\n width: size,\n height: size\n }, rootStyle, style),\n ref: ref,\n role: "progressbar"\n }, rootProps, other), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement("svg", {\n className: classes.svg,\n viewBox: "".concat(SIZE / 2, " ").concat(SIZE / 2, " ").concat(SIZE, " ").concat(SIZE)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement("circle", {\n className: (0,clsx__WEBPACK_IMPORTED_MODULE_3__["default"])(classes.circle, disableShrink && classes.circleDisableShrink, {\n \'determinate\': classes.circleDeterminate,\n \'indeterminate\': classes.circleIndeterminate,\n \'static\': classes.circleStatic\n }[variant]),\n style: circleStyle,\n cx: SIZE,\n cy: SIZE,\n r: (SIZE - thickness) / 2,\n fill: "none",\n strokeWidth: thickness\n })));\n});\n false ? 0 : void 0;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_styles_withStyles__WEBPACK_IMPORTED_MODULE_5__["default"])(styles, {\n name: \'MuiCircularProgress\',\n flip: false\n})(CircularProgress));\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/esm/CircularProgress/CircularProgress.js?')},"./node_modules/@material-ui/core/esm/CircularProgress/index.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* reexport safe */ _CircularProgress__WEBPACK_IMPORTED_MODULE_0__["default"])\n/* harmony export */ });\n/* harmony import */ var _CircularProgress__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./CircularProgress */ "./node_modules/@material-ui/core/esm/CircularProgress/CircularProgress.js");\n\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/esm/CircularProgress/index.js?')},"./node_modules/@material-ui/core/esm/SvgIcon/SvgIcon.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "styles": () => (/* binding */ styles),\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! clsx */ "./node_modules/clsx/dist/clsx.m.js");\n/* harmony import */ var _styles_withStyles__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../styles/withStyles */ "./node_modules/@material-ui/core/esm/styles/withStyles.js");\n/* harmony import */ var _utils_capitalize__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/capitalize */ "./node_modules/@material-ui/core/esm/utils/capitalize.js");\n\n\n\n\n\n\n\n\nvar styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n userSelect: \'none\',\n width: \'1em\',\n height: \'1em\',\n display: \'inline-block\',\n fill: \'currentColor\',\n flexShrink: 0,\n fontSize: theme.typography.pxToRem(24),\n transition: theme.transitions.create(\'fill\', {\n duration: theme.transitions.duration.shorter\n })\n },\n\n /* Styles applied to the root element if `color="primary"`. */\n colorPrimary: {\n color: theme.palette.primary.main\n },\n\n /* Styles applied to the root element if `color="secondary"`. */\n colorSecondary: {\n color: theme.palette.secondary.main\n },\n\n /* Styles applied to the root element if `color="action"`. */\n colorAction: {\n color: theme.palette.action.active\n },\n\n /* Styles applied to the root element if `color="error"`. */\n colorError: {\n color: theme.palette.error.main\n },\n\n /* Styles applied to the root element if `color="disabled"`. */\n colorDisabled: {\n color: theme.palette.action.disabled\n },\n\n /* Styles applied to the root element if `fontSize="inherit"`. */\n fontSizeInherit: {\n fontSize: \'inherit\'\n },\n\n /* Styles applied to the root element if `fontSize="small"`. */\n fontSizeSmall: {\n fontSize: theme.typography.pxToRem(20)\n },\n\n /* Styles applied to the root element if `fontSize="large"`. */\n fontSizeLarge: {\n fontSize: theme.typography.pxToRem(35)\n }\n };\n};\nvar SvgIcon = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.forwardRef(function SvgIcon(props, ref) {\n var children = props.children,\n classes = props.classes,\n className = props.className,\n _props$color = props.color,\n color = _props$color === void 0 ? \'inherit\' : _props$color,\n _props$component = props.component,\n Component = _props$component === void 0 ? \'svg\' : _props$component,\n _props$fontSize = props.fontSize,\n fontSize = _props$fontSize === void 0 ? \'medium\' : _props$fontSize,\n htmlColor = props.htmlColor,\n titleAccess = props.titleAccess,\n _props$viewBox = props.viewBox,\n viewBox = _props$viewBox === void 0 ? \'0 0 24 24\' : _props$viewBox,\n other = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__["default"])(props, ["children", "classes", "className", "color", "component", "fontSize", "htmlColor", "titleAccess", "viewBox"]);\n\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(Component, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({\n className: (0,clsx__WEBPACK_IMPORTED_MODULE_3__["default"])(classes.root, className, color !== \'inherit\' && classes["color".concat((0,_utils_capitalize__WEBPACK_IMPORTED_MODULE_4__["default"])(color))], fontSize !== \'default\' && fontSize !== \'medium\' && classes["fontSize".concat((0,_utils_capitalize__WEBPACK_IMPORTED_MODULE_4__["default"])(fontSize))]),\n focusable: "false",\n viewBox: viewBox,\n color: htmlColor,\n "aria-hidden": titleAccess ? undefined : true,\n role: titleAccess ? \'img\' : undefined,\n ref: ref\n }, other), children, titleAccess ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement("title", null, titleAccess) : null);\n});\n false ? 0 : void 0;\nSvgIcon.muiName = \'SvgIcon\';\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_styles_withStyles__WEBPACK_IMPORTED_MODULE_5__["default"])(styles, {\n name: \'MuiSvgIcon\'\n})(SvgIcon));\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/esm/SvgIcon/SvgIcon.js?')},"./node_modules/@material-ui/core/esm/colors/blue.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar blue = {\n 50: '#e3f2fd',\n 100: '#bbdefb',\n 200: '#90caf9',\n 300: '#64b5f6',\n 400: '#42a5f5',\n 500: '#2196f3',\n 600: '#1e88e5',\n 700: '#1976d2',\n 800: '#1565c0',\n 900: '#0d47a1',\n A100: '#82b1ff',\n A200: '#448aff',\n A400: '#2979ff',\n A700: '#2962ff'\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (blue);\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/esm/colors/blue.js?")},"./node_modules/@material-ui/core/esm/colors/common.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar common = {\n black: '#000',\n white: '#fff'\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (common);\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/esm/colors/common.js?")},"./node_modules/@material-ui/core/esm/colors/green.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar green = {\n 50: '#e8f5e9',\n 100: '#c8e6c9',\n 200: '#a5d6a7',\n 300: '#81c784',\n 400: '#66bb6a',\n 500: '#4caf50',\n 600: '#43a047',\n 700: '#388e3c',\n 800: '#2e7d32',\n 900: '#1b5e20',\n A100: '#b9f6ca',\n A200: '#69f0ae',\n A400: '#00e676',\n A700: '#00c853'\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (green);\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/esm/colors/green.js?")},"./node_modules/@material-ui/core/esm/colors/grey.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar grey = {\n 50: '#fafafa',\n 100: '#f5f5f5',\n 200: '#eeeeee',\n 300: '#e0e0e0',\n 400: '#bdbdbd',\n 500: '#9e9e9e',\n 600: '#757575',\n 700: '#616161',\n 800: '#424242',\n 900: '#212121',\n A100: '#d5d5d5',\n A200: '#aaaaaa',\n A400: '#303030',\n A700: '#616161'\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (grey);\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/esm/colors/grey.js?")},"./node_modules/@material-ui/core/esm/colors/indigo.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar indigo = {\n 50: '#e8eaf6',\n 100: '#c5cae9',\n 200: '#9fa8da',\n 300: '#7986cb',\n 400: '#5c6bc0',\n 500: '#3f51b5',\n 600: '#3949ab',\n 700: '#303f9f',\n 800: '#283593',\n 900: '#1a237e',\n A100: '#8c9eff',\n A200: '#536dfe',\n A400: '#3d5afe',\n A700: '#304ffe'\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (indigo);\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/esm/colors/indigo.js?")},"./node_modules/@material-ui/core/esm/colors/orange.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar orange = {\n 50: '#fff3e0',\n 100: '#ffe0b2',\n 200: '#ffcc80',\n 300: '#ffb74d',\n 400: '#ffa726',\n 500: '#ff9800',\n 600: '#fb8c00',\n 700: '#f57c00',\n 800: '#ef6c00',\n 900: '#e65100',\n A100: '#ffd180',\n A200: '#ffab40',\n A400: '#ff9100',\n A700: '#ff6d00'\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (orange);\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/esm/colors/orange.js?")},"./node_modules/@material-ui/core/esm/colors/pink.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar pink = {\n 50: '#fce4ec',\n 100: '#f8bbd0',\n 200: '#f48fb1',\n 300: '#f06292',\n 400: '#ec407a',\n 500: '#e91e63',\n 600: '#d81b60',\n 700: '#c2185b',\n 800: '#ad1457',\n 900: '#880e4f',\n A100: '#ff80ab',\n A200: '#ff4081',\n A400: '#f50057',\n A700: '#c51162'\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (pink);\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/esm/colors/pink.js?")},"./node_modules/@material-ui/core/esm/colors/red.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar red = {\n 50: '#ffebee',\n 100: '#ffcdd2',\n 200: '#ef9a9a',\n 300: '#e57373',\n 400: '#ef5350',\n 500: '#f44336',\n 600: '#e53935',\n 700: '#d32f2f',\n 800: '#c62828',\n 900: '#b71c1c',\n A100: '#ff8a80',\n A200: '#ff5252',\n A400: '#ff1744',\n A700: '#d50000'\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (red);\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/esm/colors/red.js?")},"./node_modules/@material-ui/core/esm/styles/colorManipulator.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"hexToRgb\": () => (/* binding */ hexToRgb),\n/* harmony export */ \"rgbToHex\": () => (/* binding */ rgbToHex),\n/* harmony export */ \"hslToRgb\": () => (/* binding */ hslToRgb),\n/* harmony export */ \"decomposeColor\": () => (/* binding */ decomposeColor),\n/* harmony export */ \"recomposeColor\": () => (/* binding */ recomposeColor),\n/* harmony export */ \"getContrastRatio\": () => (/* binding */ getContrastRatio),\n/* harmony export */ \"getLuminance\": () => (/* binding */ getLuminance),\n/* harmony export */ \"emphasize\": () => (/* binding */ emphasize),\n/* harmony export */ \"fade\": () => (/* binding */ fade),\n/* harmony export */ \"alpha\": () => (/* binding */ alpha),\n/* harmony export */ \"darken\": () => (/* binding */ darken),\n/* harmony export */ \"lighten\": () => (/* binding */ lighten)\n/* harmony export */ });\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @material-ui/utils */ \"./node_modules/@material-ui/utils/esm/formatMuiErrorMessage.js\");\n\n\n/* eslint-disable no-use-before-define */\n\n/**\n * Returns a number whose value is limited to the given range.\n *\n * @param {number} value The value to be clamped\n * @param {number} min The lower boundary of the output range\n * @param {number} max The upper boundary of the output range\n * @returns {number} A number in the range [min, max]\n */\nfunction clamp(value) {\n var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n\n if (false) {}\n\n return Math.min(Math.max(min, value), max);\n}\n/**\n * Converts a color from CSS hex format to CSS rgb format.\n *\n * @param {string} color - Hex color, i.e. #nnn or #nnnnnn\n * @returns {string} A CSS rgb color string\n */\n\n\nfunction hexToRgb(color) {\n color = color.substr(1);\n var re = new RegExp(\".{1,\".concat(color.length >= 6 ? 2 : 1, \"}\"), 'g');\n var colors = color.match(re);\n\n if (colors && colors[0].length === 1) {\n colors = colors.map(function (n) {\n return n + n;\n });\n }\n\n return colors ? \"rgb\".concat(colors.length === 4 ? 'a' : '', \"(\").concat(colors.map(function (n, index) {\n return index < 3 ? parseInt(n, 16) : Math.round(parseInt(n, 16) / 255 * 1000) / 1000;\n }).join(', '), \")\") : '';\n}\n\nfunction intToHex(int) {\n var hex = int.toString(16);\n return hex.length === 1 ? \"0\".concat(hex) : hex;\n}\n/**\n * Converts a color from CSS rgb format to CSS hex format.\n *\n * @param {string} color - RGB color, i.e. rgb(n, n, n)\n * @returns {string} A CSS rgb color string, i.e. #nnnnnn\n */\n\n\nfunction rgbToHex(color) {\n // Idempotent\n if (color.indexOf('#') === 0) {\n return color;\n }\n\n var _decomposeColor = decomposeColor(color),\n values = _decomposeColor.values;\n\n return \"#\".concat(values.map(function (n) {\n return intToHex(n);\n }).join(''));\n}\n/**\n * Converts a color from hsl format to rgb format.\n *\n * @param {string} color - HSL color values\n * @returns {string} rgb color values\n */\n\nfunction hslToRgb(color) {\n color = decomposeColor(color);\n var _color = color,\n values = _color.values;\n var h = values[0];\n var s = values[1] / 100;\n var l = values[2] / 100;\n var a = s * Math.min(l, 1 - l);\n\n var f = function f(n) {\n var k = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : (n + h / 30) % 12;\n return l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n };\n\n var type = 'rgb';\n var rgb = [Math.round(f(0) * 255), Math.round(f(8) * 255), Math.round(f(4) * 255)];\n\n if (color.type === 'hsla') {\n type += 'a';\n rgb.push(values[3]);\n }\n\n return recomposeColor({\n type: type,\n values: rgb\n });\n}\n/**\n * Returns an object with the type and values of a color.\n *\n * Note: Does not support rgb % values.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @returns {object} - A MUI color object: {type: string, values: number[]}\n */\n\nfunction decomposeColor(color) {\n // Idempotent\n if (color.type) {\n return color;\n }\n\n if (color.charAt(0) === '#') {\n return decomposeColor(hexToRgb(color));\n }\n\n var marker = color.indexOf('(');\n var type = color.substring(0, marker);\n\n if (['rgb', 'rgba', 'hsl', 'hsla'].indexOf(type) === -1) {\n throw new Error( false ? 0 : (0,_material_ui_utils__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(3, color));\n }\n\n var values = color.substring(marker + 1, color.length - 1).split(',');\n values = values.map(function (value) {\n return parseFloat(value);\n });\n return {\n type: type,\n values: values\n };\n}\n/**\n * Converts a color object with type and values to a string.\n *\n * @param {object} color - Decomposed color\n * @param {string} color.type - One of: 'rgb', 'rgba', 'hsl', 'hsla'\n * @param {array} color.values - [n,n,n] or [n,n,n,n]\n * @returns {string} A CSS color string\n */\n\nfunction recomposeColor(color) {\n var type = color.type;\n var values = color.values;\n\n if (type.indexOf('rgb') !== -1) {\n // Only convert the first 3 values to int (i.e. not alpha)\n values = values.map(function (n, i) {\n return i < 3 ? parseInt(n, 10) : n;\n });\n } else if (type.indexOf('hsl') !== -1) {\n values[1] = \"\".concat(values[1], \"%\");\n values[2] = \"\".concat(values[2], \"%\");\n }\n\n return \"\".concat(type, \"(\").concat(values.join(', '), \")\");\n}\n/**\n * Calculates the contrast ratio between two colors.\n *\n * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\n *\n * @param {string} foreground - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {string} background - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @returns {number} A contrast ratio value in the range 0 - 21.\n */\n\nfunction getContrastRatio(foreground, background) {\n var lumA = getLuminance(foreground);\n var lumB = getLuminance(background);\n return (Math.max(lumA, lumB) + 0.05) / (Math.min(lumA, lumB) + 0.05);\n}\n/**\n * The relative brightness of any point in a color space,\n * normalized to 0 for darkest black and 1 for lightest white.\n *\n * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @returns {number} The relative brightness of the color in the range 0 - 1\n */\n\nfunction getLuminance(color) {\n color = decomposeColor(color);\n var rgb = color.type === 'hsl' ? decomposeColor(hslToRgb(color)).values : color.values;\n rgb = rgb.map(function (val) {\n val /= 255; // normalized\n\n return val <= 0.03928 ? val / 12.92 : Math.pow((val + 0.055) / 1.055, 2.4);\n }); // Truncate at 3 digits\n\n return Number((0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2]).toFixed(3));\n}\n/**\n * Darken or lighten a color, depending on its luminance.\n * Light colors are darkened, dark colors are lightened.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {number} coefficient=0.15 - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\n\nfunction emphasize(color) {\n var coefficient = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.15;\n return getLuminance(color) > 0.5 ? darken(color, coefficient) : lighten(color, coefficient);\n}\nvar warnedOnce = false;\n/**\n * Set the absolute transparency of a color.\n * Any existing alpha values are overwritten.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {number} value - value to set the alpha channel to in the range 0 -1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n *\n * @deprecated\n * Use `import { alpha } from '@material-ui/core/styles'` instead.\n */\n\nfunction fade(color, value) {\n if (false) {}\n\n return alpha(color, value);\n}\n/**\n * Set the absolute transparency of a color.\n * Any existing alpha value is overwritten.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {number} value - value to set the alpha channel to in the range 0-1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\n\nfunction alpha(color, value) {\n color = decomposeColor(color);\n value = clamp(value);\n\n if (color.type === 'rgb' || color.type === 'hsl') {\n color.type += 'a';\n }\n\n color.values[3] = value;\n return recomposeColor(color);\n}\n/**\n * Darkens a color.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {number} coefficient - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\n\nfunction darken(color, coefficient) {\n color = decomposeColor(color);\n coefficient = clamp(coefficient);\n\n if (color.type.indexOf('hsl') !== -1) {\n color.values[2] *= 1 - coefficient;\n } else if (color.type.indexOf('rgb') !== -1) {\n for (var i = 0; i < 3; i += 1) {\n color.values[i] *= 1 - coefficient;\n }\n }\n\n return recomposeColor(color);\n}\n/**\n * Lightens a color.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {number} coefficient - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\n\nfunction lighten(color, coefficient) {\n color = decomposeColor(color);\n coefficient = clamp(coefficient);\n\n if (color.type.indexOf('hsl') !== -1) {\n color.values[2] += (100 - color.values[2]) * coefficient;\n } else if (color.type.indexOf('rgb') !== -1) {\n for (var i = 0; i < 3; i += 1) {\n color.values[i] += (255 - color.values[i]) * coefficient;\n }\n }\n\n return recomposeColor(color);\n}\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/esm/styles/colorManipulator.js?")},"./node_modules/@material-ui/core/esm/styles/createBreakpoints.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "keys": () => (/* binding */ keys),\n/* harmony export */ "default": () => (/* binding */ createBreakpoints)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");\n\n\n// Sorted ASC by size. That\'s important.\n// It can\'t be configured as it\'s used statically for propTypes.\nvar keys = [\'xs\', \'sm\', \'md\', \'lg\', \'xl\']; // Keep in mind that @media is inclusive by the CSS specification.\n\nfunction createBreakpoints(breakpoints) {\n var _breakpoints$values = breakpoints.values,\n values = _breakpoints$values === void 0 ? {\n xs: 0,\n sm: 600,\n md: 960,\n lg: 1280,\n xl: 1920\n } : _breakpoints$values,\n _breakpoints$unit = breakpoints.unit,\n unit = _breakpoints$unit === void 0 ? \'px\' : _breakpoints$unit,\n _breakpoints$step = breakpoints.step,\n step = _breakpoints$step === void 0 ? 5 : _breakpoints$step,\n other = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__["default"])(breakpoints, ["values", "unit", "step"]);\n\n function up(key) {\n var value = typeof values[key] === \'number\' ? values[key] : key;\n return "@media (min-width:".concat(value).concat(unit, ")");\n }\n\n function down(key) {\n var endIndex = keys.indexOf(key) + 1;\n var upperbound = values[keys[endIndex]];\n\n if (endIndex === keys.length) {\n // xl down applies to all sizes\n return up(\'xs\');\n }\n\n var value = typeof upperbound === \'number\' && endIndex > 0 ? upperbound : key;\n return "@media (max-width:".concat(value - step / 100).concat(unit, ")");\n }\n\n function between(start, end) {\n var endIndex = keys.indexOf(end);\n\n if (endIndex === keys.length - 1) {\n return up(start);\n }\n\n return "@media (min-width:".concat(typeof values[start] === \'number\' ? values[start] : start).concat(unit, ") and ") + "(max-width:".concat((endIndex !== -1 && typeof values[keys[endIndex + 1]] === \'number\' ? values[keys[endIndex + 1]] : end) - step / 100).concat(unit, ")");\n }\n\n function only(key) {\n return between(key, key);\n }\n\n var warnedOnce = false;\n\n function width(key) {\n if (false) {}\n\n return values[key];\n }\n\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({\n keys: keys,\n values: values,\n up: up,\n down: down,\n between: between,\n only: only,\n width: width\n }, other);\n}\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/esm/styles/createBreakpoints.js?')},"./node_modules/@material-ui/core/esm/styles/createMixins.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ createMixins)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "./node_modules/@babel/runtime/helpers/esm/defineProperty.js");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js");\n\n\nfunction createMixins(breakpoints, spacing, mixins) {\n var _toolbar;\n\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({\n gutters: function gutters() {\n var styles = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n console.warn([\'Material-UI: theme.mixins.gutters() is deprecated.\', \'You can use the source of the mixin directly:\', "\\n paddingLeft: theme.spacing(2),\\n paddingRight: theme.spacing(2),\\n [theme.breakpoints.up(\'sm\')]: {\\n paddingLeft: theme.spacing(3),\\n paddingRight: theme.spacing(3),\\n },\\n "].join(\'\\n\'));\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({\n paddingLeft: spacing(2),\n paddingRight: spacing(2)\n }, styles, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])({}, breakpoints.up(\'sm\'), (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({\n paddingLeft: spacing(3),\n paddingRight: spacing(3)\n }, styles[breakpoints.up(\'sm\')])));\n },\n toolbar: (_toolbar = {\n minHeight: 56\n }, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])(_toolbar, "".concat(breakpoints.up(\'xs\'), " and (orientation: landscape)"), {\n minHeight: 48\n }), (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])(_toolbar, breakpoints.up(\'sm\'), {\n minHeight: 64\n }), _toolbar)\n }, mixins);\n}\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/esm/styles/createMixins.js?')},"./node_modules/@material-ui/core/esm/styles/createPalette.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "light": () => (/* binding */ light),\n/* harmony export */ "dark": () => (/* binding */ dark),\n/* harmony export */ "default": () => (/* binding */ createPalette)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @material-ui/utils */ "./node_modules/@material-ui/utils/esm/formatMuiErrorMessage.js");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @material-ui/utils */ "./node_modules/@material-ui/utils/esm/deepmerge.js");\n/* harmony import */ var _colors_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../colors/common */ "./node_modules/@material-ui/core/esm/colors/common.js");\n/* harmony import */ var _colors_grey__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../colors/grey */ "./node_modules/@material-ui/core/esm/colors/grey.js");\n/* harmony import */ var _colors_indigo__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../colors/indigo */ "./node_modules/@material-ui/core/esm/colors/indigo.js");\n/* harmony import */ var _colors_pink__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../colors/pink */ "./node_modules/@material-ui/core/esm/colors/pink.js");\n/* harmony import */ var _colors_red__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../colors/red */ "./node_modules/@material-ui/core/esm/colors/red.js");\n/* harmony import */ var _colors_orange__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../colors/orange */ "./node_modules/@material-ui/core/esm/colors/orange.js");\n/* harmony import */ var _colors_blue__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../colors/blue */ "./node_modules/@material-ui/core/esm/colors/blue.js");\n/* harmony import */ var _colors_green__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../colors/green */ "./node_modules/@material-ui/core/esm/colors/green.js");\n/* harmony import */ var _colorManipulator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./colorManipulator */ "./node_modules/@material-ui/core/esm/styles/colorManipulator.js");\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar light = {\n // The colors used to style the text.\n text: {\n // The most important text.\n primary: \'rgba(0, 0, 0, 0.87)\',\n // Secondary text.\n secondary: \'rgba(0, 0, 0, 0.54)\',\n // Disabled text have even lower visual prominence.\n disabled: \'rgba(0, 0, 0, 0.38)\',\n // Text hints.\n hint: \'rgba(0, 0, 0, 0.38)\'\n },\n // The color used to divide different elements.\n divider: \'rgba(0, 0, 0, 0.12)\',\n // The background colors used to style the surfaces.\n // Consistency between these values is important.\n background: {\n paper: _colors_common__WEBPACK_IMPORTED_MODULE_2__["default"].white,\n default: _colors_grey__WEBPACK_IMPORTED_MODULE_3__["default"][50]\n },\n // The colors used to style the action elements.\n action: {\n // The color of an active action like an icon button.\n active: \'rgba(0, 0, 0, 0.54)\',\n // The color of an hovered action.\n hover: \'rgba(0, 0, 0, 0.04)\',\n hoverOpacity: 0.04,\n // The color of a selected action.\n selected: \'rgba(0, 0, 0, 0.08)\',\n selectedOpacity: 0.08,\n // The color of a disabled action.\n disabled: \'rgba(0, 0, 0, 0.26)\',\n // The background color of a disabled action.\n disabledBackground: \'rgba(0, 0, 0, 0.12)\',\n disabledOpacity: 0.38,\n focus: \'rgba(0, 0, 0, 0.12)\',\n focusOpacity: 0.12,\n activatedOpacity: 0.12\n }\n};\nvar dark = {\n text: {\n primary: _colors_common__WEBPACK_IMPORTED_MODULE_2__["default"].white,\n secondary: \'rgba(255, 255, 255, 0.7)\',\n disabled: \'rgba(255, 255, 255, 0.5)\',\n hint: \'rgba(255, 255, 255, 0.5)\',\n icon: \'rgba(255, 255, 255, 0.5)\'\n },\n divider: \'rgba(255, 255, 255, 0.12)\',\n background: {\n paper: _colors_grey__WEBPACK_IMPORTED_MODULE_3__["default"][800],\n default: \'#303030\'\n },\n action: {\n active: _colors_common__WEBPACK_IMPORTED_MODULE_2__["default"].white,\n hover: \'rgba(255, 255, 255, 0.08)\',\n hoverOpacity: 0.08,\n selected: \'rgba(255, 255, 255, 0.16)\',\n selectedOpacity: 0.16,\n disabled: \'rgba(255, 255, 255, 0.3)\',\n disabledBackground: \'rgba(255, 255, 255, 0.12)\',\n disabledOpacity: 0.38,\n focus: \'rgba(255, 255, 255, 0.12)\',\n focusOpacity: 0.12,\n activatedOpacity: 0.24\n }\n};\n\nfunction addLightOrDark(intent, direction, shade, tonalOffset) {\n var tonalOffsetLight = tonalOffset.light || tonalOffset;\n var tonalOffsetDark = tonalOffset.dark || tonalOffset * 1.5;\n\n if (!intent[direction]) {\n if (intent.hasOwnProperty(shade)) {\n intent[direction] = intent[shade];\n } else if (direction === \'light\') {\n intent.light = (0,_colorManipulator__WEBPACK_IMPORTED_MODULE_4__.lighten)(intent.main, tonalOffsetLight);\n } else if (direction === \'dark\') {\n intent.dark = (0,_colorManipulator__WEBPACK_IMPORTED_MODULE_4__.darken)(intent.main, tonalOffsetDark);\n }\n }\n}\n\nfunction createPalette(palette) {\n var _palette$primary = palette.primary,\n primary = _palette$primary === void 0 ? {\n light: _colors_indigo__WEBPACK_IMPORTED_MODULE_5__["default"][300],\n main: _colors_indigo__WEBPACK_IMPORTED_MODULE_5__["default"][500],\n dark: _colors_indigo__WEBPACK_IMPORTED_MODULE_5__["default"][700]\n } : _palette$primary,\n _palette$secondary = palette.secondary,\n secondary = _palette$secondary === void 0 ? {\n light: _colors_pink__WEBPACK_IMPORTED_MODULE_6__["default"].A200,\n main: _colors_pink__WEBPACK_IMPORTED_MODULE_6__["default"].A400,\n dark: _colors_pink__WEBPACK_IMPORTED_MODULE_6__["default"].A700\n } : _palette$secondary,\n _palette$error = palette.error,\n error = _palette$error === void 0 ? {\n light: _colors_red__WEBPACK_IMPORTED_MODULE_7__["default"][300],\n main: _colors_red__WEBPACK_IMPORTED_MODULE_7__["default"][500],\n dark: _colors_red__WEBPACK_IMPORTED_MODULE_7__["default"][700]\n } : _palette$error,\n _palette$warning = palette.warning,\n warning = _palette$warning === void 0 ? {\n light: _colors_orange__WEBPACK_IMPORTED_MODULE_8__["default"][300],\n main: _colors_orange__WEBPACK_IMPORTED_MODULE_8__["default"][500],\n dark: _colors_orange__WEBPACK_IMPORTED_MODULE_8__["default"][700]\n } : _palette$warning,\n _palette$info = palette.info,\n info = _palette$info === void 0 ? {\n light: _colors_blue__WEBPACK_IMPORTED_MODULE_9__["default"][300],\n main: _colors_blue__WEBPACK_IMPORTED_MODULE_9__["default"][500],\n dark: _colors_blue__WEBPACK_IMPORTED_MODULE_9__["default"][700]\n } : _palette$info,\n _palette$success = palette.success,\n success = _palette$success === void 0 ? {\n light: _colors_green__WEBPACK_IMPORTED_MODULE_10__["default"][300],\n main: _colors_green__WEBPACK_IMPORTED_MODULE_10__["default"][500],\n dark: _colors_green__WEBPACK_IMPORTED_MODULE_10__["default"][700]\n } : _palette$success,\n _palette$type = palette.type,\n type = _palette$type === void 0 ? \'light\' : _palette$type,\n _palette$contrastThre = palette.contrastThreshold,\n contrastThreshold = _palette$contrastThre === void 0 ? 3 : _palette$contrastThre,\n _palette$tonalOffset = palette.tonalOffset,\n tonalOffset = _palette$tonalOffset === void 0 ? 0.2 : _palette$tonalOffset,\n other = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__["default"])(palette, ["primary", "secondary", "error", "warning", "info", "success", "type", "contrastThreshold", "tonalOffset"]); // Use the same logic as\n // Bootstrap: https://github.com/twbs/bootstrap/blob/1d6e3710dd447de1a200f29e8fa521f8a0908f70/scss/_functions.scss#L59\n // and material-components-web https://github.com/material-components/material-components-web/blob/ac46b8863c4dab9fc22c4c662dc6bd1b65dd652f/packages/mdc-theme/_functions.scss#L54\n\n\n function getContrastText(background) {\n var contrastText = (0,_colorManipulator__WEBPACK_IMPORTED_MODULE_4__.getContrastRatio)(background, dark.text.primary) >= contrastThreshold ? dark.text.primary : light.text.primary;\n\n if (false) { var contrast; }\n\n return contrastText;\n }\n\n var augmentColor = function augmentColor(color) {\n var mainShade = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 500;\n var lightShade = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 300;\n var darkShade = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 700;\n color = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, color);\n\n if (!color.main && color[mainShade]) {\n color.main = color[mainShade];\n }\n\n if (!color.main) {\n throw new Error( false ? 0 : (0,_material_ui_utils__WEBPACK_IMPORTED_MODULE_11__["default"])(4, mainShade));\n }\n\n if (typeof color.main !== \'string\') {\n throw new Error( false ? 0 : (0,_material_ui_utils__WEBPACK_IMPORTED_MODULE_11__["default"])(5, JSON.stringify(color.main)));\n }\n\n addLightOrDark(color, \'light\', lightShade, tonalOffset);\n addLightOrDark(color, \'dark\', darkShade, tonalOffset);\n\n if (!color.contrastText) {\n color.contrastText = getContrastText(color.main);\n }\n\n return color;\n };\n\n var types = {\n dark: dark,\n light: light\n };\n\n if (false) {}\n\n var paletteOutput = (0,_material_ui_utils__WEBPACK_IMPORTED_MODULE_12__["default"])((0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({\n // A collection of common colors.\n common: _colors_common__WEBPACK_IMPORTED_MODULE_2__["default"],\n // The palette type, can be light or dark.\n type: type,\n // The colors used to represent primary interface elements for a user.\n primary: augmentColor(primary),\n // The colors used to represent secondary interface elements for a user.\n secondary: augmentColor(secondary, \'A400\', \'A200\', \'A700\'),\n // The colors used to represent interface elements that the user should be made aware of.\n error: augmentColor(error),\n // The colors used to represent potentially dangerous actions or important messages.\n warning: augmentColor(warning),\n // The colors used to present information to the user that is neutral and not necessarily important.\n info: augmentColor(info),\n // The colors used to indicate the successful completion of an action that user triggered.\n success: augmentColor(success),\n // The grey colors.\n grey: _colors_grey__WEBPACK_IMPORTED_MODULE_3__["default"],\n // Used by `getContrastText()` to maximize the contrast between\n // the background and the text.\n contrastThreshold: contrastThreshold,\n // Takes a background color and returns the text color that maximizes the contrast.\n getContrastText: getContrastText,\n // Generate a rich color object.\n augmentColor: augmentColor,\n // Used by the functions below to shift a color\'s luminance by approximately\n // two indexes within its tonal palette.\n // E.g., shift from Red 500 to Red 300 or Red 700.\n tonalOffset: tonalOffset\n }, types[type]), other);\n return paletteOutput;\n}\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/esm/styles/createPalette.js?')},"./node_modules/@material-ui/core/esm/styles/createSpacing.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ createSpacing)\n/* harmony export */ });\n/* harmony import */ var _material_ui_system__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @material-ui/system */ \"./node_modules/@material-ui/system/esm/spacing.js\");\n\nvar warnOnce;\nfunction createSpacing() {\n var spacingInput = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 8;\n\n // Already transformed.\n if (spacingInput.mui) {\n return spacingInput;\n } // Material Design layouts are visually balanced. Most measurements align to an 8dp grid applied, which aligns both spacing and the overall layout.\n // Smaller components, such as icons and type, can align to a 4dp grid.\n // https://material.io/design/layout/understanding-layout.html#usage\n\n\n var transform = (0,_material_ui_system__WEBPACK_IMPORTED_MODULE_0__.createUnarySpacing)({\n spacing: spacingInput\n });\n\n var spacing = function spacing() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n if (false) {}\n\n if (args.length === 0) {\n return transform(1);\n }\n\n if (args.length === 1) {\n return transform(args[0]);\n }\n\n return args.map(function (argument) {\n if (typeof argument === 'string') {\n return argument;\n }\n\n var output = transform(argument);\n return typeof output === 'number' ? \"\".concat(output, \"px\") : output;\n }).join(' ');\n }; // Backward compatibility, to remove in v5.\n\n\n Object.defineProperty(spacing, 'unit', {\n get: function get() {\n if (false) {}\n\n return spacingInput;\n }\n });\n spacing.mui = true;\n return spacing;\n}\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/esm/styles/createSpacing.js?")},"./node_modules/@material-ui/core/esm/styles/createTheme.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "createMuiTheme": () => (/* binding */ createMuiTheme),\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "./node_modules/@babel/runtime/helpers/esm/defineProperty.js");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material-ui/utils */ "./node_modules/@material-ui/utils/esm/deepmerge.js");\n/* harmony import */ var _createBreakpoints__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./createBreakpoints */ "./node_modules/@material-ui/core/esm/styles/createBreakpoints.js");\n/* harmony import */ var _createMixins__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./createMixins */ "./node_modules/@material-ui/core/esm/styles/createMixins.js");\n/* harmony import */ var _createPalette__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./createPalette */ "./node_modules/@material-ui/core/esm/styles/createPalette.js");\n/* harmony import */ var _createTypography__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./createTypography */ "./node_modules/@material-ui/core/esm/styles/createTypography.js");\n/* harmony import */ var _shadows__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./shadows */ "./node_modules/@material-ui/core/esm/styles/shadows.js");\n/* harmony import */ var _shape__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./shape */ "./node_modules/@material-ui/core/esm/styles/shape.js");\n/* harmony import */ var _createSpacing__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./createSpacing */ "./node_modules/@material-ui/core/esm/styles/createSpacing.js");\n/* harmony import */ var _transitions__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./transitions */ "./node_modules/@material-ui/core/esm/styles/transitions.js");\n/* harmony import */ var _zIndex__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./zIndex */ "./node_modules/@material-ui/core/esm/styles/zIndex.js");\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction createTheme() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n var _options$breakpoints = options.breakpoints,\n breakpointsInput = _options$breakpoints === void 0 ? {} : _options$breakpoints,\n _options$mixins = options.mixins,\n mixinsInput = _options$mixins === void 0 ? {} : _options$mixins,\n _options$palette = options.palette,\n paletteInput = _options$palette === void 0 ? {} : _options$palette,\n spacingInput = options.spacing,\n _options$typography = options.typography,\n typographyInput = _options$typography === void 0 ? {} : _options$typography,\n other = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__["default"])(options, ["breakpoints", "mixins", "palette", "spacing", "typography"]);\n\n var palette = (0,_createPalette__WEBPACK_IMPORTED_MODULE_2__["default"])(paletteInput);\n var breakpoints = (0,_createBreakpoints__WEBPACK_IMPORTED_MODULE_3__["default"])(breakpointsInput);\n var spacing = (0,_createSpacing__WEBPACK_IMPORTED_MODULE_4__["default"])(spacingInput);\n var muiTheme = (0,_material_ui_utils__WEBPACK_IMPORTED_MODULE_5__["default"])({\n breakpoints: breakpoints,\n direction: \'ltr\',\n mixins: (0,_createMixins__WEBPACK_IMPORTED_MODULE_6__["default"])(breakpoints, spacing, mixinsInput),\n overrides: {},\n // Inject custom styles\n palette: palette,\n props: {},\n // Provide default props\n shadows: _shadows__WEBPACK_IMPORTED_MODULE_7__["default"],\n typography: (0,_createTypography__WEBPACK_IMPORTED_MODULE_8__["default"])(palette, typographyInput),\n spacing: spacing,\n shape: _shape__WEBPACK_IMPORTED_MODULE_9__["default"],\n transitions: _transitions__WEBPACK_IMPORTED_MODULE_10__["default"],\n zIndex: _zIndex__WEBPACK_IMPORTED_MODULE_11__["default"]\n }, other);\n\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n muiTheme = args.reduce(function (acc, argument) {\n return (0,_material_ui_utils__WEBPACK_IMPORTED_MODULE_5__["default"])(acc, argument);\n }, muiTheme);\n\n if (false) { var traverse, pseudoClasses; }\n\n return muiTheme;\n}\n\nvar warnedOnce = false;\nfunction createMuiTheme() {\n if (false) {}\n\n return createTheme.apply(void 0, arguments);\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (createTheme);\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/esm/styles/createTheme.js?')},"./node_modules/@material-ui/core/esm/styles/createTypography.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ createTypography)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @material-ui/utils */ "./node_modules/@material-ui/utils/esm/deepmerge.js");\n\n\n\n\nfunction round(value) {\n return Math.round(value * 1e5) / 1e5;\n}\n\nvar warnedOnce = false;\n\nfunction roundWithDeprecationWarning(value) {\n if (false) {}\n\n return round(value);\n}\n\nvar caseAllCaps = {\n textTransform: \'uppercase\'\n};\nvar defaultFontFamily = \'"Roboto", "Helvetica", "Arial", sans-serif\';\n/**\n * @see @link{https://material.io/design/typography/the-type-system.html}\n * @see @link{https://material.io/design/typography/understanding-typography.html}\n */\n\nfunction createTypography(palette, typography) {\n var _ref = typeof typography === \'function\' ? typography(palette) : typography,\n _ref$fontFamily = _ref.fontFamily,\n fontFamily = _ref$fontFamily === void 0 ? defaultFontFamily : _ref$fontFamily,\n _ref$fontSize = _ref.fontSize,\n fontSize = _ref$fontSize === void 0 ? 14 : _ref$fontSize,\n _ref$fontWeightLight = _ref.fontWeightLight,\n fontWeightLight = _ref$fontWeightLight === void 0 ? 300 : _ref$fontWeightLight,\n _ref$fontWeightRegula = _ref.fontWeightRegular,\n fontWeightRegular = _ref$fontWeightRegula === void 0 ? 400 : _ref$fontWeightRegula,\n _ref$fontWeightMedium = _ref.fontWeightMedium,\n fontWeightMedium = _ref$fontWeightMedium === void 0 ? 500 : _ref$fontWeightMedium,\n _ref$fontWeightBold = _ref.fontWeightBold,\n fontWeightBold = _ref$fontWeightBold === void 0 ? 700 : _ref$fontWeightBold,\n _ref$htmlFontSize = _ref.htmlFontSize,\n htmlFontSize = _ref$htmlFontSize === void 0 ? 16 : _ref$htmlFontSize,\n allVariants = _ref.allVariants,\n pxToRem2 = _ref.pxToRem,\n other = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__["default"])(_ref, ["fontFamily", "fontSize", "fontWeightLight", "fontWeightRegular", "fontWeightMedium", "fontWeightBold", "htmlFontSize", "allVariants", "pxToRem"]);\n\n if (false) {}\n\n var coef = fontSize / 14;\n\n var pxToRem = pxToRem2 || function (size) {\n return "".concat(size / htmlFontSize * coef, "rem");\n };\n\n var buildVariant = function buildVariant(fontWeight, size, lineHeight, letterSpacing, casing) {\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({\n fontFamily: fontFamily,\n fontWeight: fontWeight,\n fontSize: pxToRem(size),\n // Unitless following https://meyerweb.com/eric/thoughts/2006/02/08/unitless-line-heights/\n lineHeight: lineHeight\n }, fontFamily === defaultFontFamily ? {\n letterSpacing: "".concat(round(letterSpacing / size), "em")\n } : {}, casing, allVariants);\n };\n\n var variants = {\n h1: buildVariant(fontWeightLight, 96, 1.167, -1.5),\n h2: buildVariant(fontWeightLight, 60, 1.2, -0.5),\n h3: buildVariant(fontWeightRegular, 48, 1.167, 0),\n h4: buildVariant(fontWeightRegular, 34, 1.235, 0.25),\n h5: buildVariant(fontWeightRegular, 24, 1.334, 0),\n h6: buildVariant(fontWeightMedium, 20, 1.6, 0.15),\n subtitle1: buildVariant(fontWeightRegular, 16, 1.75, 0.15),\n subtitle2: buildVariant(fontWeightMedium, 14, 1.57, 0.1),\n body1: buildVariant(fontWeightRegular, 16, 1.5, 0.15),\n body2: buildVariant(fontWeightRegular, 14, 1.43, 0.15),\n button: buildVariant(fontWeightMedium, 14, 1.75, 0.4, caseAllCaps),\n caption: buildVariant(fontWeightRegular, 12, 1.66, 0.4),\n overline: buildVariant(fontWeightRegular, 12, 2.66, 1, caseAllCaps)\n };\n return (0,_material_ui_utils__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({\n htmlFontSize: htmlFontSize,\n pxToRem: pxToRem,\n round: roundWithDeprecationWarning,\n // TODO v5: remove\n fontFamily: fontFamily,\n fontSize: fontSize,\n fontWeightLight: fontWeightLight,\n fontWeightRegular: fontWeightRegular,\n fontWeightMedium: fontWeightMedium,\n fontWeightBold: fontWeightBold\n }, variants), other, {\n clone: false // No need to clone deep\n\n });\n}\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/esm/styles/createTypography.js?')},"./node_modules/@material-ui/core/esm/styles/defaultTheme.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _createTheme__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./createTheme */ "./node_modules/@material-ui/core/esm/styles/createTheme.js");\n\nvar defaultTheme = (0,_createTheme__WEBPACK_IMPORTED_MODULE_0__["default"])();\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaultTheme);\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/esm/styles/defaultTheme.js?')},"./node_modules/@material-ui/core/esm/styles/shadows.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar shadowKeyUmbraOpacity = 0.2;\nvar shadowKeyPenumbraOpacity = 0.14;\nvar shadowAmbientShadowOpacity = 0.12;\n\nfunction createShadow() {\n return ["".concat(arguments.length <= 0 ? undefined : arguments[0], "px ").concat(arguments.length <= 1 ? undefined : arguments[1], "px ").concat(arguments.length <= 2 ? undefined : arguments[2], "px ").concat(arguments.length <= 3 ? undefined : arguments[3], "px rgba(0,0,0,").concat(shadowKeyUmbraOpacity, ")"), "".concat(arguments.length <= 4 ? undefined : arguments[4], "px ").concat(arguments.length <= 5 ? undefined : arguments[5], "px ").concat(arguments.length <= 6 ? undefined : arguments[6], "px ").concat(arguments.length <= 7 ? undefined : arguments[7], "px rgba(0,0,0,").concat(shadowKeyPenumbraOpacity, ")"), "".concat(arguments.length <= 8 ? undefined : arguments[8], "px ").concat(arguments.length <= 9 ? undefined : arguments[9], "px ").concat(arguments.length <= 10 ? undefined : arguments[10], "px ").concat(arguments.length <= 11 ? undefined : arguments[11], "px rgba(0,0,0,").concat(shadowAmbientShadowOpacity, ")")].join(\',\');\n} // Values from https://github.com/material-components/material-components-web/blob/be8747f94574669cb5e7add1a7c54fa41a89cec7/packages/mdc-elevation/_variables.scss\n\n\nvar shadows = [\'none\', createShadow(0, 2, 1, -1, 0, 1, 1, 0, 0, 1, 3, 0), createShadow(0, 3, 1, -2, 0, 2, 2, 0, 0, 1, 5, 0), createShadow(0, 3, 3, -2, 0, 3, 4, 0, 0, 1, 8, 0), createShadow(0, 2, 4, -1, 0, 4, 5, 0, 0, 1, 10, 0), createShadow(0, 3, 5, -1, 0, 5, 8, 0, 0, 1, 14, 0), createShadow(0, 3, 5, -1, 0, 6, 10, 0, 0, 1, 18, 0), createShadow(0, 4, 5, -2, 0, 7, 10, 1, 0, 2, 16, 1), createShadow(0, 5, 5, -3, 0, 8, 10, 1, 0, 3, 14, 2), createShadow(0, 5, 6, -3, 0, 9, 12, 1, 0, 3, 16, 2), createShadow(0, 6, 6, -3, 0, 10, 14, 1, 0, 4, 18, 3), createShadow(0, 6, 7, -4, 0, 11, 15, 1, 0, 4, 20, 3), createShadow(0, 7, 8, -4, 0, 12, 17, 2, 0, 5, 22, 4), createShadow(0, 7, 8, -4, 0, 13, 19, 2, 0, 5, 24, 4), createShadow(0, 7, 9, -4, 0, 14, 21, 2, 0, 5, 26, 4), createShadow(0, 8, 9, -5, 0, 15, 22, 2, 0, 6, 28, 5), createShadow(0, 8, 10, -5, 0, 16, 24, 2, 0, 6, 30, 5), createShadow(0, 8, 11, -5, 0, 17, 26, 2, 0, 6, 32, 5), createShadow(0, 9, 11, -5, 0, 18, 28, 2, 0, 7, 34, 6), createShadow(0, 9, 12, -6, 0, 19, 29, 2, 0, 7, 36, 6), createShadow(0, 10, 13, -6, 0, 20, 31, 3, 0, 8, 38, 7), createShadow(0, 10, 13, -6, 0, 21, 33, 3, 0, 8, 40, 7), createShadow(0, 10, 14, -6, 0, 22, 35, 3, 0, 8, 42, 7), createShadow(0, 11, 14, -7, 0, 23, 36, 3, 0, 9, 44, 8), createShadow(0, 11, 15, -7, 0, 24, 38, 3, 0, 9, 46, 8)];\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (shadows);\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/esm/styles/shadows.js?')},"./node_modules/@material-ui/core/esm/styles/shape.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar shape = {\n borderRadius: 4\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (shape);\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/esm/styles/shape.js?')},"./node_modules/@material-ui/core/esm/styles/transitions.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "easing": () => (/* binding */ easing),\n/* harmony export */ "duration": () => (/* binding */ duration),\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");\n\n// Follow https://material.google.com/motion/duration-easing.html#duration-easing-natural-easing-curves\n// to learn the context in which each easing should be used.\nvar easing = {\n // This is the most common easing curve.\n easeInOut: \'cubic-bezier(0.4, 0, 0.2, 1)\',\n // Objects enter the screen at full velocity from off-screen and\n // slowly decelerate to a resting point.\n easeOut: \'cubic-bezier(0.0, 0, 0.2, 1)\',\n // Objects leave the screen at full velocity. They do not decelerate when off-screen.\n easeIn: \'cubic-bezier(0.4, 0, 1, 1)\',\n // The sharp curve is used by objects that may return to the screen at any time.\n sharp: \'cubic-bezier(0.4, 0, 0.6, 1)\'\n}; // Follow https://material.io/guidelines/motion/duration-easing.html#duration-easing-common-durations\n// to learn when use what timing\n\nvar duration = {\n shortest: 150,\n shorter: 200,\n short: 250,\n // most basic recommended timing\n standard: 300,\n // this is to be used in complex animations\n complex: 375,\n // recommended when something is entering screen\n enteringScreen: 225,\n // recommended when something is leaving screen\n leavingScreen: 195\n};\n\nfunction formatMs(milliseconds) {\n return "".concat(Math.round(milliseconds), "ms");\n}\n/**\n * @param {string|Array} props\n * @param {object} param\n * @param {string} param.prop\n * @param {number} param.duration\n * @param {string} param.easing\n * @param {number} param.delay\n */\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n easing: easing,\n duration: duration,\n create: function create() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [\'all\'];\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var _options$duration = options.duration,\n durationOption = _options$duration === void 0 ? duration.standard : _options$duration,\n _options$easing = options.easing,\n easingOption = _options$easing === void 0 ? easing.easeInOut : _options$easing,\n _options$delay = options.delay,\n delay = _options$delay === void 0 ? 0 : _options$delay,\n other = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__["default"])(options, ["duration", "easing", "delay"]);\n\n if (false) { var isNumber, isString; }\n\n return (Array.isArray(props) ? props : [props]).map(function (animatedProp) {\n return "".concat(animatedProp, " ").concat(typeof durationOption === \'string\' ? durationOption : formatMs(durationOption), " ").concat(easingOption, " ").concat(typeof delay === \'string\' ? delay : formatMs(delay));\n }).join(\',\');\n },\n getAutoHeightDuration: function getAutoHeightDuration(height) {\n if (!height) {\n return 0;\n }\n\n var constant = height / 36; // https://www.wolframalpha.com/input/?i=(4+%2B+15+*+(x+%2F+36+)+**+0.25+%2B+(x+%2F+36)+%2F+5)+*+10\n\n return Math.round((4 + 15 * Math.pow(constant, 0.25) + constant / 5) * 10);\n }\n});\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/esm/styles/transitions.js?')},"./node_modules/@material-ui/core/esm/styles/withStyles.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js");\n/* harmony import */ var _material_ui_styles__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @material-ui/styles */ "./node_modules/@material-ui/styles/esm/withStyles/withStyles.js");\n/* harmony import */ var _defaultTheme__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./defaultTheme */ "./node_modules/@material-ui/core/esm/styles/defaultTheme.js");\n\n\n\n\nfunction withStyles(stylesOrCreator, options) {\n return (0,_material_ui_styles__WEBPACK_IMPORTED_MODULE_1__["default"])(stylesOrCreator, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({\n defaultTheme: _defaultTheme__WEBPACK_IMPORTED_MODULE_2__["default"]\n }, options));\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (withStyles);\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/esm/styles/withStyles.js?')},"./node_modules/@material-ui/core/esm/styles/zIndex.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n// We need to centralize the zIndex definitions as they work\n// like global values in the browser.\nvar zIndex = {\n mobileStepper: 1000,\n speedDial: 1050,\n appBar: 1100,\n drawer: 1200,\n modal: 1300,\n snackbar: 1400,\n tooltip: 1500\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (zIndex);\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/esm/styles/zIndex.js?')},"./node_modules/@material-ui/core/esm/utils/capitalize.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ capitalize)\n/* harmony export */ });\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @material-ui/utils */ "./node_modules/@material-ui/utils/esm/formatMuiErrorMessage.js");\n\n// It should to be noted that this function isn\'t equivalent to `text-transform: capitalize`.\n//\n// A strict capitalization should uppercase the first letter of each word a the sentence.\n// We only handle the first word.\nfunction capitalize(string) {\n if (typeof string !== \'string\') {\n throw new Error( false ? 0 : (0,_material_ui_utils__WEBPACK_IMPORTED_MODULE_0__["default"])(7));\n }\n\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/esm/utils/capitalize.js?')},"./node_modules/@material-ui/core/esm/utils/createChainedFunction.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ createChainedFunction)\n/* harmony export */ });\n/**\n * Safe chained function\n *\n * Will only create a new function if needed,\n * otherwise will pass back existing functions or null.\n *\n * @param {function} functions to chain\n * @returns {function|null}\n */\nfunction createChainedFunction() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return funcs.reduce(function (acc, func) {\n if (func == null) {\n return acc;\n }\n\n if (false) {}\n\n return function chainedFunction() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n acc.apply(this, args);\n func.apply(this, args);\n };\n }, function () {});\n}\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/esm/utils/createChainedFunction.js?')},"./node_modules/@material-ui/core/esm/utils/createSvgIcon.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ createSvgIcon)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");\n/* harmony import */ var _SvgIcon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../SvgIcon */ "./node_modules/@material-ui/core/esm/SvgIcon/SvgIcon.js");\n\n\n\n/**\n * Private module reserved for @material-ui/x packages.\n */\n\nfunction createSvgIcon(path, displayName) {\n var Component = function Component(props, ref) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_SvgIcon__WEBPACK_IMPORTED_MODULE_2__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({\n ref: ref\n }, props), path);\n };\n\n if (false) {}\n\n Component.muiName = _SvgIcon__WEBPACK_IMPORTED_MODULE_2__["default"].muiName;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.memo( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(Component));\n}\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/esm/utils/createSvgIcon.js?')},"./node_modules/@material-ui/core/esm/utils/debounce.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ debounce)\n/* harmony export */ });\n// Corresponds to 10 frames at 60 Hz.\n// A few bytes payload overhead when lodash/debounce is ~3 kB and debounce ~300 B.\nfunction debounce(func) {\n var wait = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 166;\n var timeout;\n\n function debounced() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n // eslint-disable-next-line consistent-this\n var that = this;\n\n var later = function later() {\n func.apply(that, args);\n };\n\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n }\n\n debounced.clear = function () {\n clearTimeout(timeout);\n };\n\n return debounced;\n}\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/esm/utils/debounce.js?')},"./node_modules/@material-ui/core/esm/utils/deprecatedPropType.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ deprecatedPropType)\n/* harmony export */ });\nfunction deprecatedPropType(validator, reason) {\n if (true) {\n return function () {\n return null;\n };\n }\n\n return function (props, propName, componentName, location, propFullName) {\n var componentNameSafe = componentName || \'<>\';\n var propFullNameSafe = propFullName || propName;\n\n if (typeof props[propName] !== \'undefined\') {\n return new Error("The ".concat(location, " `").concat(propFullNameSafe, "` of ") + "`".concat(componentNameSafe, "` is deprecated. ").concat(reason));\n }\n\n return null;\n };\n}\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/esm/utils/deprecatedPropType.js?')},"./node_modules/@material-ui/core/esm/utils/index.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "capitalize": () => (/* reexport safe */ _capitalize__WEBPACK_IMPORTED_MODULE_0__["default"]),\n/* harmony export */ "createChainedFunction": () => (/* reexport safe */ _createChainedFunction__WEBPACK_IMPORTED_MODULE_1__["default"]),\n/* harmony export */ "createSvgIcon": () => (/* reexport safe */ _createSvgIcon__WEBPACK_IMPORTED_MODULE_2__["default"]),\n/* harmony export */ "debounce": () => (/* reexport safe */ _debounce__WEBPACK_IMPORTED_MODULE_3__["default"]),\n/* harmony export */ "deprecatedPropType": () => (/* reexport safe */ _deprecatedPropType__WEBPACK_IMPORTED_MODULE_4__["default"]),\n/* harmony export */ "isMuiElement": () => (/* reexport safe */ _isMuiElement__WEBPACK_IMPORTED_MODULE_5__["default"]),\n/* harmony export */ "ownerDocument": () => (/* reexport safe */ _ownerDocument__WEBPACK_IMPORTED_MODULE_6__["default"]),\n/* harmony export */ "ownerWindow": () => (/* reexport safe */ _ownerWindow__WEBPACK_IMPORTED_MODULE_7__["default"]),\n/* harmony export */ "requirePropFactory": () => (/* reexport safe */ _requirePropFactory__WEBPACK_IMPORTED_MODULE_8__["default"]),\n/* harmony export */ "setRef": () => (/* reexport safe */ _setRef__WEBPACK_IMPORTED_MODULE_9__["default"]),\n/* harmony export */ "unsupportedProp": () => (/* reexport safe */ _unsupportedProp__WEBPACK_IMPORTED_MODULE_10__["default"]),\n/* harmony export */ "useControlled": () => (/* reexport safe */ _useControlled__WEBPACK_IMPORTED_MODULE_11__["default"]),\n/* harmony export */ "useEventCallback": () => (/* reexport safe */ _useEventCallback__WEBPACK_IMPORTED_MODULE_12__["default"]),\n/* harmony export */ "useForkRef": () => (/* reexport safe */ _useForkRef__WEBPACK_IMPORTED_MODULE_13__["default"]),\n/* harmony export */ "unstable_useId": () => (/* reexport safe */ _unstable_useId__WEBPACK_IMPORTED_MODULE_14__["default"]),\n/* harmony export */ "useIsFocusVisible": () => (/* reexport safe */ _useIsFocusVisible__WEBPACK_IMPORTED_MODULE_15__["default"])\n/* harmony export */ });\n/* harmony import */ var _capitalize__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./capitalize */ "./node_modules/@material-ui/core/esm/utils/capitalize.js");\n/* harmony import */ var _createChainedFunction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./createChainedFunction */ "./node_modules/@material-ui/core/esm/utils/createChainedFunction.js");\n/* harmony import */ var _createSvgIcon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./createSvgIcon */ "./node_modules/@material-ui/core/esm/utils/createSvgIcon.js");\n/* harmony import */ var _debounce__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./debounce */ "./node_modules/@material-ui/core/esm/utils/debounce.js");\n/* harmony import */ var _deprecatedPropType__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./deprecatedPropType */ "./node_modules/@material-ui/core/esm/utils/deprecatedPropType.js");\n/* harmony import */ var _isMuiElement__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./isMuiElement */ "./node_modules/@material-ui/core/esm/utils/isMuiElement.js");\n/* harmony import */ var _ownerDocument__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./ownerDocument */ "./node_modules/@material-ui/core/esm/utils/ownerDocument.js");\n/* harmony import */ var _ownerWindow__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./ownerWindow */ "./node_modules/@material-ui/core/esm/utils/ownerWindow.js");\n/* harmony import */ var _requirePropFactory__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./requirePropFactory */ "./node_modules/@material-ui/core/esm/utils/requirePropFactory.js");\n/* harmony import */ var _setRef__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./setRef */ "./node_modules/@material-ui/core/esm/utils/setRef.js");\n/* harmony import */ var _unsupportedProp__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./unsupportedProp */ "./node_modules/@material-ui/core/esm/utils/unsupportedProp.js");\n/* harmony import */ var _useControlled__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./useControlled */ "./node_modules/@material-ui/core/esm/utils/useControlled.js");\n/* harmony import */ var _useEventCallback__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./useEventCallback */ "./node_modules/@material-ui/core/esm/utils/useEventCallback.js");\n/* harmony import */ var _useForkRef__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./useForkRef */ "./node_modules/@material-ui/core/esm/utils/useForkRef.js");\n/* harmony import */ var _unstable_useId__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./unstable_useId */ "./node_modules/@material-ui/core/esm/utils/unstable_useId.js");\n/* harmony import */ var _useIsFocusVisible__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./useIsFocusVisible */ "./node_modules/@material-ui/core/esm/utils/useIsFocusVisible.js");\n\n\n\n\n\n\n\n\n\n\n\n\n\n // eslint-disable-next-line camelcase\n\n\n\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/esm/utils/index.js?')},"./node_modules/@material-ui/core/esm/utils/isMuiElement.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ isMuiElement)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");\n\nfunction isMuiElement(element, muiNames) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.isValidElement(element) && muiNames.indexOf(element.type.muiName) !== -1;\n}\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/esm/utils/isMuiElement.js?')},"./node_modules/@material-ui/core/esm/utils/ownerDocument.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ ownerDocument)\n/* harmony export */ });\nfunction ownerDocument(node) {\n return node && node.ownerDocument || document;\n}\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/esm/utils/ownerDocument.js?')},"./node_modules/@material-ui/core/esm/utils/ownerWindow.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ ownerWindow)\n/* harmony export */ });\n/* harmony import */ var _ownerDocument__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ownerDocument */ "./node_modules/@material-ui/core/esm/utils/ownerDocument.js");\n\nfunction ownerWindow(node) {\n var doc = (0,_ownerDocument__WEBPACK_IMPORTED_MODULE_0__["default"])(node);\n return doc.defaultView || window;\n}\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/esm/utils/ownerWindow.js?')},"./node_modules/@material-ui/core/esm/utils/requirePropFactory.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ requirePropFactory)\n/* harmony export */ });\nfunction requirePropFactory(componentNameInError) {\n if (true) {\n return function () {\n return null;\n };\n }\n\n var requireProp = function requireProp(requiredProp) {\n return function (props, propName, componentName, location, propFullName) {\n var propFullNameSafe = propFullName || propName;\n\n if (typeof props[propName] !== \'undefined\' && !props[requiredProp]) {\n return new Error("The prop `".concat(propFullNameSafe, "` of ") + "`".concat(componentNameInError, "` must be used on `").concat(requiredProp, "`."));\n }\n\n return null;\n };\n };\n\n return requireProp;\n}\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/esm/utils/requirePropFactory.js?')},"./node_modules/@material-ui/core/esm/utils/setRef.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ setRef)\n/* harmony export */ });\n// TODO v5: consider to make it private\nfunction setRef(ref, value) {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref) {\n ref.current = value;\n }\n}\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/esm/utils/setRef.js?")},"./node_modules/@material-ui/core/esm/utils/unstable_useId.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ useId)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");\n\n/**\n * Private module reserved for @material-ui/x packages.\n */\n\nfunction useId(idOverride) {\n var _React$useState = react__WEBPACK_IMPORTED_MODULE_0__.useState(idOverride),\n defaultId = _React$useState[0],\n setDefaultId = _React$useState[1];\n\n var id = idOverride || defaultId;\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect(function () {\n if (defaultId == null) {\n // Fallback to this default id when possible.\n // Use the random value for client-side rendering only.\n // We can\'t use it server-side.\n setDefaultId("mui-".concat(Math.round(Math.random() * 1e5)));\n }\n }, [defaultId]);\n return id;\n}\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/esm/utils/unstable_useId.js?')},"./node_modules/@material-ui/core/esm/utils/unsupportedProp.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ unsupportedProp)\n/* harmony export */ });\nfunction unsupportedProp(props, propName, componentName, location, propFullName) {\n if (true) {\n return null;\n }\n\n var propFullNameSafe = propFullName || propName;\n\n if (typeof props[propName] !== \'undefined\') {\n return new Error("The prop `".concat(propFullNameSafe, "` is not supported. Please remove it."));\n }\n\n return null;\n}\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/esm/utils/unsupportedProp.js?')},"./node_modules/@material-ui/core/esm/utils/useControlled.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ useControlled)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");\n/* eslint-disable react-hooks/rules-of-hooks, react-hooks/exhaustive-deps */\n\nfunction useControlled(_ref) {\n var controlled = _ref.controlled,\n defaultProp = _ref.default,\n name = _ref.name,\n _ref$state = _ref.state,\n state = _ref$state === void 0 ? \'value\' : _ref$state;\n\n var _React$useRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(controlled !== undefined),\n isControlled = _React$useRef.current;\n\n var _React$useState = react__WEBPACK_IMPORTED_MODULE_0__.useState(defaultProp),\n valueState = _React$useState[0],\n setValue = _React$useState[1];\n\n var value = isControlled ? controlled : valueState;\n\n if (false) { var _React$useRef2, defaultValue; }\n\n var setValueIfUncontrolled = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(function (newValue) {\n if (!isControlled) {\n setValue(newValue);\n }\n }, []);\n return [value, setValueIfUncontrolled];\n}\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/esm/utils/useControlled.js?')},"./node_modules/@material-ui/core/esm/utils/useEventCallback.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ useEventCallback)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");\n\nvar useEnhancedEffect = typeof window !== \'undefined\' ? react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect : react__WEBPACK_IMPORTED_MODULE_0__.useEffect;\n/**\n * https://github.com/facebook/react/issues/14099#issuecomment-440013892\n *\n * @param {function} fn\n */\n\nfunction useEventCallback(fn) {\n var ref = react__WEBPACK_IMPORTED_MODULE_0__.useRef(fn);\n useEnhancedEffect(function () {\n ref.current = fn;\n });\n return react__WEBPACK_IMPORTED_MODULE_0__.useCallback(function () {\n return (0, ref.current).apply(void 0, arguments);\n }, []);\n}\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/esm/utils/useEventCallback.js?')},"./node_modules/@material-ui/core/esm/utils/useForkRef.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ useForkRef)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");\n/* harmony import */ var _setRef__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./setRef */ "./node_modules/@material-ui/core/esm/utils/setRef.js");\n\n\nfunction useForkRef(refA, refB) {\n /**\n * This will create a new function if the ref props change and are defined.\n * This means react will call the old forkRef with `null` and the new forkRef\n * with the ref. Cleanup naturally emerges from this behavior\n */\n return react__WEBPACK_IMPORTED_MODULE_0__.useMemo(function () {\n if (refA == null && refB == null) {\n return null;\n }\n\n return function (refValue) {\n (0,_setRef__WEBPACK_IMPORTED_MODULE_1__["default"])(refA, refValue);\n (0,_setRef__WEBPACK_IMPORTED_MODULE_1__["default"])(refB, refValue);\n };\n }, [refA, refB]);\n}\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/esm/utils/useForkRef.js?')},"./node_modules/@material-ui/core/esm/utils/useIsFocusVisible.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"teardown\": () => (/* binding */ teardown),\n/* harmony export */ \"default\": () => (/* binding */ useIsFocusVisible)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ \"./node_modules/react-dom/index.js\");\n// based on https://github.com/WICG/focus-visible/blob/v4.1.5/src/focus-visible.js\n\n\nvar hadKeyboardEvent = true;\nvar hadFocusVisibleRecently = false;\nvar hadFocusVisibleRecentlyTimeout = null;\nvar inputTypesWhitelist = {\n text: true,\n search: true,\n url: true,\n tel: true,\n email: true,\n password: true,\n number: true,\n date: true,\n month: true,\n week: true,\n time: true,\n datetime: true,\n 'datetime-local': true\n};\n/**\n * Computes whether the given element should automatically trigger the\n * `focus-visible` class being added, i.e. whether it should always match\n * `:focus-visible` when focused.\n * @param {Element} node\n * @return {boolean}\n */\n\nfunction focusTriggersKeyboardModality(node) {\n var type = node.type,\n tagName = node.tagName;\n\n if (tagName === 'INPUT' && inputTypesWhitelist[type] && !node.readOnly) {\n return true;\n }\n\n if (tagName === 'TEXTAREA' && !node.readOnly) {\n return true;\n }\n\n if (node.isContentEditable) {\n return true;\n }\n\n return false;\n}\n/**\n * Keep track of our keyboard modality state with `hadKeyboardEvent`.\n * If the most recent user interaction was via the keyboard;\n * and the key press did not include a meta, alt/option, or control key;\n * then the modality is keyboard. Otherwise, the modality is not keyboard.\n * @param {KeyboardEvent} event\n */\n\n\nfunction handleKeyDown(event) {\n if (event.metaKey || event.altKey || event.ctrlKey) {\n return;\n }\n\n hadKeyboardEvent = true;\n}\n/**\n * If at any point a user clicks with a pointing device, ensure that we change\n * the modality away from keyboard.\n * This avoids the situation where a user presses a key on an already focused\n * element, and then clicks on a different element, focusing it with a\n * pointing device, while we still think we're in keyboard modality.\n */\n\n\nfunction handlePointerDown() {\n hadKeyboardEvent = false;\n}\n\nfunction handleVisibilityChange() {\n if (this.visibilityState === 'hidden') {\n // If the tab becomes active again, the browser will handle calling focus\n // on the element (Safari actually calls it twice).\n // If this tab change caused a blur on an element with focus-visible,\n // re-apply the class when the user switches back to the tab.\n if (hadFocusVisibleRecently) {\n hadKeyboardEvent = true;\n }\n }\n}\n\nfunction prepare(doc) {\n doc.addEventListener('keydown', handleKeyDown, true);\n doc.addEventListener('mousedown', handlePointerDown, true);\n doc.addEventListener('pointerdown', handlePointerDown, true);\n doc.addEventListener('touchstart', handlePointerDown, true);\n doc.addEventListener('visibilitychange', handleVisibilityChange, true);\n}\n\nfunction teardown(doc) {\n doc.removeEventListener('keydown', handleKeyDown, true);\n doc.removeEventListener('mousedown', handlePointerDown, true);\n doc.removeEventListener('pointerdown', handlePointerDown, true);\n doc.removeEventListener('touchstart', handlePointerDown, true);\n doc.removeEventListener('visibilitychange', handleVisibilityChange, true);\n}\n\nfunction isFocusVisible(event) {\n var target = event.target;\n\n try {\n return target.matches(':focus-visible');\n } catch (error) {} // browsers not implementing :focus-visible will throw a SyntaxError\n // we use our own heuristic for those browsers\n // rethrow might be better if it's not the expected error but do we really\n // want to crash if focus-visible malfunctioned?\n // no need for validFocusTarget check. the user does that by attaching it to\n // focusable events only\n\n\n return hadKeyboardEvent || focusTriggersKeyboardModality(target);\n}\n/**\n * Should be called if a blur event is fired on a focus-visible element\n */\n\n\nfunction handleBlurVisible() {\n // To detect a tab/window switch, we look for a blur event followed\n // rapidly by a visibility change.\n // If we don't see a visibility change within 100ms, it's probably a\n // regular focus change.\n hadFocusVisibleRecently = true;\n window.clearTimeout(hadFocusVisibleRecentlyTimeout);\n hadFocusVisibleRecentlyTimeout = window.setTimeout(function () {\n hadFocusVisibleRecently = false;\n }, 100);\n}\n\nfunction useIsFocusVisible() {\n var ref = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(function (instance) {\n var node = react_dom__WEBPACK_IMPORTED_MODULE_1__.findDOMNode(instance);\n\n if (node != null) {\n prepare(node.ownerDocument);\n }\n }, []);\n\n if (false) {}\n\n return {\n isFocusVisible: isFocusVisible,\n onBlurVisible: handleBlurVisible,\n ref: ref\n };\n}\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/core/esm/utils/useIsFocusVisible.js?")},"./node_modules/@material-ui/icons/BrokenImage.js":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval('\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js");\n\nvar _interopRequireWildcard = __webpack_require__(/*! @babel/runtime/helpers/interopRequireWildcard */ "./node_modules/@babel/runtime/helpers/interopRequireWildcard.js");\n\nObject.defineProperty(exports, "__esModule", ({\n value: true\n}));\nexports["default"] = void 0;\n\nvar React = _interopRequireWildcard(__webpack_require__(/*! react */ "./node_modules/react/index.js"));\n\nvar _createSvgIcon = _interopRequireDefault(__webpack_require__(/*! ./utils/createSvgIcon */ "./node_modules/@material-ui/icons/utils/createSvgIcon.js"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement("path", {\n d: "M21 5v6.59l-3-3.01-4 4.01-4-4-4 4-3-3.01V5c0-1.1.9-2 2-2h14c1.1 0 2 .9 2 2zm-3 6.42l3 3.01V19c0 1.1-.9 2-2 2H5c-1.1 0-2-.9-2-2v-6.58l3 2.99 4-4 4 4 4-3.99z"\n}), \'BrokenImage\');\n\nexports["default"] = _default;\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/icons/BrokenImage.js?')},"./node_modules/@material-ui/icons/utils/createSvgIcon.js":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", ({\n value: true\n}));\nObject.defineProperty(exports, "default", ({\n enumerable: true,\n get: function get() {\n return _utils.createSvgIcon;\n }\n}));\n\nvar _utils = __webpack_require__(/*! @material-ui/core/utils */ "./node_modules/@material-ui/core/esm/utils/index.js");\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/icons/utils/createSvgIcon.js?')},"./node_modules/@material-ui/styles/esm/StylesProvider/StylesProvider.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "sheetsManager": () => (/* binding */ sheetsManager),\n/* harmony export */ "StylesContext": () => (/* binding */ StylesContext),\n/* harmony export */ "default": () => (/* binding */ StylesProvider)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");\n/* harmony import */ var _createGenerateClassName__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../createGenerateClassName */ "./node_modules/@material-ui/styles/esm/createGenerateClassName/createGenerateClassName.js");\n/* harmony import */ var jss__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! jss */ "./node_modules/jss/dist/jss.esm.js");\n/* harmony import */ var _jssPreset__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../jssPreset */ "./node_modules/@material-ui/styles/esm/jssPreset/jssPreset.js");\n\n\n\n\n\n\n\n // Default JSS instance.\n\nvar jss = (0,jss__WEBPACK_IMPORTED_MODULE_3__.create)((0,_jssPreset__WEBPACK_IMPORTED_MODULE_4__["default"])()); // Use a singleton or the provided one by the context.\n//\n// The counter-based approach doesn\'t tolerate any mistake.\n// It\'s much safer to use the same counter everywhere.\n\nvar generateClassName = (0,_createGenerateClassName__WEBPACK_IMPORTED_MODULE_5__["default"])(); // Exported for test purposes\n\nvar sheetsManager = new Map();\nvar defaultOptions = {\n disableGeneration: false,\n generateClassName: generateClassName,\n jss: jss,\n sheetsCache: null,\n sheetsManager: sheetsManager,\n sheetsRegistry: null\n};\nvar StylesContext = react__WEBPACK_IMPORTED_MODULE_2__.createContext(defaultOptions);\n\nif (false) {}\n\nvar injectFirstNode;\nfunction StylesProvider(props) {\n var children = props.children,\n _props$injectFirst = props.injectFirst,\n injectFirst = _props$injectFirst === void 0 ? false : _props$injectFirst,\n _props$disableGenerat = props.disableGeneration,\n disableGeneration = _props$disableGenerat === void 0 ? false : _props$disableGenerat,\n localOptions = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__["default"])(props, ["children", "injectFirst", "disableGeneration"]);\n\n var outerOptions = react__WEBPACK_IMPORTED_MODULE_2__.useContext(StylesContext);\n\n var context = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, outerOptions, {\n disableGeneration: disableGeneration\n }, localOptions);\n\n if (false) {}\n\n if (false) {}\n\n if (false) {}\n\n if (!context.jss.options.insertionPoint && injectFirst && typeof window !== \'undefined\') {\n if (!injectFirstNode) {\n var head = document.head;\n injectFirstNode = document.createComment(\'mui-inject-first\');\n head.insertBefore(injectFirstNode, head.firstChild);\n }\n\n context.jss = (0,jss__WEBPACK_IMPORTED_MODULE_3__.create)({\n plugins: (0,_jssPreset__WEBPACK_IMPORTED_MODULE_4__["default"])().plugins,\n insertionPoint: injectFirstNode\n });\n }\n\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(StylesContext.Provider, {\n value: context\n }, children);\n}\n false ? 0 : void 0;\n\nif (false) {}\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/styles/esm/StylesProvider/StylesProvider.js?')},"./node_modules/@material-ui/styles/esm/ThemeProvider/nested.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasSymbol ? Symbol.for('mui.nested') : '__THEME_NESTED__');\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/styles/esm/ThemeProvider/nested.js?")},"./node_modules/@material-ui/styles/esm/createGenerateClassName/createGenerateClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ createGenerateClassName)\n/* harmony export */ });\n/* harmony import */ var _ThemeProvider_nested__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../ThemeProvider/nested */ "./node_modules/@material-ui/styles/esm/ThemeProvider/nested.js");\n\n/**\n * This is the list of the style rule name we use as drop in replacement for the built-in\n * pseudo classes (:checked, :disabled, :focused, etc.).\n *\n * Why do they exist in the first place?\n * These classes are used at a specificity of 2.\n * It allows them to override previously definied styles as well as\n * being untouched by simple user overrides.\n */\n\nvar pseudoClasses = [\'checked\', \'disabled\', \'error\', \'focused\', \'focusVisible\', \'required\', \'expanded\', \'selected\']; // Returns a function which generates unique class names based on counters.\n// When new generator function is created, rule counter is reset.\n// We need to reset the rule counter for SSR for each request.\n//\n// It\'s inspired by\n// https://github.com/cssinjs/jss/blob/4e6a05dd3f7b6572fdd3ab216861d9e446c20331/src/utils/createGenerateClassName.js\n\nfunction createGenerateClassName() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var _options$disableGloba = options.disableGlobal,\n disableGlobal = _options$disableGloba === void 0 ? false : _options$disableGloba,\n _options$productionPr = options.productionPrefix,\n productionPrefix = _options$productionPr === void 0 ? \'jss\' : _options$productionPr,\n _options$seed = options.seed,\n seed = _options$seed === void 0 ? \'\' : _options$seed;\n var seedPrefix = seed === \'\' ? \'\' : "".concat(seed, "-");\n var ruleCounter = 0;\n\n var getNextCounterId = function getNextCounterId() {\n ruleCounter += 1;\n\n if (false) {}\n\n return ruleCounter;\n };\n\n return function (rule, styleSheet) {\n var name = styleSheet.options.name; // Is a global static MUI style?\n\n if (name && name.indexOf(\'Mui\') === 0 && !styleSheet.options.link && !disableGlobal) {\n // We can use a shorthand class name, we never use the keys to style the components.\n if (pseudoClasses.indexOf(rule.key) !== -1) {\n return "Mui-".concat(rule.key);\n }\n\n var prefix = "".concat(seedPrefix).concat(name, "-").concat(rule.key);\n\n if (!styleSheet.options.theme[_ThemeProvider_nested__WEBPACK_IMPORTED_MODULE_0__["default"]] || seed !== \'\') {\n return prefix;\n }\n\n return "".concat(prefix, "-").concat(getNextCounterId());\n }\n\n if (true) {\n return "".concat(seedPrefix).concat(productionPrefix).concat(getNextCounterId());\n }\n\n var suffix = "".concat(rule.key, "-").concat(getNextCounterId()); // Help with debuggability.\n\n if (styleSheet.options.classNamePrefix) {\n return "".concat(seedPrefix).concat(styleSheet.options.classNamePrefix, "-").concat(suffix);\n }\n\n return "".concat(seedPrefix).concat(suffix);\n };\n}\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/styles/esm/createGenerateClassName/createGenerateClassName.js?')},"./node_modules/@material-ui/styles/esm/getStylesCreator/getStylesCreator.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ getStylesCreator)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js");\n/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "./node_modules/@babel/runtime/helpers/esm/typeof.js");\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @material-ui/utils */ "./node_modules/@material-ui/utils/esm/deepmerge.js");\n\n\n\n\nfunction getStylesCreator(stylesOrCreator) {\n var themingEnabled = typeof stylesOrCreator === \'function\';\n\n if (false) {}\n\n return {\n create: function create(theme, name) {\n var styles;\n\n try {\n styles = themingEnabled ? stylesOrCreator(theme) : stylesOrCreator;\n } catch (err) {\n if (false) {}\n\n throw err;\n }\n\n if (!name || !theme.overrides || !theme.overrides[name]) {\n return styles;\n }\n\n var overrides = theme.overrides[name];\n\n var stylesWithOverrides = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, styles);\n\n Object.keys(overrides).forEach(function (key) {\n if (false) {}\n\n stylesWithOverrides[key] = (0,_material_ui_utils__WEBPACK_IMPORTED_MODULE_2__["default"])(stylesWithOverrides[key], overrides[key]);\n });\n return stylesWithOverrides;\n },\n options: {}\n };\n}\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/styles/esm/getStylesCreator/getStylesCreator.js?')},"./node_modules/@material-ui/styles/esm/getStylesCreator/noopTheme.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n// We use the same empty object to ref count the styles that don\'t need a theme object.\nvar noopTheme = {};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (noopTheme);\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/styles/esm/getStylesCreator/noopTheme.js?')},"./node_modules/@material-ui/styles/esm/getThemeProps/getThemeProps.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ getThemeProps)\n/* harmony export */ });\n/* eslint-disable no-restricted-syntax */\nfunction getThemeProps(params) {\n var theme = params.theme,\n name = params.name,\n props = params.props;\n\n if (!theme || !theme.props || !theme.props[name]) {\n return props;\n } // Resolve default props, code borrow from React source.\n // https://github.com/facebook/react/blob/15a8f031838a553e41c0b66eb1bcf1da8448104d/packages/react/src/ReactElement.js#L221\n\n\n var defaultProps = theme.props[name];\n var propName;\n\n for (propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n\n return props;\n}\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/styles/esm/getThemeProps/getThemeProps.js?')},"./node_modules/@material-ui/styles/esm/jssPreset/jssPreset.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ jssPreset)\n/* harmony export */ });\n/* harmony import */ var jss_plugin_rule_value_function__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jss-plugin-rule-value-function */ "./node_modules/jss-plugin-rule-value-function/dist/jss-plugin-rule-value-function.esm.js");\n/* harmony import */ var jss_plugin_global__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! jss-plugin-global */ "./node_modules/jss-plugin-global/dist/jss-plugin-global.esm.js");\n/* harmony import */ var jss_plugin_nested__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! jss-plugin-nested */ "./node_modules/jss-plugin-nested/dist/jss-plugin-nested.esm.js");\n/* harmony import */ var jss_plugin_camel_case__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! jss-plugin-camel-case */ "./node_modules/jss-plugin-camel-case/dist/jss-plugin-camel-case.esm.js");\n/* harmony import */ var jss_plugin_default_unit__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! jss-plugin-default-unit */ "./node_modules/jss-plugin-default-unit/dist/jss-plugin-default-unit.esm.js");\n/* harmony import */ var jss_plugin_vendor_prefixer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! jss-plugin-vendor-prefixer */ "./node_modules/jss-plugin-vendor-prefixer/dist/jss-plugin-vendor-prefixer.esm.js");\n/* harmony import */ var jss_plugin_props_sort__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! jss-plugin-props-sort */ "./node_modules/jss-plugin-props-sort/dist/jss-plugin-props-sort.esm.js");\n\n\n\n\n\n\n // Subset of jss-preset-default with only the plugins the Material-UI components are using.\n\nfunction jssPreset() {\n return {\n plugins: [(0,jss_plugin_rule_value_function__WEBPACK_IMPORTED_MODULE_0__["default"])(), (0,jss_plugin_global__WEBPACK_IMPORTED_MODULE_1__["default"])(), (0,jss_plugin_nested__WEBPACK_IMPORTED_MODULE_2__["default"])(), (0,jss_plugin_camel_case__WEBPACK_IMPORTED_MODULE_3__["default"])(), (0,jss_plugin_default_unit__WEBPACK_IMPORTED_MODULE_4__["default"])(), // Disable the vendor prefixer server-side, it does nothing.\n // This way, we can get a performance boost.\n // In the documentation, we are using `autoprefixer` to solve this problem.\n typeof window === \'undefined\' ? null : (0,jss_plugin_vendor_prefixer__WEBPACK_IMPORTED_MODULE_5__["default"])(), (0,jss_plugin_props_sort__WEBPACK_IMPORTED_MODULE_6__["default"])()]\n };\n}\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/styles/esm/jssPreset/jssPreset.js?')},"./node_modules/@material-ui/styles/esm/makeStyles/indexCounter.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "increment": () => (/* binding */ increment)\n/* harmony export */ });\n/* eslint-disable import/prefer-default-export */\n// Global index counter to preserve source order.\n// We create the style sheet during the creation of the component,\n// children are handled after the parents, so the order of style elements would be parent->child.\n// It is a problem though when a parent passes a className\n// which needs to override any child\'s styles.\n// StyleSheet of the child has a higher specificity, because of the source order.\n// So our solution is to render sheets them in the reverse order child->sheet, so\n// that parent has a higher specificity.\nvar indexCounter = -1e9;\nfunction increment() {\n indexCounter += 1;\n\n if (false) {}\n\n return indexCounter;\n}\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/styles/esm/makeStyles/indexCounter.js?')},"./node_modules/@material-ui/styles/esm/makeStyles/makeStyles.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ makeStyles)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");\n/* harmony import */ var jss__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! jss */ "./node_modules/jss/dist/jss.esm.js");\n/* harmony import */ var _mergeClasses__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../mergeClasses */ "./node_modules/@material-ui/styles/esm/mergeClasses/mergeClasses.js");\n/* harmony import */ var _multiKeyStore__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./multiKeyStore */ "./node_modules/@material-ui/styles/esm/makeStyles/multiKeyStore.js");\n/* harmony import */ var _useTheme__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../useTheme */ "./node_modules/@material-ui/styles/esm/useTheme/useTheme.js");\n/* harmony import */ var _StylesProvider__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../StylesProvider */ "./node_modules/@material-ui/styles/esm/StylesProvider/StylesProvider.js");\n/* harmony import */ var _indexCounter__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./indexCounter */ "./node_modules/@material-ui/styles/esm/makeStyles/indexCounter.js");\n/* harmony import */ var _getStylesCreator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../getStylesCreator */ "./node_modules/@material-ui/styles/esm/getStylesCreator/getStylesCreator.js");\n/* harmony import */ var _getStylesCreator_noopTheme__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../getStylesCreator/noopTheme */ "./node_modules/@material-ui/styles/esm/getStylesCreator/noopTheme.js");\n\n\n\n\n\n\n\n\n\n\n\n\nfunction getClasses(_ref, classes, Component) {\n var state = _ref.state,\n stylesOptions = _ref.stylesOptions;\n\n if (stylesOptions.disableGeneration) {\n return classes || {};\n }\n\n if (!state.cacheClasses) {\n state.cacheClasses = {\n // Cache for the finalized classes value.\n value: null,\n // Cache for the last used classes prop pointer.\n lastProp: null,\n // Cache for the last used rendered classes pointer.\n lastJSS: {}\n };\n } // Tracks if either the rendered classes or classes prop has changed,\n // requiring the generation of a new finalized classes object.\n\n\n var generate = false;\n\n if (state.classes !== state.cacheClasses.lastJSS) {\n state.cacheClasses.lastJSS = state.classes;\n generate = true;\n }\n\n if (classes !== state.cacheClasses.lastProp) {\n state.cacheClasses.lastProp = classes;\n generate = true;\n }\n\n if (generate) {\n state.cacheClasses.value = (0,_mergeClasses__WEBPACK_IMPORTED_MODULE_3__["default"])({\n baseClasses: state.cacheClasses.lastJSS,\n newClasses: classes,\n Component: Component\n });\n }\n\n return state.cacheClasses.value;\n}\n\nfunction attach(_ref2, props) {\n var state = _ref2.state,\n theme = _ref2.theme,\n stylesOptions = _ref2.stylesOptions,\n stylesCreator = _ref2.stylesCreator,\n name = _ref2.name;\n\n if (stylesOptions.disableGeneration) {\n return;\n }\n\n var sheetManager = _multiKeyStore__WEBPACK_IMPORTED_MODULE_4__["default"].get(stylesOptions.sheetsManager, stylesCreator, theme);\n\n if (!sheetManager) {\n sheetManager = {\n refs: 0,\n staticSheet: null,\n dynamicStyles: null\n };\n _multiKeyStore__WEBPACK_IMPORTED_MODULE_4__["default"].set(stylesOptions.sheetsManager, stylesCreator, theme, sheetManager);\n }\n\n var options = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({}, stylesCreator.options, stylesOptions, {\n theme: theme,\n flip: typeof stylesOptions.flip === \'boolean\' ? stylesOptions.flip : theme.direction === \'rtl\'\n });\n\n options.generateId = options.serverGenerateClassName || options.generateClassName;\n var sheetsRegistry = stylesOptions.sheetsRegistry;\n\n if (sheetManager.refs === 0) {\n var staticSheet;\n\n if (stylesOptions.sheetsCache) {\n staticSheet = _multiKeyStore__WEBPACK_IMPORTED_MODULE_4__["default"].get(stylesOptions.sheetsCache, stylesCreator, theme);\n }\n\n var styles = stylesCreator.create(theme, name);\n\n if (!staticSheet) {\n staticSheet = stylesOptions.jss.createStyleSheet(styles, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({\n link: false\n }, options));\n staticSheet.attach();\n\n if (stylesOptions.sheetsCache) {\n _multiKeyStore__WEBPACK_IMPORTED_MODULE_4__["default"].set(stylesOptions.sheetsCache, stylesCreator, theme, staticSheet);\n }\n }\n\n if (sheetsRegistry) {\n sheetsRegistry.add(staticSheet);\n }\n\n sheetManager.staticSheet = staticSheet;\n sheetManager.dynamicStyles = (0,jss__WEBPACK_IMPORTED_MODULE_5__.getDynamicStyles)(styles);\n }\n\n if (sheetManager.dynamicStyles) {\n var dynamicSheet = stylesOptions.jss.createStyleSheet(sheetManager.dynamicStyles, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({\n link: true\n }, options));\n dynamicSheet.update(props);\n dynamicSheet.attach();\n state.dynamicSheet = dynamicSheet;\n state.classes = (0,_mergeClasses__WEBPACK_IMPORTED_MODULE_3__["default"])({\n baseClasses: sheetManager.staticSheet.classes,\n newClasses: dynamicSheet.classes\n });\n\n if (sheetsRegistry) {\n sheetsRegistry.add(dynamicSheet);\n }\n } else {\n state.classes = sheetManager.staticSheet.classes;\n }\n\n sheetManager.refs += 1;\n}\n\nfunction update(_ref3, props) {\n var state = _ref3.state;\n\n if (state.dynamicSheet) {\n state.dynamicSheet.update(props);\n }\n}\n\nfunction detach(_ref4) {\n var state = _ref4.state,\n theme = _ref4.theme,\n stylesOptions = _ref4.stylesOptions,\n stylesCreator = _ref4.stylesCreator;\n\n if (stylesOptions.disableGeneration) {\n return;\n }\n\n var sheetManager = _multiKeyStore__WEBPACK_IMPORTED_MODULE_4__["default"].get(stylesOptions.sheetsManager, stylesCreator, theme);\n sheetManager.refs -= 1;\n var sheetsRegistry = stylesOptions.sheetsRegistry;\n\n if (sheetManager.refs === 0) {\n _multiKeyStore__WEBPACK_IMPORTED_MODULE_4__["default"]["delete"](stylesOptions.sheetsManager, stylesCreator, theme);\n stylesOptions.jss.removeStyleSheet(sheetManager.staticSheet);\n\n if (sheetsRegistry) {\n sheetsRegistry.remove(sheetManager.staticSheet);\n }\n }\n\n if (state.dynamicSheet) {\n stylesOptions.jss.removeStyleSheet(state.dynamicSheet);\n\n if (sheetsRegistry) {\n sheetsRegistry.remove(state.dynamicSheet);\n }\n }\n}\n\nfunction useSynchronousEffect(func, values) {\n var key = react__WEBPACK_IMPORTED_MODULE_2__.useRef([]);\n var output; // Store "generation" key. Just returns a new object every time\n\n var currentKey = react__WEBPACK_IMPORTED_MODULE_2__.useMemo(function () {\n return {};\n }, values); // eslint-disable-line react-hooks/exhaustive-deps\n // "the first render", or "memo dropped the value"\n\n if (key.current !== currentKey) {\n key.current = currentKey;\n output = func();\n }\n\n react__WEBPACK_IMPORTED_MODULE_2__.useEffect(function () {\n return function () {\n if (output) {\n output();\n }\n };\n }, [currentKey] // eslint-disable-line react-hooks/exhaustive-deps\n );\n}\n\nfunction makeStyles(stylesOrCreator) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var name = options.name,\n classNamePrefixOption = options.classNamePrefix,\n Component = options.Component,\n _options$defaultTheme = options.defaultTheme,\n defaultTheme = _options$defaultTheme === void 0 ? _getStylesCreator_noopTheme__WEBPACK_IMPORTED_MODULE_6__["default"] : _options$defaultTheme,\n stylesOptions2 = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__["default"])(options, ["name", "classNamePrefix", "Component", "defaultTheme"]);\n\n var stylesCreator = (0,_getStylesCreator__WEBPACK_IMPORTED_MODULE_7__["default"])(stylesOrCreator);\n var classNamePrefix = name || classNamePrefixOption || \'makeStyles\';\n stylesCreator.options = {\n index: (0,_indexCounter__WEBPACK_IMPORTED_MODULE_8__.increment)(),\n name: name,\n meta: classNamePrefix,\n classNamePrefix: classNamePrefix\n };\n\n var useStyles = function useStyles() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var theme = (0,_useTheme__WEBPACK_IMPORTED_MODULE_9__["default"])() || defaultTheme;\n\n var stylesOptions = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({}, react__WEBPACK_IMPORTED_MODULE_2__.useContext(_StylesProvider__WEBPACK_IMPORTED_MODULE_10__.StylesContext), stylesOptions2);\n\n var instance = react__WEBPACK_IMPORTED_MODULE_2__.useRef();\n var shouldUpdate = react__WEBPACK_IMPORTED_MODULE_2__.useRef();\n useSynchronousEffect(function () {\n var current = {\n name: name,\n state: {},\n stylesCreator: stylesCreator,\n stylesOptions: stylesOptions,\n theme: theme\n };\n attach(current, props);\n shouldUpdate.current = false;\n instance.current = current;\n return function () {\n detach(current);\n };\n }, [theme, stylesCreator]);\n react__WEBPACK_IMPORTED_MODULE_2__.useEffect(function () {\n if (shouldUpdate.current) {\n update(instance.current, props);\n }\n\n shouldUpdate.current = true;\n });\n var classes = getClasses(instance.current, props.classes, Component);\n\n if (false) {}\n\n return classes;\n };\n\n return useStyles;\n}\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/styles/esm/makeStyles/makeStyles.js?')},"./node_modules/@material-ui/styles/esm/makeStyles/multiKeyStore.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n// Used https://github.com/thinkloop/multi-key-cache as inspiration\nvar multiKeyStore = {\n set: function set(cache, key1, key2, value) {\n var subCache = cache.get(key1);\n\n if (!subCache) {\n subCache = new Map();\n cache.set(key1, subCache);\n }\n\n subCache.set(key2, value);\n },\n get: function get(cache, key1, key2) {\n var subCache = cache.get(key1);\n return subCache ? subCache.get(key2) : undefined;\n },\n delete: function _delete(cache, key1, key2) {\n var subCache = cache.get(key1);\n subCache.delete(key2);\n }\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (multiKeyStore);\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/styles/esm/makeStyles/multiKeyStore.js?')},"./node_modules/@material-ui/styles/esm/mergeClasses/mergeClasses.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ mergeClasses)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js");\n\n\nfunction mergeClasses() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var baseClasses = options.baseClasses,\n newClasses = options.newClasses,\n Component = options.Component;\n\n if (!newClasses) {\n return baseClasses;\n }\n\n var nextClasses = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, baseClasses);\n\n if (false) {}\n\n Object.keys(newClasses).forEach(function (key) {\n if (false) {}\n\n if (newClasses[key]) {\n nextClasses[key] = "".concat(baseClasses[key], " ").concat(newClasses[key]);\n }\n });\n return nextClasses;\n}\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/styles/esm/mergeClasses/mergeClasses.js?')},"./node_modules/@material-ui/styles/esm/useTheme/ThemeContext.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");\n\nvar ThemeContext = react__WEBPACK_IMPORTED_MODULE_0__.createContext(null);\n\nif (false) {}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ThemeContext);\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/styles/esm/useTheme/ThemeContext.js?')},"./node_modules/@material-ui/styles/esm/useTheme/useTheme.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ useTheme)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");\n/* harmony import */ var _ThemeContext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ThemeContext */ "./node_modules/@material-ui/styles/esm/useTheme/ThemeContext.js");\n\n\nfunction useTheme() {\n var theme = react__WEBPACK_IMPORTED_MODULE_0__.useContext(_ThemeContext__WEBPACK_IMPORTED_MODULE_1__["default"]);\n\n if (false) {}\n\n return theme;\n}\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/styles/esm/useTheme/useTheme.js?')},"./node_modules/@material-ui/styles/esm/withStyles/withStyles.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");\n/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! hoist-non-react-statics */ "./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js");\n/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _makeStyles__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../makeStyles */ "./node_modules/@material-ui/styles/esm/makeStyles/makeStyles.js");\n/* harmony import */ var _getThemeProps__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../getThemeProps */ "./node_modules/@material-ui/styles/esm/getThemeProps/getThemeProps.js");\n/* harmony import */ var _useTheme__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../useTheme */ "./node_modules/@material-ui/styles/esm/useTheme/useTheme.js");\n\n\n\n\n\n\n\n\n // Link a style sheet with a component.\n// It does not modify the component passed to it;\n// instead, it returns a new component, with a `classes` property.\n\nvar withStyles = function withStyles(stylesOrCreator) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return function (Component) {\n var defaultTheme = options.defaultTheme,\n _options$withTheme = options.withTheme,\n withTheme = _options$withTheme === void 0 ? false : _options$withTheme,\n name = options.name,\n stylesOptions = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__["default"])(options, ["defaultTheme", "withTheme", "name"]);\n\n if (false) {}\n\n var classNamePrefix = name;\n\n if (false) { var displayName; }\n\n var useStyles = (0,_makeStyles__WEBPACK_IMPORTED_MODULE_4__["default"])(stylesOrCreator, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({\n defaultTheme: defaultTheme,\n Component: Component,\n name: name || Component.displayName,\n classNamePrefix: classNamePrefix\n }, stylesOptions));\n var WithStyles = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.forwardRef(function WithStyles(props, ref) {\n var classesProp = props.classes,\n innerRef = props.innerRef,\n other = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__["default"])(props, ["classes", "innerRef"]); // The wrapper receives only user supplied props, which could be a subset of\n // the actual props Component might receive due to merging with defaultProps.\n // So copying it here would give us the same result in the wrapper as well.\n\n\n var classes = useStyles((0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, Component.defaultProps, props));\n var theme;\n var more = other;\n\n if (typeof name === \'string\' || withTheme) {\n // name and withTheme are invariant in the outer scope\n // eslint-disable-next-line react-hooks/rules-of-hooks\n theme = (0,_useTheme__WEBPACK_IMPORTED_MODULE_5__["default"])() || defaultTheme;\n\n if (name) {\n more = (0,_getThemeProps__WEBPACK_IMPORTED_MODULE_6__["default"])({\n theme: theme,\n name: name,\n props: other\n });\n } // Provide the theme to the wrapped component.\n // So we don\'t have to use the `withTheme()` Higher-order Component.\n\n\n if (withTheme && !more.theme) {\n more.theme = theme;\n }\n }\n\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(Component, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({\n ref: innerRef || ref,\n classes: classes\n }, more));\n });\n false ? 0 : void 0;\n\n if (false) {}\n\n hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_3___default()(WithStyles, Component);\n\n if (false) {}\n\n return WithStyles;\n };\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (withStyles);\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/styles/esm/withStyles/withStyles.js?')},"./node_modules/@material-ui/system/esm/breakpoints.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"handleBreakpoints\": () => (/* binding */ handleBreakpoints),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ \"./node_modules/@babel/runtime/helpers/esm/typeof.js\");\n/* harmony import */ var _merge__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./merge */ \"./node_modules/@material-ui/system/esm/merge.js\");\n\n\n\n\n // The breakpoint **start** at this value.\n// For instance with the first breakpoint xs: [xs, sm[.\n\nvar values = {\n xs: 0,\n sm: 600,\n md: 960,\n lg: 1280,\n xl: 1920\n};\nvar defaultBreakpoints = {\n // Sorted ASC by size. That's important.\n // It can't be configured as it's used statically for propTypes.\n keys: ['xs', 'sm', 'md', 'lg', 'xl'],\n up: function up(key) {\n return \"@media (min-width:\".concat(values[key], \"px)\");\n }\n};\nfunction handleBreakpoints(props, propValue, styleFromPropValue) {\n if (false) {}\n\n if (Array.isArray(propValue)) {\n var themeBreakpoints = props.theme.breakpoints || defaultBreakpoints;\n return propValue.reduce(function (acc, item, index) {\n acc[themeBreakpoints.up(themeBreakpoints.keys[index])] = styleFromPropValue(propValue[index]);\n return acc;\n }, {});\n }\n\n if ((0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(propValue) === 'object') {\n var _themeBreakpoints = props.theme.breakpoints || defaultBreakpoints;\n\n return Object.keys(propValue).reduce(function (acc, breakpoint) {\n acc[_themeBreakpoints.up(breakpoint)] = styleFromPropValue(propValue[breakpoint]);\n return acc;\n }, {});\n }\n\n var output = styleFromPropValue(propValue);\n return output;\n}\n\nfunction breakpoints(styleFunction) {\n var newStyleFunction = function newStyleFunction(props) {\n var base = styleFunction(props);\n var themeBreakpoints = props.theme.breakpoints || defaultBreakpoints;\n var extended = themeBreakpoints.keys.reduce(function (acc, key) {\n if (props[key]) {\n acc = acc || {};\n acc[themeBreakpoints.up(key)] = styleFunction((0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n theme: props.theme\n }, props[key]));\n }\n\n return acc;\n }, null);\n return (0,_merge__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(base, extended);\n };\n\n newStyleFunction.propTypes = false ? 0 : {};\n newStyleFunction.filterProps = ['xs', 'sm', 'md', 'lg', 'xl'].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(styleFunction.filterProps));\n return newStyleFunction;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (breakpoints);\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/system/esm/breakpoints.js?")},"./node_modules/@material-ui/system/esm/memoize.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ memoize)\n/* harmony export */ });\nfunction memoize(fn) {\n var cache = {};\n return function (arg) {\n if (cache[arg] === undefined) {\n cache[arg] = fn(arg);\n }\n\n return cache[arg];\n };\n}\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/system/esm/memoize.js?')},"./node_modules/@material-ui/system/esm/merge.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _material_ui_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @material-ui/utils */ "./node_modules/@material-ui/utils/esm/deepmerge.js");\n\n\nfunction merge(acc, item) {\n if (!item) {\n return acc;\n }\n\n return (0,_material_ui_utils__WEBPACK_IMPORTED_MODULE_0__["default"])(acc, item, {\n clone: false // No need to clone deep, it\'s way faster.\n\n });\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (merge);\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/system/esm/merge.js?')},"./node_modules/@material-ui/system/esm/spacing.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"createUnarySpacing\": () => (/* binding */ createUnarySpacing),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ \"./node_modules/@babel/runtime/helpers/esm/slicedToArray.js\");\n/* harmony import */ var _breakpoints__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./breakpoints */ \"./node_modules/@material-ui/system/esm/breakpoints.js\");\n/* harmony import */ var _merge__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./merge */ \"./node_modules/@material-ui/system/esm/merge.js\");\n/* harmony import */ var _memoize__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./memoize */ \"./node_modules/@material-ui/system/esm/memoize.js\");\n\n\n\n\n\nvar properties = {\n m: 'margin',\n p: 'padding'\n};\nvar directions = {\n t: 'Top',\n r: 'Right',\n b: 'Bottom',\n l: 'Left',\n x: ['Left', 'Right'],\n y: ['Top', 'Bottom']\n};\nvar aliases = {\n marginX: 'mx',\n marginY: 'my',\n paddingX: 'px',\n paddingY: 'py'\n}; // memoize() impact:\n// From 300,000 ops/sec\n// To 350,000 ops/sec\n\nvar getCssProperties = (0,_memoize__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(function (prop) {\n // It's not a shorthand notation.\n if (prop.length > 2) {\n if (aliases[prop]) {\n prop = aliases[prop];\n } else {\n return [prop];\n }\n }\n\n var _prop$split = prop.split(''),\n _prop$split2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_prop$split, 2),\n a = _prop$split2[0],\n b = _prop$split2[1];\n\n var property = properties[a];\n var direction = directions[b] || '';\n return Array.isArray(direction) ? direction.map(function (dir) {\n return property + dir;\n }) : [property + direction];\n});\nvar spacingKeys = ['m', 'mt', 'mr', 'mb', 'ml', 'mx', 'my', 'p', 'pt', 'pr', 'pb', 'pl', 'px', 'py', 'margin', 'marginTop', 'marginRight', 'marginBottom', 'marginLeft', 'marginX', 'marginY', 'padding', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft', 'paddingX', 'paddingY'];\nfunction createUnarySpacing(theme) {\n var themeSpacing = theme.spacing || 8;\n\n if (typeof themeSpacing === 'number') {\n return function (abs) {\n if (false) {}\n\n return themeSpacing * abs;\n };\n }\n\n if (Array.isArray(themeSpacing)) {\n return function (abs) {\n if (false) {}\n\n return themeSpacing[abs];\n };\n }\n\n if (typeof themeSpacing === 'function') {\n return themeSpacing;\n }\n\n if (false) {}\n\n return function () {\n return undefined;\n };\n}\n\nfunction getValue(transformer, propValue) {\n if (typeof propValue === 'string' || propValue == null) {\n return propValue;\n }\n\n var abs = Math.abs(propValue);\n var transformed = transformer(abs);\n\n if (propValue >= 0) {\n return transformed;\n }\n\n if (typeof transformed === 'number') {\n return -transformed;\n }\n\n return \"-\".concat(transformed);\n}\n\nfunction getStyleFromPropValue(cssProperties, transformer) {\n return function (propValue) {\n return cssProperties.reduce(function (acc, cssProperty) {\n acc[cssProperty] = getValue(transformer, propValue);\n return acc;\n }, {});\n };\n}\n\nfunction spacing(props) {\n var theme = props.theme;\n var transformer = createUnarySpacing(theme);\n return Object.keys(props).map(function (prop) {\n // Using a hash computation over an array iteration could be faster, but with only 28 items,\n // it's doesn't worth the bundle size.\n if (spacingKeys.indexOf(prop) === -1) {\n return null;\n }\n\n var cssProperties = getCssProperties(prop);\n var styleFromPropValue = getStyleFromPropValue(cssProperties, transformer);\n var propValue = props[prop];\n return (0,_breakpoints__WEBPACK_IMPORTED_MODULE_2__.handleBreakpoints)(props, propValue, styleFromPropValue);\n }).reduce(_merge__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {});\n}\n\nspacing.propTypes = false ? 0 : {};\nspacing.filterProps = spacingKeys;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (spacing);\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/system/esm/spacing.js?")},"./node_modules/@material-ui/utils/esm/deepmerge.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "isPlainObject": () => (/* binding */ isPlainObject),\n/* harmony export */ "default": () => (/* binding */ deepmerge)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js");\n/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "./node_modules/@babel/runtime/helpers/esm/typeof.js");\n\n\nfunction isPlainObject(item) {\n return item && (0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_1__["default"])(item) === \'object\' && item.constructor === Object;\n}\nfunction deepmerge(target, source) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {\n clone: true\n };\n var output = options.clone ? (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, target) : target;\n\n if (isPlainObject(target) && isPlainObject(source)) {\n Object.keys(source).forEach(function (key) {\n // Avoid prototype pollution\n if (key === \'__proto__\') {\n return;\n }\n\n if (isPlainObject(source[key]) && key in target) {\n output[key] = deepmerge(target[key], source[key], options);\n } else {\n output[key] = source[key];\n }\n });\n }\n\n return output;\n}\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/utils/esm/deepmerge.js?')},"./node_modules/@material-ui/utils/esm/formatMuiErrorMessage.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ formatMuiErrorMessage)\n/* harmony export */ });\n/**\n * WARNING: Don't import this directly.\n * Use `MuiError` from `@material-ui/utils/macros/MuiError.macro` instead.\n * @param {number} code\n */\nfunction formatMuiErrorMessage(code) {\n // Apply babel-plugin-transform-template-literals in loose mode\n // loose mode is safe iff we're concatenating primitives\n // see https://babeljs.io/docs/en/babel-plugin-transform-template-literals#loose\n\n /* eslint-disable prefer-template */\n var url = 'https://material-ui.com/production-error/?code=' + code;\n\n for (var i = 1; i < arguments.length; i += 1) {\n // rest params over-transpile for this case\n // eslint-disable-next-line prefer-rest-params\n url += '&args[]=' + encodeURIComponent(arguments[i]);\n }\n\n return 'Minified Material-UI error #' + code + '; visit ' + url + ' for the full message.';\n /* eslint-enable prefer-template */\n}\n\n//# sourceURL=webpack://frontend/./node_modules/@material-ui/utils/esm/formatMuiErrorMessage.js?")},"./node_modules/@mui/base/AutocompleteUnstyled/useAutocomplete.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"createFilterOptions\": () => (/* binding */ createFilterOptions),\n/* harmony export */ \"default\": () => (/* binding */ useAutocomplete)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/useId.js\");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/useControlled.js\");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/useEventCallback.js\");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/setRef.js\");\n\n\n/* eslint-disable no-constant-condition */\n\n // https://stackoverflow.com/questions/990904/remove-accents-diacritics-in-a-string-in-javascript\n// Give up on IE11 support for this feature\n\nfunction stripDiacritics(string) {\n return typeof string.normalize !== 'undefined' ? string.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '') : string;\n}\n\nfunction createFilterOptions(config = {}) {\n const {\n ignoreAccents = true,\n ignoreCase = true,\n limit,\n matchFrom = 'any',\n stringify,\n trim = false\n } = config;\n return (options, {\n inputValue,\n getOptionLabel\n }) => {\n let input = trim ? inputValue.trim() : inputValue;\n\n if (ignoreCase) {\n input = input.toLowerCase();\n }\n\n if (ignoreAccents) {\n input = stripDiacritics(input);\n }\n\n const filteredOptions = options.filter(option => {\n let candidate = (stringify || getOptionLabel)(option);\n\n if (ignoreCase) {\n candidate = candidate.toLowerCase();\n }\n\n if (ignoreAccents) {\n candidate = stripDiacritics(candidate);\n }\n\n return matchFrom === 'start' ? candidate.indexOf(input) === 0 : candidate.indexOf(input) > -1;\n });\n return typeof limit === 'number' ? filteredOptions.slice(0, limit) : filteredOptions;\n };\n} // To replace with .findIndex() once we stop IE11 support.\n\nfunction findIndex(array, comp) {\n for (let i = 0; i < array.length; i += 1) {\n if (comp(array[i])) {\n return i;\n }\n }\n\n return -1;\n}\n\nconst defaultFilterOptions = createFilterOptions(); // Number of options to jump in list box when pageup and pagedown keys are used.\n\nconst pageSize = 5;\nfunction useAutocomplete(props) {\n const {\n autoComplete = false,\n autoHighlight = false,\n autoSelect = false,\n blurOnSelect = false,\n disabled: disabledProp,\n clearOnBlur = !props.freeSolo,\n clearOnEscape = false,\n componentName = 'useAutocomplete',\n defaultValue = props.multiple ? [] : null,\n disableClearable = false,\n disableCloseOnSelect = false,\n disabledItemsFocusable = false,\n disableListWrap = false,\n filterOptions = defaultFilterOptions,\n filterSelectedOptions = false,\n freeSolo = false,\n getOptionDisabled,\n getOptionLabel: getOptionLabelProp = option => {\n var _option$label;\n\n return (_option$label = option.label) != null ? _option$label : option;\n },\n isOptionEqualToValue = (option, value) => option === value,\n groupBy,\n handleHomeEndKeys = !props.freeSolo,\n id: idProp,\n includeInputInList = false,\n inputValue: inputValueProp,\n multiple = false,\n onChange,\n onClose,\n onHighlightChange,\n onInputChange,\n onOpen,\n open: openProp,\n openOnFocus = false,\n options,\n selectOnFocus = !props.freeSolo,\n value: valueProp\n } = props;\n const id = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(idProp);\n let getOptionLabel = getOptionLabelProp;\n\n getOptionLabel = option => {\n const optionLabel = getOptionLabelProp(option);\n\n if (typeof optionLabel !== 'string') {\n if (false) {}\n\n return String(optionLabel);\n }\n\n return optionLabel;\n };\n\n const ignoreFocus = react__WEBPACK_IMPORTED_MODULE_1__.useRef(false);\n const firstFocus = react__WEBPACK_IMPORTED_MODULE_1__.useRef(true);\n const inputRef = react__WEBPACK_IMPORTED_MODULE_1__.useRef(null);\n const listboxRef = react__WEBPACK_IMPORTED_MODULE_1__.useRef(null);\n const [anchorEl, setAnchorEl] = react__WEBPACK_IMPORTED_MODULE_1__.useState(null);\n const [focusedTag, setFocusedTag] = react__WEBPACK_IMPORTED_MODULE_1__.useState(-1);\n const defaultHighlighted = autoHighlight ? 0 : -1;\n const highlightedIndexRef = react__WEBPACK_IMPORTED_MODULE_1__.useRef(defaultHighlighted);\n const [value, setValueState] = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"])({\n controlled: valueProp,\n default: defaultValue,\n name: componentName\n });\n const [inputValue, setInputValueState] = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"])({\n controlled: inputValueProp,\n default: '',\n name: componentName,\n state: 'inputValue'\n });\n const [focused, setFocused] = react__WEBPACK_IMPORTED_MODULE_1__.useState(false);\n const resetInputValue = react__WEBPACK_IMPORTED_MODULE_1__.useCallback((event, newValue) => {\n // retain current `inputValue` if new option isn't selected and `clearOnBlur` is false\n // When `multiple` is enabled, `newValue` is an array of all selected items including the newly selected item\n const isOptionSelected = multiple ? value.length < newValue.length : newValue !== null;\n\n if (!isOptionSelected && !clearOnBlur) {\n return;\n }\n\n let newInputValue;\n\n if (multiple) {\n newInputValue = '';\n } else if (newValue == null) {\n newInputValue = '';\n } else {\n const optionLabel = getOptionLabel(newValue);\n newInputValue = typeof optionLabel === 'string' ? optionLabel : '';\n }\n\n if (inputValue === newInputValue) {\n return;\n }\n\n setInputValueState(newInputValue);\n\n if (onInputChange) {\n onInputChange(event, newInputValue, 'reset');\n }\n }, [getOptionLabel, inputValue, multiple, onInputChange, setInputValueState, clearOnBlur, value]);\n const prevValue = react__WEBPACK_IMPORTED_MODULE_1__.useRef();\n react__WEBPACK_IMPORTED_MODULE_1__.useEffect(() => {\n const valueChange = value !== prevValue.current;\n prevValue.current = value;\n\n if (focused && !valueChange) {\n return;\n } // Only reset the input's value when freeSolo if the component's value changes.\n\n\n if (freeSolo && !valueChange) {\n return;\n }\n\n resetInputValue(null, value);\n }, [value, resetInputValue, focused, prevValue, freeSolo]);\n const [open, setOpenState] = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"])({\n controlled: openProp,\n default: false,\n name: componentName,\n state: 'open'\n });\n const [inputPristine, setInputPristine] = react__WEBPACK_IMPORTED_MODULE_1__.useState(true);\n const inputValueIsSelectedValue = !multiple && value != null && inputValue === getOptionLabel(value);\n const popupOpen = open;\n const filteredOptions = popupOpen ? filterOptions(options.filter(option => {\n if (filterSelectedOptions && (multiple ? value : [value]).some(value2 => value2 !== null && isOptionEqualToValue(option, value2))) {\n return false;\n }\n\n return true;\n }), // we use the empty string to manipulate `filterOptions` to not filter any options\n // i.e. the filter predicate always returns true\n {\n inputValue: inputValueIsSelectedValue && inputPristine ? '' : inputValue,\n getOptionLabel\n }) : [];\n const listboxAvailable = open && filteredOptions.length > 0;\n\n if (false) {}\n\n const focusTag = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(tagToFocus => {\n if (tagToFocus === -1) {\n inputRef.current.focus();\n } else {\n anchorEl.querySelector(`[data-tag-index=\"${tagToFocus}\"]`).focus();\n }\n }); // Ensure the focusedTag is never inconsistent\n\n react__WEBPACK_IMPORTED_MODULE_1__.useEffect(() => {\n if (multiple && focusedTag > value.length - 1) {\n setFocusedTag(-1);\n focusTag(-1);\n }\n }, [value, multiple, focusedTag, focusTag]);\n\n function validOptionIndex(index, direction) {\n if (!listboxRef.current || index === -1) {\n return -1;\n }\n\n let nextFocus = index;\n\n while (true) {\n // Out of range\n if (direction === 'next' && nextFocus === filteredOptions.length || direction === 'previous' && nextFocus === -1) {\n return -1;\n }\n\n const option = listboxRef.current.querySelector(`[data-option-index=\"${nextFocus}\"]`); // Same logic as MenuList.js\n\n const nextFocusDisabled = disabledItemsFocusable ? false : !option || option.disabled || option.getAttribute('aria-disabled') === 'true';\n\n if (option && !option.hasAttribute('tabindex') || nextFocusDisabled) {\n // Move to the next element.\n nextFocus += direction === 'next' ? 1 : -1;\n } else {\n return nextFocus;\n }\n }\n }\n\n const setHighlightedIndex = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(({\n event,\n index,\n reason = 'auto'\n }) => {\n highlightedIndexRef.current = index; // does the index exist?\n\n if (index === -1) {\n inputRef.current.removeAttribute('aria-activedescendant');\n } else {\n inputRef.current.setAttribute('aria-activedescendant', `${id}-option-${index}`);\n }\n\n if (onHighlightChange) {\n onHighlightChange(event, index === -1 ? null : filteredOptions[index], reason);\n }\n\n if (!listboxRef.current) {\n return;\n }\n\n const prev = listboxRef.current.querySelector('[role=\"option\"].Mui-focused');\n\n if (prev) {\n prev.classList.remove('Mui-focused');\n prev.classList.remove('Mui-focusVisible');\n }\n\n const listboxNode = listboxRef.current.parentElement.querySelector('[role=\"listbox\"]'); // \"No results\"\n\n if (!listboxNode) {\n return;\n }\n\n if (index === -1) {\n listboxNode.scrollTop = 0;\n return;\n }\n\n const option = listboxRef.current.querySelector(`[data-option-index=\"${index}\"]`);\n\n if (!option) {\n return;\n }\n\n option.classList.add('Mui-focused');\n\n if (reason === 'keyboard') {\n option.classList.add('Mui-focusVisible');\n } // Scroll active descendant into view.\n // Logic copied from https://www.w3.org/TR/wai-aria-practices/examples/listbox/js/listbox.js\n //\n // Consider this API instead once it has a better browser support:\n // .scrollIntoView({ scrollMode: 'if-needed', block: 'nearest' });\n\n\n if (listboxNode.scrollHeight > listboxNode.clientHeight && reason !== 'mouse') {\n const element = option;\n const scrollBottom = listboxNode.clientHeight + listboxNode.scrollTop;\n const elementBottom = element.offsetTop + element.offsetHeight;\n\n if (elementBottom > scrollBottom) {\n listboxNode.scrollTop = elementBottom - listboxNode.clientHeight;\n } else if (element.offsetTop - element.offsetHeight * (groupBy ? 1.3 : 0) < listboxNode.scrollTop) {\n listboxNode.scrollTop = element.offsetTop - element.offsetHeight * (groupBy ? 1.3 : 0);\n }\n }\n });\n const changeHighlightedIndex = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(({\n event,\n diff,\n direction = 'next',\n reason = 'auto'\n }) => {\n if (!popupOpen) {\n return;\n }\n\n const getNextIndex = () => {\n const maxIndex = filteredOptions.length - 1;\n\n if (diff === 'reset') {\n return defaultHighlighted;\n }\n\n if (diff === 'start') {\n return 0;\n }\n\n if (diff === 'end') {\n return maxIndex;\n }\n\n const newIndex = highlightedIndexRef.current + diff;\n\n if (newIndex < 0) {\n if (newIndex === -1 && includeInputInList) {\n return -1;\n }\n\n if (disableListWrap && highlightedIndexRef.current !== -1 || Math.abs(diff) > 1) {\n return 0;\n }\n\n return maxIndex;\n }\n\n if (newIndex > maxIndex) {\n if (newIndex === maxIndex + 1 && includeInputInList) {\n return -1;\n }\n\n if (disableListWrap || Math.abs(diff) > 1) {\n return maxIndex;\n }\n\n return 0;\n }\n\n return newIndex;\n };\n\n const nextIndex = validOptionIndex(getNextIndex(), direction);\n setHighlightedIndex({\n index: nextIndex,\n reason,\n event\n }); // Sync the content of the input with the highlighted option.\n\n if (autoComplete && diff !== 'reset') {\n if (nextIndex === -1) {\n inputRef.current.value = inputValue;\n } else {\n const option = getOptionLabel(filteredOptions[nextIndex]);\n inputRef.current.value = option; // The portion of the selected suggestion that has not been typed by the user,\n // a completion string, appears inline after the input cursor in the textbox.\n\n const index = option.toLowerCase().indexOf(inputValue.toLowerCase());\n\n if (index === 0 && inputValue.length > 0) {\n inputRef.current.setSelectionRange(inputValue.length, option.length);\n }\n }\n }\n });\n const syncHighlightedIndex = react__WEBPACK_IMPORTED_MODULE_1__.useCallback(() => {\n if (!popupOpen) {\n return;\n }\n\n const valueItem = multiple ? value[0] : value; // The popup is empty, reset\n\n if (filteredOptions.length === 0 || valueItem == null) {\n changeHighlightedIndex({\n diff: 'reset'\n });\n return;\n }\n\n if (!listboxRef.current) {\n return;\n } // Synchronize the value with the highlighted index\n\n\n if (valueItem != null) {\n const currentOption = filteredOptions[highlightedIndexRef.current]; // Keep the current highlighted index if possible\n\n if (multiple && currentOption && findIndex(value, val => isOptionEqualToValue(currentOption, val)) !== -1) {\n return;\n }\n\n const itemIndex = findIndex(filteredOptions, optionItem => isOptionEqualToValue(optionItem, valueItem));\n\n if (itemIndex === -1) {\n changeHighlightedIndex({\n diff: 'reset'\n });\n } else {\n setHighlightedIndex({\n index: itemIndex\n });\n }\n\n return;\n } // Prevent the highlighted index to leak outside the boundaries.\n\n\n if (highlightedIndexRef.current >= filteredOptions.length - 1) {\n setHighlightedIndex({\n index: filteredOptions.length - 1\n });\n return;\n } // Restore the focus to the previous index.\n\n\n setHighlightedIndex({\n index: highlightedIndexRef.current\n }); // Ignore filteredOptions (and options, isOptionEqualToValue, getOptionLabel) not to break the scroll position\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [// Only sync the highlighted index when the option switch between empty and not\n filteredOptions.length, // Don't sync the highlighted index with the value when multiple\n // eslint-disable-next-line react-hooks/exhaustive-deps\n multiple ? false : value, filterSelectedOptions, changeHighlightedIndex, setHighlightedIndex, popupOpen, inputValue, multiple]);\n const handleListboxRef = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(node => {\n (0,_mui_utils__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(listboxRef, node);\n\n if (!node) {\n return;\n }\n\n syncHighlightedIndex();\n });\n\n if (false) {}\n\n react__WEBPACK_IMPORTED_MODULE_1__.useEffect(() => {\n syncHighlightedIndex();\n }, [syncHighlightedIndex]);\n\n const handleOpen = event => {\n if (open) {\n return;\n }\n\n setOpenState(true);\n setInputPristine(true);\n\n if (onOpen) {\n onOpen(event);\n }\n };\n\n const handleClose = (event, reason) => {\n if (!open) {\n return;\n }\n\n setOpenState(false);\n\n if (onClose) {\n onClose(event, reason);\n }\n };\n\n const handleValue = (event, newValue, reason, details) => {\n if (Array.isArray(value)) {\n if (value.length === newValue.length && value.every((val, i) => val === newValue[i])) {\n return;\n }\n } else if (value === newValue) {\n return;\n }\n\n if (onChange) {\n onChange(event, newValue, reason, details);\n }\n\n setValueState(newValue);\n };\n\n const isTouch = react__WEBPACK_IMPORTED_MODULE_1__.useRef(false);\n\n const selectNewValue = (event, option, reasonProp = 'selectOption', origin = 'options') => {\n let reason = reasonProp;\n let newValue = option;\n\n if (multiple) {\n newValue = Array.isArray(value) ? value.slice() : [];\n\n if (false) {}\n\n const itemIndex = findIndex(newValue, valueItem => isOptionEqualToValue(option, valueItem));\n\n if (itemIndex === -1) {\n newValue.push(option);\n } else if (origin !== 'freeSolo') {\n newValue.splice(itemIndex, 1);\n reason = 'removeOption';\n }\n }\n\n resetInputValue(event, newValue);\n handleValue(event, newValue, reason, {\n option\n });\n\n if (!disableCloseOnSelect && !event.ctrlKey && !event.metaKey) {\n handleClose(event, reason);\n }\n\n if (blurOnSelect === true || blurOnSelect === 'touch' && isTouch.current || blurOnSelect === 'mouse' && !isTouch.current) {\n inputRef.current.blur();\n }\n };\n\n function validTagIndex(index, direction) {\n if (index === -1) {\n return -1;\n }\n\n let nextFocus = index;\n\n while (true) {\n // Out of range\n if (direction === 'next' && nextFocus === value.length || direction === 'previous' && nextFocus === -1) {\n return -1;\n }\n\n const option = anchorEl.querySelector(`[data-tag-index=\"${nextFocus}\"]`); // Same logic as MenuList.js\n\n if (!option || !option.hasAttribute('tabindex') || option.disabled || option.getAttribute('aria-disabled') === 'true') {\n nextFocus += direction === 'next' ? 1 : -1;\n } else {\n return nextFocus;\n }\n }\n }\n\n const handleFocusTag = (event, direction) => {\n if (!multiple) {\n return;\n }\n\n handleClose(event, 'toggleInput');\n let nextTag = focusedTag;\n\n if (focusedTag === -1) {\n if (inputValue === '' && direction === 'previous') {\n nextTag = value.length - 1;\n }\n } else {\n nextTag += direction === 'next' ? 1 : -1;\n\n if (nextTag < 0) {\n nextTag = 0;\n }\n\n if (nextTag === value.length) {\n nextTag = -1;\n }\n }\n\n nextTag = validTagIndex(nextTag, direction);\n setFocusedTag(nextTag);\n focusTag(nextTag);\n };\n\n const handleClear = event => {\n ignoreFocus.current = true;\n setInputValueState('');\n\n if (onInputChange) {\n onInputChange(event, '', 'clear');\n }\n\n handleValue(event, multiple ? [] : null, 'clear');\n };\n\n const handleKeyDown = other => event => {\n if (other.onKeyDown) {\n other.onKeyDown(event);\n }\n\n if (event.defaultMuiPrevented) {\n return;\n }\n\n if (focusedTag !== -1 && ['ArrowLeft', 'ArrowRight'].indexOf(event.key) === -1) {\n setFocusedTag(-1);\n focusTag(-1);\n } // Wait until IME is settled.\n\n\n if (event.which !== 229) {\n switch (event.key) {\n case 'Home':\n if (popupOpen && handleHomeEndKeys) {\n // Prevent scroll of the page\n event.preventDefault();\n changeHighlightedIndex({\n diff: 'start',\n direction: 'next',\n reason: 'keyboard',\n event\n });\n }\n\n break;\n\n case 'End':\n if (popupOpen && handleHomeEndKeys) {\n // Prevent scroll of the page\n event.preventDefault();\n changeHighlightedIndex({\n diff: 'end',\n direction: 'previous',\n reason: 'keyboard',\n event\n });\n }\n\n break;\n\n case 'PageUp':\n // Prevent scroll of the page\n event.preventDefault();\n changeHighlightedIndex({\n diff: -pageSize,\n direction: 'previous',\n reason: 'keyboard',\n event\n });\n handleOpen(event);\n break;\n\n case 'PageDown':\n // Prevent scroll of the page\n event.preventDefault();\n changeHighlightedIndex({\n diff: pageSize,\n direction: 'next',\n reason: 'keyboard',\n event\n });\n handleOpen(event);\n break;\n\n case 'ArrowDown':\n // Prevent cursor move\n event.preventDefault();\n changeHighlightedIndex({\n diff: 1,\n direction: 'next',\n reason: 'keyboard',\n event\n });\n handleOpen(event);\n break;\n\n case 'ArrowUp':\n // Prevent cursor move\n event.preventDefault();\n changeHighlightedIndex({\n diff: -1,\n direction: 'previous',\n reason: 'keyboard',\n event\n });\n handleOpen(event);\n break;\n\n case 'ArrowLeft':\n handleFocusTag(event, 'previous');\n break;\n\n case 'ArrowRight':\n handleFocusTag(event, 'next');\n break;\n\n case 'Enter':\n if (highlightedIndexRef.current !== -1 && popupOpen) {\n const option = filteredOptions[highlightedIndexRef.current];\n const disabled = getOptionDisabled ? getOptionDisabled(option) : false; // Avoid early form validation, let the end-users continue filling the form.\n\n event.preventDefault();\n\n if (disabled) {\n return;\n }\n\n selectNewValue(event, option, 'selectOption'); // Move the selection to the end.\n\n if (autoComplete) {\n inputRef.current.setSelectionRange(inputRef.current.value.length, inputRef.current.value.length);\n }\n } else if (freeSolo && inputValue !== '' && inputValueIsSelectedValue === false) {\n if (multiple) {\n // Allow people to add new values before they submit the form.\n event.preventDefault();\n }\n\n selectNewValue(event, inputValue, 'createOption', 'freeSolo');\n }\n\n break;\n\n case 'Escape':\n if (popupOpen) {\n // Avoid Opera to exit fullscreen mode.\n event.preventDefault(); // Avoid the Modal to handle the event.\n\n event.stopPropagation();\n handleClose(event, 'escape');\n } else if (clearOnEscape && (inputValue !== '' || multiple && value.length > 0)) {\n // Avoid Opera to exit fullscreen mode.\n event.preventDefault(); // Avoid the Modal to handle the event.\n\n event.stopPropagation();\n handleClear(event);\n }\n\n break;\n\n case 'Backspace':\n if (multiple && inputValue === '' && value.length > 0) {\n const index = focusedTag === -1 ? value.length - 1 : focusedTag;\n const newValue = value.slice();\n newValue.splice(index, 1);\n handleValue(event, newValue, 'removeOption', {\n option: value[index]\n });\n }\n\n break;\n\n default:\n }\n }\n };\n\n const handleFocus = event => {\n setFocused(true);\n\n if (openOnFocus && !ignoreFocus.current) {\n handleOpen(event);\n }\n };\n\n const handleBlur = event => {\n // Ignore the event when using the scrollbar with IE11\n if (listboxRef.current !== null && listboxRef.current.parentElement.contains(document.activeElement)) {\n inputRef.current.focus();\n return;\n }\n\n setFocused(false);\n firstFocus.current = true;\n ignoreFocus.current = false;\n\n if (autoSelect && highlightedIndexRef.current !== -1 && popupOpen) {\n selectNewValue(event, filteredOptions[highlightedIndexRef.current], 'blur');\n } else if (autoSelect && freeSolo && inputValue !== '') {\n selectNewValue(event, inputValue, 'blur', 'freeSolo');\n } else if (clearOnBlur) {\n resetInputValue(event, value);\n }\n\n handleClose(event, 'blur');\n };\n\n const handleInputChange = event => {\n const newValue = event.target.value;\n\n if (inputValue !== newValue) {\n setInputValueState(newValue);\n setInputPristine(false);\n\n if (onInputChange) {\n onInputChange(event, newValue, 'input');\n }\n }\n\n if (newValue === '') {\n if (!disableClearable && !multiple) {\n handleValue(event, null, 'clear');\n }\n } else {\n handleOpen(event);\n }\n };\n\n const handleOptionMouseOver = event => {\n setHighlightedIndex({\n event,\n index: Number(event.currentTarget.getAttribute('data-option-index')),\n reason: 'mouse'\n });\n };\n\n const handleOptionTouchStart = () => {\n isTouch.current = true;\n };\n\n const handleOptionClick = event => {\n const index = Number(event.currentTarget.getAttribute('data-option-index'));\n selectNewValue(event, filteredOptions[index], 'selectOption');\n isTouch.current = false;\n };\n\n const handleTagDelete = index => event => {\n const newValue = value.slice();\n newValue.splice(index, 1);\n handleValue(event, newValue, 'removeOption', {\n option: value[index]\n });\n };\n\n const handlePopupIndicator = event => {\n if (open) {\n handleClose(event, 'toggleInput');\n } else {\n handleOpen(event);\n }\n }; // Prevent input blur when interacting with the combobox\n\n\n const handleMouseDown = event => {\n if (event.target.getAttribute('id') !== id) {\n event.preventDefault();\n }\n }; // Focus the input when interacting with the combobox\n\n\n const handleClick = () => {\n inputRef.current.focus();\n\n if (selectOnFocus && firstFocus.current && inputRef.current.selectionEnd - inputRef.current.selectionStart === 0) {\n inputRef.current.select();\n }\n\n firstFocus.current = false;\n };\n\n const handleInputMouseDown = event => {\n if (inputValue === '' || !open) {\n handlePopupIndicator(event);\n }\n };\n\n let dirty = freeSolo && inputValue.length > 0;\n dirty = dirty || (multiple ? value.length > 0 : value !== null);\n let groupedOptions = filteredOptions;\n\n if (groupBy) {\n // used to keep track of key and indexes in the result array\n const indexBy = new Map();\n let warn = false;\n groupedOptions = filteredOptions.reduce((acc, option, index) => {\n const group = groupBy(option);\n\n if (acc.length > 0 && acc[acc.length - 1].group === group) {\n acc[acc.length - 1].options.push(option);\n } else {\n if (false) {}\n\n acc.push({\n key: index,\n index,\n group,\n options: [option]\n });\n }\n\n return acc;\n }, []);\n }\n\n if (disabledProp && focused) {\n handleBlur();\n }\n\n return {\n getRootProps: (other = {}) => (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n 'aria-owns': listboxAvailable ? `${id}-listbox` : null,\n role: 'combobox',\n 'aria-expanded': listboxAvailable\n }, other, {\n onKeyDown: handleKeyDown(other),\n onMouseDown: handleMouseDown,\n onClick: handleClick\n }),\n getInputLabelProps: () => ({\n id: `${id}-label`,\n htmlFor: id\n }),\n getInputProps: () => ({\n id,\n value: inputValue,\n onBlur: handleBlur,\n onFocus: handleFocus,\n onChange: handleInputChange,\n onMouseDown: handleInputMouseDown,\n // if open then this is handled imperativeley so don't let react override\n // only have an opinion about this when closed\n 'aria-activedescendant': popupOpen ? '' : null,\n 'aria-autocomplete': autoComplete ? 'both' : 'list',\n 'aria-controls': listboxAvailable ? `${id}-listbox` : undefined,\n // Disable browser's suggestion that might overlap with the popup.\n // Handle autocomplete but not autofill.\n autoComplete: 'off',\n ref: inputRef,\n autoCapitalize: 'none',\n spellCheck: 'false'\n }),\n getClearProps: () => ({\n tabIndex: -1,\n onClick: handleClear\n }),\n getPopupIndicatorProps: () => ({\n tabIndex: -1,\n onClick: handlePopupIndicator\n }),\n getTagProps: ({\n index\n }) => ({\n key: index,\n 'data-tag-index': index,\n tabIndex: -1,\n onDelete: handleTagDelete(index)\n }),\n getListboxProps: () => ({\n role: 'listbox',\n id: `${id}-listbox`,\n 'aria-labelledby': `${id}-label`,\n ref: handleListboxRef,\n onMouseDown: event => {\n // Prevent blur\n event.preventDefault();\n }\n }),\n getOptionProps: ({\n index,\n option\n }) => {\n const selected = (multiple ? value : [value]).some(value2 => value2 != null && isOptionEqualToValue(option, value2));\n const disabled = getOptionDisabled ? getOptionDisabled(option) : false;\n return {\n key: getOptionLabel(option),\n tabIndex: -1,\n role: 'option',\n id: `${id}-option-${index}`,\n onMouseOver: handleOptionMouseOver,\n onClick: handleOptionClick,\n onTouchStart: handleOptionTouchStart,\n 'data-option-index': index,\n 'aria-disabled': disabled,\n 'aria-selected': selected\n };\n },\n id,\n inputValue,\n value,\n dirty,\n popupOpen,\n focused: focused || focusedTag !== -1,\n anchorEl,\n setAnchorEl,\n focusedTag,\n groupedOptions\n };\n}\n\n//# sourceURL=webpack://frontend/./node_modules/@mui/base/AutocompleteUnstyled/useAutocomplete.js?")},"./node_modules/@mui/base/BackdropUnstyled/BackdropUnstyled.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ "./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! clsx */ "./node_modules/clsx/dist/clsx.m.js");\n/* harmony import */ var _composeClasses__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../composeClasses */ "./node_modules/@mui/base/composeClasses/composeClasses.js");\n/* harmony import */ var _utils_isHostComponent__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/isHostComponent */ "./node_modules/@mui/base/utils/isHostComponent.js");\n/* harmony import */ var _backdropUnstyledClasses__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./backdropUnstyledClasses */ "./node_modules/@mui/base/BackdropUnstyled/backdropUnstyledClasses.js");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js");\n\n\nconst _excluded = ["classes", "className", "invisible", "component", "components", "componentsProps", "theme"];\n\n\n\n\n\n\n\n\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n invisible\n } = ownerState;\n const slots = {\n root: [\'root\', invisible && \'invisible\']\n };\n return (0,_composeClasses__WEBPACK_IMPORTED_MODULE_5__["default"])(slots, _backdropUnstyledClasses__WEBPACK_IMPORTED_MODULE_6__.getBackdropUtilityClass, classes);\n};\n\nconst BackdropUnstyled = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.forwardRef(function BackdropUnstyled(props, ref) {\n const {\n classes: classesProp,\n className,\n invisible = false,\n component = \'div\',\n components = {},\n componentsProps = {},\n\n /* eslint-disable react/prop-types */\n theme\n } = props,\n other = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__["default"])(props, _excluded);\n\n const ownerState = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, props, {\n classes: classesProp,\n invisible\n });\n\n const classes = useUtilityClasses(ownerState);\n const Root = components.Root || component;\n const rootProps = componentsProps.root || {};\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(Root, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({\n "aria-hidden": true\n }, rootProps, !(0,_utils_isHostComponent__WEBPACK_IMPORTED_MODULE_7__["default"])(Root) && {\n as: component,\n ownerState: (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, ownerState, rootProps.ownerState),\n theme\n }, {\n ref: ref\n }, other, {\n className: (0,clsx__WEBPACK_IMPORTED_MODULE_3__["default"])(classes.root, rootProps.className, className)\n }));\n});\n false ? 0 : void 0;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (BackdropUnstyled);\n\n//# sourceURL=webpack://frontend/./node_modules/@mui/base/BackdropUnstyled/BackdropUnstyled.js?')},"./node_modules/@mui/base/BackdropUnstyled/backdropUnstyledClasses.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "getBackdropUtilityClass": () => (/* binding */ getBackdropUtilityClass),\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _generateUtilityClasses__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../generateUtilityClasses */ "./node_modules/@mui/base/generateUtilityClasses/generateUtilityClasses.js");\n/* harmony import */ var _generateUtilityClass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../generateUtilityClass */ "./node_modules/@mui/base/generateUtilityClass/generateUtilityClass.js");\n\n\nfunction getBackdropUtilityClass(slot) {\n return (0,_generateUtilityClass__WEBPACK_IMPORTED_MODULE_0__["default"])(\'MuiBackdrop\', slot);\n}\nconst backdropUnstyledClasses = (0,_generateUtilityClasses__WEBPACK_IMPORTED_MODULE_1__["default"])(\'MuiBackdrop\', [\'root\', \'invisible\']);\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (backdropUnstyledClasses);\n\n//# sourceURL=webpack://frontend/./node_modules/@mui/base/BackdropUnstyled/backdropUnstyledClasses.js?')},"./node_modules/@mui/base/BadgeUnstyled/BadgeUnstyled.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ "./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! clsx */ "./node_modules/clsx/dist/clsx.m.js");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/utils */ "./node_modules/@mui/utils/esm/capitalize.js");\n/* harmony import */ var _composeClasses__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../composeClasses */ "./node_modules/@mui/base/composeClasses/composeClasses.js");\n/* harmony import */ var _utils_appendOwnerState__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../utils/appendOwnerState */ "./node_modules/@mui/base/utils/appendOwnerState.js");\n/* harmony import */ var _useBadge__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./useBadge */ "./node_modules/@mui/base/BadgeUnstyled/useBadge.js");\n/* harmony import */ var _badgeUnstyledClasses__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./badgeUnstyledClasses */ "./node_modules/@mui/base/BadgeUnstyled/badgeUnstyledClasses.js");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js");\n\n\nconst _excluded = ["anchorOrigin", "classes", "badgeContent", "component", "children", "className", "components", "componentsProps", "invisible", "max", "showZero", "variant"];\n\n\n\n\n\n\n\n\n\n\n\nconst useUtilityClasses = ownerState => {\n const {\n variant,\n anchorOrigin,\n invisible,\n classes\n } = ownerState;\n const slots = {\n root: [\'root\'],\n badge: [\'badge\', variant, `anchorOrigin${(0,_mui_utils__WEBPACK_IMPORTED_MODULE_5__["default"])(anchorOrigin.vertical)}${(0,_mui_utils__WEBPACK_IMPORTED_MODULE_5__["default"])(anchorOrigin.horizontal)}`, invisible && \'invisible\']\n };\n return (0,_composeClasses__WEBPACK_IMPORTED_MODULE_6__["default"])(slots, _badgeUnstyledClasses__WEBPACK_IMPORTED_MODULE_7__.getBadgeUtilityClass, classes);\n};\n\nconst BadgeUnstyled = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.forwardRef(function BadgeUnstyled(props, ref) {\n const {\n anchorOrigin: anchorOriginProp = {\n vertical: \'top\',\n horizontal: \'right\'\n },\n classes: classesProp,\n component,\n children,\n className,\n components = {},\n componentsProps = {},\n max: maxProp = 99,\n showZero = false,\n variant: variantProp = \'standard\'\n } = props,\n other = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__["default"])(props, _excluded);\n\n const {\n anchorOrigin,\n badgeContent,\n max,\n variant,\n displayValue,\n invisible\n } = (0,_useBadge__WEBPACK_IMPORTED_MODULE_8__["default"])((0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, props, {\n anchorOrigin: anchorOriginProp,\n max: maxProp,\n variant: variantProp\n }));\n\n const ownerState = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, props, {\n anchorOrigin,\n badgeContent,\n classes: classesProp,\n invisible,\n max,\n variant,\n showZero\n });\n\n const classes = useUtilityClasses(ownerState);\n const Root = component || components.Root || \'span\';\n const rootProps = (0,_utils_appendOwnerState__WEBPACK_IMPORTED_MODULE_9__["default"])(Root, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, other, componentsProps.root), ownerState);\n const Badge = components.Badge || \'span\';\n const badgeProps = (0,_utils_appendOwnerState__WEBPACK_IMPORTED_MODULE_9__["default"])(Badge, componentsProps.badge, ownerState);\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(Root, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, rootProps, {\n ref: ref\n }, other, {\n className: (0,clsx__WEBPACK_IMPORTED_MODULE_3__["default"])(classes.root, rootProps.className, className),\n children: [children, /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(Badge, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, badgeProps, {\n className: (0,clsx__WEBPACK_IMPORTED_MODULE_3__["default"])(classes.badge, badgeProps.className),\n children: displayValue\n }))]\n }));\n});\n false ? 0 : void 0;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (BadgeUnstyled);\n\n//# sourceURL=webpack://frontend/./node_modules/@mui/base/BadgeUnstyled/BadgeUnstyled.js?')},"./node_modules/@mui/base/BadgeUnstyled/badgeUnstyledClasses.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"getBadgeUtilityClass\": () => (/* binding */ getBadgeUtilityClass),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _generateUtilityClasses__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../generateUtilityClasses */ \"./node_modules/@mui/base/generateUtilityClasses/generateUtilityClasses.js\");\n/* harmony import */ var _generateUtilityClass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../generateUtilityClass */ \"./node_modules/@mui/base/generateUtilityClass/generateUtilityClass.js\");\n\n\nfunction getBadgeUtilityClass(slot) {\n return (0,_generateUtilityClass__WEBPACK_IMPORTED_MODULE_0__[\"default\"])('MuiBadge', slot);\n}\nconst badgeUnstyledClasses = (0,_generateUtilityClasses__WEBPACK_IMPORTED_MODULE_1__[\"default\"])('MuiBadge', ['root', 'badge', 'dot', 'standard', 'anchorOriginTopLeft', 'anchorOriginTopRight', 'anchorOriginBottomLeft', 'anchorOriginBottomRight', 'invisible']);\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (badgeUnstyledClasses);\n\n//# sourceURL=webpack://frontend/./node_modules/@mui/base/BadgeUnstyled/badgeUnstyledClasses.js?")},"./node_modules/@mui/base/BadgeUnstyled/useBadge.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ useBadge)\n/* harmony export */ });\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/usePreviousProps.js\");\n\nfunction useBadge(props) {\n const {\n anchorOrigin: anchorOriginProp = {\n vertical: 'top',\n horizontal: 'right'\n },\n badgeContent: badgeContentProp,\n invisible: invisibleProp,\n max: maxProp = 99,\n showZero = false,\n variant: variantProp = 'standard'\n } = props;\n const prevProps = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n anchorOrigin: anchorOriginProp,\n badgeContent: badgeContentProp,\n max: maxProp,\n variant: variantProp\n });\n let invisible = invisibleProp;\n\n if (invisibleProp == null && (badgeContentProp === 0 && !showZero || badgeContentProp == null && variantProp !== 'dot')) {\n invisible = true;\n }\n\n const {\n anchorOrigin = anchorOriginProp,\n badgeContent,\n max = maxProp,\n variant = variantProp\n } = invisible ? prevProps : props;\n let displayValue = '';\n\n if (variant !== 'dot') {\n displayValue = badgeContent && Number(badgeContent) > max ? `${max}+` : badgeContent;\n }\n\n return {\n anchorOrigin,\n badgeContent,\n invisible,\n max,\n variant,\n displayValue\n };\n}\n\n//# sourceURL=webpack://frontend/./node_modules/@mui/base/BadgeUnstyled/useBadge.js?")},"./node_modules/@mui/base/ClickAwayListener/ClickAwayListener.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/utils */ "./node_modules/@mui/utils/esm/useForkRef.js");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/utils */ "./node_modules/@mui/utils/esm/useEventCallback.js");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/utils */ "./node_modules/@mui/utils/esm/ownerDocument.js");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js");\n\n\n // TODO: return `EventHandlerName extends `on${infer EventName}` ? Lowercase : never` once generatePropTypes runs with TS 4.1\n\n\n\nfunction mapEventPropToEvent(eventProp) {\n return eventProp.substring(2).toLowerCase();\n}\n\nfunction clickedRootScrollbar(event, doc) {\n return doc.documentElement.clientWidth < event.clientX || doc.documentElement.clientHeight < event.clientY;\n}\n\n/**\n * Listen for click events that occur somewhere in the document, outside of the element itself.\n * For instance, if you need to hide a menu when people click anywhere else on your page.\n *\n * Demos:\n *\n * - [Click Away Listener](https://mui.com/components/click-away-listener/)\n * - [Menus](https://mui.com/components/menus/)\n *\n * API:\n *\n * - [ClickAwayListener API](https://mui.com/api/click-away-listener/)\n */\nfunction ClickAwayListener(props) {\n const {\n children,\n disableReactTree = false,\n mouseEvent = \'onClick\',\n onClickAway,\n touchEvent = \'onTouchEnd\'\n } = props;\n const movedRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(false);\n const nodeRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null);\n const activatedRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(false);\n const syntheticEventRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(false);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {\n // Ensure that this component is not "activated" synchronously.\n // https://github.com/facebook/react/issues/20074\n setTimeout(() => {\n activatedRef.current = true;\n }, 0);\n return () => {\n activatedRef.current = false;\n };\n }, []);\n const handleRef = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_2__["default"])( // @ts-expect-error TODO upstream fix\n children.ref, nodeRef); // The handler doesn\'t take event.defaultPrevented into account:\n //\n // event.preventDefault() is meant to stop default behaviors like\n // clicking a checkbox to check it, hitting a button to submit a form,\n // and hitting left arrow to move the cursor in a text input etc.\n // Only special HTML elements have these default behaviors.\n\n const handleClickAway = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_3__["default"])(event => {\n // Given developers can stop the propagation of the synthetic event,\n // we can only be confident with a positive value.\n const insideReactTree = syntheticEventRef.current;\n syntheticEventRef.current = false;\n const doc = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_4__["default"])(nodeRef.current); // 1. IE11 support, which trigger the handleClickAway even after the unbind\n // 2. The child might render null.\n // 3. Behave like a blur listener.\n\n if (!activatedRef.current || !nodeRef.current || \'clientX\' in event && clickedRootScrollbar(event, doc)) {\n return;\n } // Do not act if user performed touchmove\n\n\n if (movedRef.current) {\n movedRef.current = false;\n return;\n }\n\n let insideDOM; // If not enough, can use https://github.com/DieterHolvoet/event-propagation-path/blob/master/propagationPath.js\n\n if (event.composedPath) {\n insideDOM = event.composedPath().indexOf(nodeRef.current) > -1;\n } else {\n insideDOM = !doc.documentElement.contains( // @ts-expect-error returns `false` as intended when not dispatched from a Node\n event.target) || nodeRef.current.contains( // @ts-expect-error returns `false` as intended when not dispatched from a Node\n event.target);\n }\n\n if (!insideDOM && (disableReactTree || !insideReactTree)) {\n onClickAway(event);\n }\n }); // Keep track of mouse/touch events that bubbled up through the portal.\n\n const createHandleSynthetic = handlerName => event => {\n syntheticEventRef.current = true;\n const childrenPropsHandler = children.props[handlerName];\n\n if (childrenPropsHandler) {\n childrenPropsHandler(event);\n }\n };\n\n const childrenProps = {\n ref: handleRef\n };\n\n if (touchEvent !== false) {\n childrenProps[touchEvent] = createHandleSynthetic(touchEvent);\n }\n\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {\n if (touchEvent !== false) {\n const mappedTouchEvent = mapEventPropToEvent(touchEvent);\n const doc = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_4__["default"])(nodeRef.current);\n\n const handleTouchMove = () => {\n movedRef.current = true;\n };\n\n doc.addEventListener(mappedTouchEvent, handleClickAway);\n doc.addEventListener(\'touchmove\', handleTouchMove);\n return () => {\n doc.removeEventListener(mappedTouchEvent, handleClickAway);\n doc.removeEventListener(\'touchmove\', handleTouchMove);\n };\n }\n\n return undefined;\n }, [handleClickAway, touchEvent]);\n\n if (mouseEvent !== false) {\n childrenProps[mouseEvent] = createHandleSynthetic(mouseEvent);\n }\n\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {\n if (mouseEvent !== false) {\n const mappedMouseEvent = mapEventPropToEvent(mouseEvent);\n const doc = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_4__["default"])(nodeRef.current);\n doc.addEventListener(mappedMouseEvent, handleClickAway);\n return () => {\n doc.removeEventListener(mappedMouseEvent, handleClickAway);\n };\n }\n\n return undefined;\n }, [handleClickAway, mouseEvent]);\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.cloneElement(children, childrenProps)\n });\n}\n\n false ? 0 : void 0;\n\nif (false) {}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ClickAwayListener);\n\n//# sourceURL=webpack://frontend/./node_modules/@mui/base/ClickAwayListener/ClickAwayListener.js?')},"./node_modules/@mui/base/ModalUnstyled/ModalManager.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ariaHidden\": () => (/* binding */ ariaHidden),\n/* harmony export */ \"default\": () => (/* binding */ ModalManager)\n/* harmony export */ });\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/ownerDocument.js\");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/ownerWindow.js\");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/getScrollbarSize.js\");\n\n\n// Is a vertical scrollbar displayed?\nfunction isOverflowing(container) {\n const doc = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(container);\n\n if (doc.body === container) {\n return (0,_mui_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(container).innerWidth > doc.documentElement.clientWidth;\n }\n\n return container.scrollHeight > container.clientHeight;\n}\n\nfunction ariaHidden(element, show) {\n if (show) {\n element.setAttribute('aria-hidden', 'true');\n } else {\n element.removeAttribute('aria-hidden');\n }\n}\n\nfunction getPaddingRight(element) {\n return parseInt((0,_mui_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(element).getComputedStyle(element).paddingRight, 10) || 0;\n}\n\nfunction ariaHiddenSiblings(container, mountElement, currentElement, elementsToExclude = [], show) {\n const blacklist = [mountElement, currentElement, ...elementsToExclude];\n const blacklistTagNames = ['TEMPLATE', 'SCRIPT', 'STYLE'];\n [].forEach.call(container.children, element => {\n if (blacklist.indexOf(element) === -1 && blacklistTagNames.indexOf(element.tagName) === -1) {\n ariaHidden(element, show);\n }\n });\n}\n\nfunction findIndexOf(items, callback) {\n let idx = -1;\n items.some((item, index) => {\n if (callback(item)) {\n idx = index;\n return true;\n }\n\n return false;\n });\n return idx;\n}\n\nfunction handleContainer(containerInfo, props) {\n const restoreStyle = [];\n const container = containerInfo.container;\n\n if (!props.disableScrollLock) {\n if (isOverflowing(container)) {\n // Compute the size before applying overflow hidden to avoid any scroll jumps.\n const scrollbarSize = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_2__[\"default\"])((0,_mui_utils__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(container));\n restoreStyle.push({\n value: container.style.paddingRight,\n property: 'padding-right',\n el: container\n }); // Use computed style, here to get the real padding to add our scrollbar width.\n\n container.style.paddingRight = `${getPaddingRight(container) + scrollbarSize}px`; // .mui-fixed is a global helper.\n\n const fixedElements = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(container).querySelectorAll('.mui-fixed');\n [].forEach.call(fixedElements, element => {\n restoreStyle.push({\n value: element.style.paddingRight,\n property: 'padding-right',\n el: element\n });\n element.style.paddingRight = `${getPaddingRight(element) + scrollbarSize}px`;\n });\n } // Improve Gatsby support\n // https://css-tricks.com/snippets/css/force-vertical-scrollbar/\n\n\n const parent = container.parentElement;\n const containerWindow = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(container);\n const scrollContainer = (parent == null ? void 0 : parent.nodeName) === 'HTML' && containerWindow.getComputedStyle(parent).overflowY === 'scroll' ? parent : container; // Block the scroll even if no scrollbar is visible to account for mobile keyboard\n // screensize shrink.\n\n restoreStyle.push({\n value: scrollContainer.style.overflow,\n property: 'overflow',\n el: scrollContainer\n }, {\n value: scrollContainer.style.overflowX,\n property: 'overflow-x',\n el: scrollContainer\n }, {\n value: scrollContainer.style.overflowY,\n property: 'overflow-y',\n el: scrollContainer\n });\n scrollContainer.style.overflow = 'hidden';\n }\n\n const restore = () => {\n restoreStyle.forEach(({\n value,\n el,\n property\n }) => {\n if (value) {\n el.style.setProperty(property, value);\n } else {\n el.style.removeProperty(property);\n }\n });\n };\n\n return restore;\n}\n\nfunction getHiddenSiblings(container) {\n const hiddenSiblings = [];\n [].forEach.call(container.children, element => {\n if (element.getAttribute('aria-hidden') === 'true') {\n hiddenSiblings.push(element);\n }\n });\n return hiddenSiblings;\n}\n\n/**\n * @ignore - do not document.\n *\n * Proper state management for containers and the modals in those containers.\n * Simplified, but inspired by react-overlay's ModalManager class.\n * Used by the Modal to ensure proper styling of containers.\n */\nclass ModalManager {\n constructor() {\n this.containers = void 0;\n this.modals = void 0;\n this.modals = [];\n this.containers = [];\n }\n\n add(modal, container) {\n let modalIndex = this.modals.indexOf(modal);\n\n if (modalIndex !== -1) {\n return modalIndex;\n }\n\n modalIndex = this.modals.length;\n this.modals.push(modal); // If the modal we are adding is already in the DOM.\n\n if (modal.modalRef) {\n ariaHidden(modal.modalRef, false);\n }\n\n const hiddenSiblings = getHiddenSiblings(container);\n ariaHiddenSiblings(container, modal.mount, modal.modalRef, hiddenSiblings, true);\n const containerIndex = findIndexOf(this.containers, item => item.container === container);\n\n if (containerIndex !== -1) {\n this.containers[containerIndex].modals.push(modal);\n return modalIndex;\n }\n\n this.containers.push({\n modals: [modal],\n container,\n restore: null,\n hiddenSiblings\n });\n return modalIndex;\n }\n\n mount(modal, props) {\n const containerIndex = findIndexOf(this.containers, item => item.modals.indexOf(modal) !== -1);\n const containerInfo = this.containers[containerIndex];\n\n if (!containerInfo.restore) {\n containerInfo.restore = handleContainer(containerInfo, props);\n }\n }\n\n remove(modal) {\n const modalIndex = this.modals.indexOf(modal);\n\n if (modalIndex === -1) {\n return modalIndex;\n }\n\n const containerIndex = findIndexOf(this.containers, item => item.modals.indexOf(modal) !== -1);\n const containerInfo = this.containers[containerIndex];\n containerInfo.modals.splice(containerInfo.modals.indexOf(modal), 1);\n this.modals.splice(modalIndex, 1); // If that was the last modal in a container, clean up the container.\n\n if (containerInfo.modals.length === 0) {\n // The modal might be closed before it had the chance to be mounted in the DOM.\n if (containerInfo.restore) {\n containerInfo.restore();\n }\n\n if (modal.modalRef) {\n // In case the modal wasn't in the DOM yet.\n ariaHidden(modal.modalRef, true);\n }\n\n ariaHiddenSiblings(containerInfo.container, modal.mount, modal.modalRef, containerInfo.hiddenSiblings, false);\n this.containers.splice(containerIndex, 1);\n } else {\n // Otherwise make sure the next top modal is visible to a screen reader.\n const nextTop = containerInfo.modals[containerInfo.modals.length - 1]; // as soon as a modal is adding its modalRef is undefined. it can't set\n // aria-hidden because the dom element doesn't exist either\n // when modal was unmounted before modalRef gets null\n\n if (nextTop.modalRef) {\n ariaHidden(nextTop.modalRef, false);\n }\n }\n\n return modalIndex;\n }\n\n isTopModal(modal) {\n return this.modals.length > 0 && this.modals[this.modals.length - 1] === modal;\n }\n\n}\n\n//# sourceURL=webpack://frontend/./node_modules/@mui/base/ModalUnstyled/ModalManager.js?")},"./node_modules/@mui/base/ModalUnstyled/ModalUnstyled.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ "./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! clsx */ "./node_modules/clsx/dist/clsx.m.js");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/utils */ "./node_modules/@mui/utils/esm/useForkRef.js");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/utils */ "./node_modules/@mui/utils/esm/ownerDocument.js");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/utils */ "./node_modules/@mui/utils/esm/useEventCallback.js");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/utils */ "./node_modules/@mui/utils/esm/createChainedFunction.js");\n/* harmony import */ var _composeClasses__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../composeClasses */ "./node_modules/@mui/base/composeClasses/composeClasses.js");\n/* harmony import */ var _utils_isHostComponent__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../utils/isHostComponent */ "./node_modules/@mui/base/utils/isHostComponent.js");\n/* harmony import */ var _Portal__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../Portal */ "./node_modules/@mui/base/Portal/Portal.js");\n/* harmony import */ var _ModalManager__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./ModalManager */ "./node_modules/@mui/base/ModalUnstyled/ModalManager.js");\n/* harmony import */ var _Unstable_TrapFocus__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../Unstable_TrapFocus */ "./node_modules/@mui/base/Unstable_TrapFocus/Unstable_TrapFocus.js");\n/* harmony import */ var _modalUnstyledClasses__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./modalUnstyledClasses */ "./node_modules/@mui/base/ModalUnstyled/modalUnstyledClasses.js");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js");\n\n\nconst _excluded = ["BackdropComponent", "BackdropProps", "children", "classes", "className", "closeAfterTransition", "component", "components", "componentsProps", "container", "disableAutoFocus", "disableEnforceFocus", "disableEscapeKeyDown", "disablePortal", "disableRestoreFocus", "disableScrollLock", "hideBackdrop", "keepMounted", "manager", "onBackdropClick", "onClose", "onKeyDown", "open", "theme", "onTransitionEnter", "onTransitionExited"];\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst useUtilityClasses = ownerState => {\n const {\n open,\n exited,\n classes\n } = ownerState;\n const slots = {\n root: [\'root\', !open && exited && \'hidden\']\n };\n return (0,_composeClasses__WEBPACK_IMPORTED_MODULE_5__["default"])(slots, _modalUnstyledClasses__WEBPACK_IMPORTED_MODULE_6__.getModalUtilityClass, classes);\n};\n\nfunction getContainer(container) {\n return typeof container === \'function\' ? container() : container;\n}\n\nfunction getHasTransition(props) {\n return props.children ? props.children.props.hasOwnProperty(\'in\') : false;\n} // A modal manager used to track and manage the state of open Modals.\n// Modals don\'t open on the server so this won\'t conflict with concurrent requests.\n\n\nconst defaultManager = new _ModalManager__WEBPACK_IMPORTED_MODULE_7__["default"]();\n/**\n * Modal is a lower-level construct that is leveraged by the following components:\n *\n * - [Dialog](/api/dialog/)\n * - [Drawer](/api/drawer/)\n * - [Menu](/api/menu/)\n * - [Popover](/api/popover/)\n *\n * If you are creating a modal dialog, you probably want to use the [Dialog](/api/dialog/) component\n * rather than directly using Modal.\n *\n * This component shares many concepts with [react-overlays](https://react-bootstrap.github.io/react-overlays/#modals).\n */\n\nconst ModalUnstyled = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.forwardRef(function ModalUnstyled(props, ref) {\n const {\n BackdropComponent,\n BackdropProps,\n children,\n classes: classesProp,\n className,\n closeAfterTransition = false,\n component = \'div\',\n components = {},\n componentsProps = {},\n container,\n disableAutoFocus = false,\n disableEnforceFocus = false,\n disableEscapeKeyDown = false,\n disablePortal = false,\n disableRestoreFocus = false,\n disableScrollLock = false,\n hideBackdrop = false,\n keepMounted = false,\n // private\n // eslint-disable-next-line react/prop-types\n manager = defaultManager,\n onBackdropClick,\n onClose,\n onKeyDown,\n open,\n\n /* eslint-disable react/prop-types */\n theme,\n onTransitionEnter,\n onTransitionExited\n } = props,\n other = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__["default"])(props, _excluded);\n\n const [exited, setExited] = react__WEBPACK_IMPORTED_MODULE_2__.useState(true);\n const modal = react__WEBPACK_IMPORTED_MODULE_2__.useRef({});\n const mountNodeRef = react__WEBPACK_IMPORTED_MODULE_2__.useRef(null);\n const modalRef = react__WEBPACK_IMPORTED_MODULE_2__.useRef(null);\n const handleRef = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_8__["default"])(modalRef, ref);\n const hasTransition = getHasTransition(props);\n\n const getDoc = () => (0,_mui_utils__WEBPACK_IMPORTED_MODULE_9__["default"])(mountNodeRef.current);\n\n const getModal = () => {\n modal.current.modalRef = modalRef.current;\n modal.current.mountNode = mountNodeRef.current;\n return modal.current;\n };\n\n const handleMounted = () => {\n manager.mount(getModal(), {\n disableScrollLock\n }); // Fix a bug on Chrome where the scroll isn\'t initially 0.\n\n modalRef.current.scrollTop = 0;\n };\n\n const handleOpen = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_10__["default"])(() => {\n const resolvedContainer = getContainer(container) || getDoc().body;\n manager.add(getModal(), resolvedContainer); // The element was already mounted.\n\n if (modalRef.current) {\n handleMounted();\n }\n });\n const isTopModal = react__WEBPACK_IMPORTED_MODULE_2__.useCallback(() => manager.isTopModal(getModal()), [manager]);\n const handlePortalRef = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_10__["default"])(node => {\n mountNodeRef.current = node;\n\n if (!node) {\n return;\n }\n\n if (open && isTopModal()) {\n handleMounted();\n } else {\n (0,_ModalManager__WEBPACK_IMPORTED_MODULE_7__.ariaHidden)(modalRef.current, true);\n }\n });\n const handleClose = react__WEBPACK_IMPORTED_MODULE_2__.useCallback(() => {\n manager.remove(getModal());\n }, [manager]);\n react__WEBPACK_IMPORTED_MODULE_2__.useEffect(() => {\n return () => {\n handleClose();\n };\n }, [handleClose]);\n react__WEBPACK_IMPORTED_MODULE_2__.useEffect(() => {\n if (open) {\n handleOpen();\n } else if (!hasTransition || !closeAfterTransition) {\n handleClose();\n }\n }, [open, handleClose, hasTransition, closeAfterTransition, handleOpen]);\n\n const ownerState = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, props, {\n classes: classesProp,\n closeAfterTransition,\n disableAutoFocus,\n disableEnforceFocus,\n disableEscapeKeyDown,\n disablePortal,\n disableRestoreFocus,\n disableScrollLock,\n exited,\n hideBackdrop,\n keepMounted\n });\n\n const classes = useUtilityClasses(ownerState);\n\n if (!keepMounted && !open && (!hasTransition || exited)) {\n return null;\n }\n\n const handleEnter = () => {\n setExited(false);\n\n if (onTransitionEnter) {\n onTransitionEnter();\n }\n };\n\n const handleExited = () => {\n setExited(true);\n\n if (onTransitionExited) {\n onTransitionExited();\n }\n\n if (closeAfterTransition) {\n handleClose();\n }\n };\n\n const handleBackdropClick = event => {\n if (event.target !== event.currentTarget) {\n return;\n }\n\n if (onBackdropClick) {\n onBackdropClick(event);\n }\n\n if (onClose) {\n onClose(event, \'backdropClick\');\n }\n };\n\n const handleKeyDown = event => {\n if (onKeyDown) {\n onKeyDown(event);\n } // The handler doesn\'t take event.defaultPrevented into account:\n //\n // event.preventDefault() is meant to stop default behaviors like\n // clicking a checkbox to check it, hitting a button to submit a form,\n // and hitting left arrow to move the cursor in a text input etc.\n // Only special HTML elements have these default behaviors.\n\n\n if (event.key !== \'Escape\' || !isTopModal()) {\n return;\n }\n\n if (!disableEscapeKeyDown) {\n // Swallow the event, in case someone is listening for the escape key on the body.\n event.stopPropagation();\n\n if (onClose) {\n onClose(event, \'escapeKeyDown\');\n }\n }\n };\n\n const childProps = {};\n\n if (children.props.tabIndex === undefined) {\n childProps.tabIndex = \'-1\';\n } // It\'s a Transition like component\n\n\n if (hasTransition) {\n childProps.onEnter = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_11__["default"])(handleEnter, children.props.onEnter);\n childProps.onExited = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_11__["default"])(handleExited, children.props.onExited);\n }\n\n const Root = components.Root || component;\n const rootProps = componentsProps.root || {};\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_Portal__WEBPACK_IMPORTED_MODULE_12__["default"], {\n ref: handlePortalRef,\n container: container,\n disablePortal: disablePortal,\n children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(Root, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({\n role: "presentation"\n }, rootProps, !(0,_utils_isHostComponent__WEBPACK_IMPORTED_MODULE_13__["default"])(Root) && {\n as: component,\n ownerState: (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, ownerState, rootProps.ownerState),\n theme\n }, other, {\n ref: handleRef,\n onKeyDown: handleKeyDown,\n className: (0,clsx__WEBPACK_IMPORTED_MODULE_3__["default"])(classes.root, rootProps.className, className),\n children: [!hideBackdrop && BackdropComponent ? /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(BackdropComponent, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({\n open: open,\n onClick: handleBackdropClick\n }, BackdropProps)) : null, /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_Unstable_TrapFocus__WEBPACK_IMPORTED_MODULE_14__["default"], {\n disableEnforceFocus: disableEnforceFocus,\n disableAutoFocus: disableAutoFocus,\n disableRestoreFocus: disableRestoreFocus,\n isEnabled: isTopModal,\n open: open,\n children: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.cloneElement(children, childProps)\n })]\n }))\n });\n});\n false ? 0 : void 0;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ModalUnstyled);\n\n//# sourceURL=webpack://frontend/./node_modules/@mui/base/ModalUnstyled/ModalUnstyled.js?')},"./node_modules/@mui/base/ModalUnstyled/modalUnstyledClasses.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "getModalUtilityClass": () => (/* binding */ getModalUtilityClass),\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _generateUtilityClasses__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../generateUtilityClasses */ "./node_modules/@mui/base/generateUtilityClasses/generateUtilityClasses.js");\n/* harmony import */ var _generateUtilityClass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../generateUtilityClass */ "./node_modules/@mui/base/generateUtilityClass/generateUtilityClass.js");\n\n\nfunction getModalUtilityClass(slot) {\n return (0,_generateUtilityClass__WEBPACK_IMPORTED_MODULE_0__["default"])(\'MuiModal\', slot);\n}\nconst modalUnstyledClasses = (0,_generateUtilityClasses__WEBPACK_IMPORTED_MODULE_1__["default"])(\'MuiModal\', [\'root\', \'hidden\']);\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (modalUnstyledClasses);\n\n//# sourceURL=webpack://frontend/./node_modules/@mui/base/ModalUnstyled/modalUnstyledClasses.js?')},"./node_modules/@mui/base/NoSsr/NoSsr.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/utils */ "./node_modules/@mui/utils/esm/useEnhancedEffect.js");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js");\n\n\n\n/**\n * NoSsr purposely removes components from the subject of Server Side Rendering (SSR).\n *\n * This component can be useful in a variety of situations:\n * - Escape hatch for broken dependencies not supporting SSR.\n * - Improve the time-to-first paint on the client by only rendering above the fold.\n * - Reduce the rendering time on the server.\n * - Under too heavy server load, you can turn on service degradation.\n */\n\n\n\nfunction NoSsr(props) {\n const {\n children,\n defer = false,\n fallback = null\n } = props;\n const [mountedState, setMountedState] = react__WEBPACK_IMPORTED_MODULE_0__.useState(false);\n (0,_mui_utils__WEBPACK_IMPORTED_MODULE_2__["default"])(() => {\n if (!defer) {\n setMountedState(true);\n }\n }, [defer]);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {\n if (defer) {\n setMountedState(true);\n }\n }, [defer]); // We need the Fragment here to force react-docgen to recognise NoSsr as a component.\n\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: mountedState ? children : fallback\n });\n}\n\n false ? 0 : void 0;\n\nif (false) {}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (NoSsr);\n\n//# sourceURL=webpack://frontend/./node_modules/@mui/base/NoSsr/NoSsr.js?')},"./node_modules/@mui/base/PopperUnstyled/PopperUnstyled.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ "./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/utils */ "./node_modules/@mui/utils/esm/useForkRef.js");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/utils */ "./node_modules/@mui/utils/esm/useEnhancedEffect.js");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/utils */ "./node_modules/@mui/utils/esm/ownerDocument.js");\n/* harmony import */ var _popperjs_core__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @popperjs/core */ "./node_modules/@popperjs/core/lib/popper.js");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");\n/* harmony import */ var _Portal__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../Portal */ "./node_modules/@mui/base/Portal/Portal.js");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js");\n\n\nconst _excluded = ["anchorEl", "children", "direction", "disablePortal", "modifiers", "open", "placement", "popperOptions", "popperRef", "TransitionProps"],\n _excluded2 = ["anchorEl", "children", "container", "direction", "disablePortal", "keepMounted", "modifiers", "open", "placement", "popperOptions", "popperRef", "style", "transition"];\n\n\n\n\n\n\n\nfunction flipPlacement(placement, direction) {\n if (direction === \'ltr\') {\n return placement;\n }\n\n switch (placement) {\n case \'bottom-end\':\n return \'bottom-start\';\n\n case \'bottom-start\':\n return \'bottom-end\';\n\n case \'top-end\':\n return \'top-start\';\n\n case \'top-start\':\n return \'top-end\';\n\n default:\n return placement;\n }\n}\n\nfunction resolveAnchorEl(anchorEl) {\n return typeof anchorEl === \'function\' ? anchorEl() : anchorEl;\n}\n\nconst defaultPopperOptions = {};\n/* eslint-disable react/prop-types */\n\nconst PopperTooltip = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.forwardRef(function PopperTooltip(props, ref) {\n const {\n anchorEl,\n children,\n direction,\n disablePortal,\n modifiers,\n open,\n placement: initialPlacement,\n popperOptions,\n popperRef: popperRefProp,\n TransitionProps\n } = props,\n other = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__["default"])(props, _excluded);\n\n const tooltipRef = react__WEBPACK_IMPORTED_MODULE_2__.useRef(null);\n const ownRef = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_4__["default"])(tooltipRef, ref);\n const popperRef = react__WEBPACK_IMPORTED_MODULE_2__.useRef(null);\n const handlePopperRef = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_4__["default"])(popperRef, popperRefProp);\n const handlePopperRefRef = react__WEBPACK_IMPORTED_MODULE_2__.useRef(handlePopperRef);\n (0,_mui_utils__WEBPACK_IMPORTED_MODULE_5__["default"])(() => {\n handlePopperRefRef.current = handlePopperRef;\n }, [handlePopperRef]);\n react__WEBPACK_IMPORTED_MODULE_2__.useImperativeHandle(popperRefProp, () => popperRef.current, []);\n const rtlPlacement = flipPlacement(initialPlacement, direction);\n /**\n * placement initialized from prop but can change during lifetime if modifiers.flip.\n * modifiers.flip is essentially a flip for controlled/uncontrolled behavior\n */\n\n const [placement, setPlacement] = react__WEBPACK_IMPORTED_MODULE_2__.useState(rtlPlacement);\n react__WEBPACK_IMPORTED_MODULE_2__.useEffect(() => {\n if (popperRef.current) {\n popperRef.current.forceUpdate();\n }\n });\n (0,_mui_utils__WEBPACK_IMPORTED_MODULE_5__["default"])(() => {\n if (!anchorEl || !open) {\n return undefined;\n }\n\n const handlePopperUpdate = data => {\n setPlacement(data.placement);\n };\n\n const resolvedAnchorEl = resolveAnchorEl(anchorEl);\n\n if (false) {}\n\n let popperModifiers = [{\n name: \'preventOverflow\',\n options: {\n altBoundary: disablePortal\n }\n }, {\n name: \'flip\',\n options: {\n altBoundary: disablePortal\n }\n }, {\n name: \'onUpdate\',\n enabled: true,\n phase: \'afterWrite\',\n fn: ({\n state\n }) => {\n handlePopperUpdate(state);\n }\n }];\n\n if (modifiers != null) {\n popperModifiers = popperModifiers.concat(modifiers);\n }\n\n if (popperOptions && popperOptions.modifiers != null) {\n popperModifiers = popperModifiers.concat(popperOptions.modifiers);\n }\n\n const popper = (0,_popperjs_core__WEBPACK_IMPORTED_MODULE_6__.createPopper)(resolveAnchorEl(anchorEl), tooltipRef.current, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({\n placement: rtlPlacement\n }, popperOptions, {\n modifiers: popperModifiers\n }));\n handlePopperRefRef.current(popper);\n return () => {\n popper.destroy();\n handlePopperRefRef.current(null);\n };\n }, [anchorEl, disablePortal, modifiers, open, popperOptions, rtlPlacement]);\n const childProps = {\n placement\n };\n\n if (TransitionProps !== null) {\n childProps.TransitionProps = TransitionProps;\n }\n\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("div", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({\n ref: ownRef,\n role: "tooltip"\n }, other, {\n children: typeof children === \'function\' ? children(childProps) : children\n }));\n});\n/* eslint-enable react/prop-types */\n\n/**\n * Poppers rely on the 3rd party library [Popper.js](https://popper.js.org/docs/v2/) for positioning.\n */\n\nconst PopperUnstyled = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.forwardRef(function PopperUnstyled(props, ref) {\n const {\n anchorEl,\n children,\n container: containerProp,\n direction = \'ltr\',\n disablePortal = false,\n keepMounted = false,\n modifiers,\n open,\n placement = \'bottom\',\n popperOptions = defaultPopperOptions,\n popperRef,\n style,\n transition = false\n } = props,\n other = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__["default"])(props, _excluded2);\n\n const [exited, setExited] = react__WEBPACK_IMPORTED_MODULE_2__.useState(true);\n\n const handleEnter = () => {\n setExited(false);\n };\n\n const handleExited = () => {\n setExited(true);\n };\n\n if (!keepMounted && !open && (!transition || exited)) {\n return null;\n } // If the container prop is provided, use that\n // If the anchorEl prop is provided, use its parent body element as the container\n // If neither are provided let the Modal take care of choosing the container\n\n\n const container = containerProp || (anchorEl ? (0,_mui_utils__WEBPACK_IMPORTED_MODULE_7__["default"])(resolveAnchorEl(anchorEl)).body : undefined);\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_Portal__WEBPACK_IMPORTED_MODULE_8__["default"], {\n disablePortal: disablePortal,\n container: container,\n children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(PopperTooltip, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({\n anchorEl: anchorEl,\n direction: direction,\n disablePortal: disablePortal,\n modifiers: modifiers,\n ref: ref,\n open: transition ? !exited : open,\n placement: placement,\n popperOptions: popperOptions,\n popperRef: popperRef\n }, other, {\n style: (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({\n // Prevents scroll issue, waiting for Popper.js to add this style once initiated.\n position: \'fixed\',\n // Fix Popper.js display issue\n top: 0,\n left: 0,\n display: !open && keepMounted && (!transition || exited) ? \'none\' : null\n }, style),\n TransitionProps: transition ? {\n in: open,\n onEnter: handleEnter,\n onExited: handleExited\n } : null,\n children: children\n }))\n });\n});\n false ? 0 : void 0;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (PopperUnstyled);\n\n//# sourceURL=webpack://frontend/./node_modules/@mui/base/PopperUnstyled/PopperUnstyled.js?')},"./node_modules/@mui/base/Portal/Portal.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ "./node_modules/react-dom/index.js");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/utils */ "./node_modules/@mui/utils/esm/useForkRef.js");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/utils */ "./node_modules/@mui/utils/esm/useEnhancedEffect.js");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/utils */ "./node_modules/@mui/utils/esm/setRef.js");\n\n\n\n\n\nfunction getContainer(container) {\n return typeof container === \'function\' ? container() : container;\n}\n/**\n * Portals provide a first-class way to render children into a DOM node\n * that exists outside the DOM hierarchy of the parent component.\n */\n\n\nconst Portal = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(function Portal(props, ref) {\n const {\n children,\n container,\n disablePortal = false\n } = props;\n const [mountNode, setMountNode] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null);\n const handleRef = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_2__["default"])( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.isValidElement(children) ? children.ref : null, ref);\n (0,_mui_utils__WEBPACK_IMPORTED_MODULE_3__["default"])(() => {\n if (!disablePortal) {\n setMountNode(getContainer(container) || document.body);\n }\n }, [container, disablePortal]);\n (0,_mui_utils__WEBPACK_IMPORTED_MODULE_3__["default"])(() => {\n if (mountNode && !disablePortal) {\n (0,_mui_utils__WEBPACK_IMPORTED_MODULE_4__["default"])(ref, mountNode);\n return () => {\n (0,_mui_utils__WEBPACK_IMPORTED_MODULE_4__["default"])(ref, null);\n };\n }\n\n return undefined;\n }, [ref, mountNode, disablePortal]);\n\n if (disablePortal) {\n if ( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.isValidElement(children)) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.cloneElement(children, {\n ref: handleRef\n });\n }\n\n return children;\n }\n\n return mountNode ? /*#__PURE__*/react_dom__WEBPACK_IMPORTED_MODULE_1__.createPortal(children, mountNode) : mountNode;\n});\n false ? 0 : void 0;\n\nif (false) {}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Portal);\n\n//# sourceURL=webpack://frontend/./node_modules/@mui/base/Portal/Portal.js?')},"./node_modules/@mui/base/SliderUnstyled/SliderUnstyled.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ "./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! clsx */ "./node_modules/clsx/dist/clsx.m.js");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/utils */ "./node_modules/@mui/utils/esm/ownerDocument.js");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/utils */ "./node_modules/@mui/utils/esm/useControlled.js");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/utils */ "./node_modules/@mui/utils/esm/useIsFocusVisible.js");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/utils */ "./node_modules/@mui/utils/esm/useForkRef.js");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/utils */ "./node_modules/@mui/utils/esm/useEventCallback.js");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/utils */ "./node_modules/@mui/utils/esm/useEnhancedEffect.js");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/utils */ "./node_modules/@mui/utils/esm/visuallyHidden.js");\n/* harmony import */ var _utils_isHostComponent__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../utils/isHostComponent */ "./node_modules/@mui/base/utils/isHostComponent.js");\n/* harmony import */ var _composeClasses__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../composeClasses */ "./node_modules/@mui/base/composeClasses/composeClasses.js");\n/* harmony import */ var _sliderUnstyledClasses__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./sliderUnstyledClasses */ "./node_modules/@mui/base/SliderUnstyled/sliderUnstyledClasses.js");\n/* harmony import */ var _SliderValueLabelUnstyled__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./SliderValueLabelUnstyled */ "./node_modules/@mui/base/SliderUnstyled/SliderValueLabelUnstyled.js");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js");\n\n\nconst _excluded = ["aria-label", "aria-labelledby", "aria-valuetext", "className", "component", "classes", "defaultValue", "disableSwap", "disabled", "getAriaLabel", "getAriaValueText", "marks", "max", "min", "name", "onChange", "onChangeCommitted", "onMouseDown", "orientation", "scale", "step", "tabIndex", "track", "value", "valueLabelDisplay", "valueLabelFormat", "isRtl", "components", "componentsProps"];\n\n\n\n\n\n\n\n\n\n\nconst INTENTIONAL_DRAG_COUNT_THRESHOLD = 2;\n\nfunction asc(a, b) {\n return a - b;\n}\n\nfunction clamp(value, min, max) {\n if (value == null) {\n return min;\n }\n\n return Math.min(Math.max(min, value), max);\n}\n\nfunction findClosest(values, currentValue) {\n const {\n index: closestIndex\n } = values.reduce((acc, value, index) => {\n const distance = Math.abs(currentValue - value);\n\n if (acc === null || distance < acc.distance || distance === acc.distance) {\n return {\n distance,\n index\n };\n }\n\n return acc;\n }, null);\n return closestIndex;\n}\n\nfunction trackFinger(event, touchId) {\n if (touchId.current !== undefined && event.changedTouches) {\n for (let i = 0; i < event.changedTouches.length; i += 1) {\n const touch = event.changedTouches[i];\n\n if (touch.identifier === touchId.current) {\n return {\n x: touch.clientX,\n y: touch.clientY\n };\n }\n }\n\n return false;\n }\n\n return {\n x: event.clientX,\n y: event.clientY\n };\n}\n\nfunction valueToPercent(value, min, max) {\n return (value - min) * 100 / (max - min);\n}\n\nfunction percentToValue(percent, min, max) {\n return (max - min) * percent + min;\n}\n\nfunction getDecimalPrecision(num) {\n // This handles the case when num is very small (0.00000001), js will turn this into 1e-8.\n // When num is bigger than 1 or less than -1 it won\'t get converted to this notation so it\'s fine.\n if (Math.abs(num) < 1) {\n const parts = num.toExponential().split(\'e-\');\n const matissaDecimalPart = parts[0].split(\'.\')[1];\n return (matissaDecimalPart ? matissaDecimalPart.length : 0) + parseInt(parts[1], 10);\n }\n\n const decimalPart = num.toString().split(\'.\')[1];\n return decimalPart ? decimalPart.length : 0;\n}\n\nfunction roundValueToStep(value, step, min) {\n const nearest = Math.round((value - min) / step) * step + min;\n return Number(nearest.toFixed(getDecimalPrecision(step)));\n}\n\nfunction setValueIndex({\n values,\n newValue,\n index\n}) {\n const output = values.slice();\n output[index] = newValue;\n return output.sort(asc);\n}\n\nfunction focusThumb({\n sliderRef,\n activeIndex,\n setActive\n}) {\n const doc = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_5__["default"])(sliderRef.current);\n\n if (!sliderRef.current.contains(doc.activeElement) || Number(doc.activeElement.getAttribute(\'data-index\')) !== activeIndex) {\n sliderRef.current.querySelector(`[type="range"][data-index="${activeIndex}"]`).focus();\n }\n\n if (setActive) {\n setActive(activeIndex);\n }\n}\n\nconst axisProps = {\n horizontal: {\n offset: percent => ({\n left: `${percent}%`\n }),\n leap: percent => ({\n width: `${percent}%`\n })\n },\n \'horizontal-reverse\': {\n offset: percent => ({\n right: `${percent}%`\n }),\n leap: percent => ({\n width: `${percent}%`\n })\n },\n vertical: {\n offset: percent => ({\n bottom: `${percent}%`\n }),\n leap: percent => ({\n height: `${percent}%`\n })\n }\n};\n\nconst Identity = x => x; // TODO: remove support for Safari < 13.\n// https://caniuse.com/#search=touch-action\n//\n// Safari, on iOS, supports touch action since v13.\n// Over 80% of the iOS phones are compatible\n// in August 2020.\n// Utilizing the CSS.supports method to check if touch-action is supported.\n// Since CSS.supports is supported on all but Edge@12 and IE and touch-action\n// is supported on both Edge@12 and IE if CSS.supports is not available that means that\n// touch-action will be supported\n\n\nlet cachedSupportsTouchActionNone;\n\nfunction doesSupportTouchActionNone() {\n if (cachedSupportsTouchActionNone === undefined) {\n if (typeof CSS !== \'undefined\' && typeof CSS.supports === \'function\') {\n cachedSupportsTouchActionNone = CSS.supports(\'touch-action\', \'none\');\n } else {\n cachedSupportsTouchActionNone = true;\n }\n }\n\n return cachedSupportsTouchActionNone;\n}\n\nconst useUtilityClasses = ownerState => {\n const {\n disabled,\n dragging,\n marked,\n orientation,\n track,\n classes\n } = ownerState;\n const slots = {\n root: [\'root\', disabled && \'disabled\', dragging && \'dragging\', marked && \'marked\', orientation === \'vertical\' && \'vertical\', track === \'inverted\' && \'trackInverted\', track === false && \'trackFalse\'],\n rail: [\'rail\'],\n track: [\'track\'],\n mark: [\'mark\'],\n markActive: [\'markActive\'],\n markLabel: [\'markLabel\'],\n markLabelActive: [\'markLabelActive\'],\n valueLabel: [\'valueLabel\'],\n thumb: [\'thumb\', disabled && \'disabled\'],\n active: [\'active\'],\n disabled: [\'disabled\'],\n focusVisible: [\'focusVisible\']\n };\n return (0,_composeClasses__WEBPACK_IMPORTED_MODULE_6__["default"])(slots, _sliderUnstyledClasses__WEBPACK_IMPORTED_MODULE_7__.getSliderUtilityClass, classes);\n};\n\nconst Forward = ({\n children\n}) => children;\n\nconst SliderUnstyled = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.forwardRef(function SliderUnstyled(props, ref) {\n const {\n \'aria-label\': ariaLabel,\n \'aria-labelledby\': ariaLabelledby,\n \'aria-valuetext\': ariaValuetext,\n className,\n component = \'span\',\n classes: classesProp,\n defaultValue,\n disableSwap = false,\n disabled = false,\n getAriaLabel,\n getAriaValueText,\n marks: marksProp = false,\n max = 100,\n min = 0,\n name,\n onChange,\n onChangeCommitted,\n onMouseDown,\n orientation = \'horizontal\',\n scale = Identity,\n step = 1,\n tabIndex,\n track = \'normal\',\n value: valueProp,\n valueLabelDisplay = \'off\',\n valueLabelFormat = Identity,\n isRtl = false,\n components = {},\n componentsProps = {}\n } = props,\n other = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__["default"])(props, _excluded);\n\n const touchId = react__WEBPACK_IMPORTED_MODULE_2__.useRef(); // We can\'t use the :active browser pseudo-classes.\n // - The active state isn\'t triggered when clicking on the rail.\n // - The active state isn\'t transferred when inversing a range slider.\n\n const [active, setActive] = react__WEBPACK_IMPORTED_MODULE_2__.useState(-1);\n const [open, setOpen] = react__WEBPACK_IMPORTED_MODULE_2__.useState(-1);\n const [dragging, setDragging] = react__WEBPACK_IMPORTED_MODULE_2__.useState(false);\n const moveCount = react__WEBPACK_IMPORTED_MODULE_2__.useRef(0);\n const [valueDerived, setValueState] = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_8__["default"])({\n controlled: valueProp,\n default: defaultValue != null ? defaultValue : min,\n name: \'Slider\'\n });\n\n const handleChange = onChange && ((event, value, thumbIndex) => {\n // Redefine target to allow name and value to be read.\n // This allows seamless integration with the most popular form libraries.\n // https://github.com/mui-org/material-ui/issues/13485#issuecomment-676048492\n // Clone the event to not override `target` of the original event.\n const nativeEvent = event.nativeEvent || event;\n const clonedEvent = new nativeEvent.constructor(nativeEvent.type, nativeEvent);\n Object.defineProperty(clonedEvent, \'target\', {\n writable: true,\n value: {\n value,\n name\n }\n });\n onChange(clonedEvent, value, thumbIndex);\n });\n\n const range = Array.isArray(valueDerived);\n let values = range ? valueDerived.slice().sort(asc) : [valueDerived];\n values = values.map(value => clamp(value, min, max));\n const marks = marksProp === true && step !== null ? [...Array(Math.floor((max - min) / step) + 1)].map((_, index) => ({\n value: min + step * index\n })) : marksProp || [];\n const {\n isFocusVisibleRef,\n onBlur: handleBlurVisible,\n onFocus: handleFocusVisible,\n ref: focusVisibleRef\n } = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_9__["default"])();\n const [focusVisible, setFocusVisible] = react__WEBPACK_IMPORTED_MODULE_2__.useState(-1);\n const sliderRef = react__WEBPACK_IMPORTED_MODULE_2__.useRef();\n const handleFocusRef = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_10__["default"])(focusVisibleRef, sliderRef);\n const handleRef = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_10__["default"])(ref, handleFocusRef);\n\n const handleFocus = event => {\n const index = Number(event.currentTarget.getAttribute(\'data-index\'));\n handleFocusVisible(event);\n\n if (isFocusVisibleRef.current === true) {\n setFocusVisible(index);\n }\n\n setOpen(index);\n };\n\n const handleBlur = event => {\n handleBlurVisible(event);\n\n if (isFocusVisibleRef.current === false) {\n setFocusVisible(-1);\n }\n\n setOpen(-1);\n };\n\n const handleMouseOver = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_11__["default"])(event => {\n const index = Number(event.currentTarget.getAttribute(\'data-index\'));\n setOpen(index);\n });\n const handleMouseLeave = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_11__["default"])(() => {\n setOpen(-1);\n });\n (0,_mui_utils__WEBPACK_IMPORTED_MODULE_12__["default"])(() => {\n if (disabled && sliderRef.current.contains(document.activeElement)) {\n // This is necessary because Firefox and Safari will keep focus\n // on a disabled element:\n // https://codesandbox.io/s/mui-pr-22247-forked-h151h?file=/src/App.js\n document.activeElement.blur();\n }\n }, [disabled]);\n\n if (disabled && active !== -1) {\n setActive(-1);\n }\n\n if (disabled && focusVisible !== -1) {\n setFocusVisible(-1);\n }\n\n const handleHiddenInputChange = event => {\n const index = Number(event.currentTarget.getAttribute(\'data-index\'));\n const value = values[index];\n const marksValues = marks.map(mark => mark.value);\n const marksIndex = marksValues.indexOf(value);\n let newValue = event.target.valueAsNumber;\n\n if (marks && step == null) {\n newValue = newValue < value ? marksValues[marksIndex - 1] : marksValues[marksIndex + 1];\n }\n\n newValue = clamp(newValue, min, max);\n\n if (marks && step == null) {\n const markValues = marks.map(mark => mark.value);\n const currentMarkIndex = markValues.indexOf(values[index]);\n newValue = newValue < values[index] ? markValues[currentMarkIndex - 1] : markValues[currentMarkIndex + 1];\n }\n\n if (range) {\n // Bound the new value to the thumb\'s neighbours.\n if (disableSwap) {\n newValue = clamp(newValue, values[index - 1] || -Infinity, values[index + 1] || Infinity);\n }\n\n const previousValue = newValue;\n newValue = setValueIndex({\n values,\n newValue,\n index\n });\n let activeIndex = index; // Potentially swap the index if needed.\n\n if (!disableSwap) {\n activeIndex = newValue.indexOf(previousValue);\n }\n\n focusThumb({\n sliderRef,\n activeIndex\n });\n }\n\n setValueState(newValue);\n setFocusVisible(index);\n\n if (handleChange) {\n handleChange(event, newValue, index);\n }\n\n if (onChangeCommitted) {\n onChangeCommitted(event, newValue);\n }\n };\n\n const previousIndex = react__WEBPACK_IMPORTED_MODULE_2__.useRef();\n let axis = orientation;\n\n if (isRtl && orientation !== "vertical") {\n axis += \'-reverse\';\n }\n\n const getFingerNewValue = ({\n finger,\n move = false,\n values: values2\n }) => {\n const {\n current: slider\n } = sliderRef;\n const {\n width,\n height,\n bottom,\n left\n } = slider.getBoundingClientRect();\n let percent;\n\n if (axis.indexOf(\'vertical\') === 0) {\n percent = (bottom - finger.y) / height;\n } else {\n percent = (finger.x - left) / width;\n }\n\n if (axis.indexOf(\'-reverse\') !== -1) {\n percent = 1 - percent;\n }\n\n let newValue;\n newValue = percentToValue(percent, min, max);\n\n if (step) {\n newValue = roundValueToStep(newValue, step, min);\n } else {\n const marksValues = marks.map(mark => mark.value);\n const closestIndex = findClosest(marksValues, newValue);\n newValue = marksValues[closestIndex];\n }\n\n newValue = clamp(newValue, min, max);\n let activeIndex = 0;\n\n if (range) {\n if (!move) {\n activeIndex = findClosest(values2, newValue);\n } else {\n activeIndex = previousIndex.current;\n } // Bound the new value to the thumb\'s neighbours.\n\n\n if (disableSwap) {\n newValue = clamp(newValue, values2[activeIndex - 1] || -Infinity, values2[activeIndex + 1] || Infinity);\n }\n\n const previousValue = newValue;\n newValue = setValueIndex({\n values: values2,\n newValue,\n index: activeIndex\n }); // Potentially swap the index if needed.\n\n if (!(disableSwap && move)) {\n activeIndex = newValue.indexOf(previousValue);\n previousIndex.current = activeIndex;\n }\n }\n\n return {\n newValue,\n activeIndex\n };\n };\n\n const handleTouchMove = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_11__["default"])(nativeEvent => {\n const finger = trackFinger(nativeEvent, touchId);\n\n if (!finger) {\n return;\n }\n\n moveCount.current += 1; // Cancel move in case some other element consumed a mouseup event and it was not fired.\n\n if (nativeEvent.type === \'mousemove\' && nativeEvent.buttons === 0) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n handleTouchEnd(nativeEvent);\n return;\n }\n\n const {\n newValue,\n activeIndex\n } = getFingerNewValue({\n finger,\n move: true,\n values\n });\n focusThumb({\n sliderRef,\n activeIndex,\n setActive\n });\n setValueState(newValue);\n\n if (!dragging && moveCount.current > INTENTIONAL_DRAG_COUNT_THRESHOLD) {\n setDragging(true);\n }\n\n if (handleChange) {\n handleChange(nativeEvent, newValue, activeIndex);\n }\n });\n const handleTouchEnd = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_11__["default"])(nativeEvent => {\n const finger = trackFinger(nativeEvent, touchId);\n setDragging(false);\n\n if (!finger) {\n return;\n }\n\n const {\n newValue\n } = getFingerNewValue({\n finger,\n values\n });\n setActive(-1);\n\n if (nativeEvent.type === \'touchend\') {\n setOpen(-1);\n }\n\n if (onChangeCommitted) {\n onChangeCommitted(nativeEvent, newValue);\n }\n\n touchId.current = undefined; // eslint-disable-next-line @typescript-eslint/no-use-before-define\n\n stopListening();\n });\n const handleTouchStart = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_11__["default"])(nativeEvent => {\n // If touch-action: none; is not supported we need to prevent the scroll manually.\n if (!doesSupportTouchActionNone()) {\n nativeEvent.preventDefault();\n }\n\n const touch = nativeEvent.changedTouches[0];\n\n if (touch != null) {\n // A number that uniquely identifies the current finger in the touch session.\n touchId.current = touch.identifier;\n }\n\n const finger = trackFinger(nativeEvent, touchId);\n const {\n newValue,\n activeIndex\n } = getFingerNewValue({\n finger,\n values\n });\n focusThumb({\n sliderRef,\n activeIndex,\n setActive\n });\n setValueState(newValue);\n\n if (handleChange) {\n handleChange(nativeEvent, newValue, activeIndex);\n }\n\n moveCount.current = 0;\n const doc = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_5__["default"])(sliderRef.current);\n doc.addEventListener(\'touchmove\', handleTouchMove);\n doc.addEventListener(\'touchend\', handleTouchEnd);\n });\n const stopListening = react__WEBPACK_IMPORTED_MODULE_2__.useCallback(() => {\n const doc = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_5__["default"])(sliderRef.current);\n doc.removeEventListener(\'mousemove\', handleTouchMove);\n doc.removeEventListener(\'mouseup\', handleTouchEnd);\n doc.removeEventListener(\'touchmove\', handleTouchMove);\n doc.removeEventListener(\'touchend\', handleTouchEnd);\n }, [handleTouchEnd, handleTouchMove]);\n react__WEBPACK_IMPORTED_MODULE_2__.useEffect(() => {\n const {\n current: slider\n } = sliderRef;\n slider.addEventListener(\'touchstart\', handleTouchStart, {\n passive: doesSupportTouchActionNone()\n });\n return () => {\n slider.removeEventListener(\'touchstart\', handleTouchStart, {\n passive: doesSupportTouchActionNone()\n });\n stopListening();\n };\n }, [stopListening, handleTouchStart]);\n react__WEBPACK_IMPORTED_MODULE_2__.useEffect(() => {\n if (disabled) {\n stopListening();\n }\n }, [disabled, stopListening]);\n const handleMouseDown = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_11__["default"])(event => {\n if (onMouseDown) {\n onMouseDown(event);\n } // Only handle left clicks\n\n\n if (event.button !== 0) {\n return;\n } // Avoid text selection\n\n\n event.preventDefault();\n const finger = trackFinger(event, touchId);\n const {\n newValue,\n activeIndex\n } = getFingerNewValue({\n finger,\n values\n });\n focusThumb({\n sliderRef,\n activeIndex,\n setActive\n });\n setValueState(newValue);\n\n if (handleChange) {\n handleChange(event, newValue, activeIndex);\n }\n\n moveCount.current = 0;\n const doc = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_5__["default"])(sliderRef.current);\n doc.addEventListener(\'mousemove\', handleTouchMove);\n doc.addEventListener(\'mouseup\', handleTouchEnd);\n });\n const trackOffset = valueToPercent(range ? values[0] : min, min, max);\n const trackLeap = valueToPercent(values[values.length - 1], min, max) - trackOffset;\n\n const trackStyle = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, axisProps[axis].offset(trackOffset), axisProps[axis].leap(trackLeap));\n\n const Root = components.Root || component;\n const rootProps = componentsProps.root || {};\n const Rail = components.Rail || \'span\';\n const railProps = componentsProps.rail || {};\n const Track = components.Track || \'span\';\n const trackProps = componentsProps.track || {};\n const Thumb = components.Thumb || \'span\';\n const thumbProps = componentsProps.thumb || {};\n const ValueLabel = components.ValueLabel || _SliderValueLabelUnstyled__WEBPACK_IMPORTED_MODULE_13__["default"];\n const valueLabelProps = componentsProps.valueLabel || {};\n const Mark = components.Mark || \'span\';\n const markProps = componentsProps.mark || {};\n const MarkLabel = components.MarkLabel || \'span\';\n const markLabelProps = componentsProps.markLabel || {}; // all props with defaults\n // consider extracting to hook an reusing the lint rule for the varints\n\n const ownerState = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, props, {\n classes: classesProp,\n disabled,\n dragging,\n isRtl,\n marked: marks.length > 0 && marks.some(mark => mark.label),\n max,\n min,\n orientation,\n scale,\n step,\n track,\n valueLabelDisplay,\n valueLabelFormat\n });\n\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(Root, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({\n ref: handleRef,\n onMouseDown: handleMouseDown\n }, rootProps, !(0,_utils_isHostComponent__WEBPACK_IMPORTED_MODULE_14__["default"])(Root) && {\n as: component,\n ownerState: (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, ownerState, rootProps.ownerState)\n }, other, {\n className: (0,clsx__WEBPACK_IMPORTED_MODULE_3__["default"])(classes.root, rootProps.className, className),\n children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(Rail, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, railProps, !(0,_utils_isHostComponent__WEBPACK_IMPORTED_MODULE_14__["default"])(Rail) && {\n ownerState: (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, ownerState, railProps.ownerState)\n }, {\n className: (0,clsx__WEBPACK_IMPORTED_MODULE_3__["default"])(classes.rail, railProps.className)\n })), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(Track, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, trackProps, !(0,_utils_isHostComponent__WEBPACK_IMPORTED_MODULE_14__["default"])(Track) && {\n ownerState: (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, ownerState, trackProps.ownerState)\n }, {\n className: (0,clsx__WEBPACK_IMPORTED_MODULE_3__["default"])(classes.track, trackProps.className),\n style: (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, trackStyle, trackProps.style)\n })), marks.map((mark, index) => {\n const percent = valueToPercent(mark.value, min, max);\n const style = axisProps[axis].offset(percent);\n let markActive;\n\n if (track === false) {\n markActive = values.indexOf(mark.value) !== -1;\n } else {\n markActive = track === \'normal\' && (range ? mark.value >= values[0] && mark.value <= values[values.length - 1] : mark.value <= values[0]) || track === \'inverted\' && (range ? mark.value <= values[0] || mark.value >= values[values.length - 1] : mark.value >= values[0]);\n }\n\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(react__WEBPACK_IMPORTED_MODULE_2__.Fragment, {\n children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(Mark, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({\n "data-index": index\n }, markProps, !(0,_utils_isHostComponent__WEBPACK_IMPORTED_MODULE_14__["default"])(Mark) && {\n ownerState: (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, ownerState, markProps.ownerState),\n markActive\n }, {\n style: (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, style, markProps.style),\n className: (0,clsx__WEBPACK_IMPORTED_MODULE_3__["default"])(classes.mark, markProps.className, markActive && classes.markActive)\n })), mark.label != null ? /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(MarkLabel, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({\n "aria-hidden": true,\n "data-index": index\n }, markLabelProps, !(0,_utils_isHostComponent__WEBPACK_IMPORTED_MODULE_14__["default"])(MarkLabel) && {\n ownerState: (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, ownerState, markLabelProps.ownerState)\n }, {\n markLabelActive: markActive,\n style: (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, style, markLabelProps.style),\n className: (0,clsx__WEBPACK_IMPORTED_MODULE_3__["default"])(classes.markLabel, markLabelProps.className, markActive && classes.markLabelActive),\n children: mark.label\n })) : null]\n }, mark.value);\n }), values.map((value, index) => {\n const percent = valueToPercent(value, min, max);\n const style = axisProps[axis].offset(percent);\n const ValueLabelComponent = valueLabelDisplay === \'off\' ? Forward : ValueLabel;\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(react__WEBPACK_IMPORTED_MODULE_2__.Fragment, {\n children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(ValueLabelComponent, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({\n valueLabelFormat: valueLabelFormat,\n valueLabelDisplay: valueLabelDisplay,\n value: typeof valueLabelFormat === \'function\' ? valueLabelFormat(scale(value), index) : valueLabelFormat,\n index: index,\n open: open === index || active === index || valueLabelDisplay === \'on\',\n disabled: disabled\n }, valueLabelProps, {\n className: (0,clsx__WEBPACK_IMPORTED_MODULE_3__["default"])(classes.valueLabel, valueLabelProps.className)\n }, !(0,_utils_isHostComponent__WEBPACK_IMPORTED_MODULE_14__["default"])(ValueLabel) && {\n ownerState: (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, ownerState, valueLabelProps.ownerState)\n }, {\n children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(Thumb, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({\n "data-index": index,\n onMouseOver: handleMouseOver,\n onMouseLeave: handleMouseLeave\n }, thumbProps, {\n className: (0,clsx__WEBPACK_IMPORTED_MODULE_3__["default"])(classes.thumb, thumbProps.className, active === index && classes.active, focusVisible === index && classes.focusVisible)\n }, !(0,_utils_isHostComponent__WEBPACK_IMPORTED_MODULE_14__["default"])(Thumb) && {\n ownerState: (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, ownerState, thumbProps.ownerState)\n }, {\n style: (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, style, {\n pointerEvents: disableSwap && active !== index ? \'none\' : undefined\n }, thumbProps.style),\n children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("input", {\n tabIndex: tabIndex,\n "data-index": index,\n "aria-label": getAriaLabel ? getAriaLabel(index) : ariaLabel,\n "aria-labelledby": ariaLabelledby,\n "aria-orientation": orientation,\n "aria-valuemax": scale(max),\n "aria-valuemin": scale(min),\n "aria-valuenow": scale(value),\n "aria-valuetext": getAriaValueText ? getAriaValueText(scale(value), index) : ariaValuetext,\n onFocus: handleFocus,\n onBlur: handleBlur,\n name: name,\n type: "range",\n min: props.min,\n max: props.max,\n step: props.step,\n disabled: disabled,\n value: values[index],\n onChange: handleHiddenInputChange,\n style: (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, _mui_utils__WEBPACK_IMPORTED_MODULE_15__["default"], {\n direction: isRtl ? \'rtl\' : \'ltr\',\n // So that VoiceOver\'s focus indicator matches the thumb\'s dimensions\n width: \'100%\',\n height: \'100%\'\n })\n })\n }))\n }))\n }, index);\n })]\n }));\n});\n false ? 0 : void 0;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SliderUnstyled);\n\n//# sourceURL=webpack://frontend/./node_modules/@mui/base/SliderUnstyled/SliderUnstyled.js?')},"./node_modules/@mui/base/SliderUnstyled/SliderValueLabelUnstyled.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! clsx */ "./node_modules/clsx/dist/clsx.m.js");\n/* harmony import */ var _sliderUnstyledClasses__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sliderUnstyledClasses */ "./node_modules/@mui/base/SliderUnstyled/sliderUnstyledClasses.js");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js");\n\n\n\n\n\n\n\nconst useValueLabelClasses = props => {\n const {\n open\n } = props;\n const utilityClasses = {\n offset: (0,clsx__WEBPACK_IMPORTED_MODULE_1__["default"])(open && _sliderUnstyledClasses__WEBPACK_IMPORTED_MODULE_3__["default"].valueLabelOpen),\n circle: _sliderUnstyledClasses__WEBPACK_IMPORTED_MODULE_3__["default"].valueLabelCircle,\n label: _sliderUnstyledClasses__WEBPACK_IMPORTED_MODULE_3__["default"].valueLabelLabel\n };\n return utilityClasses;\n};\n/**\n * @ignore - internal component.\n */\n\n\nfunction SliderValueLabelUnstyled(props) {\n const {\n children,\n className,\n value,\n theme\n } = props;\n const classes = useValueLabelClasses(props);\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.cloneElement(children, {\n className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__["default"])(children.props.className)\n }, /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [children.props.children, /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span", {\n className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__["default"])(classes.offset, className),\n theme: theme,\n "aria-hidden": true,\n children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span", {\n className: classes.circle,\n children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span", {\n className: classes.label,\n children: value\n })\n })\n })]\n }));\n}\n\n false ? 0 : void 0;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SliderValueLabelUnstyled);\n\n//# sourceURL=webpack://frontend/./node_modules/@mui/base/SliderUnstyled/SliderValueLabelUnstyled.js?')},"./node_modules/@mui/base/SliderUnstyled/sliderUnstyledClasses.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"getSliderUtilityClass\": () => (/* binding */ getSliderUtilityClass),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _generateUtilityClasses__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../generateUtilityClasses */ \"./node_modules/@mui/base/generateUtilityClasses/generateUtilityClasses.js\");\n/* harmony import */ var _generateUtilityClass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../generateUtilityClass */ \"./node_modules/@mui/base/generateUtilityClass/generateUtilityClass.js\");\n\n\nfunction getSliderUtilityClass(slot) {\n return (0,_generateUtilityClass__WEBPACK_IMPORTED_MODULE_0__[\"default\"])('MuiSlider', slot);\n}\nconst sliderUnstyledClasses = (0,_generateUtilityClasses__WEBPACK_IMPORTED_MODULE_1__[\"default\"])('MuiSlider', ['root', 'active', 'focusVisible', 'disabled', 'dragging', 'marked', 'vertical', 'trackInverted', 'trackFalse', 'rail', 'track', 'mark', 'markActive', 'markLabel', 'markLabelActive', 'thumb', 'valueLabel', 'valueLabelOpen', 'valueLabelCircle', 'valueLabelLabel']);\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (sliderUnstyledClasses);\n\n//# sourceURL=webpack://frontend/./node_modules/@mui/base/SliderUnstyled/sliderUnstyledClasses.js?")},"./node_modules/@mui/base/TextareaAutosize/TextareaAutosize.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ "./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/utils */ "./node_modules/@mui/utils/esm/useForkRef.js");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/utils */ "./node_modules/@mui/utils/esm/ownerWindow.js");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/utils */ "./node_modules/@mui/utils/esm/debounce.js");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/utils */ "./node_modules/@mui/utils/esm/useEnhancedEffect.js");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js");\n\n\nconst _excluded = ["onChange", "maxRows", "minRows", "style", "value"];\n\n\n\n\n\n\nfunction getStyleValue(computedStyle, property) {\n return parseInt(computedStyle[property], 10) || 0;\n}\n\nconst styles = {\n shadow: {\n // Visibility needed to hide the extra text area on iPads\n visibility: \'hidden\',\n // Remove from the content flow\n position: \'absolute\',\n // Ignore the scrollbar width\n overflow: \'hidden\',\n height: 0,\n top: 0,\n left: 0,\n // Create a new layer, increase the isolation of the computed values\n transform: \'translateZ(0)\'\n }\n};\nconst TextareaAutosize = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.forwardRef(function TextareaAutosize(props, ref) {\n const {\n onChange,\n maxRows,\n minRows = 1,\n style,\n value\n } = props,\n other = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__["default"])(props, _excluded);\n\n const {\n current: isControlled\n } = react__WEBPACK_IMPORTED_MODULE_2__.useRef(value != null);\n const inputRef = react__WEBPACK_IMPORTED_MODULE_2__.useRef(null);\n const handleRef = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_4__["default"])(ref, inputRef);\n const shadowRef = react__WEBPACK_IMPORTED_MODULE_2__.useRef(null);\n const renders = react__WEBPACK_IMPORTED_MODULE_2__.useRef(0);\n const [state, setState] = react__WEBPACK_IMPORTED_MODULE_2__.useState({});\n const syncHeight = react__WEBPACK_IMPORTED_MODULE_2__.useCallback(() => {\n const input = inputRef.current;\n const containerWindow = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_5__["default"])(input);\n const computedStyle = containerWindow.getComputedStyle(input); // If input\'s width is shrunk and it\'s not visible, don\'t sync height.\n\n if (computedStyle.width === \'0px\') {\n return;\n }\n\n const inputShallow = shadowRef.current;\n inputShallow.style.width = computedStyle.width;\n inputShallow.value = input.value || props.placeholder || \'x\';\n\n if (inputShallow.value.slice(-1) === \'\\n\') {\n // Certain fonts which overflow the line height will cause the textarea\n // to report a different scrollHeight depending on whether the last line\n // is empty. Make it non-empty to avoid this issue.\n inputShallow.value += \' \';\n }\n\n const boxSizing = computedStyle[\'box-sizing\'];\n const padding = getStyleValue(computedStyle, \'padding-bottom\') + getStyleValue(computedStyle, \'padding-top\');\n const border = getStyleValue(computedStyle, \'border-bottom-width\') + getStyleValue(computedStyle, \'border-top-width\'); // The height of the inner content\n\n const innerHeight = inputShallow.scrollHeight; // Measure height of a textarea with a single row\n\n inputShallow.value = \'x\';\n const singleRowHeight = inputShallow.scrollHeight; // The height of the outer content\n\n let outerHeight = innerHeight;\n\n if (minRows) {\n outerHeight = Math.max(Number(minRows) * singleRowHeight, outerHeight);\n }\n\n if (maxRows) {\n outerHeight = Math.min(Number(maxRows) * singleRowHeight, outerHeight);\n }\n\n outerHeight = Math.max(outerHeight, singleRowHeight); // Take the box sizing into account for applying this value as a style.\n\n const outerHeightStyle = outerHeight + (boxSizing === \'border-box\' ? padding + border : 0);\n const overflow = Math.abs(outerHeight - innerHeight) <= 1;\n setState(prevState => {\n // Need a large enough difference to update the height.\n // This prevents infinite rendering loop.\n if (renders.current < 20 && (outerHeightStyle > 0 && Math.abs((prevState.outerHeightStyle || 0) - outerHeightStyle) > 1 || prevState.overflow !== overflow)) {\n renders.current += 1;\n return {\n overflow,\n outerHeightStyle\n };\n }\n\n if (false) {}\n\n return prevState;\n });\n }, [maxRows, minRows, props.placeholder]);\n react__WEBPACK_IMPORTED_MODULE_2__.useEffect(() => {\n const handleResize = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_6__["default"])(() => {\n renders.current = 0;\n syncHeight();\n });\n const containerWindow = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_5__["default"])(inputRef.current);\n containerWindow.addEventListener(\'resize\', handleResize);\n let resizeObserver;\n\n if (typeof ResizeObserver !== \'undefined\') {\n resizeObserver = new ResizeObserver(handleResize);\n resizeObserver.observe(inputRef.current);\n }\n\n return () => {\n handleResize.clear();\n containerWindow.removeEventListener(\'resize\', handleResize);\n\n if (resizeObserver) {\n resizeObserver.disconnect();\n }\n };\n }, [syncHeight]);\n (0,_mui_utils__WEBPACK_IMPORTED_MODULE_7__["default"])(() => {\n syncHeight();\n });\n react__WEBPACK_IMPORTED_MODULE_2__.useEffect(() => {\n renders.current = 0;\n }, [value]);\n\n const handleChange = event => {\n renders.current = 0;\n\n if (!isControlled) {\n syncHeight();\n }\n\n if (onChange) {\n onChange(event);\n }\n };\n\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_2__.Fragment, {\n children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("textarea", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({\n value: value,\n onChange: handleChange,\n ref: handleRef // Apply the rows prop to get a "correct" first SSR paint\n ,\n rows: minRows,\n style: (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({\n height: state.outerHeightStyle,\n // Need a large enough difference to allow scrolling.\n // This prevents infinite rendering loop.\n overflow: state.overflow ? \'hidden\' : null\n }, style)\n }, other)), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("textarea", {\n "aria-hidden": true,\n className: props.className,\n readOnly: true,\n ref: shadowRef,\n tabIndex: -1,\n style: (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, styles.shadow, style, {\n padding: 0\n })\n })]\n });\n});\n false ? 0 : void 0;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (TextareaAutosize);\n\n//# sourceURL=webpack://frontend/./node_modules/@mui/base/TextareaAutosize/TextareaAutosize.js?')},"./node_modules/@mui/base/Unstable_TrapFocus/Unstable_TrapFocus.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/useForkRef.js\");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/ownerDocument.js\");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\n/* eslint-disable @typescript-eslint/naming-convention, consistent-return, jsx-a11y/no-noninteractive-tabindex */\n\n\n // Inspired by https://github.com/focus-trap/tabbable\n\n\n\nconst candidatesSelector = ['input', 'select', 'textarea', 'a[href]', 'button', '[tabindex]', 'audio[controls]', 'video[controls]', '[contenteditable]:not([contenteditable=\"false\"])'].join(',');\n\nfunction getTabIndex(node) {\n const tabindexAttr = parseInt(node.getAttribute('tabindex'), 10);\n\n if (!Number.isNaN(tabindexAttr)) {\n return tabindexAttr;\n } // Browsers do not return `tabIndex` correctly for contentEditable nodes;\n // https://bugs.chromium.org/p/chromium/issues/detail?id=661108&q=contenteditable%20tabindex&can=2\n // so if they don't have a tabindex attribute specifically set, assume it's 0.\n // in Chrome,
,