From b3daa99ad2c60907965f353c016eaa6ee0894fa1 Mon Sep 17 00:00:00 2001 From: V <110589924+Vavinan@users.noreply.github.com> Date: Mon, 10 Jul 2023 12:37:35 +0000 Subject: [PATCH 1/6] Update 3 files --- colLAB-FIN/src/components/ShowBio.jsx | 56 ++++---- colLAB-FIN/src/pages/PostPages/CreatePost.jsx | 130 ++++++++++-------- colLAB-FIN/src/pages/Posts.jsx | 29 +--- 3 files changed, 110 insertions(+), 105 deletions(-) diff --git a/colLAB-FIN/src/components/ShowBio.jsx b/colLAB-FIN/src/components/ShowBio.jsx index af6078d..84d544b 100644 --- a/colLAB-FIN/src/components/ShowBio.jsx +++ b/colLAB-FIN/src/components/ShowBio.jsx @@ -1,16 +1,16 @@ -import React, { useEffect, useState } from 'react'; -import { doc, getDoc } from 'firebase/firestore'; -import { db } from '../firebase'; +import React, { useEffect, useState } from "react"; +import { doc, getDoc } from "firebase/firestore"; +import { db } from "../firebase"; export const ShowBio = ({ user }) => { - const [bio, setBio] = useState(''); - const [courseOfStudy, setCourseOfStudy] = useState(''); - const [skills, setSkills] = useState(''); + const [bio, setBio] = useState(""); + const [courseOfStudy, setCourseOfStudy] = useState(""); + const [skills, setSkills] = useState(""); useEffect(() => { const fetchBio = async () => { try { - const docRef = doc(db, 'bio', user); + const docRef = doc(db, "bio", user); const docSnapshot = await getDoc(docRef); if (docSnapshot.exists()) { @@ -23,14 +23,13 @@ export const ShowBio = ({ user }) => { setSkills(skillsData); //console.log(user); - } else { - setBio('No bio available'); - setCourseOfStudy('No course details available'); - setSkills('No were skills updated'); + setBio("No bio available"); + setCourseOfStudy("No course details available"); + setSkills("No skills were updated"); } } catch (error) { - console.error('Error fetching bio:', error); + console.error("Error fetching bio:", error); } }; @@ -38,22 +37,27 @@ export const ShowBio = ({ user }) => { }, [user]); return ( -
-
-
Bio:
-
{bio}

-
Course of Study:
-
{courseOfStudy}

-
Skills:
-
{skills}
-
+
+
+
+ Bio: +
+
{bio}

+
+ Course of Study: +
+
+ {courseOfStudy} +
{" "} +
+
+ Skills: +
+
{skills}
+
); - }; - - - /*import React, { useEffect, useState } from 'react'; import { doc, getDoc } from 'firebase/firestore'; import { db } from '../firebase'; @@ -85,4 +89,4 @@ export const ShowBio = ({ user }) => { return
{bio}
; }; -*/ \ No newline at end of file +*/ diff --git a/colLAB-FIN/src/pages/PostPages/CreatePost.jsx b/colLAB-FIN/src/pages/PostPages/CreatePost.jsx index dc3b16f..758207e 100644 --- a/colLAB-FIN/src/pages/PostPages/CreatePost.jsx +++ b/colLAB-FIN/src/pages/PostPages/CreatePost.jsx @@ -1,73 +1,93 @@ -import React, { useEffect, useState } from 'react' -import {addDoc,collection} from 'firebase/firestore' -import { auth,db } from '../../firebase' -import { useNavigate } from 'react-router-dom' +import React, { useEffect, useState } from "react"; +import { addDoc, collection } from "firebase/firestore"; +import { auth, db } from "../../firebase"; +import { useNavigate } from "react-router-dom"; import "./postcss.css"; -const CreatePost = ( {onPostSuccess}) => { +const CreatePost = ({ onPostSuccess }) => { + const [title, setTitle] = useState(""); + const [postContent, setPostContent] = useState(""); + const [skills, setSkills] = useState(""); + const [contact, setContact] = useState(""); - const [title,setTitle] = useState(""); - const[postContent,setPostContent]=useState(""); - const[skills,setSkills]=useState(""); - const[contact,setContact]=useState(""); - - const navigate=useNavigate(); - useEffect(()=>{ - if(!auth.currentUser){ - navigate("/login"); + const navigate = useNavigate(); + useEffect(() => { + if (!auth.currentUser) { + navigate("/login"); } - },[navigate]); - - const postsCollectionRef=collection(db,"posts"); + }, [navigate]); - const submitPost=async() => { - if(title ==='' || postContent ===''){ - alert('Fill up the fields'); - } else{ - try { - await addDoc(postsCollectionRef,{ - title:title, - postContent: postContent, - skills:skills, - contact:contact, - author :{ - name:auth.currentUser.displayName, - id:auth.currentUser.uid, - - } - }) + const postsCollectionRef = collection(db, "posts"); - //navigate("/"); - onPostSuccess(); + const submitPost = async () => { + if (title === "" || postContent === "") { + alert("Fill up the fields"); + } else { + try { + await addDoc(postsCollectionRef, { + title: title, + postContent: postContent, + skills: skills, + contact: auth.currentUser.displayName, + author: { + name: auth.currentUser.displayName, + id: auth.currentUser.uid, + }, + }); - } catch(error){ - console.log(error); - } + //navigate("/"); + onPostSuccess(); + } catch (error) { + console.log(error); + } } - } - + }; return (

Create a Post

-
- - setTitle(e.target.value)} /> +
+ + setTitle(e.target.value)} + />
-
- - +
+ +
-
- - - - setContact(e.target.value)} /> +
+ + + {/* + setContact(e.target.value)} /> */}
- +
- ) -} + ); +}; -export default CreatePost; \ No newline at end of file +export default CreatePost; diff --git a/colLAB-FIN/src/pages/Posts.jsx b/colLAB-FIN/src/pages/Posts.jsx index 325e87d..a870993 100644 --- a/colLAB-FIN/src/pages/Posts.jsx +++ b/colLAB-FIN/src/pages/Posts.jsx @@ -160,10 +160,10 @@ const Posts = ({ isAuth, handleShowPosts }) => { {post.author.name && ( handleSelect(post.author.name)} + onClick={() => handleSelect(post.contact)} style={{ cursor: "pointer" }} > - {post.author.name} + {post.contact} )}
@@ -180,24 +180,6 @@ const Posts = ({ isAuth, handleShowPosts }) => { export default Posts; - - - - - - - - - - - - - - - - - - /*import React from 'react' import { useEffect,useState } from 'react'; import { getDocs,collection,deleteDoc,doc } from 'firebase/firestore'; @@ -329,7 +311,6 @@ const Home = ({isAuth}) => { */ - /*return (
{postLists.length ===0 ?

No posts

: postLists.map((post)=>{ @@ -340,8 +321,8 @@ const Home = ({isAuth}) => { {/* {isAuth && post.author.id ===auth.currentUser.uid &&
-
} *///} {isAuth && auth.currentUser && post.author.id === auth.currentUser.uid && ( - /*
+
} */ //} {isAuth && auth.currentUser && post.author.id === auth.currentUser.uid && ( +/*
) }
{post.title}
@@ -353,4 +334,4 @@ const Home = ({isAuth}) => { ) }) }
-)*/ \ No newline at end of file +)*/ From 7a2374bca28a0975bffc9fb0ff8857d0d4871db8 Mon Sep 17 00:00:00 2001 From: Vavinan <110589924+Vavinan@users.noreply.github.com> Date: Mon, 24 Jul 2023 10:54:28 +0800 Subject: [PATCH 2/6] Update README.md --- README.md | 173 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 172 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 693e12b..ca7c80e 100644 --- a/README.md +++ b/README.md @@ -1 +1,172 @@ -# colLAB_Fin \ No newline at end of file +# colLAB_Fin +# collab-test +![image](https://github.com/Vavinan/collab-test/assets/110589924/11615a4e-55c4-4a83-9c5b-cf0c71bbb888) + + +ColLAB +ORBITAL 2023 +README DOCUMENT + + + + +Jeevanandham Vavinan +Isaac Eng +CONTENT PAGE +INTRODUCTION …………………………………………………………………………………… 3 +PLANNING …………………………………………………………………………………………. 5 +CORE FEATURES …………………………………………………………………………………. 6 +SOFTWARE ENGINEERING RELATED INFORMATION ……………………………………. 11 +TESTING …………………………………………………………………………………………… 12 + + +INTRODUCTION + +Project Name: colLAB +Level of Achievement: Gemini +Members: Jeevanandham Vavinan [A0253526E] and Isaac Eng Hong Yeow [A0253005W] +Resources (links): +README: https://docs.google.com/document/d/1Ob-i8ObSaV8LG8X8q_dhs5m8n1mydT5oBp-V1o_nLLw/edit?usp=sharing +Log: https://docs.google.com/spreadsheets/d/1JcaQKGxFl1Jkp5MtqesL5XxYCOTklwvaUtm6KRnZ-WU/edit#gid=0 +Poster: https://drive.google.com/file/d/1ElH3_Ah2UszAgLR6nqC42FOuFNQCA3x0/view?usp=drive_link +Video: https://vimeo.com/847759082?share=copy +Website: https://collab-alpha.vercel.app/ + +Project Scope: +Our project aims to provide a web platform that connects students with similar interests and project ideas, allowing them to form effective teams to achieve it. +Our project will be an open-source website where users can view project listings, listed by other users that want to work on a project idea and are looking for potential collaborators, on the website and join the projects they are interested in. +We are targetting polytechnic/university students as most of them tend to be equipped with technical skills such as programming, engineering and design skills, which are huge contributing factors towards projects. Students of such groups also tend to be more adventurous and may have plenty of project ideas that they would like to work on. +ColLAB’s main mission is to connect potential project collaborators with those who have project ideas. Our platform will allows them to find one another so that they can start working on the project. + +Problem Motivation: +Many students have great project ideas but lack the necessary team members to see it through. Although they may seek assistance from their friends or classmates, finding a dependable and like-minded team member can be difficult, especially if the project requires certain skill sets. Even posting on popular platforms, like Reddit, can be troublesome, time-consuming and inefficient. Thus, their idea would go to waste. Why don't institutions have a platform that allows students, with project ideas, to find like-minded individuals that could collaborate on the project, in order to make the idea come true? +That is why we decided to work on this project, “ColLAB”. With ColLAB, students are able to find potential project partners efficiently and find projects to work on to expand their experiences. In turn, there would be more projects initiated as students will find it easy to find project partners and hence initiate projects. There would really be many advantages with the usage of this website. + +Project Deliverables: +To better understand what our website would offer, here are some user stories on how the users can utilise our website. +User Stories: +As a student with a project idea, I want to find team members who share my interests and can contribute their skills to the project. +As a student seeking a project team, I want to browse a platform that lists out projects based on my interests and skills. +As a student with a project idea/seeking a project team, I want to be able to communicate with my potential project partners. + +Tech Stack: +HTML +CSS +Javascript +ReactJS +Firebase (Database) +PLANNING + +PROJECT DEVELOPMENT PLAN +Our project involves building a website and there are many key elements to fulfill in order to get it up and running. We came up with the following development plan and timeline. +PROJECT DEVELOPMENT PLAN +TASK PERSON +BASIC HTML/CSS OF WEBSITE VAVINAN +BASIC FEATURES USING JAVASCRIPT VAVINAN +HTML UPDATES ISAAC +ADVANCED FEATURES USING JAVASCRIPT VAVINAN +OVERALL WEB DESIGN/CSS UPDATES ISAAC +WEBSITE HOSTING VAVINAN + + +Project Development Plan Table +Since we are both completely new to web development, we decided to learn and do it the most fundamental way. We used very little frameworks (less ReactJS) to aid our project so we can get comfortable with web development using basic HTML/CSS/Javascript. +TIMELINE + +PROJECT TIMELINE PLAN +TASK TARGET: +DECIDE ON WEBSITE FEATURES MID MAY +BASIC HTML/CSS OF WEBSITE MID MAY +BASIC FEATURES DEVELOPMENT EARLY JUNE +DECIDE ON WEBSITE DESIGN MID JUNE +ADVANCED FEATURES DEVELOPMENT END JUNE +WEBSITE DESIGN (CSS) MID JULY +USER TESTING MID JULY +FINAL PROTOTYPE MID JULY +WEBSITE HOSTING MID JULY + + +Project Timeline Plan Table +CORE FEATURES +In order to ensure that our user stories come true, we have developed the following core features. +Account Login/Register + + +When the website is opened, the user will be greeted with a log in screen. If they are new users, they can click on the Register button at the bottom of the page to register a new account. + +![image](https://github.com/Vavinan/collab-test/assets/110589924/acfd62aa-62f9-46cf-970a-10bec1f34788) + +Log In Form and Register Form + +[For new users] Users will have to input a username, name, email and password, they also have an option to include a profile picture, by selecting the “Add an Avatar” button. Upon filling the form and clicking “Register”, users will receive a confirmation email of their registered email. To allow the new account to be activated, they have to verify their email address by clicking on the link in the email. Once completed, they can log in. + +![image](https://github.com/Vavinan/collab-test/assets/110589924/643f7dac-f07c-4973-ada6-285d521fd23f) + +Email of Confirmation Link + +Navigation Bar +A navigation bar is fixed at the top of the website to allow for easy access between the different pages in the website. On the left, there is the colLAB logo and a greeting to your specific username. In the middle, users can select between the different pages of the website. This changes dynamically dependent on the page (e.g. on Homepage, buttons: Chats, Create Post, Profile. On Create Post, buttons: Chats, Home). On the right, there is a logout button which logs the current user out when clicked. + +![image](https://github.com/Vavinan/collab-test/assets/110589924/959b6492-3cd3-4bc4-b52a-bab27c74871b) + +Navigation Bar (on Homepage) + +Project Listings +Users can view project listings in the Homepage. Each project listing is displayed in a card form with its Title (bolded at the top), description, skills required for the project and the username of the creator of the post. + +![image](https://github.com/Vavinan/collab-test/assets/110589924/639f41bd-8913-43cf-b1d2-a078c981949b) + +Example of Project Listings + +Searchbox for Project Listings +Users can use the searchbox in the homepage to search for projects they might be interested in. For example, keywords such as Web Development, Robot, Arts, Events, etc. + +![image](https://github.com/Vavinan/collab-test/assets/110589924/f0506f31-4d0b-4f57-9423-e148b604f226) + +Searchbox for Project Listings + +Creation of Project Listing +For users who have a project idea and wishes to find potential collaborators, they can select the CREATE POST button in the navigation bar and they will be led to a page that contains a form. The fields contain the Title, Description and Skills required. After clicking on publish, the project listing will be posted on the homepage in a card format for other users to view. + +![image](https://github.com/Vavinan/collab-test/assets/110589924/2f0f3112-e982-4781-a3c6-545143204e74) + +Create a Project Post Form + +User Profile +Users can update their profile by clicking on the PROFILE button in the navigation bar. They will be greeted with 2 containers. First, their account information which is unable to be edited. Second, their biography which can be edited, contains: Education Level, Course of Study, School and Skills. This information will be useful for other users as they can contact you for help if you have the relevant skills they need for their project. + +![image](https://github.com/Vavinan/collab-test/assets/110589924/ce7940e0-44b4-4a1d-be62-95072d677a46) + +User Profile Page + +Chat +The chat feature allows users to communicate with each other, where they can ask more about the project idea, exchange contact and even talk about anything under the sun. Chat allows users to have a chance to communicate before they decide whether to participate in the project. This means that they do not have to provide their contact information (eg. mobile phone number) before collaborating on the project. +The top left displays the current user’s username. Below it is the contacts of users that he/she has contacted before. To switch users, they can simply click on the user they want to chat with. Towards the right of it, it is the chat container. The username will be reflected at the top and the chat messages will be displayed below. Each chat message have its date and time sent. Users can input their message in the input box below and even include an attachment by clicking on the picture icon. + +![image](https://github.com/Vavinan/collab-test/assets/110589924/de24ba0d-0bae-44ba-a753-e9d60279d66f) +Chat Page + +Futhermore, users can view the bio of the user they are talking to, by clicking on the “Open Bio” button at the top right of the page. + +![image](https://github.com/Vavinan/collab-test/assets/110589924/22047474-757f-4b27-a030-1ef8dad32523) +Chat User Show Bio + + +SOFTWARE ENGINEERING RELATED INFORMATION + +SOFTWARE ENGINEERING PRINCIPLES +Single Responsibility Principle - This principle is evident throughout our project. We created different pages which serves different purposes, and there is no overlap. For example, in our homepage, we only show the project listings and search function. We did not include the Create a New Post or Edit Profile function in that page. +Open-Closed Principle - After deciding on the core features of our project, we started to build the basic function of these features and test it. Once the basic functions of the feature is good, we ensured that we do not change the feature completely, instead made some minor updates and improvements to it, which does not completely destroy the function. +YAGNI Principle - We did not add any extra code that we presume might be needed in future. Initially, we considered to include a group chat feature so that members interested in the project could join and communicate. However, we realised that this is not needed as the purpose of the project could already be fulfilled even without it. Also, we do not have enough information about the future on whether such feature is really a need. + +SOFTWARE DESIGN PATTERNS +Observer Pattern - We allow changes to the user’s bio, so any single user can change his/her bio anytime. When the bio is changed, other users should be able to view the change in the “show bio” button in chat page. +TESTING +Regression Testing - Once a new feature is created, we ensured that we test out the feature and other features, to check if there is any function that is being compromised. This was especially important as it allows us to detect issues with the code early. +Unit Testing - We incorporated unit testing for the whole project. We had to ensure that every feature we put out was good to go so we tested it multiple times before officially adding it to the website. +Integration Testing - Our chat feature depended heavily on integration testing. There were many aspects such as messages from user and to user, user contacts, messages date and time and many more. We needed all these aspects to work together in order to achieve a proper chat function. So, we had to test how the different aspects of the chat feature interacted with one another and catch any errors or bugs. +Acceptance Testing - We conducted acceptance testing to check that all our intended functions are fulfilled and working well. The website was shared with some users to test if they meet the requirements, at the same time, we were able to obtain some feedback. + + + + From 98cb037ee97a026c4bd32733b2320efb8506620c Mon Sep 17 00:00:00 2001 From: Vavinan <110589924+Vavinan@users.noreply.github.com> Date: Mon, 24 Jul 2023 08:26:07 +0530 Subject: [PATCH 3/6] Add files via upload --- colLAB-FIN/build/index.html | 89 + colLAB-FIN/dist/assets/index-36cacce2.css | 1 + colLAB-FIN/dist/assets/index-7faffc80.js | 3452 +++++++++++++++++ colLAB-FIN/dist/index.html | 9 +- colLAB-FIN/dist/style.css | 546 +++ colLAB-FIN/dist/style.css.map | 1 + colLAB-FIN/index.html | 5 +- colLAB-FIN/package.json | 2 +- colLAB-FIN/public/ColLAB.png | Bin 0 -> 99493 bytes colLAB-FIN/public/style.css | 546 +++ colLAB-FIN/public/style.css.map | 1 + colLAB-FIN/src/App.jsx | 3 +- colLAB-FIN/src/components/Chat.jsx | 38 +- colLAB-FIN/src/components/Chats.jsx | 10 +- colLAB-FIN/src/components/InputMessages.jsx | 24 +- colLAB-FIN/src/components/Message.jsx | 16 +- colLAB-FIN/src/components/Navbar.jsx | 33 +- colLAB-FIN/src/components/Search.jsx | 16 +- colLAB-FIN/src/components/ShowBio.jsx | 144 +- colLAB-FIN/src/components/Sidebar.jsx | 12 +- colLAB-FIN/src/images/ColLAB.png | Bin 0 -> 99493 bytes colLAB-FIN/src/pages/Home.jsx | 78 +- colLAB-FIN/src/pages/Login.jsx | 25 +- colLAB-FIN/src/pages/PostPages/Bio.jsx | 215 +- colLAB-FIN/src/pages/PostPages/CreatePost.jsx | 176 +- colLAB-FIN/src/pages/PostPages/Searchbar.jsx | 10 +- colLAB-FIN/src/pages/PostPages/postcss.css | 1064 ++++- colLAB-FIN/src/pages/Posts.jsx | 84 +- colLAB-FIN/src/pages/Register.jsx | 42 +- colLAB-FIN/src/style.scss | 475 ++- 30 files changed, 6668 insertions(+), 449 deletions(-) create mode 100644 colLAB-FIN/build/index.html create mode 100644 colLAB-FIN/dist/assets/index-36cacce2.css create mode 100644 colLAB-FIN/dist/assets/index-7faffc80.js create mode 100644 colLAB-FIN/dist/style.css create mode 100644 colLAB-FIN/dist/style.css.map create mode 100644 colLAB-FIN/public/ColLAB.png create mode 100644 colLAB-FIN/public/style.css create mode 100644 colLAB-FIN/public/style.css.map create mode 100644 colLAB-FIN/src/images/ColLAB.png diff --git a/colLAB-FIN/build/index.html b/colLAB-FIN/build/index.html new file mode 100644 index 0000000..27d4b27 --- /dev/null +++ b/colLAB-FIN/build/index.html @@ -0,0 +1,89 @@ + + + + + + Welcome to Firebase Hosting + + + + + + + + + + + + + + + + + + + +
+

Welcome

+

Firebase Hosting Setup Complete

+

You're seeing this because you've successfully setup Firebase Hosting. Now it's time to go build something extraordinary!

+ Open Hosting Documentation +
+

Firebase SDK Loading…

+ + + + diff --git a/colLAB-FIN/dist/assets/index-36cacce2.css b/colLAB-FIN/dist/assets/index-36cacce2.css new file mode 100644 index 0000000..0223968 --- /dev/null +++ b/colLAB-FIN/dist/assets/index-36cacce2.css @@ -0,0 +1 @@ +.createPost-container{display:flex;flex-direction:column;justify-content:center;align-self:center;background-color:#ffffffb3;vertical-align:middle;border-radius:30px}.createPost-container .postForm{display:flex;flex-direction:column;align-items:center;vertical-align:middle}.createPost-container .postForm .createPost-heading{color:#075e54;font-family:Roboto,Arial;font-weight:700;font-size:50px;text-decoration:underline;text-align:center;margin-bottom:40px;margin-top:30px}.createPost-container .postForm .createPost-split-container{display:flex;flex-direction:row;justify-content:center;gap:100px}.createPost-container .postForm .createPost-split-container .split-container{display:flex;flex-direction:column}.createPost-container .postForm .createPost-split-container .split-container .form-control{background-color:#075e544d;width:400px;color:#000}.createPost-container .postForm .createPost-split-container .split-container .form-control::placeholder{color:#fff}.createPost-container .postForm .createPost-split-container .split-container .form-label{font-size:22px}.createPost-container .postForm .publish-button{font-family:Roboto,Arial;font-weight:700;font-size:30px;text-align:center;width:250px;height:60px;border-radius:10px;margin-bottom:30px;margin-top:30px;background-color:#075e54;color:#fff}body{background-color:#075e54;padding-top:100px}.login-container{display:flex;align-items:center;vertical-align:middle;height:500px;justify-content:center}.login-container .login-wrapper{display:flex;flex-direction:column;background-color:#d3d3d3;align-items:center;padding:20px 60px;gap:10px;border-radius:10px}.login-container .login-wrapper .colLAB-logo{width:120px}.login-container .login-wrapper .login-caption{font-family:Roboto,Arial;font-weight:700;font-style:italic;margin-top:-30px;margin-bottom:10px}.login-container .login-wrapper .login-title{font-family:Roboto,Arial;font-size:30px;font-weight:700;margin-bottom:15px;color:#075e54}.login-container .login-wrapper .login-form{display:flex;flex-direction:column;gap:15px;align-items:center}.login-container .login-wrapper .login-form input{background-color:transparent;border:none;border-bottom:3px solid #075e54;width:250px;height:35px}.login-container .login-wrapper .login-form input::placeholder{color:#000;text-align:center;opacity:.7}.login-container .login-wrapper .login-form .login-button{border-radius:5px;background-color:#075e54;color:#fff;font-size:22px;font-family:Roboto,Arial;font-weight:700;width:120px}.login-container .login-wrapper .login-form .error-msg{color:red}.register-container{display:flex;align-items:center;vertical-align:middle;height:550px;justify-content:center}.register-container .register-wrapper{display:flex;flex-direction:column;background-color:#d3d3d3;align-items:center;padding:20px 60px;gap:10px;border-radius:10px}.register-container .register-wrapper .colLAB-logo{width:120px}.register-container .register-wrapper .register-caption{font-family:Roboto,Arial;font-weight:700;font-style:italic;margin-top:-30px;margin-bottom:10px}.register-container .register-wrapper .register-title{font-family:Roboto,Arial;font-size:30px;font-weight:700;margin-bottom:15px;color:#075e54}.register-container .register-wrapper .register-form{display:flex;flex-direction:column;gap:15px;align-items:center}.register-container .register-wrapper .register-form input{background-color:transparent;border:none;border-bottom:3px solid #075e54;width:250px;height:35px}.register-container .register-wrapper .register-form input::placeholder{color:#000;text-align:center;opacity:.7}.register-container .register-wrapper .register-form .profile-pic-button:hover{cursor:pointer}.register-container .register-wrapper .register-form .profile-pic-container{display:flex;flex-direction:row;align-items:center}.register-container .register-wrapper .register-form .profile-pic-container .profile-pic-icon{width:50px;border-radius:80px;margin-right:10px}.register-container .register-wrapper .register-form .profile-pic-container .profile-pic-caption:hover{text-decoration:underline}.register-container .register-wrapper .register-form .profile-pic-icon{width:100px}.register-container .register-wrapper .register-form .register-button{border-radius:5px;border:none;background-color:#075e54;color:#fff;font-size:22px;font-family:Roboto,Arial;font-weight:700;width:120px}.register-container .register-wrapper .error-msg{color:red}.top-navigation-bar{display:flex;flex-direction:row;justify-content:space-between;height:80px;background-color:#fff;align-items:center;position:fixed;top:0;left:0;right:0;z-index:100}.top-navigation-bar .left-top-navigation-bar{display:flex;align-items:center;justify-self:flex-start;width:222px}.top-navigation-bar .collab-logo{width:70px;margin-left:15px}.top-navigation-bar .greeting-text{font-family:Roboto,Arial,sans-serif;font-weight:700;font-size:22px;padding-left:15px;white-space:nowrap;color:#128c7e}.top-navigation-bar .center-top-navigation-bar{justify-self:center;white-space:nowrap;align-self:center}.top-navigation-bar .center-top-navigation-bar .navigation-bar-button{border:none;background-color:transparent;margin-left:15px;margin-right:15px;font-size:22px}.top-navigation-bar .center-top-navigation-bar .navigation-bar-button:hover{background-color:#075e54;opacity:.7;color:#fff;border-radius:5px;font-weight:700}.top-navigation-bar .logout-button{border:none;background-color:transparent;color:red;margin-right:10px;margin-left:100px}.top-navigation-bar .logout-button:hover{background-color:red;color:#fff;font-weight:700;border-radius:5px} diff --git a/colLAB-FIN/dist/assets/index-7faffc80.js b/colLAB-FIN/dist/assets/index-7faffc80.js new file mode 100644 index 0000000..bec8144 --- /dev/null +++ b/colLAB-FIN/dist/assets/index-7faffc80.js @@ -0,0 +1,3452 @@ +function zS(t,e){for(var n=0;nr[i]})}}}return Object.freeze(Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}))}(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))r(i);new MutationObserver(i=>{for(const s of i)if(s.type==="childList")for(const o of s.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&r(o)}).observe(document,{childList:!0,subtree:!0});function n(i){const s={};return i.integrity&&(s.integrity=i.integrity),i.referrerPolicy&&(s.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?s.credentials="include":i.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function r(i){if(i.ep)return;i.ep=!0;const s=n(i);fetch(i.href,s)}})();function HS(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var xv={exports:{}},_u={},Av={exports:{}},K={};/** + * @license React + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Ho=Symbol.for("react.element"),qS=Symbol.for("react.portal"),WS=Symbol.for("react.fragment"),KS=Symbol.for("react.strict_mode"),GS=Symbol.for("react.profiler"),QS=Symbol.for("react.provider"),YS=Symbol.for("react.context"),XS=Symbol.for("react.forward_ref"),JS=Symbol.for("react.suspense"),ZS=Symbol.for("react.memo"),eI=Symbol.for("react.lazy"),Pm=Symbol.iterator;function tI(t){return t===null||typeof t!="object"?null:(t=Pm&&t[Pm]||t["@@iterator"],typeof t=="function"?t:null)}var Pv={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Dv=Object.assign,Ov={};function as(t,e,n){this.props=t,this.context=e,this.refs=Ov,this.updater=n||Pv}as.prototype.isReactComponent={};as.prototype.setState=function(t,e){if(typeof t!="object"&&typeof t!="function"&&t!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,t,e,"setState")};as.prototype.forceUpdate=function(t){this.updater.enqueueForceUpdate(this,t,"forceUpdate")};function Lv(){}Lv.prototype=as.prototype;function uf(t,e,n){this.props=t,this.context=e,this.refs=Ov,this.updater=n||Pv}var cf=uf.prototype=new Lv;cf.constructor=uf;Dv(cf,as.prototype);cf.isPureReactComponent=!0;var Dm=Array.isArray,Mv=Object.prototype.hasOwnProperty,hf={current:null},$v={key:!0,ref:!0,__self:!0,__source:!0};function Uv(t,e,n){var r,i={},s=null,o=null;if(e!=null)for(r in e.ref!==void 0&&(o=e.ref),e.key!==void 0&&(s=""+e.key),e)Mv.call(e,r)&&!$v.hasOwnProperty(r)&&(i[r]=e[r]);var a=arguments.length-2;if(a===1)i.children=n;else if(1>>1,xe=O[ye];if(0>>1;yei(kc,q))Sri(Ia,kc)?(O[ye]=Ia,O[Sr]=q,ye=Sr):(O[ye]=kc,O[Er]=q,ye=Er);else if(Sri(Ia,q))O[ye]=Ia,O[Sr]=q,ye=Sr;else break e}}return H}function i(O,H){var q=O.sortIndex-H.sortIndex;return q!==0?q:O.id-H.id}if(typeof performance=="object"&&typeof performance.now=="function"){var s=performance;t.unstable_now=function(){return s.now()}}else{var o=Date,a=o.now();t.unstable_now=function(){return o.now()-a}}var l=[],u=[],c=1,h=null,d=3,p=!1,y=!1,w=!1,S=typeof setTimeout=="function"?setTimeout:null,m=typeof clearTimeout=="function"?clearTimeout:null,f=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function g(O){for(var H=n(u);H!==null;){if(H.callback===null)r(u);else if(H.startTime<=O)r(u),H.sortIndex=H.expirationTime,e(l,H);else break;H=n(u)}}function _(O){if(w=!1,g(O),!y)if(n(l)!==null)y=!0,li(k);else{var H=n(u);H!==null&&Tc(_,H.startTime-O)}}function k(O,H){y=!1,w&&(w=!1,m(I),I=-1),p=!0;var q=d;try{for(g(H),h=n(l);h!==null&&(!(h.expirationTime>H)||O&&!Re());){var ye=h.callback;if(typeof ye=="function"){h.callback=null,d=h.priorityLevel;var xe=ye(h.expirationTime<=H);H=t.unstable_now(),typeof xe=="function"?h.callback=xe:h===n(l)&&r(l),g(H)}else r(l);h=n(l)}if(h!==null)var Sa=!0;else{var Er=n(u);Er!==null&&Tc(_,Er.startTime-H),Sa=!1}return Sa}finally{h=null,d=q,p=!1}}var R=!1,x=null,I=-1,L=5,b=-1;function Re(){return!(t.unstable_now()-bO||125ye?(O.sortIndex=q,e(u,O),n(l)===null&&O===n(u)&&(w?(m(I),I=-1):w=!0,Tc(_,q-ye))):(O.sortIndex=xe,e(l,O),y||p||(y=!0,li(k))),O},t.unstable_shouldYield=Re,t.unstable_wrapCallback=function(O){var H=d;return function(){var q=d;d=H;try{return O.apply(this,arguments)}finally{d=q}}}})(Bv);Vv.exports=Bv;var fI=Vv.exports;/** + * @license React + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var zv=E,Tt=fI;function C(t){for(var e="https://reactjs.org/docs/error-decoder.html?invariant="+t,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Ch=Object.prototype.hasOwnProperty,pI=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Lm={},Mm={};function mI(t){return Ch.call(Mm,t)?!0:Ch.call(Lm,t)?!1:pI.test(t)?Mm[t]=!0:(Lm[t]=!0,!1)}function gI(t,e,n,r){if(n!==null&&n.type===0)return!1;switch(typeof e){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(t=t.toLowerCase().slice(0,5),t!=="data-"&&t!=="aria-");default:return!1}}function yI(t,e,n,r){if(e===null||typeof e>"u"||gI(t,e,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!e;case 4:return e===!1;case 5:return isNaN(e);case 6:return isNaN(e)||1>e}return!1}function at(t,e,n,r,i,s,o){this.acceptsBooleans=e===2||e===3||e===4,this.attributeName=r,this.attributeNamespace=i,this.mustUseProperty=n,this.propertyName=t,this.type=e,this.sanitizeURL=s,this.removeEmptyString=o}var Ve={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(t){Ve[t]=new at(t,0,!1,t,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(t){var e=t[0];Ve[e]=new at(e,1,!1,t[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(t){Ve[t]=new at(t,2,!1,t.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(t){Ve[t]=new at(t,2,!1,t,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(t){Ve[t]=new at(t,3,!1,t.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(t){Ve[t]=new at(t,3,!0,t,null,!1,!1)});["capture","download"].forEach(function(t){Ve[t]=new at(t,4,!1,t,null,!1,!1)});["cols","rows","size","span"].forEach(function(t){Ve[t]=new at(t,6,!1,t,null,!1,!1)});["rowSpan","start"].forEach(function(t){Ve[t]=new at(t,5,!1,t.toLowerCase(),null,!1,!1)});var ff=/[\-:]([a-z])/g;function pf(t){return t[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(t){var e=t.replace(ff,pf);Ve[e]=new at(e,1,!1,t,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(t){var e=t.replace(ff,pf);Ve[e]=new at(e,1,!1,t,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(t){var e=t.replace(ff,pf);Ve[e]=new at(e,1,!1,t,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(t){Ve[t]=new at(t,1,!1,t.toLowerCase(),null,!1,!1)});Ve.xlinkHref=new at("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(t){Ve[t]=new at(t,1,!1,t.toLowerCase(),null,!0,!0)});function mf(t,e,n,r){var i=Ve.hasOwnProperty(e)?Ve[e]:null;(i!==null?i.type!==0:r||!(2a||i[o]!==s[a]){var l=` +`+i[o].replace(" at new "," at ");return t.displayName&&l.includes("")&&(l=l.replace("",t.displayName)),l}while(1<=o&&0<=a);break}}}finally{Rc=!1,Error.prepareStackTrace=n}return(t=t?t.displayName||t.name:"")?Ls(t):""}function vI(t){switch(t.tag){case 5:return Ls(t.type);case 16:return Ls("Lazy");case 13:return Ls("Suspense");case 19:return Ls("SuspenseList");case 0:case 2:case 15:return t=xc(t.type,!1),t;case 11:return t=xc(t.type.render,!1),t;case 1:return t=xc(t.type,!0),t;default:return""}}function Ah(t){if(t==null)return null;if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t;switch(t){case yi:return"Fragment";case gi:return"Portal";case Nh:return"Profiler";case gf:return"StrictMode";case Rh:return"Suspense";case xh:return"SuspenseList"}if(typeof t=="object")switch(t.$$typeof){case Wv:return(t.displayName||"Context")+".Consumer";case qv:return(t._context.displayName||"Context")+".Provider";case yf:var e=t.render;return t=t.displayName,t||(t=e.displayName||e.name||"",t=t!==""?"ForwardRef("+t+")":"ForwardRef"),t;case vf:return e=t.displayName||null,e!==null?e:Ah(t.type)||"Memo";case $n:e=t._payload,t=t._init;try{return Ah(t(e))}catch{}}return null}function wI(t){var e=t.type;switch(t.tag){case 24:return"Cache";case 9:return(e.displayName||"Context")+".Consumer";case 10:return(e._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return t=e.render,t=t.displayName||t.name||"",e.displayName||(t!==""?"ForwardRef("+t+")":"ForwardRef");case 7:return"Fragment";case 5:return e;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Ah(e);case 8:return e===gf?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e}return null}function or(t){switch(typeof t){case"boolean":case"number":case"string":case"undefined":return t;case"object":return t;default:return""}}function Gv(t){var e=t.type;return(t=t.nodeName)&&t.toLowerCase()==="input"&&(e==="checkbox"||e==="radio")}function _I(t){var e=Gv(t)?"checked":"value",n=Object.getOwnPropertyDescriptor(t.constructor.prototype,e),r=""+t[e];if(!t.hasOwnProperty(e)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var i=n.get,s=n.set;return Object.defineProperty(t,e,{configurable:!0,get:function(){return i.call(this)},set:function(o){r=""+o,s.call(this,o)}}),Object.defineProperty(t,e,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(o){r=""+o},stopTracking:function(){t._valueTracker=null,delete t[e]}}}}function Ca(t){t._valueTracker||(t._valueTracker=_I(t))}function Qv(t){if(!t)return!1;var e=t._valueTracker;if(!e)return!0;var n=e.getValue(),r="";return t&&(r=Gv(t)?t.checked?"true":"false":t.value),t=r,t!==n?(e.setValue(t),!0):!1}function El(t){if(t=t||(typeof document<"u"?document:void 0),typeof t>"u")return null;try{return t.activeElement||t.body}catch{return t.body}}function Ph(t,e){var n=e.checked;return de({},e,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??t._wrapperState.initialChecked})}function Um(t,e){var n=e.defaultValue==null?"":e.defaultValue,r=e.checked!=null?e.checked:e.defaultChecked;n=or(e.value!=null?e.value:n),t._wrapperState={initialChecked:r,initialValue:n,controlled:e.type==="checkbox"||e.type==="radio"?e.checked!=null:e.value!=null}}function Yv(t,e){e=e.checked,e!=null&&mf(t,"checked",e,!1)}function Dh(t,e){Yv(t,e);var n=or(e.value),r=e.type;if(n!=null)r==="number"?(n===0&&t.value===""||t.value!=n)&&(t.value=""+n):t.value!==""+n&&(t.value=""+n);else if(r==="submit"||r==="reset"){t.removeAttribute("value");return}e.hasOwnProperty("value")?Oh(t,e.type,n):e.hasOwnProperty("defaultValue")&&Oh(t,e.type,or(e.defaultValue)),e.checked==null&&e.defaultChecked!=null&&(t.defaultChecked=!!e.defaultChecked)}function bm(t,e,n){if(e.hasOwnProperty("value")||e.hasOwnProperty("defaultValue")){var r=e.type;if(!(r!=="submit"&&r!=="reset"||e.value!==void 0&&e.value!==null))return;e=""+t._wrapperState.initialValue,n||e===t.value||(t.value=e),t.defaultValue=e}n=t.name,n!==""&&(t.name=""),t.defaultChecked=!!t._wrapperState.initialChecked,n!==""&&(t.name=n)}function Oh(t,e,n){(e!=="number"||El(t.ownerDocument)!==t)&&(n==null?t.defaultValue=""+t._wrapperState.initialValue:t.defaultValue!==""+n&&(t.defaultValue=""+n))}var Ms=Array.isArray;function Pi(t,e,n,r){if(t=t.options,e){e={};for(var i=0;i"+e.valueOf().toString()+"",e=Na.firstChild;t.firstChild;)t.removeChild(t.firstChild);for(;e.firstChild;)t.appendChild(e.firstChild)}});function lo(t,e){if(e){var n=t.firstChild;if(n&&n===t.lastChild&&n.nodeType===3){n.nodeValue=e;return}}t.textContent=e}var qs={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},EI=["Webkit","ms","Moz","O"];Object.keys(qs).forEach(function(t){EI.forEach(function(e){e=e+t.charAt(0).toUpperCase()+t.substring(1),qs[e]=qs[t]})});function e0(t,e,n){return e==null||typeof e=="boolean"||e===""?"":n||typeof e!="number"||e===0||qs.hasOwnProperty(t)&&qs[t]?(""+e).trim():e+"px"}function t0(t,e){t=t.style;for(var n in e)if(e.hasOwnProperty(n)){var r=n.indexOf("--")===0,i=e0(n,e[n],r);n==="float"&&(n="cssFloat"),r?t.setProperty(n,i):t[n]=i}}var SI=de({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function $h(t,e){if(e){if(SI[t]&&(e.children!=null||e.dangerouslySetInnerHTML!=null))throw Error(C(137,t));if(e.dangerouslySetInnerHTML!=null){if(e.children!=null)throw Error(C(60));if(typeof e.dangerouslySetInnerHTML!="object"||!("__html"in e.dangerouslySetInnerHTML))throw Error(C(61))}if(e.style!=null&&typeof e.style!="object")throw Error(C(62))}}function Uh(t,e){if(t.indexOf("-")===-1)return typeof e.is=="string";switch(t){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var bh=null;function wf(t){return t=t.target||t.srcElement||window,t.correspondingUseElement&&(t=t.correspondingUseElement),t.nodeType===3?t.parentNode:t}var Fh=null,Di=null,Oi=null;function Vm(t){if(t=Ko(t)){if(typeof Fh!="function")throw Error(C(280));var e=t.stateNode;e&&(e=ku(e),Fh(t.stateNode,t.type,e))}}function n0(t){Di?Oi?Oi.push(t):Oi=[t]:Di=t}function r0(){if(Di){var t=Di,e=Oi;if(Oi=Di=null,Vm(t),e)for(t=0;t>>=0,t===0?32:31-(OI(t)/LI|0)|0}var Ra=64,xa=4194304;function $s(t){switch(t&-t){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return t&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return t}}function kl(t,e){var n=t.pendingLanes;if(n===0)return 0;var r=0,i=t.suspendedLanes,s=t.pingedLanes,o=n&268435455;if(o!==0){var a=o&~i;a!==0?r=$s(a):(s&=o,s!==0&&(r=$s(s)))}else o=n&~i,o!==0?r=$s(o):s!==0&&(r=$s(s));if(r===0)return 0;if(e!==0&&e!==r&&!(e&i)&&(i=r&-r,s=e&-e,i>=s||i===16&&(s&4194240)!==0))return e;if(r&4&&(r|=n&16),e=t.entangledLanes,e!==0)for(t=t.entanglements,e&=r;0n;n++)e.push(t);return e}function qo(t,e,n){t.pendingLanes|=e,e!==536870912&&(t.suspendedLanes=0,t.pingedLanes=0),t=t.eventTimes,e=31-Vt(e),t[e]=n}function bI(t,e){var n=t.pendingLanes&~e;t.pendingLanes=e,t.suspendedLanes=0,t.pingedLanes=0,t.expiredLanes&=e,t.mutableReadLanes&=e,t.entangledLanes&=e,e=t.entanglements;var r=t.eventTimes;for(t=t.expirationTimes;0=Ks),Ym=String.fromCharCode(32),Xm=!1;function I0(t,e){switch(t){case"keyup":return dT.indexOf(e.keyCode)!==-1;case"keydown":return e.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function T0(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var vi=!1;function pT(t,e){switch(t){case"compositionend":return T0(e);case"keypress":return e.which!==32?null:(Xm=!0,Ym);case"textInput":return t=e.data,t===Ym&&Xm?null:t;default:return null}}function mT(t,e){if(vi)return t==="compositionend"||!Nf&&I0(t,e)?(t=E0(),il=Tf=Hn=null,vi=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(e.ctrlKey||e.altKey||e.metaKey)||e.ctrlKey&&e.altKey){if(e.char&&1=e)return{node:n,offset:e-t};t=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=tg(n)}}function R0(t,e){return t&&e?t===e?!0:t&&t.nodeType===3?!1:e&&e.nodeType===3?R0(t,e.parentNode):"contains"in t?t.contains(e):t.compareDocumentPosition?!!(t.compareDocumentPosition(e)&16):!1:!1}function x0(){for(var t=window,e=El();e instanceof t.HTMLIFrameElement;){try{var n=typeof e.contentWindow.location.href=="string"}catch{n=!1}if(n)t=e.contentWindow;else break;e=El(t.document)}return e}function Rf(t){var e=t&&t.nodeName&&t.nodeName.toLowerCase();return e&&(e==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||e==="textarea"||t.contentEditable==="true")}function TT(t){var e=x0(),n=t.focusedElem,r=t.selectionRange;if(e!==n&&n&&n.ownerDocument&&R0(n.ownerDocument.documentElement,n)){if(r!==null&&Rf(n)){if(e=r.start,t=r.end,t===void 0&&(t=e),"selectionStart"in n)n.selectionStart=e,n.selectionEnd=Math.min(t,n.value.length);else if(t=(e=n.ownerDocument||document)&&e.defaultView||window,t.getSelection){t=t.getSelection();var i=n.textContent.length,s=Math.min(r.start,i);r=r.end===void 0?s:Math.min(r.end,i),!t.extend&&s>r&&(i=r,r=s,s=i),i=ng(n,s);var o=ng(n,r);i&&o&&(t.rangeCount!==1||t.anchorNode!==i.node||t.anchorOffset!==i.offset||t.focusNode!==o.node||t.focusOffset!==o.offset)&&(e=e.createRange(),e.setStart(i.node,i.offset),t.removeAllRanges(),s>r?(t.addRange(e),t.extend(o.node,o.offset)):(e.setEnd(o.node,o.offset),t.addRange(e)))}}for(e=[],t=n;t=t.parentNode;)t.nodeType===1&&e.push({element:t,left:t.scrollLeft,top:t.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,wi=null,qh=null,Qs=null,Wh=!1;function rg(t,e,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Wh||wi==null||wi!==El(r)||(r=wi,"selectionStart"in r&&Rf(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Qs&&mo(Qs,r)||(Qs=r,r=Rl(qh,"onSelect"),0Si||(t.current=Jh[Si],Jh[Si]=null,Si--)}function ee(t,e){Si++,Jh[Si]=t.current,t.current=e}var ar={},Ze=fr(ar),ft=fr(!1),br=ar;function Hi(t,e){var n=t.type.contextTypes;if(!n)return ar;var r=t.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===e)return r.__reactInternalMemoizedMaskedChildContext;var i={},s;for(s in n)i[s]=e[s];return r&&(t=t.stateNode,t.__reactInternalMemoizedUnmaskedChildContext=e,t.__reactInternalMemoizedMaskedChildContext=i),i}function pt(t){return t=t.childContextTypes,t!=null}function Al(){ie(ft),ie(Ze)}function cg(t,e,n){if(Ze.current!==ar)throw Error(C(168));ee(Ze,e),ee(ft,n)}function b0(t,e,n){var r=t.stateNode;if(e=e.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var i in r)if(!(i in e))throw Error(C(108,wI(t)||"Unknown",i));return de({},n,r)}function Pl(t){return t=(t=t.stateNode)&&t.__reactInternalMemoizedMergedChildContext||ar,br=Ze.current,ee(Ze,t),ee(ft,ft.current),!0}function hg(t,e,n){var r=t.stateNode;if(!r)throw Error(C(169));n?(t=b0(t,e,br),r.__reactInternalMemoizedMergedChildContext=t,ie(ft),ie(Ze),ee(Ze,t)):ie(ft),ee(ft,n)}var hn=null,Cu=!1,zc=!1;function F0(t){hn===null?hn=[t]:hn.push(t)}function $T(t){Cu=!0,F0(t)}function pr(){if(!zc&&hn!==null){zc=!0;var t=0,e=J;try{var n=hn;for(J=1;t>=o,i-=o,fn=1<<32-Vt(e)+i|n<I?(L=x,x=null):L=x.sibling;var b=d(m,x,g[I],_);if(b===null){x===null&&(x=L);break}t&&x&&b.alternate===null&&e(m,x),f=s(b,f,I),R===null?k=b:R.sibling=b,R=b,x=L}if(I===g.length)return n(m,x),le&&Ir(m,I),k;if(x===null){for(;II?(L=x,x=null):L=x.sibling;var Re=d(m,x,b.value,_);if(Re===null){x===null&&(x=L);break}t&&x&&Re.alternate===null&&e(m,x),f=s(Re,f,I),R===null?k=Re:R.sibling=Re,R=Re,x=L}if(b.done)return n(m,x),le&&Ir(m,I),k;if(x===null){for(;!b.done;I++,b=g.next())b=h(m,b.value,_),b!==null&&(f=s(b,f,I),R===null?k=b:R.sibling=b,R=b);return le&&Ir(m,I),k}for(x=r(m,x);!b.done;I++,b=g.next())b=p(x,m,I,b.value,_),b!==null&&(t&&b.alternate!==null&&x.delete(b.key===null?I:b.key),f=s(b,f,I),R===null?k=b:R.sibling=b,R=b);return t&&x.forEach(function(Rt){return e(m,Rt)}),le&&Ir(m,I),k}function S(m,f,g,_){if(typeof g=="object"&&g!==null&&g.type===yi&&g.key===null&&(g=g.props.children),typeof g=="object"&&g!==null){switch(g.$$typeof){case ka:e:{for(var k=g.key,R=f;R!==null;){if(R.key===k){if(k=g.type,k===yi){if(R.tag===7){n(m,R.sibling),f=i(R,g.props.children),f.return=m,m=f;break e}}else if(R.elementType===k||typeof k=="object"&&k!==null&&k.$$typeof===$n&&vg(k)===R.type){n(m,R.sibling),f=i(R,g.props),f.ref=Rs(m,R,g),f.return=m,m=f;break e}n(m,R);break}else e(m,R);R=R.sibling}g.type===yi?(f=Lr(g.props.children,m.mode,_,g.key),f.return=m,m=f):(_=dl(g.type,g.key,g.props,null,m.mode,_),_.ref=Rs(m,f,g),_.return=m,m=_)}return o(m);case gi:e:{for(R=g.key;f!==null;){if(f.key===R)if(f.tag===4&&f.stateNode.containerInfo===g.containerInfo&&f.stateNode.implementation===g.implementation){n(m,f.sibling),f=i(f,g.children||[]),f.return=m,m=f;break e}else{n(m,f);break}else e(m,f);f=f.sibling}f=Xc(g,m.mode,_),f.return=m,m=f}return o(m);case $n:return R=g._init,S(m,f,R(g._payload),_)}if(Ms(g))return y(m,f,g,_);if(Is(g))return w(m,f,g,_);$a(m,g)}return typeof g=="string"&&g!==""||typeof g=="number"?(g=""+g,f!==null&&f.tag===6?(n(m,f.sibling),f=i(f,g),f.return=m,m=f):(n(m,f),f=Yc(g,m.mode,_),f.return=m,m=f),o(m)):n(m,f)}return S}var Wi=K0(!0),G0=K0(!1),Go={},nn=fr(Go),wo=fr(Go),_o=fr(Go);function xr(t){if(t===Go)throw Error(C(174));return t}function Uf(t,e){switch(ee(_o,e),ee(wo,t),ee(nn,Go),t=e.nodeType,t){case 9:case 11:e=(e=e.documentElement)?e.namespaceURI:Mh(null,"");break;default:t=t===8?e.parentNode:e,e=t.namespaceURI||null,t=t.tagName,e=Mh(e,t)}ie(nn),ee(nn,e)}function Ki(){ie(nn),ie(wo),ie(_o)}function Q0(t){xr(_o.current);var e=xr(nn.current),n=Mh(e,t.type);e!==n&&(ee(wo,t),ee(nn,n))}function bf(t){wo.current===t&&(ie(nn),ie(wo))}var ue=fr(0);function Ul(t){for(var e=t;e!==null;){if(e.tag===13){var n=e.memoizedState;if(n!==null&&(n=n.dehydrated,n===null||n.data==="$?"||n.data==="$!"))return e}else if(e.tag===19&&e.memoizedProps.revealOrder!==void 0){if(e.flags&128)return e}else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break;for(;e.sibling===null;){if(e.return===null||e.return===t)return null;e=e.return}e.sibling.return=e.return,e=e.sibling}return null}var Hc=[];function Ff(){for(var t=0;tn?n:4,t(!0);var r=qc.transition;qc.transition={};try{t(!1),e()}finally{J=n,qc.transition=r}}function hw(){return $t().memoizedState}function jT(t,e,n){var r=er(t);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},dw(t))fw(e,n);else if(n=z0(t,e,n,r),n!==null){var i=st();Bt(n,t,r,i),pw(n,e,r)}}function VT(t,e,n){var r=er(t),i={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(dw(t))fw(e,i);else{var s=t.alternate;if(t.lanes===0&&(s===null||s.lanes===0)&&(s=e.lastRenderedReducer,s!==null))try{var o=e.lastRenderedState,a=s(o,n);if(i.hasEagerState=!0,i.eagerState=a,zt(a,o)){var l=e.interleaved;l===null?(i.next=i,Mf(e)):(i.next=l.next,l.next=i),e.interleaved=i;return}}catch{}finally{}n=z0(t,e,i,r),n!==null&&(i=st(),Bt(n,t,r,i),pw(n,e,r))}}function dw(t){var e=t.alternate;return t===he||e!==null&&e===he}function fw(t,e){Ys=bl=!0;var n=t.pending;n===null?e.next=e:(e.next=n.next,n.next=e),t.pending=e}function pw(t,e,n){if(n&4194240){var r=e.lanes;r&=t.pendingLanes,n|=r,e.lanes=n,Ef(t,n)}}var Fl={readContext:Mt,useCallback:Be,useContext:Be,useEffect:Be,useImperativeHandle:Be,useInsertionEffect:Be,useLayoutEffect:Be,useMemo:Be,useReducer:Be,useRef:Be,useState:Be,useDebugValue:Be,useDeferredValue:Be,useTransition:Be,useMutableSource:Be,useSyncExternalStore:Be,useId:Be,unstable_isNewReconciler:!1},BT={readContext:Mt,useCallback:function(t,e){return Gt().memoizedState=[t,e===void 0?null:e],t},useContext:Mt,useEffect:_g,useImperativeHandle:function(t,e,n){return n=n!=null?n.concat([t]):null,ll(4194308,4,ow.bind(null,e,t),n)},useLayoutEffect:function(t,e){return ll(4194308,4,t,e)},useInsertionEffect:function(t,e){return ll(4,2,t,e)},useMemo:function(t,e){var n=Gt();return e=e===void 0?null:e,t=t(),n.memoizedState=[t,e],t},useReducer:function(t,e,n){var r=Gt();return e=n!==void 0?n(e):e,r.memoizedState=r.baseState=e,t={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:e},r.queue=t,t=t.dispatch=jT.bind(null,he,t),[r.memoizedState,t]},useRef:function(t){var e=Gt();return t={current:t},e.memoizedState=t},useState:wg,useDebugValue:Hf,useDeferredValue:function(t){return Gt().memoizedState=t},useTransition:function(){var t=wg(!1),e=t[0];return t=FT.bind(null,t[1]),Gt().memoizedState=t,[e,t]},useMutableSource:function(){},useSyncExternalStore:function(t,e,n){var r=he,i=Gt();if(le){if(n===void 0)throw Error(C(407));n=n()}else{if(n=e(),De===null)throw Error(C(349));jr&30||J0(r,e,n)}i.memoizedState=n;var s={value:n,getSnapshot:e};return i.queue=s,_g(ew.bind(null,r,s,t),[t]),r.flags|=2048,Io(9,Z0.bind(null,r,s,n,e),void 0,null),n},useId:function(){var t=Gt(),e=De.identifierPrefix;if(le){var n=pn,r=fn;n=(r&~(1<<32-Vt(r)-1)).toString(32)+n,e=":"+e+"R"+n,n=Eo++,0<\/script>",t=t.removeChild(t.firstChild)):typeof r.is=="string"?t=o.createElement(n,{is:r.is}):(t=o.createElement(n),n==="select"&&(o=t,r.multiple?o.multiple=!0:r.size&&(o.size=r.size))):t=o.createElementNS(t,n),t[Qt]=e,t[vo]=r,Iw(t,e,!1,!1),e.stateNode=t;e:{switch(o=Uh(n,r),n){case"dialog":te("cancel",t),te("close",t),i=r;break;case"iframe":case"object":case"embed":te("load",t),i=r;break;case"video":case"audio":for(i=0;iQi&&(e.flags|=128,r=!0,xs(s,!1),e.lanes=4194304)}else{if(!r)if(t=Ul(o),t!==null){if(e.flags|=128,r=!0,n=t.updateQueue,n!==null&&(e.updateQueue=n,e.flags|=4),xs(s,!0),s.tail===null&&s.tailMode==="hidden"&&!o.alternate&&!le)return ze(e),null}else 2*ve()-s.renderingStartTime>Qi&&n!==1073741824&&(e.flags|=128,r=!0,xs(s,!1),e.lanes=4194304);s.isBackwards?(o.sibling=e.child,e.child=o):(n=s.last,n!==null?n.sibling=o:e.child=o,s.last=o)}return s.tail!==null?(e=s.tail,s.rendering=e,s.tail=e.sibling,s.renderingStartTime=ve(),e.sibling=null,n=ue.current,ee(ue,r?n&1|2:n&1),e):(ze(e),null);case 22:case 23:return Yf(),r=e.memoizedState!==null,t!==null&&t.memoizedState!==null!==r&&(e.flags|=8192),r&&e.mode&1?yt&1073741824&&(ze(e),e.subtreeFlags&6&&(e.flags|=8192)):ze(e),null;case 24:return null;case 25:return null}throw Error(C(156,e.tag))}function YT(t,e){switch(Af(e),e.tag){case 1:return pt(e.type)&&Al(),t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 3:return Ki(),ie(ft),ie(Ze),Ff(),t=e.flags,t&65536&&!(t&128)?(e.flags=t&-65537|128,e):null;case 5:return bf(e),null;case 13:if(ie(ue),t=e.memoizedState,t!==null&&t.dehydrated!==null){if(e.alternate===null)throw Error(C(340));qi()}return t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 19:return ie(ue),null;case 4:return Ki(),null;case 10:return Lf(e.type._context),null;case 22:case 23:return Yf(),null;case 24:return null;default:return null}}var ba=!1,We=!1,XT=typeof WeakSet=="function"?WeakSet:Set,D=null;function Ci(t,e){var n=t.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){me(t,e,r)}else n.current=null}function cd(t,e,n){try{n()}catch(r){me(t,e,r)}}var xg=!1;function JT(t,e){if(Kh=Cl,t=x0(),Rf(t)){if("selectionStart"in t)var n={start:t.selectionStart,end:t.selectionEnd};else e:{n=(n=t.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var i=r.anchorOffset,s=r.focusNode;r=r.focusOffset;try{n.nodeType,s.nodeType}catch{n=null;break e}var o=0,a=-1,l=-1,u=0,c=0,h=t,d=null;t:for(;;){for(var p;h!==n||i!==0&&h.nodeType!==3||(a=o+i),h!==s||r!==0&&h.nodeType!==3||(l=o+r),h.nodeType===3&&(o+=h.nodeValue.length),(p=h.firstChild)!==null;)d=h,h=p;for(;;){if(h===t)break t;if(d===n&&++u===i&&(a=o),d===s&&++c===r&&(l=o),(p=h.nextSibling)!==null)break;h=d,d=h.parentNode}h=p}n=a===-1||l===-1?null:{start:a,end:l}}else n=null}n=n||{start:0,end:0}}else n=null;for(Gh={focusedElem:t,selectionRange:n},Cl=!1,D=e;D!==null;)if(e=D,t=e.child,(e.subtreeFlags&1028)!==0&&t!==null)t.return=e,D=t;else for(;D!==null;){e=D;try{var y=e.alternate;if(e.flags&1024)switch(e.tag){case 0:case 11:case 15:break;case 1:if(y!==null){var w=y.memoizedProps,S=y.memoizedState,m=e.stateNode,f=m.getSnapshotBeforeUpdate(e.elementType===e.type?w:bt(e.type,w),S);m.__reactInternalSnapshotBeforeUpdate=f}break;case 3:var g=e.stateNode.containerInfo;g.nodeType===1?g.textContent="":g.nodeType===9&&g.documentElement&&g.removeChild(g.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(C(163))}}catch(_){me(e,e.return,_)}if(t=e.sibling,t!==null){t.return=e.return,D=t;break}D=e.return}return y=xg,xg=!1,y}function Xs(t,e,n){var r=e.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var i=r=r.next;do{if((i.tag&t)===t){var s=i.destroy;i.destroy=void 0,s!==void 0&&cd(e,n,s)}i=i.next}while(i!==r)}}function xu(t,e){if(e=e.updateQueue,e=e!==null?e.lastEffect:null,e!==null){var n=e=e.next;do{if((n.tag&t)===t){var r=n.create;n.destroy=r()}n=n.next}while(n!==e)}}function hd(t){var e=t.ref;if(e!==null){var n=t.stateNode;switch(t.tag){case 5:t=n;break;default:t=n}typeof e=="function"?e(t):e.current=t}}function Cw(t){var e=t.alternate;e!==null&&(t.alternate=null,Cw(e)),t.child=null,t.deletions=null,t.sibling=null,t.tag===5&&(e=t.stateNode,e!==null&&(delete e[Qt],delete e[vo],delete e[Xh],delete e[LT],delete e[MT])),t.stateNode=null,t.return=null,t.dependencies=null,t.memoizedProps=null,t.memoizedState=null,t.pendingProps=null,t.stateNode=null,t.updateQueue=null}function Nw(t){return t.tag===5||t.tag===3||t.tag===4}function Ag(t){e:for(;;){for(;t.sibling===null;){if(t.return===null||Nw(t.return))return null;t=t.return}for(t.sibling.return=t.return,t=t.sibling;t.tag!==5&&t.tag!==6&&t.tag!==18;){if(t.flags&2||t.child===null||t.tag===4)continue e;t.child.return=t,t=t.child}if(!(t.flags&2))return t.stateNode}}function dd(t,e,n){var r=t.tag;if(r===5||r===6)t=t.stateNode,e?n.nodeType===8?n.parentNode.insertBefore(t,e):n.insertBefore(t,e):(n.nodeType===8?(e=n.parentNode,e.insertBefore(t,n)):(e=n,e.appendChild(t)),n=n._reactRootContainer,n!=null||e.onclick!==null||(e.onclick=xl));else if(r!==4&&(t=t.child,t!==null))for(dd(t,e,n),t=t.sibling;t!==null;)dd(t,e,n),t=t.sibling}function fd(t,e,n){var r=t.tag;if(r===5||r===6)t=t.stateNode,e?n.insertBefore(t,e):n.appendChild(t);else if(r!==4&&(t=t.child,t!==null))for(fd(t,e,n),t=t.sibling;t!==null;)fd(t,e,n),t=t.sibling}var $e=null,Ft=!1;function Ln(t,e,n){for(n=n.child;n!==null;)Rw(t,e,n),n=n.sibling}function Rw(t,e,n){if(tn&&typeof tn.onCommitFiberUnmount=="function")try{tn.onCommitFiberUnmount(Eu,n)}catch{}switch(n.tag){case 5:We||Ci(n,e);case 6:var r=$e,i=Ft;$e=null,Ln(t,e,n),$e=r,Ft=i,$e!==null&&(Ft?(t=$e,n=n.stateNode,t.nodeType===8?t.parentNode.removeChild(n):t.removeChild(n)):$e.removeChild(n.stateNode));break;case 18:$e!==null&&(Ft?(t=$e,n=n.stateNode,t.nodeType===8?Bc(t.parentNode,n):t.nodeType===1&&Bc(t,n),fo(t)):Bc($e,n.stateNode));break;case 4:r=$e,i=Ft,$e=n.stateNode.containerInfo,Ft=!0,Ln(t,e,n),$e=r,Ft=i;break;case 0:case 11:case 14:case 15:if(!We&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){i=r=r.next;do{var s=i,o=s.destroy;s=s.tag,o!==void 0&&(s&2||s&4)&&cd(n,e,o),i=i.next}while(i!==r)}Ln(t,e,n);break;case 1:if(!We&&(Ci(n,e),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(a){me(n,e,a)}Ln(t,e,n);break;case 21:Ln(t,e,n);break;case 22:n.mode&1?(We=(r=We)||n.memoizedState!==null,Ln(t,e,n),We=r):Ln(t,e,n);break;default:Ln(t,e,n)}}function Pg(t){var e=t.updateQueue;if(e!==null){t.updateQueue=null;var n=t.stateNode;n===null&&(n=t.stateNode=new XT),e.forEach(function(r){var i=ak.bind(null,t,r);n.has(r)||(n.add(r),r.then(i,i))})}}function Ut(t,e){var n=e.deletions;if(n!==null)for(var r=0;ri&&(i=o),r&=~s}if(r=i,r=ve()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*ek(r/1960))-r,10t?16:t,qn===null)var r=!1;else{if(t=qn,qn=null,Bl=0,Q&6)throw Error(C(331));var i=Q;for(Q|=4,D=t.current;D!==null;){var s=D,o=s.child;if(D.flags&16){var a=s.deletions;if(a!==null){for(var l=0;lve()-Gf?Or(t,0):Kf|=n),mt(t,e)}function $w(t,e){e===0&&(t.mode&1?(e=xa,xa<<=1,!(xa&130023424)&&(xa=4194304)):e=1);var n=st();t=In(t,e),t!==null&&(qo(t,e,n),mt(t,n))}function ok(t){var e=t.memoizedState,n=0;e!==null&&(n=e.retryLane),$w(t,n)}function ak(t,e){var n=0;switch(t.tag){case 13:var r=t.stateNode,i=t.memoizedState;i!==null&&(n=i.retryLane);break;case 19:r=t.stateNode;break;default:throw Error(C(314))}r!==null&&r.delete(e),$w(t,n)}var Uw;Uw=function(t,e,n){if(t!==null)if(t.memoizedProps!==e.pendingProps||ft.current)dt=!0;else{if(!(t.lanes&n)&&!(e.flags&128))return dt=!1,GT(t,e,n);dt=!!(t.flags&131072)}else dt=!1,le&&e.flags&1048576&&j0(e,Ol,e.index);switch(e.lanes=0,e.tag){case 2:var r=e.type;ul(t,e),t=e.pendingProps;var i=Hi(e,Ze.current);Mi(e,n),i=Vf(null,e,r,t,i,n);var s=Bf();return e.flags|=1,typeof i=="object"&&i!==null&&typeof i.render=="function"&&i.$$typeof===void 0?(e.tag=1,e.memoizedState=null,e.updateQueue=null,pt(r)?(s=!0,Pl(e)):s=!1,e.memoizedState=i.state!==null&&i.state!==void 0?i.state:null,$f(e),i.updater=Nu,e.stateNode=i,i._reactInternals=e,rd(e,r,t,n),e=od(null,e,r,!0,s,n)):(e.tag=0,le&&s&&xf(e),rt(null,e,i,n),e=e.child),e;case 16:r=e.elementType;e:{switch(ul(t,e),t=e.pendingProps,i=r._init,r=i(r._payload),e.type=r,i=e.tag=uk(r),t=bt(r,t),i){case 0:e=sd(null,e,r,t,n);break e;case 1:e=Cg(null,e,r,t,n);break e;case 11:e=Tg(null,e,r,t,n);break e;case 14:e=kg(null,e,r,bt(r.type,t),n);break e}throw Error(C(306,r,""))}return e;case 0:return r=e.type,i=e.pendingProps,i=e.elementType===r?i:bt(r,i),sd(t,e,r,i,n);case 1:return r=e.type,i=e.pendingProps,i=e.elementType===r?i:bt(r,i),Cg(t,e,r,i,n);case 3:e:{if(_w(e),t===null)throw Error(C(387));r=e.pendingProps,s=e.memoizedState,i=s.element,H0(t,e),$l(e,r,null,n);var o=e.memoizedState;if(r=o.element,s.isDehydrated)if(s={element:r,isDehydrated:!1,cache:o.cache,pendingSuspenseBoundaries:o.pendingSuspenseBoundaries,transitions:o.transitions},e.updateQueue.baseState=s,e.memoizedState=s,e.flags&256){i=Gi(Error(C(423)),e),e=Ng(t,e,r,n,i);break e}else if(r!==i){i=Gi(Error(C(424)),e),e=Ng(t,e,r,n,i);break e}else for(wt=Xn(e.stateNode.containerInfo.firstChild),It=e,le=!0,jt=null,n=G0(e,null,r,n),e.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(qi(),r===i){e=Tn(t,e,n);break e}rt(t,e,r,n)}e=e.child}return e;case 5:return Q0(e),t===null&&ed(e),r=e.type,i=e.pendingProps,s=t!==null?t.memoizedProps:null,o=i.children,Qh(r,i)?o=null:s!==null&&Qh(r,s)&&(e.flags|=32),ww(t,e),rt(t,e,o,n),e.child;case 6:return t===null&&ed(e),null;case 13:return Ew(t,e,n);case 4:return Uf(e,e.stateNode.containerInfo),r=e.pendingProps,t===null?e.child=Wi(e,null,r,n):rt(t,e,r,n),e.child;case 11:return r=e.type,i=e.pendingProps,i=e.elementType===r?i:bt(r,i),Tg(t,e,r,i,n);case 7:return rt(t,e,e.pendingProps,n),e.child;case 8:return rt(t,e,e.pendingProps.children,n),e.child;case 12:return rt(t,e,e.pendingProps.children,n),e.child;case 10:e:{if(r=e.type._context,i=e.pendingProps,s=e.memoizedProps,o=i.value,ee(Ll,r._currentValue),r._currentValue=o,s!==null)if(zt(s.value,o)){if(s.children===i.children&&!ft.current){e=Tn(t,e,n);break e}}else for(s=e.child,s!==null&&(s.return=e);s!==null;){var a=s.dependencies;if(a!==null){o=s.child;for(var l=a.firstContext;l!==null;){if(l.context===r){if(s.tag===1){l=vn(-1,n&-n),l.tag=2;var u=s.updateQueue;if(u!==null){u=u.shared;var c=u.pending;c===null?l.next=l:(l.next=c.next,c.next=l),u.pending=l}}s.lanes|=n,l=s.alternate,l!==null&&(l.lanes|=n),td(s.return,n,e),a.lanes|=n;break}l=l.next}}else if(s.tag===10)o=s.type===e.type?null:s.child;else if(s.tag===18){if(o=s.return,o===null)throw Error(C(341));o.lanes|=n,a=o.alternate,a!==null&&(a.lanes|=n),td(o,n,e),o=s.sibling}else o=s.child;if(o!==null)o.return=s;else for(o=s;o!==null;){if(o===e){o=null;break}if(s=o.sibling,s!==null){s.return=o.return,o=s;break}o=o.return}s=o}rt(t,e,i.children,n),e=e.child}return e;case 9:return i=e.type,r=e.pendingProps.children,Mi(e,n),i=Mt(i),r=r(i),e.flags|=1,rt(t,e,r,n),e.child;case 14:return r=e.type,i=bt(r,e.pendingProps),i=bt(r.type,i),kg(t,e,r,i,n);case 15:return yw(t,e,e.type,e.pendingProps,n);case 17:return r=e.type,i=e.pendingProps,i=e.elementType===r?i:bt(r,i),ul(t,e),e.tag=1,pt(r)?(t=!0,Pl(e)):t=!1,Mi(e,n),W0(e,r,i),rd(e,r,i,n),od(null,e,r,!0,t,n);case 19:return Sw(t,e,n);case 22:return vw(t,e,n)}throw Error(C(156,e.tag))};function bw(t,e){return c0(t,e)}function lk(t,e,n,r){this.tag=t,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=e,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Dt(t,e,n,r){return new lk(t,e,n,r)}function Jf(t){return t=t.prototype,!(!t||!t.isReactComponent)}function uk(t){if(typeof t=="function")return Jf(t)?1:0;if(t!=null){if(t=t.$$typeof,t===yf)return 11;if(t===vf)return 14}return 2}function tr(t,e){var n=t.alternate;return n===null?(n=Dt(t.tag,e,t.key,t.mode),n.elementType=t.elementType,n.type=t.type,n.stateNode=t.stateNode,n.alternate=t,t.alternate=n):(n.pendingProps=e,n.type=t.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=t.flags&14680064,n.childLanes=t.childLanes,n.lanes=t.lanes,n.child=t.child,n.memoizedProps=t.memoizedProps,n.memoizedState=t.memoizedState,n.updateQueue=t.updateQueue,e=t.dependencies,n.dependencies=e===null?null:{lanes:e.lanes,firstContext:e.firstContext},n.sibling=t.sibling,n.index=t.index,n.ref=t.ref,n}function dl(t,e,n,r,i,s){var o=2;if(r=t,typeof t=="function")Jf(t)&&(o=1);else if(typeof t=="string")o=5;else e:switch(t){case yi:return Lr(n.children,i,s,e);case gf:o=8,i|=8;break;case Nh:return t=Dt(12,n,e,i|2),t.elementType=Nh,t.lanes=s,t;case Rh:return t=Dt(13,n,e,i),t.elementType=Rh,t.lanes=s,t;case xh:return t=Dt(19,n,e,i),t.elementType=xh,t.lanes=s,t;case Kv:return Pu(n,i,s,e);default:if(typeof t=="object"&&t!==null)switch(t.$$typeof){case qv:o=10;break e;case Wv:o=9;break e;case yf:o=11;break e;case vf:o=14;break e;case $n:o=16,r=null;break e}throw Error(C(130,t==null?t:typeof t,""))}return e=Dt(o,n,e,i),e.elementType=t,e.type=r,e.lanes=s,e}function Lr(t,e,n,r){return t=Dt(7,t,r,e),t.lanes=n,t}function Pu(t,e,n,r){return t=Dt(22,t,r,e),t.elementType=Kv,t.lanes=n,t.stateNode={isHidden:!1},t}function Yc(t,e,n){return t=Dt(6,t,null,e),t.lanes=n,t}function Xc(t,e,n){return e=Dt(4,t.children!==null?t.children:[],t.key,e),e.lanes=n,e.stateNode={containerInfo:t.containerInfo,pendingChildren:null,implementation:t.implementation},e}function ck(t,e,n,r,i){this.tag=e,this.containerInfo=t,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Pc(0),this.expirationTimes=Pc(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Pc(0),this.identifierPrefix=r,this.onRecoverableError=i,this.mutableSourceEagerHydrationData=null}function Zf(t,e,n,r,i,s,o,a,l){return t=new ck(t,e,n,a,l),e===1?(e=1,s===!0&&(e|=8)):e=0,s=Dt(3,null,null,e),t.current=s,s.stateNode=t,s.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},$f(s),t}function hk(t,e,n){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Bw)}catch(t){console.error(t)}}Bw(),jv.exports=Ct;var gk=jv.exports,Fg=gk;kh.createRoot=Fg.createRoot,kh.hydrateRoot=Fg.hydrateRoot;/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *//** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const zw=function(t){const e=[];let n=0;for(let r=0;r>6|192,e[n++]=i&63|128):(i&64512)===55296&&r+1>18|240,e[n++]=i>>12&63|128,e[n++]=i>>6&63|128,e[n++]=i&63|128):(e[n++]=i>>12|224,e[n++]=i>>6&63|128,e[n++]=i&63|128)}return e},yk=function(t){const e=[];let n=0,r=0;for(;n191&&i<224){const s=t[n++];e[r++]=String.fromCharCode((i&31)<<6|s&63)}else if(i>239&&i<365){const s=t[n++],o=t[n++],a=t[n++],l=((i&7)<<18|(s&63)<<12|(o&63)<<6|a&63)-65536;e[r++]=String.fromCharCode(55296+(l>>10)),e[r++]=String.fromCharCode(56320+(l&1023))}else{const s=t[n++],o=t[n++];e[r++]=String.fromCharCode((i&15)<<12|(s&63)<<6|o&63)}}return e.join("")},Hw={byteToCharMap_:null,charToByteMap_:null,byteToCharMapWebSafe_:null,charToByteMapWebSafe_:null,ENCODED_VALS_BASE:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",get ENCODED_VALS(){return this.ENCODED_VALS_BASE+"+/="},get ENCODED_VALS_WEBSAFE(){return this.ENCODED_VALS_BASE+"-_."},HAS_NATIVE_SUPPORT:typeof atob=="function",encodeByteArray(t,e){if(!Array.isArray(t))throw Error("encodeByteArray takes an array as a parameter");this.init_();const n=e?this.byteToCharMapWebSafe_:this.byteToCharMap_,r=[];for(let i=0;i>2,h=(s&3)<<4|a>>4;let d=(a&15)<<2|u>>6,p=u&63;l||(p=64,o||(d=64)),r.push(n[c],n[h],n[d],n[p])}return r.join("")},encodeString(t,e){return this.HAS_NATIVE_SUPPORT&&!e?btoa(t):this.encodeByteArray(zw(t),e)},decodeString(t,e){return this.HAS_NATIVE_SUPPORT&&!e?atob(t):yk(this.decodeStringToByteArray(t,e))},decodeStringToByteArray(t,e){this.init_();const n=e?this.charToByteMapWebSafe_:this.charToByteMap_,r=[];for(let i=0;i>4;if(r.push(d),u!==64){const p=a<<4&240|u>>2;if(r.push(p),h!==64){const y=u<<6&192|h;r.push(y)}}}return r},init_(){if(!this.byteToCharMap_){this.byteToCharMap_={},this.charToByteMap_={},this.byteToCharMapWebSafe_={},this.charToByteMapWebSafe_={};for(let t=0;t=this.ENCODED_VALS_BASE.length&&(this.charToByteMap_[this.ENCODED_VALS_WEBSAFE.charAt(t)]=t,this.charToByteMapWebSafe_[this.ENCODED_VALS.charAt(t)]=t)}}};class vk extends Error{constructor(){super(...arguments),this.name="DecodeBase64StringError"}}const wk=function(t){const e=zw(t);return Hw.encodeByteArray(e,!0)},ql=function(t){return wk(t).replace(/\./g,"")},qw=function(t){try{return Hw.decodeString(t,!0)}catch(e){console.error("base64Decode failed: ",e)}return null};/** + * @license + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function _k(){if(typeof self<"u")return self;if(typeof window<"u")return window;if(typeof global<"u")return global;throw new Error("Unable to locate global object.")}/** + * @license + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const Ek=()=>_k().__FIREBASE_DEFAULTS__,Sk=()=>{if(typeof process>"u"||typeof process.env>"u")return;const t={}.__FIREBASE_DEFAULTS__;if(t)return JSON.parse(t)},Ik=()=>{if(typeof document>"u")return;let t;try{t=document.cookie.match(/__FIREBASE_DEFAULTS__=([^;]+)/)}catch{return}const e=t&&qw(t[1]);return e&&JSON.parse(e)},$u=()=>{try{return Ek()||Sk()||Ik()}catch(t){console.info(`Unable to get __FIREBASE_DEFAULTS__ due to: ${t}`);return}},Ww=t=>{var e,n;return(n=(e=$u())===null||e===void 0?void 0:e.emulatorHosts)===null||n===void 0?void 0:n[t]},Kw=t=>{const e=Ww(t);if(!e)return;const n=e.lastIndexOf(":");if(n<=0||n+1===e.length)throw new Error(`Invalid host ${e} with no separate hostname and port!`);const r=parseInt(e.substring(n+1),10);return e[0]==="["?[e.substring(1,n-1),r]:[e.substring(0,n),r]},Gw=()=>{var t;return(t=$u())===null||t===void 0?void 0:t.config},Qw=t=>{var e;return(e=$u())===null||e===void 0?void 0:e[`_${t}`]};/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class Tk{constructor(){this.reject=()=>{},this.resolve=()=>{},this.promise=new Promise((e,n)=>{this.resolve=e,this.reject=n})}wrapCallback(e){return(n,r)=>{n?this.reject(n):this.resolve(r),typeof e=="function"&&(this.promise.catch(()=>{}),e.length===1?e(n):e(n,r))}}}/** + * @license + * Copyright 2021 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function Yw(t,e){if(t.uid)throw new Error('The "uid" field is no longer supported by mockUserToken. Please use "sub" instead for Firebase Auth User ID.');const n={alg:"none",type:"JWT"},r=e||"demo-project",i=t.iat||0,s=t.sub||t.user_id;if(!s)throw new Error("mockUserToken must contain 'sub' or 'user_id' field!");const o=Object.assign({iss:`https://securetoken.google.com/${r}`,aud:r,iat:i,exp:i+3600,auth_time:i,sub:s,user_id:s,firebase:{sign_in_provider:"custom",identities:{}}},t),a="";return[ql(JSON.stringify(n)),ql(JSON.stringify(o)),a].join(".")}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function et(){return typeof navigator<"u"&&typeof navigator.userAgent=="string"?navigator.userAgent:""}function kk(){return typeof window<"u"&&!!(window.cordova||window.phonegap||window.PhoneGap)&&/ios|iphone|ipod|ipad|android|blackberry|iemobile/i.test(et())}function Ck(){var t;const e=(t=$u())===null||t===void 0?void 0:t.forceEnvironment;if(e==="node")return!0;if(e==="browser")return!1;try{return Object.prototype.toString.call(global.process)==="[object process]"}catch{return!1}}function Nk(){const t=typeof chrome=="object"?chrome.runtime:typeof browser=="object"?browser.runtime:void 0;return typeof t=="object"&&t.id!==void 0}function Rk(){return typeof navigator=="object"&&navigator.product==="ReactNative"}function xk(){const t=et();return t.indexOf("MSIE ")>=0||t.indexOf("Trident/")>=0}function Ak(){try{return typeof indexedDB=="object"}catch{return!1}}function Pk(){return new Promise((t,e)=>{try{let n=!0;const r="validate-browser-context-for-indexeddb-analytics-module",i=self.indexedDB.open(r);i.onsuccess=()=>{i.result.close(),n||self.indexedDB.deleteDatabase(r),t(!0)},i.onupgradeneeded=()=>{n=!1},i.onerror=()=>{var s;e(((s=i.error)===null||s===void 0?void 0:s.message)||"")}}catch(n){e(n)}})}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const Dk="FirebaseError";class un extends Error{constructor(e,n,r){super(n),this.code=e,this.customData=r,this.name=Dk,Object.setPrototypeOf(this,un.prototype),Error.captureStackTrace&&Error.captureStackTrace(this,Qo.prototype.create)}}class Qo{constructor(e,n,r){this.service=e,this.serviceName=n,this.errors=r}create(e,...n){const r=n[0]||{},i=`${this.service}/${e}`,s=this.errors[e],o=s?Ok(s,r):"Error",a=`${this.serviceName}: ${o} (${i}).`;return new un(i,a,r)}}function Ok(t,e){return t.replace(Lk,(n,r)=>{const i=e[r];return i!=null?String(i):`<${r}?>`})}const Lk=/\{\$([^}]+)}/g;function Mk(t){for(const e in t)if(Object.prototype.hasOwnProperty.call(t,e))return!1;return!0}function Wl(t,e){if(t===e)return!0;const n=Object.keys(t),r=Object.keys(e);for(const i of n){if(!r.includes(i))return!1;const s=t[i],o=e[i];if(jg(s)&&jg(o)){if(!Wl(s,o))return!1}else if(s!==o)return!1}for(const i of r)if(!n.includes(i))return!1;return!0}function jg(t){return t!==null&&typeof t=="object"}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function Yo(t){const e=[];for(const[n,r]of Object.entries(t))Array.isArray(r)?r.forEach(i=>{e.push(encodeURIComponent(n)+"="+encodeURIComponent(i))}):e.push(encodeURIComponent(n)+"="+encodeURIComponent(r));return e.length?"&"+e.join("&"):""}function bs(t){const e={};return t.replace(/^\?/,"").split("&").forEach(r=>{if(r){const[i,s]=r.split("=");e[decodeURIComponent(i)]=decodeURIComponent(s)}}),e}function Fs(t){const e=t.indexOf("?");if(!e)return"";const n=t.indexOf("#",e);return t.substring(e,n>0?n:void 0)}function $k(t,e){const n=new Uk(t,e);return n.subscribe.bind(n)}class Uk{constructor(e,n){this.observers=[],this.unsubscribes=[],this.observerCount=0,this.task=Promise.resolve(),this.finalized=!1,this.onNoObservers=n,this.task.then(()=>{e(this)}).catch(r=>{this.error(r)})}next(e){this.forEachObserver(n=>{n.next(e)})}error(e){this.forEachObserver(n=>{n.error(e)}),this.close(e)}complete(){this.forEachObserver(e=>{e.complete()}),this.close()}subscribe(e,n,r){let i;if(e===void 0&&n===void 0&&r===void 0)throw new Error("Missing Observer.");bk(e,["next","error","complete"])?i=e:i={next:e,error:n,complete:r},i.next===void 0&&(i.next=Jc),i.error===void 0&&(i.error=Jc),i.complete===void 0&&(i.complete=Jc);const s=this.unsubscribeOne.bind(this,this.observers.length);return this.finalized&&this.task.then(()=>{try{this.finalError?i.error(this.finalError):i.complete()}catch{}}),this.observers.push(i),s}unsubscribeOne(e){this.observers===void 0||this.observers[e]===void 0||(delete this.observers[e],this.observerCount-=1,this.observerCount===0&&this.onNoObservers!==void 0&&this.onNoObservers(this))}forEachObserver(e){if(!this.finalized)for(let n=0;n{if(this.observers!==void 0&&this.observers[e]!==void 0)try{n(this.observers[e])}catch(r){typeof console<"u"&&console.error&&console.error(r)}})}close(e){this.finalized||(this.finalized=!0,e!==void 0&&(this.finalError=e),this.task.then(()=>{this.observers=void 0,this.onNoObservers=void 0}))}}function bk(t,e){if(typeof t!="object"||t===null)return!1;for(const n of e)if(n in t&&typeof t[n]=="function")return!0;return!1}function Jc(){}/** + * @license + * Copyright 2021 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function oe(t){return t&&t._delegate?t._delegate:t}class lr{constructor(e,n,r){this.name=e,this.instanceFactory=n,this.type=r,this.multipleInstances=!1,this.serviceProps={},this.instantiationMode="LAZY",this.onInstanceCreated=null}setInstantiationMode(e){return this.instantiationMode=e,this}setMultipleInstances(e){return this.multipleInstances=e,this}setServiceProps(e){return this.serviceProps=e,this}setInstanceCreatedCallback(e){return this.onInstanceCreated=e,this}}/** + * @license + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const kr="[DEFAULT]";/** + * @license + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class Fk{constructor(e,n){this.name=e,this.container=n,this.component=null,this.instances=new Map,this.instancesDeferred=new Map,this.instancesOptions=new Map,this.onInitCallbacks=new Map}get(e){const n=this.normalizeInstanceIdentifier(e);if(!this.instancesDeferred.has(n)){const r=new Tk;if(this.instancesDeferred.set(n,r),this.isInitialized(n)||this.shouldAutoInitialize())try{const i=this.getOrInitializeService({instanceIdentifier:n});i&&r.resolve(i)}catch{}}return this.instancesDeferred.get(n).promise}getImmediate(e){var n;const r=this.normalizeInstanceIdentifier(e==null?void 0:e.identifier),i=(n=e==null?void 0:e.optional)!==null&&n!==void 0?n:!1;if(this.isInitialized(r)||this.shouldAutoInitialize())try{return this.getOrInitializeService({instanceIdentifier:r})}catch(s){if(i)return null;throw s}else{if(i)return null;throw Error(`Service ${this.name} is not available`)}}getComponent(){return this.component}setComponent(e){if(e.name!==this.name)throw Error(`Mismatching Component ${e.name} for Provider ${this.name}.`);if(this.component)throw Error(`Component for ${this.name} has already been provided`);if(this.component=e,!!this.shouldAutoInitialize()){if(Vk(e))try{this.getOrInitializeService({instanceIdentifier:kr})}catch{}for(const[n,r]of this.instancesDeferred.entries()){const i=this.normalizeInstanceIdentifier(n);try{const s=this.getOrInitializeService({instanceIdentifier:i});r.resolve(s)}catch{}}}}clearInstance(e=kr){this.instancesDeferred.delete(e),this.instancesOptions.delete(e),this.instances.delete(e)}async delete(){const e=Array.from(this.instances.values());await Promise.all([...e.filter(n=>"INTERNAL"in n).map(n=>n.INTERNAL.delete()),...e.filter(n=>"_delete"in n).map(n=>n._delete())])}isComponentSet(){return this.component!=null}isInitialized(e=kr){return this.instances.has(e)}getOptions(e=kr){return this.instancesOptions.get(e)||{}}initialize(e={}){const{options:n={}}=e,r=this.normalizeInstanceIdentifier(e.instanceIdentifier);if(this.isInitialized(r))throw Error(`${this.name}(${r}) has already been initialized`);if(!this.isComponentSet())throw Error(`Component ${this.name} has not been registered yet`);const i=this.getOrInitializeService({instanceIdentifier:r,options:n});for(const[s,o]of this.instancesDeferred.entries()){const a=this.normalizeInstanceIdentifier(s);r===a&&o.resolve(i)}return i}onInit(e,n){var r;const i=this.normalizeInstanceIdentifier(n),s=(r=this.onInitCallbacks.get(i))!==null&&r!==void 0?r:new Set;s.add(e),this.onInitCallbacks.set(i,s);const o=this.instances.get(i);return o&&e(o,i),()=>{s.delete(e)}}invokeOnInitCallbacks(e,n){const r=this.onInitCallbacks.get(n);if(r)for(const i of r)try{i(e,n)}catch{}}getOrInitializeService({instanceIdentifier:e,options:n={}}){let r=this.instances.get(e);if(!r&&this.component&&(r=this.component.instanceFactory(this.container,{instanceIdentifier:jk(e),options:n}),this.instances.set(e,r),this.instancesOptions.set(e,n),this.invokeOnInitCallbacks(r,e),this.component.onInstanceCreated))try{this.component.onInstanceCreated(this.container,e,r)}catch{}return r||null}normalizeInstanceIdentifier(e=kr){return this.component?this.component.multipleInstances?e:kr:e}shouldAutoInitialize(){return!!this.component&&this.component.instantiationMode!=="EXPLICIT"}}function jk(t){return t===kr?void 0:t}function Vk(t){return t.instantiationMode==="EAGER"}/** + * @license + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class Bk{constructor(e){this.name=e,this.providers=new Map}addComponent(e){const n=this.getProvider(e.name);if(n.isComponentSet())throw new Error(`Component ${e.name} has already been registered with ${this.name}`);n.setComponent(e)}addOrOverwriteComponent(e){this.getProvider(e.name).isComponentSet()&&this.providers.delete(e.name),this.addComponent(e)}getProvider(e){if(this.providers.has(e))return this.providers.get(e);const n=new Fk(e,this);return this.providers.set(e,n),n}getProviders(){return Array.from(this.providers.values())}}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */var Y;(function(t){t[t.DEBUG=0]="DEBUG",t[t.VERBOSE=1]="VERBOSE",t[t.INFO=2]="INFO",t[t.WARN=3]="WARN",t[t.ERROR=4]="ERROR",t[t.SILENT=5]="SILENT"})(Y||(Y={}));const zk={debug:Y.DEBUG,verbose:Y.VERBOSE,info:Y.INFO,warn:Y.WARN,error:Y.ERROR,silent:Y.SILENT},Hk=Y.INFO,qk={[Y.DEBUG]:"log",[Y.VERBOSE]:"log",[Y.INFO]:"info",[Y.WARN]:"warn",[Y.ERROR]:"error"},Wk=(t,e,...n)=>{if(ee.some(n=>t instanceof n);let Vg,Bg;function Gk(){return Vg||(Vg=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction])}function Qk(){return Bg||(Bg=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])}const Xw=new WeakMap,vd=new WeakMap,Jw=new WeakMap,Zc=new WeakMap,ip=new WeakMap;function Yk(t){const e=new Promise((n,r)=>{const i=()=>{t.removeEventListener("success",s),t.removeEventListener("error",o)},s=()=>{n(nr(t.result)),i()},o=()=>{r(t.error),i()};t.addEventListener("success",s),t.addEventListener("error",o)});return e.then(n=>{n instanceof IDBCursor&&Xw.set(n,t)}).catch(()=>{}),ip.set(e,t),e}function Xk(t){if(vd.has(t))return;const e=new Promise((n,r)=>{const i=()=>{t.removeEventListener("complete",s),t.removeEventListener("error",o),t.removeEventListener("abort",o)},s=()=>{n(),i()},o=()=>{r(t.error||new DOMException("AbortError","AbortError")),i()};t.addEventListener("complete",s),t.addEventListener("error",o),t.addEventListener("abort",o)});vd.set(t,e)}let wd={get(t,e,n){if(t instanceof IDBTransaction){if(e==="done")return vd.get(t);if(e==="objectStoreNames")return t.objectStoreNames||Jw.get(t);if(e==="store")return n.objectStoreNames[1]?void 0:n.objectStore(n.objectStoreNames[0])}return nr(t[e])},set(t,e,n){return t[e]=n,!0},has(t,e){return t instanceof IDBTransaction&&(e==="done"||e==="store")?!0:e in t}};function Jk(t){wd=t(wd)}function Zk(t){return t===IDBDatabase.prototype.transaction&&!("objectStoreNames"in IDBTransaction.prototype)?function(e,...n){const r=t.call(eh(this),e,...n);return Jw.set(r,e.sort?e.sort():[e]),nr(r)}:Qk().includes(t)?function(...e){return t.apply(eh(this),e),nr(Xw.get(this))}:function(...e){return nr(t.apply(eh(this),e))}}function eC(t){return typeof t=="function"?Zk(t):(t instanceof IDBTransaction&&Xk(t),Kk(t,Gk())?new Proxy(t,wd):t)}function nr(t){if(t instanceof IDBRequest)return Yk(t);if(Zc.has(t))return Zc.get(t);const e=eC(t);return e!==t&&(Zc.set(t,e),ip.set(e,t)),e}const eh=t=>ip.get(t);function tC(t,e,{blocked:n,upgrade:r,blocking:i,terminated:s}={}){const o=indexedDB.open(t,e),a=nr(o);return r&&o.addEventListener("upgradeneeded",l=>{r(nr(o.result),l.oldVersion,l.newVersion,nr(o.transaction),l)}),n&&o.addEventListener("blocked",l=>n(l.oldVersion,l.newVersion,l)),a.then(l=>{s&&l.addEventListener("close",()=>s()),i&&l.addEventListener("versionchange",u=>i(u.oldVersion,u.newVersion,u))}).catch(()=>{}),a}const nC=["get","getKey","getAll","getAllKeys","count"],rC=["put","add","delete","clear"],th=new Map;function zg(t,e){if(!(t instanceof IDBDatabase&&!(e in t)&&typeof e=="string"))return;if(th.get(e))return th.get(e);const n=e.replace(/FromIndex$/,""),r=e!==n,i=rC.includes(n);if(!(n in(r?IDBIndex:IDBObjectStore).prototype)||!(i||nC.includes(n)))return;const s=async function(o,...a){const l=this.transaction(o,i?"readwrite":"readonly");let u=l.store;return r&&(u=u.index(a.shift())),(await Promise.all([u[n](...a),i&&l.done]))[0]};return th.set(e,s),s}Jk(t=>({...t,get:(e,n,r)=>zg(e,n)||t.get(e,n,r),has:(e,n)=>!!zg(e,n)||t.has(e,n)}));/** + * @license + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class iC{constructor(e){this.container=e}getPlatformInfoString(){return this.container.getProviders().map(n=>{if(sC(n)){const r=n.getImmediate();return`${r.library}/${r.version}`}else return null}).filter(n=>n).join(" ")}}function sC(t){const e=t.getComponent();return(e==null?void 0:e.type)==="VERSION"}const _d="@firebase/app",Hg="0.9.11";/** + * @license + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const zr=new rp("@firebase/app"),oC="@firebase/app-compat",aC="@firebase/analytics-compat",lC="@firebase/analytics",uC="@firebase/app-check-compat",cC="@firebase/app-check",hC="@firebase/auth",dC="@firebase/auth-compat",fC="@firebase/database",pC="@firebase/database-compat",mC="@firebase/functions",gC="@firebase/functions-compat",yC="@firebase/installations",vC="@firebase/installations-compat",wC="@firebase/messaging",_C="@firebase/messaging-compat",EC="@firebase/performance",SC="@firebase/performance-compat",IC="@firebase/remote-config",TC="@firebase/remote-config-compat",kC="@firebase/storage",CC="@firebase/storage-compat",NC="@firebase/firestore",RC="@firebase/firestore-compat",xC="firebase",AC="9.22.1";/** + * @license + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const Ed="[DEFAULT]",PC={[_d]:"fire-core",[oC]:"fire-core-compat",[lC]:"fire-analytics",[aC]:"fire-analytics-compat",[cC]:"fire-app-check",[uC]:"fire-app-check-compat",[hC]:"fire-auth",[dC]:"fire-auth-compat",[fC]:"fire-rtdb",[pC]:"fire-rtdb-compat",[mC]:"fire-fn",[gC]:"fire-fn-compat",[yC]:"fire-iid",[vC]:"fire-iid-compat",[wC]:"fire-fcm",[_C]:"fire-fcm-compat",[EC]:"fire-perf",[SC]:"fire-perf-compat",[IC]:"fire-rc",[TC]:"fire-rc-compat",[kC]:"fire-gcs",[CC]:"fire-gcs-compat",[NC]:"fire-fst",[RC]:"fire-fst-compat","fire-js":"fire-js",[xC]:"fire-js-all"};/** + * @license + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const Kl=new Map,Sd=new Map;function DC(t,e){try{t.container.addComponent(e)}catch(n){zr.debug(`Component ${e.name} failed to register with FirebaseApp ${t.name}`,n)}}function Hr(t){const e=t.name;if(Sd.has(e))return zr.debug(`There were multiple attempts to register component ${e}.`),!1;Sd.set(e,t);for(const n of Kl.values())DC(n,t);return!0}function Uu(t,e){const n=t.container.getProvider("heartbeat").getImmediate({optional:!0});return n&&n.triggerHeartbeat(),t.container.getProvider(e)}/** + * @license + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const OC={["no-app"]:"No Firebase App '{$appName}' has been created - call initializeApp() first",["bad-app-name"]:"Illegal App name: '{$appName}",["duplicate-app"]:"Firebase App named '{$appName}' already exists with different options or config",["app-deleted"]:"Firebase App named '{$appName}' already deleted",["no-options"]:"Need to provide options, when not being deployed to hosting via source.",["invalid-app-argument"]:"firebase.{$appName}() takes either no argument or a Firebase App instance.",["invalid-log-argument"]:"First argument to `onLog` must be null or a function.",["idb-open"]:"Error thrown when opening IndexedDB. Original error: {$originalErrorMessage}.",["idb-get"]:"Error thrown when reading from IndexedDB. Original error: {$originalErrorMessage}.",["idb-set"]:"Error thrown when writing to IndexedDB. Original error: {$originalErrorMessage}.",["idb-delete"]:"Error thrown when deleting from IndexedDB. Original error: {$originalErrorMessage}."},rr=new Qo("app","Firebase",OC);/** + * @license + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class LC{constructor(e,n,r){this._isDeleted=!1,this._options=Object.assign({},e),this._config=Object.assign({},n),this._name=n.name,this._automaticDataCollectionEnabled=n.automaticDataCollectionEnabled,this._container=r,this.container.addComponent(new lr("app",()=>this,"PUBLIC"))}get automaticDataCollectionEnabled(){return this.checkDestroyed(),this._automaticDataCollectionEnabled}set automaticDataCollectionEnabled(e){this.checkDestroyed(),this._automaticDataCollectionEnabled=e}get name(){return this.checkDestroyed(),this._name}get options(){return this.checkDestroyed(),this._options}get config(){return this.checkDestroyed(),this._config}get container(){return this._container}get isDeleted(){return this._isDeleted}set isDeleted(e){this._isDeleted=e}checkDestroyed(){if(this.isDeleted)throw rr.create("app-deleted",{appName:this._name})}}/** + * @license + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const Zr=AC;function Zw(t,e={}){let n=t;typeof e!="object"&&(e={name:e});const r=Object.assign({name:Ed,automaticDataCollectionEnabled:!1},e),i=r.name;if(typeof i!="string"||!i)throw rr.create("bad-app-name",{appName:String(i)});if(n||(n=Gw()),!n)throw rr.create("no-options");const s=Kl.get(i);if(s){if(Wl(n,s.options)&&Wl(r,s.config))return s;throw rr.create("duplicate-app",{appName:i})}const o=new Bk(i);for(const l of Sd.values())o.addComponent(l);const a=new LC(n,r,o);return Kl.set(i,a),a}function sp(t=Ed){const e=Kl.get(t);if(!e&&t===Ed&&Gw())return Zw();if(!e)throw rr.create("no-app",{appName:t});return e}function rn(t,e,n){var r;let i=(r=PC[t])!==null&&r!==void 0?r:t;n&&(i+=`-${n}`);const s=i.match(/\s|\//),o=e.match(/\s|\//);if(s||o){const a=[`Unable to register library "${i}" with version "${e}":`];s&&a.push(`library name "${i}" contains illegal characters (whitespace or "/")`),s&&o&&a.push("and"),o&&a.push(`version name "${e}" contains illegal characters (whitespace or "/")`),zr.warn(a.join(" "));return}Hr(new lr(`${i}-version`,()=>({library:i,version:e}),"VERSION"))}/** + * @license + * Copyright 2021 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const MC="firebase-heartbeat-database",$C=1,ko="firebase-heartbeat-store";let nh=null;function e1(){return nh||(nh=tC(MC,$C,{upgrade:(t,e)=>{switch(e){case 0:t.createObjectStore(ko)}}}).catch(t=>{throw rr.create("idb-open",{originalErrorMessage:t.message})})),nh}async function UC(t){try{return await(await e1()).transaction(ko).objectStore(ko).get(t1(t))}catch(e){if(e instanceof un)zr.warn(e.message);else{const n=rr.create("idb-get",{originalErrorMessage:e==null?void 0:e.message});zr.warn(n.message)}}}async function qg(t,e){try{const r=(await e1()).transaction(ko,"readwrite");await r.objectStore(ko).put(e,t1(t)),await r.done}catch(n){if(n instanceof un)zr.warn(n.message);else{const r=rr.create("idb-set",{originalErrorMessage:n==null?void 0:n.message});zr.warn(r.message)}}}function t1(t){return`${t.name}!${t.options.appId}`}/** + * @license + * Copyright 2021 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const bC=1024,FC=30*24*60*60*1e3;class jC{constructor(e){this.container=e,this._heartbeatsCache=null;const n=this.container.getProvider("app").getImmediate();this._storage=new BC(n),this._heartbeatsCachePromise=this._storage.read().then(r=>(this._heartbeatsCache=r,r))}async triggerHeartbeat(){const n=this.container.getProvider("platform-logger").getImmediate().getPlatformInfoString(),r=Wg();if(this._heartbeatsCache===null&&(this._heartbeatsCache=await this._heartbeatsCachePromise),!(this._heartbeatsCache.lastSentHeartbeatDate===r||this._heartbeatsCache.heartbeats.some(i=>i.date===r)))return this._heartbeatsCache.heartbeats.push({date:r,agent:n}),this._heartbeatsCache.heartbeats=this._heartbeatsCache.heartbeats.filter(i=>{const s=new Date(i.date).valueOf();return Date.now()-s<=FC}),this._storage.overwrite(this._heartbeatsCache)}async getHeartbeatsHeader(){if(this._heartbeatsCache===null&&await this._heartbeatsCachePromise,this._heartbeatsCache===null||this._heartbeatsCache.heartbeats.length===0)return"";const e=Wg(),{heartbeatsToSend:n,unsentEntries:r}=VC(this._heartbeatsCache.heartbeats),i=ql(JSON.stringify({version:2,heartbeats:n}));return this._heartbeatsCache.lastSentHeartbeatDate=e,r.length>0?(this._heartbeatsCache.heartbeats=r,await this._storage.overwrite(this._heartbeatsCache)):(this._heartbeatsCache.heartbeats=[],this._storage.overwrite(this._heartbeatsCache)),i}}function Wg(){return new Date().toISOString().substring(0,10)}function VC(t,e=bC){const n=[];let r=t.slice();for(const i of t){const s=n.find(o=>o.agent===i.agent);if(s){if(s.dates.push(i.date),Kg(n)>e){s.dates.pop();break}}else if(n.push({agent:i.agent,dates:[i.date]}),Kg(n)>e){n.pop();break}r=r.slice(1)}return{heartbeatsToSend:n,unsentEntries:r}}class BC{constructor(e){this.app=e,this._canUseIndexedDBPromise=this.runIndexedDBEnvironmentCheck()}async runIndexedDBEnvironmentCheck(){return Ak()?Pk().then(()=>!0).catch(()=>!1):!1}async read(){return await this._canUseIndexedDBPromise?await UC(this.app)||{heartbeats:[]}:{heartbeats:[]}}async overwrite(e){var n;if(await this._canUseIndexedDBPromise){const i=await this.read();return qg(this.app,{lastSentHeartbeatDate:(n=e.lastSentHeartbeatDate)!==null&&n!==void 0?n:i.lastSentHeartbeatDate,heartbeats:e.heartbeats})}else return}async add(e){var n;if(await this._canUseIndexedDBPromise){const i=await this.read();return qg(this.app,{lastSentHeartbeatDate:(n=e.lastSentHeartbeatDate)!==null&&n!==void 0?n:i.lastSentHeartbeatDate,heartbeats:[...i.heartbeats,...e.heartbeats]})}else return}}function Kg(t){return ql(JSON.stringify({version:2,heartbeats:t})).length}/** + * @license + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function zC(t){Hr(new lr("platform-logger",e=>new iC(e),"PRIVATE")),Hr(new lr("heartbeat",e=>new jC(e),"PRIVATE")),rn(_d,Hg,t),rn(_d,Hg,"esm2017"),rn("fire-js","")}zC("");var HC="firebase",qC="9.22.1";/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */rn(HC,qC,"app");function op(t,e){var n={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(n[r]=t[r]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,r=Object.getOwnPropertySymbols(t);i"u")return null;const t=navigator;return t.languages&&t.languages[0]||t.language||null}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class Xo{constructor(e,n){this.shortDelay=e,this.longDelay=n,kn(n>e,"Short delay should be less than long delay!"),this.isMobile=kk()||Rk()}get(){return YC()?this.isMobile?this.longDelay:this.shortDelay:Math.min(5e3,this.shortDelay)}}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function lp(t,e){kn(t.emulator,"Emulator should always be set here");const{url:n}=t.emulator;return e?`${n}${e.startsWith("/")?e.slice(1):e}`:n}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class i1{static initialize(e,n,r){this.fetchImpl=e,n&&(this.headersImpl=n),r&&(this.responseImpl=r)}static fetch(){if(this.fetchImpl)return this.fetchImpl;if(typeof self<"u"&&"fetch"in self)return self.fetch;mn("Could not find fetch implementation, make sure you call FetchProvider.initialize() with an appropriate polyfill")}static headers(){if(this.headersImpl)return this.headersImpl;if(typeof self<"u"&&"Headers"in self)return self.Headers;mn("Could not find Headers implementation, make sure you call FetchProvider.initialize() with an appropriate polyfill")}static response(){if(this.responseImpl)return this.responseImpl;if(typeof self<"u"&&"Response"in self)return self.Response;mn("Could not find Response implementation, make sure you call FetchProvider.initialize() with an appropriate polyfill")}}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const JC={CREDENTIAL_MISMATCH:"custom-token-mismatch",MISSING_CUSTOM_TOKEN:"internal-error",INVALID_IDENTIFIER:"invalid-email",MISSING_CONTINUE_URI:"internal-error",INVALID_PASSWORD:"wrong-password",MISSING_PASSWORD:"missing-password",EMAIL_EXISTS:"email-already-in-use",PASSWORD_LOGIN_DISABLED:"operation-not-allowed",INVALID_IDP_RESPONSE:"invalid-credential",INVALID_PENDING_TOKEN:"invalid-credential",FEDERATED_USER_ID_ALREADY_LINKED:"credential-already-in-use",MISSING_REQ_TYPE:"internal-error",EMAIL_NOT_FOUND:"user-not-found",RESET_PASSWORD_EXCEED_LIMIT:"too-many-requests",EXPIRED_OOB_CODE:"expired-action-code",INVALID_OOB_CODE:"invalid-action-code",MISSING_OOB_CODE:"internal-error",CREDENTIAL_TOO_OLD_LOGIN_AGAIN:"requires-recent-login",INVALID_ID_TOKEN:"invalid-user-token",TOKEN_EXPIRED:"user-token-expired",USER_NOT_FOUND:"user-token-expired",TOO_MANY_ATTEMPTS_TRY_LATER:"too-many-requests",INVALID_CODE:"invalid-verification-code",INVALID_SESSION_INFO:"invalid-verification-id",INVALID_TEMPORARY_PROOF:"invalid-credential",MISSING_SESSION_INFO:"missing-verification-id",SESSION_EXPIRED:"code-expired",MISSING_ANDROID_PACKAGE_NAME:"missing-android-pkg-name",UNAUTHORIZED_DOMAIN:"unauthorized-continue-uri",INVALID_OAUTH_CLIENT_ID:"invalid-oauth-client-id",ADMIN_ONLY_OPERATION:"admin-restricted-operation",INVALID_MFA_PENDING_CREDENTIAL:"invalid-multi-factor-session",MFA_ENROLLMENT_NOT_FOUND:"multi-factor-info-not-found",MISSING_MFA_ENROLLMENT_ID:"missing-multi-factor-info",MISSING_MFA_PENDING_CREDENTIAL:"missing-multi-factor-session",SECOND_FACTOR_EXISTS:"second-factor-already-in-use",SECOND_FACTOR_LIMIT_EXCEEDED:"maximum-second-factor-count-exceeded",BLOCKING_FUNCTION_ERROR_RESPONSE:"internal-error",RECAPTCHA_NOT_ENABLED:"recaptcha-not-enabled",MISSING_RECAPTCHA_TOKEN:"missing-recaptcha-token",INVALID_RECAPTCHA_TOKEN:"invalid-recaptcha-token",INVALID_RECAPTCHA_ACTION:"invalid-recaptcha-action",MISSING_CLIENT_TYPE:"missing-client-type",MISSING_RECAPTCHA_VERSION:"missing-recaptcha-version",INVALID_RECAPTCHA_VERSION:"invalid-recaptcha-version",INVALID_REQ_TYPE:"invalid-req-type"};/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const ZC=new Xo(3e4,6e4);function ei(t,e){return t.tenantId&&!e.tenantId?Object.assign(Object.assign({},e),{tenantId:t.tenantId}):e}async function mr(t,e,n,r,i={}){return s1(t,i,async()=>{let s={},o={};r&&(e==="GET"?o=r:s={body:JSON.stringify(r)});const a=Yo(Object.assign({key:t.config.apiKey},o)).slice(1),l=await t._getAdditionalHeaders();return l["Content-Type"]="application/json",t.languageCode&&(l["X-Firebase-Locale"]=t.languageCode),i1.fetch()(o1(t,t.config.apiHost,n,a),Object.assign({method:e,headers:l,referrerPolicy:"no-referrer"},s))})}async function s1(t,e,n){t._canInitEmulator=!1;const r=Object.assign(Object.assign({},JC),e);try{const i=new eN(t),s=await Promise.race([n(),i.promise]);i.clearNetworkTimeout();const o=await s.json();if("needConfirmation"in o)throw Va(t,"account-exists-with-different-credential",o);if(s.ok&&!("errorMessage"in o))return o;{const a=s.ok?o.errorMessage:o.error.message,[l,u]=a.split(" : ");if(l==="FEDERATED_USER_ID_ALREADY_LINKED")throw Va(t,"credential-already-in-use",o);if(l==="EMAIL_EXISTS")throw Va(t,"email-already-in-use",o);if(l==="USER_DISABLED")throw Va(t,"user-disabled",o);const c=r[l]||l.toLowerCase().replace(/[_\s]+/g,"-");if(u)throw GC(t,c,u);Ht(t,c)}}catch(i){if(i instanceof un)throw i;Ht(t,"network-request-failed",{message:String(i)})}}async function Jo(t,e,n,r,i={}){const s=await mr(t,e,n,r,i);return"mfaPendingCredential"in s&&Ht(t,"multi-factor-auth-required",{_serverResponse:s}),s}function o1(t,e,n,r){const i=`${e}${n}?${r}`;return t.config.emulator?lp(t.config,i):`${t.config.apiScheme}://${i}`}class eN{constructor(e){this.auth=e,this.timer=null,this.promise=new Promise((n,r)=>{this.timer=setTimeout(()=>r(sn(this.auth,"network-request-failed")),ZC.get())})}clearNetworkTimeout(){clearTimeout(this.timer)}}function Va(t,e,n){const r={appName:t.name};n.email&&(r.email=n.email),n.phoneNumber&&(r.phoneNumber=n.phoneNumber);const i=sn(t,e,r);return i.customData._tokenResponse=n,i}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */async function tN(t,e){return mr(t,"POST","/v1/accounts:delete",e)}async function nN(t,e){return mr(t,"POST","/v1/accounts:lookup",e)}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function eo(t){if(t)try{const e=new Date(Number(t));if(!isNaN(e.getTime()))return e.toUTCString()}catch{}}async function rN(t,e=!1){const n=oe(t),r=await n.getIdToken(e),i=up(r);U(i&&i.exp&&i.auth_time&&i.iat,n.auth,"internal-error");const s=typeof i.firebase=="object"?i.firebase:void 0,o=s==null?void 0:s.sign_in_provider;return{claims:i,token:r,authTime:eo(rh(i.auth_time)),issuedAtTime:eo(rh(i.iat)),expirationTime:eo(rh(i.exp)),signInProvider:o||null,signInSecondFactor:(s==null?void 0:s.sign_in_second_factor)||null}}function rh(t){return Number(t)*1e3}function up(t){const[e,n,r]=t.split(".");if(e===void 0||n===void 0||r===void 0)return fl("JWT malformed, contained fewer than 3 sections"),null;try{const i=qw(n);return i?JSON.parse(i):(fl("Failed to decode base64 JWT payload"),null)}catch(i){return fl("Caught error parsing JWT payload as JSON",i==null?void 0:i.toString()),null}}function iN(t){const e=up(t);return U(e,"internal-error"),U(typeof e.exp<"u","internal-error"),U(typeof e.iat<"u","internal-error"),Number(e.exp)-Number(e.iat)}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */async function Yi(t,e,n=!1){if(n)return e;try{return await e}catch(r){throw r instanceof un&&sN(r)&&t.auth.currentUser===t&&await t.auth.signOut(),r}}function sN({code:t}){return t==="auth/user-disabled"||t==="auth/user-token-expired"}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class oN{constructor(e){this.user=e,this.isRunning=!1,this.timerId=null,this.errorBackoff=3e4}_start(){this.isRunning||(this.isRunning=!0,this.schedule())}_stop(){this.isRunning&&(this.isRunning=!1,this.timerId!==null&&clearTimeout(this.timerId))}getInterval(e){var n;if(e){const r=this.errorBackoff;return this.errorBackoff=Math.min(this.errorBackoff*2,96e4),r}else{this.errorBackoff=3e4;const i=((n=this.user.stsTokenManager.expirationTime)!==null&&n!==void 0?n:0)-Date.now()-3e5;return Math.max(0,i)}}schedule(e=!1){if(!this.isRunning)return;const n=this.getInterval(e);this.timerId=setTimeout(async()=>{await this.iteration()},n)}async iteration(){try{await this.user.getIdToken(!0)}catch(e){(e==null?void 0:e.code)==="auth/network-request-failed"&&this.schedule(!0);return}this.schedule()}}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class a1{constructor(e,n){this.createdAt=e,this.lastLoginAt=n,this._initializeTime()}_initializeTime(){this.lastSignInTime=eo(this.lastLoginAt),this.creationTime=eo(this.createdAt)}_copy(e){this.createdAt=e.createdAt,this.lastLoginAt=e.lastLoginAt,this._initializeTime()}toJSON(){return{createdAt:this.createdAt,lastLoginAt:this.lastLoginAt}}}/** + * @license + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */async function Ql(t){var e;const n=t.auth,r=await t.getIdToken(),i=await Yi(t,nN(n,{idToken:r}));U(i==null?void 0:i.users.length,n,"internal-error");const s=i.users[0];t._notifyReloadListener(s);const o=!((e=s.providerUserInfo)===null||e===void 0)&&e.length?uN(s.providerUserInfo):[],a=lN(t.providerData,o),l=t.isAnonymous,u=!(t.email&&s.passwordHash)&&!(a!=null&&a.length),c=l?u:!1,h={uid:s.localId,displayName:s.displayName||null,photoURL:s.photoUrl||null,email:s.email||null,emailVerified:s.emailVerified||!1,phoneNumber:s.phoneNumber||null,tenantId:s.tenantId||null,providerData:a,metadata:new a1(s.createdAt,s.lastLoginAt),isAnonymous:c};Object.assign(t,h)}async function aN(t){const e=oe(t);await Ql(e),await e.auth._persistUserIfCurrent(e),e.auth._notifyListenersIfCurrent(e)}function lN(t,e){return[...t.filter(r=>!e.some(i=>i.providerId===r.providerId)),...e]}function uN(t){return t.map(e=>{var{providerId:n}=e,r=op(e,["providerId"]);return{providerId:n,uid:r.rawId||"",displayName:r.displayName||null,email:r.email||null,phoneNumber:r.phoneNumber||null,photoURL:r.photoUrl||null}})}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */async function cN(t,e){const n=await s1(t,{},async()=>{const r=Yo({grant_type:"refresh_token",refresh_token:e}).slice(1),{tokenApiHost:i,apiKey:s}=t.config,o=o1(t,i,"/v1/token",`key=${s}`),a=await t._getAdditionalHeaders();return a["Content-Type"]="application/x-www-form-urlencoded",i1.fetch()(o,{method:"POST",headers:a,body:r})});return{accessToken:n.access_token,expiresIn:n.expires_in,refreshToken:n.refresh_token}}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class Co{constructor(){this.refreshToken=null,this.accessToken=null,this.expirationTime=null}get isExpired(){return!this.expirationTime||Date.now()>this.expirationTime-3e4}updateFromServerResponse(e){U(e.idToken,"internal-error"),U(typeof e.idToken<"u","internal-error"),U(typeof e.refreshToken<"u","internal-error");const n="expiresIn"in e&&typeof e.expiresIn<"u"?Number(e.expiresIn):iN(e.idToken);this.updateTokensAndExpiration(e.idToken,e.refreshToken,n)}async getToken(e,n=!1){return U(!this.accessToken||this.refreshToken,e,"user-token-expired"),!n&&this.accessToken&&!this.isExpired?this.accessToken:this.refreshToken?(await this.refresh(e,this.refreshToken),this.accessToken):null}clearRefreshToken(){this.refreshToken=null}async refresh(e,n){const{accessToken:r,refreshToken:i,expiresIn:s}=await cN(e,n);this.updateTokensAndExpiration(r,i,Number(s))}updateTokensAndExpiration(e,n,r){this.refreshToken=n||null,this.accessToken=e||null,this.expirationTime=Date.now()+r*1e3}static fromJSON(e,n){const{refreshToken:r,accessToken:i,expirationTime:s}=n,o=new Co;return r&&(U(typeof r=="string","internal-error",{appName:e}),o.refreshToken=r),i&&(U(typeof i=="string","internal-error",{appName:e}),o.accessToken=i),s&&(U(typeof s=="number","internal-error",{appName:e}),o.expirationTime=s),o}toJSON(){return{refreshToken:this.refreshToken,accessToken:this.accessToken,expirationTime:this.expirationTime}}_assign(e){this.accessToken=e.accessToken,this.refreshToken=e.refreshToken,this.expirationTime=e.expirationTime}_clone(){return Object.assign(new Co,this.toJSON())}_performRefresh(){return mn("not implemented")}}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function Mn(t,e){U(typeof t=="string"||typeof t>"u","internal-error",{appName:e})}class Mr{constructor(e){var{uid:n,auth:r,stsTokenManager:i}=e,s=op(e,["uid","auth","stsTokenManager"]);this.providerId="firebase",this.proactiveRefresh=new oN(this),this.reloadUserInfo=null,this.reloadListener=null,this.uid=n,this.auth=r,this.stsTokenManager=i,this.accessToken=i.accessToken,this.displayName=s.displayName||null,this.email=s.email||null,this.emailVerified=s.emailVerified||!1,this.phoneNumber=s.phoneNumber||null,this.photoURL=s.photoURL||null,this.isAnonymous=s.isAnonymous||!1,this.tenantId=s.tenantId||null,this.providerData=s.providerData?[...s.providerData]:[],this.metadata=new a1(s.createdAt||void 0,s.lastLoginAt||void 0)}async getIdToken(e){const n=await Yi(this,this.stsTokenManager.getToken(this.auth,e));return U(n,this.auth,"internal-error"),this.accessToken!==n&&(this.accessToken=n,await this.auth._persistUserIfCurrent(this),this.auth._notifyListenersIfCurrent(this)),n}getIdTokenResult(e){return rN(this,e)}reload(){return aN(this)}_assign(e){this!==e&&(U(this.uid===e.uid,this.auth,"internal-error"),this.displayName=e.displayName,this.photoURL=e.photoURL,this.email=e.email,this.emailVerified=e.emailVerified,this.phoneNumber=e.phoneNumber,this.isAnonymous=e.isAnonymous,this.tenantId=e.tenantId,this.providerData=e.providerData.map(n=>Object.assign({},n)),this.metadata._copy(e.metadata),this.stsTokenManager._assign(e.stsTokenManager))}_clone(e){const n=new Mr(Object.assign(Object.assign({},this),{auth:e,stsTokenManager:this.stsTokenManager._clone()}));return n.metadata._copy(this.metadata),n}_onReload(e){U(!this.reloadListener,this.auth,"internal-error"),this.reloadListener=e,this.reloadUserInfo&&(this._notifyReloadListener(this.reloadUserInfo),this.reloadUserInfo=null)}_notifyReloadListener(e){this.reloadListener?this.reloadListener(e):this.reloadUserInfo=e}_startProactiveRefresh(){this.proactiveRefresh._start()}_stopProactiveRefresh(){this.proactiveRefresh._stop()}async _updateTokensIfNecessary(e,n=!1){let r=!1;e.idToken&&e.idToken!==this.stsTokenManager.accessToken&&(this.stsTokenManager.updateFromServerResponse(e),r=!0),n&&await Ql(this),await this.auth._persistUserIfCurrent(this),r&&this.auth._notifyListenersIfCurrent(this)}async delete(){const e=await this.getIdToken();return await Yi(this,tN(this.auth,{idToken:e})),this.stsTokenManager.clearRefreshToken(),this.auth.signOut()}toJSON(){return Object.assign(Object.assign({uid:this.uid,email:this.email||void 0,emailVerified:this.emailVerified,displayName:this.displayName||void 0,isAnonymous:this.isAnonymous,photoURL:this.photoURL||void 0,phoneNumber:this.phoneNumber||void 0,tenantId:this.tenantId||void 0,providerData:this.providerData.map(e=>Object.assign({},e)),stsTokenManager:this.stsTokenManager.toJSON(),_redirectEventId:this._redirectEventId},this.metadata.toJSON()),{apiKey:this.auth.config.apiKey,appName:this.auth.name})}get refreshToken(){return this.stsTokenManager.refreshToken||""}static _fromJSON(e,n){var r,i,s,o,a,l,u,c;const h=(r=n.displayName)!==null&&r!==void 0?r:void 0,d=(i=n.email)!==null&&i!==void 0?i:void 0,p=(s=n.phoneNumber)!==null&&s!==void 0?s:void 0,y=(o=n.photoURL)!==null&&o!==void 0?o:void 0,w=(a=n.tenantId)!==null&&a!==void 0?a:void 0,S=(l=n._redirectEventId)!==null&&l!==void 0?l:void 0,m=(u=n.createdAt)!==null&&u!==void 0?u:void 0,f=(c=n.lastLoginAt)!==null&&c!==void 0?c:void 0,{uid:g,emailVerified:_,isAnonymous:k,providerData:R,stsTokenManager:x}=n;U(g&&x,e,"internal-error");const I=Co.fromJSON(this.name,x);U(typeof g=="string",e,"internal-error"),Mn(h,e.name),Mn(d,e.name),U(typeof _=="boolean",e,"internal-error"),U(typeof k=="boolean",e,"internal-error"),Mn(p,e.name),Mn(y,e.name),Mn(w,e.name),Mn(S,e.name),Mn(m,e.name),Mn(f,e.name);const L=new Mr({uid:g,auth:e,email:d,emailVerified:_,displayName:h,isAnonymous:k,photoURL:y,phoneNumber:p,tenantId:w,stsTokenManager:I,createdAt:m,lastLoginAt:f});return R&&Array.isArray(R)&&(L.providerData=R.map(b=>Object.assign({},b))),S&&(L._redirectEventId=S),L}static async _fromIdTokenResponse(e,n,r=!1){const i=new Co;i.updateFromServerResponse(n);const s=new Mr({uid:n.localId,auth:e,stsTokenManager:i,isAnonymous:r});return await Ql(s),s}}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const Qg=new Map;function gn(t){kn(t instanceof Function,"Expected a class definition");let e=Qg.get(t);return e?(kn(e instanceof t,"Instance stored in cache mismatched with class"),e):(e=new t,Qg.set(t,e),e)}/** + * @license + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class l1{constructor(){this.type="NONE",this.storage={}}async _isAvailable(){return!0}async _set(e,n){this.storage[e]=n}async _get(e){const n=this.storage[e];return n===void 0?null:n}async _remove(e){delete this.storage[e]}_addListener(e,n){}_removeListener(e,n){}}l1.type="NONE";const Yg=l1;/** + * @license + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function pl(t,e,n){return`firebase:${t}:${e}:${n}`}class Ui{constructor(e,n,r){this.persistence=e,this.auth=n,this.userKey=r;const{config:i,name:s}=this.auth;this.fullUserKey=pl(this.userKey,i.apiKey,s),this.fullPersistenceKey=pl("persistence",i.apiKey,s),this.boundEventHandler=n._onStorageEvent.bind(n),this.persistence._addListener(this.fullUserKey,this.boundEventHandler)}setCurrentUser(e){return this.persistence._set(this.fullUserKey,e.toJSON())}async getCurrentUser(){const e=await this.persistence._get(this.fullUserKey);return e?Mr._fromJSON(this.auth,e):null}removeCurrentUser(){return this.persistence._remove(this.fullUserKey)}savePersistenceForRedirect(){return this.persistence._set(this.fullPersistenceKey,this.persistence.type)}async setPersistence(e){if(this.persistence===e)return;const n=await this.getCurrentUser();if(await this.removeCurrentUser(),this.persistence=e,n)return this.setCurrentUser(n)}delete(){this.persistence._removeListener(this.fullUserKey,this.boundEventHandler)}static async create(e,n,r="authUser"){if(!n.length)return new Ui(gn(Yg),e,r);const i=(await Promise.all(n.map(async u=>{if(await u._isAvailable())return u}))).filter(u=>u);let s=i[0]||gn(Yg);const o=pl(r,e.config.apiKey,e.name);let a=null;for(const u of n)try{const c=await u._get(o);if(c){const h=Mr._fromJSON(e,c);u!==s&&(a=h),s=u;break}}catch{}const l=i.filter(u=>u._shouldAllowMigration);return!s._shouldAllowMigration||!l.length?new Ui(s,e,r):(s=l[0],a&&await s._set(o,a.toJSON()),await Promise.all(n.map(async u=>{if(u!==s)try{await u._remove(o)}catch{}})),new Ui(s,e,r))}}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function Xg(t){const e=t.toLowerCase();if(e.includes("opera/")||e.includes("opr/")||e.includes("opios/"))return"Opera";if(h1(e))return"IEMobile";if(e.includes("msie")||e.includes("trident/"))return"IE";if(e.includes("edge/"))return"Edge";if(u1(e))return"Firefox";if(e.includes("silk/"))return"Silk";if(f1(e))return"Blackberry";if(p1(e))return"Webos";if(cp(e))return"Safari";if((e.includes("chrome/")||c1(e))&&!e.includes("edge/"))return"Chrome";if(d1(e))return"Android";{const n=/([a-zA-Z\d\.]+)\/[a-zA-Z\d\.]*$/,r=t.match(n);if((r==null?void 0:r.length)===2)return r[1]}return"Other"}function u1(t=et()){return/firefox\//i.test(t)}function cp(t=et()){const e=t.toLowerCase();return e.includes("safari/")&&!e.includes("chrome/")&&!e.includes("crios/")&&!e.includes("android")}function c1(t=et()){return/crios\//i.test(t)}function h1(t=et()){return/iemobile/i.test(t)}function d1(t=et()){return/android/i.test(t)}function f1(t=et()){return/blackberry/i.test(t)}function p1(t=et()){return/webos/i.test(t)}function bu(t=et()){return/iphone|ipad|ipod/i.test(t)||/macintosh/i.test(t)&&/mobile/i.test(t)}function hN(t=et()){var e;return bu(t)&&!!(!((e=window.navigator)===null||e===void 0)&&e.standalone)}function dN(){return xk()&&document.documentMode===10}function m1(t=et()){return bu(t)||d1(t)||p1(t)||f1(t)||/windows phone/i.test(t)||h1(t)}function fN(){try{return!!(window&&window!==window.top)}catch{return!1}}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function g1(t,e=[]){let n;switch(t){case"Browser":n=Xg(et());break;case"Worker":n=`${Xg(et())}-${t}`;break;default:n=t}const r=e.length?e.join(","):"FirebaseCore-web";return`${n}/JsCore/${Zr}/${r}`}async function y1(t,e){return mr(t,"GET","/v2/recaptchaConfig",ei(t,e))}function Jg(t){return t!==void 0&&t.enterprise!==void 0}class v1{constructor(e){if(this.siteKey="",this.emailPasswordEnabled=!1,e.recaptchaKey===void 0)throw new Error("recaptchaKey undefined");this.siteKey=e.recaptchaKey.split("/")[3],this.emailPasswordEnabled=e.recaptchaEnforcementState.some(n=>n.provider==="EMAIL_PASSWORD_PROVIDER"&&n.enforcementState!=="OFF")}}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function pN(){var t,e;return(e=(t=document.getElementsByTagName("head"))===null||t===void 0?void 0:t[0])!==null&&e!==void 0?e:document}function w1(t){return new Promise((e,n)=>{const r=document.createElement("script");r.setAttribute("src",t),r.onload=e,r.onerror=i=>{const s=sn("internal-error");s.customData=i,n(s)},r.type="text/javascript",r.charset="UTF-8",pN().appendChild(r)})}function mN(t){return`__${t}${Math.floor(Math.random()*1e6)}`}const gN="https://www.google.com/recaptcha/enterprise.js?render=",yN="recaptcha-enterprise",vN="NO_RECAPTCHA";class _1{constructor(e){this.type=yN,this.auth=cs(e)}async verify(e="verify",n=!1){async function r(s){if(!n){if(s.tenantId==null&&s._agentRecaptchaConfig!=null)return s._agentRecaptchaConfig.siteKey;if(s.tenantId!=null&&s._tenantRecaptchaConfigs[s.tenantId]!==void 0)return s._tenantRecaptchaConfigs[s.tenantId].siteKey}return new Promise(async(o,a)=>{y1(s,{clientType:"CLIENT_TYPE_WEB",version:"RECAPTCHA_ENTERPRISE"}).then(l=>{if(l.recaptchaKey===void 0)a(new Error("recaptcha Enterprise site key undefined"));else{const u=new v1(l);return s.tenantId==null?s._agentRecaptchaConfig=u:s._tenantRecaptchaConfigs[s.tenantId]=u,o(u.siteKey)}}).catch(l=>{a(l)})})}function i(s,o,a){const l=window.grecaptcha;Jg(l)?l.enterprise.ready(()=>{l.enterprise.execute(s,{action:e}).then(u=>{o(u)}).catch(()=>{o(vN)})}):a(Error("No reCAPTCHA enterprise script loaded."))}return new Promise((s,o)=>{r(this.auth).then(a=>{if(!n&&Jg(window.grecaptcha))i(a,s,o);else{if(typeof window>"u"){o(new Error("RecaptchaVerifier is only supported in browser"));return}w1(gN+a).then(()=>{i(a,s,o)}).catch(l=>{o(l)})}}).catch(a=>{o(a)})})}}async function Yl(t,e,n,r=!1){const i=new _1(t);let s;try{s=await i.verify(n)}catch{s=await i.verify(n,!0)}const o=Object.assign({},e);return r?Object.assign(o,{captchaResp:s}):Object.assign(o,{captchaResponse:s}),Object.assign(o,{clientType:"CLIENT_TYPE_WEB"}),Object.assign(o,{recaptchaVersion:"RECAPTCHA_ENTERPRISE"}),o}/** + * @license + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class wN{constructor(e){this.auth=e,this.queue=[]}pushCallback(e,n){const r=s=>new Promise((o,a)=>{try{const l=e(s);o(l)}catch(l){a(l)}});r.onAbort=n,this.queue.push(r);const i=this.queue.length-1;return()=>{this.queue[i]=()=>Promise.resolve()}}async runMiddleware(e){if(this.auth.currentUser===e)return;const n=[];try{for(const r of this.queue)await r(e),r.onAbort&&n.push(r.onAbort)}catch(r){n.reverse();for(const i of n)try{i()}catch{}throw this.auth._errorFactory.create("login-blocked",{originalMessage:r==null?void 0:r.message})}}}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class _N{constructor(e,n,r,i){this.app=e,this.heartbeatServiceProvider=n,this.appCheckServiceProvider=r,this.config=i,this.currentUser=null,this.emulatorConfig=null,this.operations=Promise.resolve(),this.authStateSubscription=new Zg(this),this.idTokenSubscription=new Zg(this),this.beforeStateQueue=new wN(this),this.redirectUser=null,this.isProactiveRefreshEnabled=!1,this._canInitEmulator=!0,this._isInitialized=!1,this._deleted=!1,this._initializationPromise=null,this._popupRedirectResolver=null,this._errorFactory=r1,this._agentRecaptchaConfig=null,this._tenantRecaptchaConfigs={},this.lastNotifiedUid=void 0,this.languageCode=null,this.tenantId=null,this.settings={appVerificationDisabledForTesting:!1},this.frameworks=[],this.name=e.name,this.clientVersion=i.sdkClientVersion}_initializeWithPersistence(e,n){return n&&(this._popupRedirectResolver=gn(n)),this._initializationPromise=this.queue(async()=>{var r,i;if(!this._deleted&&(this.persistenceManager=await Ui.create(this,e),!this._deleted)){if(!((r=this._popupRedirectResolver)===null||r===void 0)&&r._shouldInitProactively)try{await this._popupRedirectResolver._initialize(this)}catch{}await this.initializeCurrentUser(n),this.lastNotifiedUid=((i=this.currentUser)===null||i===void 0?void 0:i.uid)||null,!this._deleted&&(this._isInitialized=!0)}}),this._initializationPromise}async _onStorageEvent(){if(this._deleted)return;const e=await this.assertedPersistence.getCurrentUser();if(!(!this.currentUser&&!e)){if(this.currentUser&&e&&this.currentUser.uid===e.uid){this._currentUser._assign(e),await this.currentUser.getIdToken();return}await this._updateCurrentUser(e,!0)}}async initializeCurrentUser(e){var n;const r=await this.assertedPersistence.getCurrentUser();let i=r,s=!1;if(e&&this.config.authDomain){await this.getOrInitRedirectPersistenceManager();const o=(n=this.redirectUser)===null||n===void 0?void 0:n._redirectEventId,a=i==null?void 0:i._redirectEventId,l=await this.tryRedirectSignIn(e);(!o||o===a)&&(l!=null&&l.user)&&(i=l.user,s=!0)}if(!i)return this.directlySetCurrentUser(null);if(!i._redirectEventId){if(s)try{await this.beforeStateQueue.runMiddleware(i)}catch(o){i=r,this._popupRedirectResolver._overrideRedirectResult(this,()=>Promise.reject(o))}return i?this.reloadAndSetCurrentUserOrClear(i):this.directlySetCurrentUser(null)}return U(this._popupRedirectResolver,this,"argument-error"),await this.getOrInitRedirectPersistenceManager(),this.redirectUser&&this.redirectUser._redirectEventId===i._redirectEventId?this.directlySetCurrentUser(i):this.reloadAndSetCurrentUserOrClear(i)}async tryRedirectSignIn(e){let n=null;try{n=await this._popupRedirectResolver._completeRedirectFn(this,e,!0)}catch{await this._setRedirectUser(null)}return n}async reloadAndSetCurrentUserOrClear(e){try{await Ql(e)}catch(n){if((n==null?void 0:n.code)!=="auth/network-request-failed")return this.directlySetCurrentUser(null)}return this.directlySetCurrentUser(e)}useDeviceLanguage(){this.languageCode=XC()}async _delete(){this._deleted=!0}async updateCurrentUser(e){const n=e?oe(e):null;return n&&U(n.auth.config.apiKey===this.config.apiKey,this,"invalid-user-token"),this._updateCurrentUser(n&&n._clone(this))}async _updateCurrentUser(e,n=!1){if(!this._deleted)return e&&U(this.tenantId===e.tenantId,this,"tenant-id-mismatch"),n||await this.beforeStateQueue.runMiddleware(e),this.queue(async()=>{await this.directlySetCurrentUser(e),this.notifyAuthListeners()})}async signOut(){return await this.beforeStateQueue.runMiddleware(null),(this.redirectPersistenceManager||this._popupRedirectResolver)&&await this._setRedirectUser(null),this._updateCurrentUser(null,!0)}setPersistence(e){return this.queue(async()=>{await this.assertedPersistence.setPersistence(gn(e))})}async initializeRecaptchaConfig(){const e=await y1(this,{clientType:"CLIENT_TYPE_WEB",version:"RECAPTCHA_ENTERPRISE"}),n=new v1(e);this.tenantId==null?this._agentRecaptchaConfig=n:this._tenantRecaptchaConfigs[this.tenantId]=n,n.emailPasswordEnabled&&new _1(this).verify()}_getRecaptchaConfig(){return this.tenantId==null?this._agentRecaptchaConfig:this._tenantRecaptchaConfigs[this.tenantId]}_getPersistence(){return this.assertedPersistence.persistence.type}_updateErrorMap(e){this._errorFactory=new Qo("auth","Firebase",e())}onAuthStateChanged(e,n,r){return this.registerStateListener(this.authStateSubscription,e,n,r)}beforeAuthStateChanged(e,n){return this.beforeStateQueue.pushCallback(e,n)}onIdTokenChanged(e,n,r){return this.registerStateListener(this.idTokenSubscription,e,n,r)}toJSON(){var e;return{apiKey:this.config.apiKey,authDomain:this.config.authDomain,appName:this.name,currentUser:(e=this._currentUser)===null||e===void 0?void 0:e.toJSON()}}async _setRedirectUser(e,n){const r=await this.getOrInitRedirectPersistenceManager(n);return e===null?r.removeCurrentUser():r.setCurrentUser(e)}async getOrInitRedirectPersistenceManager(e){if(!this.redirectPersistenceManager){const n=e&&gn(e)||this._popupRedirectResolver;U(n,this,"argument-error"),this.redirectPersistenceManager=await Ui.create(this,[gn(n._redirectPersistence)],"redirectUser"),this.redirectUser=await this.redirectPersistenceManager.getCurrentUser()}return this.redirectPersistenceManager}async _redirectUserForId(e){var n,r;return this._isInitialized&&await this.queue(async()=>{}),((n=this._currentUser)===null||n===void 0?void 0:n._redirectEventId)===e?this._currentUser:((r=this.redirectUser)===null||r===void 0?void 0:r._redirectEventId)===e?this.redirectUser:null}async _persistUserIfCurrent(e){if(e===this.currentUser)return this.queue(async()=>this.directlySetCurrentUser(e))}_notifyListenersIfCurrent(e){e===this.currentUser&&this.notifyAuthListeners()}_key(){return`${this.config.authDomain}:${this.config.apiKey}:${this.name}`}_startProactiveRefresh(){this.isProactiveRefreshEnabled=!0,this.currentUser&&this._currentUser._startProactiveRefresh()}_stopProactiveRefresh(){this.isProactiveRefreshEnabled=!1,this.currentUser&&this._currentUser._stopProactiveRefresh()}get _currentUser(){return this.currentUser}notifyAuthListeners(){var e,n;if(!this._isInitialized)return;this.idTokenSubscription.next(this.currentUser);const r=(n=(e=this.currentUser)===null||e===void 0?void 0:e.uid)!==null&&n!==void 0?n:null;this.lastNotifiedUid!==r&&(this.lastNotifiedUid=r,this.authStateSubscription.next(this.currentUser))}registerStateListener(e,n,r,i){if(this._deleted)return()=>{};const s=typeof n=="function"?n:n.next.bind(n),o=this._isInitialized?Promise.resolve():this._initializationPromise;return U(o,this,"internal-error"),o.then(()=>s(this.currentUser)),typeof n=="function"?e.addObserver(n,r,i):e.addObserver(n)}async directlySetCurrentUser(e){this.currentUser&&this.currentUser!==e&&this._currentUser._stopProactiveRefresh(),e&&this.isProactiveRefreshEnabled&&e._startProactiveRefresh(),this.currentUser=e,e?await this.assertedPersistence.setCurrentUser(e):await this.assertedPersistence.removeCurrentUser()}queue(e){return this.operations=this.operations.then(e,e),this.operations}get assertedPersistence(){return U(this.persistenceManager,this,"internal-error"),this.persistenceManager}_logFramework(e){!e||this.frameworks.includes(e)||(this.frameworks.push(e),this.frameworks.sort(),this.clientVersion=g1(this.config.clientPlatform,this._getFrameworks()))}_getFrameworks(){return this.frameworks}async _getAdditionalHeaders(){var e;const n={["X-Client-Version"]:this.clientVersion};this.app.options.appId&&(n["X-Firebase-gmpid"]=this.app.options.appId);const r=await((e=this.heartbeatServiceProvider.getImmediate({optional:!0}))===null||e===void 0?void 0:e.getHeartbeatsHeader());r&&(n["X-Firebase-Client"]=r);const i=await this._getAppCheckToken();return i&&(n["X-Firebase-AppCheck"]=i),n}async _getAppCheckToken(){var e;const n=await((e=this.appCheckServiceProvider.getImmediate({optional:!0}))===null||e===void 0?void 0:e.getToken());return n!=null&&n.error&&KC(`Error while retrieving App Check token: ${n.error}`),n==null?void 0:n.token}}function cs(t){return oe(t)}class Zg{constructor(e){this.auth=e,this.observer=null,this.addObserver=$k(n=>this.observer=n)}get next(){return U(this.observer,this.auth,"internal-error"),this.observer.next.bind(this.observer)}}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function EN(t,e){const n=Uu(t,"auth");if(n.isInitialized()){const i=n.getImmediate(),s=n.getOptions();if(Wl(s,e??{}))return i;Ht(i,"already-initialized")}return n.initialize({options:e})}function SN(t,e){const n=(e==null?void 0:e.persistence)||[],r=(Array.isArray(n)?n:[n]).map(gn);e!=null&&e.errorMap&&t._updateErrorMap(e.errorMap),t._initializeWithPersistence(r,e==null?void 0:e.popupRedirectResolver)}function IN(t,e,n){const r=cs(t);U(r._canInitEmulator,r,"emulator-config-failed"),U(/^https?:\/\//.test(e),r,"invalid-emulator-scheme");const i=!!(n!=null&&n.disableWarnings),s=E1(e),{host:o,port:a}=TN(e),l=a===null?"":`:${a}`;r.config.emulator={url:`${s}//${o}${l}/`},r.settings.appVerificationDisabledForTesting=!0,r.emulatorConfig=Object.freeze({host:o,port:a,protocol:s.replace(":",""),options:Object.freeze({disableWarnings:i})}),i||kN()}function E1(t){const e=t.indexOf(":");return e<0?"":t.substr(0,e+1)}function TN(t){const e=E1(t),n=/(\/\/)?([^?#/]+)/.exec(t.substr(e.length));if(!n)return{host:"",port:null};const r=n[2].split("@").pop()||"",i=/^(\[[^\]]+\])(:|$)/.exec(r);if(i){const s=i[1];return{host:s,port:ey(r.substr(s.length+1))}}else{const[s,o]=r.split(":");return{host:s,port:ey(o)}}}function ey(t){if(!t)return null;const e=Number(t);return isNaN(e)?null:e}function kN(){function t(){const e=document.createElement("p"),n=e.style;e.innerText="Running in emulator mode. Do not use with production credentials.",n.position="fixed",n.width="100%",n.backgroundColor="#ffffff",n.border=".1em solid #000000",n.color="#b50000",n.bottom="0px",n.left="0px",n.margin="0px",n.zIndex="10000",n.textAlign="center",e.classList.add("firebase-emulator-warning"),document.body.appendChild(e)}typeof console<"u"&&typeof console.info=="function"&&console.info("WARNING: You are using the Auth Emulator, which is intended for local testing only. Do not use with production credentials."),typeof window<"u"&&typeof document<"u"&&(document.readyState==="loading"?window.addEventListener("DOMContentLoaded",t):t())}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class hp{constructor(e,n){this.providerId=e,this.signInMethod=n}toJSON(){return mn("not implemented")}_getIdTokenResponse(e){return mn("not implemented")}_linkToIdToken(e,n){return mn("not implemented")}_getReauthenticationResolver(e){return mn("not implemented")}}async function CN(t,e){return mr(t,"POST","/v1/accounts:update",e)}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */async function ih(t,e){return Jo(t,"POST","/v1/accounts:signInWithPassword",ei(t,e))}async function NN(t,e){return mr(t,"POST","/v1/accounts:sendOobCode",ei(t,e))}async function RN(t,e){return NN(t,e)}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */async function xN(t,e){return Jo(t,"POST","/v1/accounts:signInWithEmailLink",ei(t,e))}async function AN(t,e){return Jo(t,"POST","/v1/accounts:signInWithEmailLink",ei(t,e))}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class No extends hp{constructor(e,n,r,i=null){super("password",r),this._email=e,this._password=n,this._tenantId=i}static _fromEmailAndPassword(e,n){return new No(e,n,"password")}static _fromEmailAndCode(e,n,r=null){return new No(e,n,"emailLink",r)}toJSON(){return{email:this._email,password:this._password,signInMethod:this.signInMethod,tenantId:this._tenantId}}static fromJSON(e){const n=typeof e=="string"?JSON.parse(e):e;if(n!=null&&n.email&&(n!=null&&n.password)){if(n.signInMethod==="password")return this._fromEmailAndPassword(n.email,n.password);if(n.signInMethod==="emailLink")return this._fromEmailAndCode(n.email,n.password,n.tenantId)}return null}async _getIdTokenResponse(e){var n;switch(this.signInMethod){case"password":const r={returnSecureToken:!0,email:this._email,password:this._password,clientType:"CLIENT_TYPE_WEB"};if(!((n=e._getRecaptchaConfig())===null||n===void 0)&&n.emailPasswordEnabled){const i=await Yl(e,r,"signInWithPassword");return ih(e,i)}else return ih(e,r).catch(async i=>{if(i.code==="auth/missing-recaptcha-token"){console.log("Sign-in with email address and password is protected by reCAPTCHA for this project. Automatically triggering the reCAPTCHA flow and restarting the sign-in flow.");const s=await Yl(e,r,"signInWithPassword");return ih(e,s)}else return Promise.reject(i)});case"emailLink":return xN(e,{email:this._email,oobCode:this._password});default:Ht(e,"internal-error")}}async _linkToIdToken(e,n){switch(this.signInMethod){case"password":return CN(e,{idToken:n,returnSecureToken:!0,email:this._email,password:this._password});case"emailLink":return AN(e,{idToken:n,email:this._email,oobCode:this._password});default:Ht(e,"internal-error")}}_getReauthenticationResolver(e){return this._getIdTokenResponse(e)}}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */async function bi(t,e){return Jo(t,"POST","/v1/accounts:signInWithIdp",ei(t,e))}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const PN="http://localhost";class qr extends hp{constructor(){super(...arguments),this.pendingToken=null}static _fromParams(e){const n=new qr(e.providerId,e.signInMethod);return e.idToken||e.accessToken?(e.idToken&&(n.idToken=e.idToken),e.accessToken&&(n.accessToken=e.accessToken),e.nonce&&!e.pendingToken&&(n.nonce=e.nonce),e.pendingToken&&(n.pendingToken=e.pendingToken)):e.oauthToken&&e.oauthTokenSecret?(n.accessToken=e.oauthToken,n.secret=e.oauthTokenSecret):Ht("argument-error"),n}toJSON(){return{idToken:this.idToken,accessToken:this.accessToken,secret:this.secret,nonce:this.nonce,pendingToken:this.pendingToken,providerId:this.providerId,signInMethod:this.signInMethod}}static fromJSON(e){const n=typeof e=="string"?JSON.parse(e):e,{providerId:r,signInMethod:i}=n,s=op(n,["providerId","signInMethod"]);if(!r||!i)return null;const o=new qr(r,i);return o.idToken=s.idToken||void 0,o.accessToken=s.accessToken||void 0,o.secret=s.secret,o.nonce=s.nonce,o.pendingToken=s.pendingToken||null,o}_getIdTokenResponse(e){const n=this.buildRequest();return bi(e,n)}_linkToIdToken(e,n){const r=this.buildRequest();return r.idToken=n,bi(e,r)}_getReauthenticationResolver(e){const n=this.buildRequest();return n.autoCreate=!1,bi(e,n)}buildRequest(){const e={requestUri:PN,returnSecureToken:!0};if(this.pendingToken)e.pendingToken=this.pendingToken;else{const n={};this.idToken&&(n.id_token=this.idToken),this.accessToken&&(n.access_token=this.accessToken),this.secret&&(n.oauth_token_secret=this.secret),n.providerId=this.providerId,this.nonce&&!this.pendingToken&&(n.nonce=this.nonce),e.postBody=Yo(n)}return e}}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function DN(t){switch(t){case"recoverEmail":return"RECOVER_EMAIL";case"resetPassword":return"PASSWORD_RESET";case"signIn":return"EMAIL_SIGNIN";case"verifyEmail":return"VERIFY_EMAIL";case"verifyAndChangeEmail":return"VERIFY_AND_CHANGE_EMAIL";case"revertSecondFactorAddition":return"REVERT_SECOND_FACTOR_ADDITION";default:return null}}function ON(t){const e=bs(Fs(t)).link,n=e?bs(Fs(e)).deep_link_id:null,r=bs(Fs(t)).deep_link_id;return(r?bs(Fs(r)).link:null)||r||n||e||t}class dp{constructor(e){var n,r,i,s,o,a;const l=bs(Fs(e)),u=(n=l.apiKey)!==null&&n!==void 0?n:null,c=(r=l.oobCode)!==null&&r!==void 0?r:null,h=DN((i=l.mode)!==null&&i!==void 0?i:null);U(u&&c&&h,"argument-error"),this.apiKey=u,this.operation=h,this.code=c,this.continueUrl=(s=l.continueUrl)!==null&&s!==void 0?s:null,this.languageCode=(o=l.languageCode)!==null&&o!==void 0?o:null,this.tenantId=(a=l.tenantId)!==null&&a!==void 0?a:null}static parseLink(e){const n=ON(e);try{return new dp(n)}catch{return null}}}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class hs{constructor(){this.providerId=hs.PROVIDER_ID}static credential(e,n){return No._fromEmailAndPassword(e,n)}static credentialWithLink(e,n){const r=dp.parseLink(n);return U(r,"argument-error"),No._fromEmailAndCode(e,r.code,r.tenantId)}}hs.PROVIDER_ID="password";hs.EMAIL_PASSWORD_SIGN_IN_METHOD="password";hs.EMAIL_LINK_SIGN_IN_METHOD="emailLink";/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class S1{constructor(e){this.providerId=e,this.defaultLanguageCode=null,this.customParameters={}}setDefaultLanguage(e){this.defaultLanguageCode=e}setCustomParameters(e){return this.customParameters=e,this}getCustomParameters(){return this.customParameters}}/** + * @license + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class Zo extends S1{constructor(){super(...arguments),this.scopes=[]}addScope(e){return this.scopes.includes(e)||this.scopes.push(e),this}getScopes(){return[...this.scopes]}}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class jn extends Zo{constructor(){super("facebook.com")}static credential(e){return qr._fromParams({providerId:jn.PROVIDER_ID,signInMethod:jn.FACEBOOK_SIGN_IN_METHOD,accessToken:e})}static credentialFromResult(e){return jn.credentialFromTaggedObject(e)}static credentialFromError(e){return jn.credentialFromTaggedObject(e.customData||{})}static credentialFromTaggedObject({_tokenResponse:e}){if(!e||!("oauthAccessToken"in e)||!e.oauthAccessToken)return null;try{return jn.credential(e.oauthAccessToken)}catch{return null}}}jn.FACEBOOK_SIGN_IN_METHOD="facebook.com";jn.PROVIDER_ID="facebook.com";/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class dn extends Zo{constructor(){super("google.com"),this.addScope("profile")}static credential(e,n){return qr._fromParams({providerId:dn.PROVIDER_ID,signInMethod:dn.GOOGLE_SIGN_IN_METHOD,idToken:e,accessToken:n})}static credentialFromResult(e){return dn.credentialFromTaggedObject(e)}static credentialFromError(e){return dn.credentialFromTaggedObject(e.customData||{})}static credentialFromTaggedObject({_tokenResponse:e}){if(!e)return null;const{oauthIdToken:n,oauthAccessToken:r}=e;if(!n&&!r)return null;try{return dn.credential(n,r)}catch{return null}}}dn.GOOGLE_SIGN_IN_METHOD="google.com";dn.PROVIDER_ID="google.com";/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class Vn extends Zo{constructor(){super("github.com")}static credential(e){return qr._fromParams({providerId:Vn.PROVIDER_ID,signInMethod:Vn.GITHUB_SIGN_IN_METHOD,accessToken:e})}static credentialFromResult(e){return Vn.credentialFromTaggedObject(e)}static credentialFromError(e){return Vn.credentialFromTaggedObject(e.customData||{})}static credentialFromTaggedObject({_tokenResponse:e}){if(!e||!("oauthAccessToken"in e)||!e.oauthAccessToken)return null;try{return Vn.credential(e.oauthAccessToken)}catch{return null}}}Vn.GITHUB_SIGN_IN_METHOD="github.com";Vn.PROVIDER_ID="github.com";/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class Bn extends Zo{constructor(){super("twitter.com")}static credential(e,n){return qr._fromParams({providerId:Bn.PROVIDER_ID,signInMethod:Bn.TWITTER_SIGN_IN_METHOD,oauthToken:e,oauthTokenSecret:n})}static credentialFromResult(e){return Bn.credentialFromTaggedObject(e)}static credentialFromError(e){return Bn.credentialFromTaggedObject(e.customData||{})}static credentialFromTaggedObject({_tokenResponse:e}){if(!e)return null;const{oauthAccessToken:n,oauthTokenSecret:r}=e;if(!n||!r)return null;try{return Bn.credential(n,r)}catch{return null}}}Bn.TWITTER_SIGN_IN_METHOD="twitter.com";Bn.PROVIDER_ID="twitter.com";/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */async function sh(t,e){return Jo(t,"POST","/v1/accounts:signUp",ei(t,e))}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class Wr{constructor(e){this.user=e.user,this.providerId=e.providerId,this._tokenResponse=e._tokenResponse,this.operationType=e.operationType}static async _fromIdTokenResponse(e,n,r,i=!1){const s=await Mr._fromIdTokenResponse(e,r,i),o=ty(r);return new Wr({user:s,providerId:o,_tokenResponse:r,operationType:n})}static async _forOperation(e,n,r){await e._updateTokensIfNecessary(r,!0);const i=ty(r);return new Wr({user:e,providerId:i,_tokenResponse:r,operationType:n})}}function ty(t){return t.providerId?t.providerId:"phoneNumber"in t?"phone":null}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class Xl extends un{constructor(e,n,r,i){var s;super(n.code,n.message),this.operationType=r,this.user=i,Object.setPrototypeOf(this,Xl.prototype),this.customData={appName:e.name,tenantId:(s=e.tenantId)!==null&&s!==void 0?s:void 0,_serverResponse:n.customData._serverResponse,operationType:r}}static _fromErrorAndOperation(e,n,r,i){return new Xl(e,n,r,i)}}function I1(t,e,n,r){return(e==="reauthenticate"?n._getReauthenticationResolver(t):n._getIdTokenResponse(t)).catch(s=>{throw s.code==="auth/multi-factor-auth-required"?Xl._fromErrorAndOperation(t,s,e,r):s})}async function LN(t,e,n=!1){const r=await Yi(t,e._linkToIdToken(t.auth,await t.getIdToken()),n);return Wr._forOperation(t,"link",r)}/** + * @license + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */async function MN(t,e,n=!1){const{auth:r}=t,i="reauthenticate";try{const s=await Yi(t,I1(r,i,e,t),n);U(s.idToken,r,"internal-error");const o=up(s.idToken);U(o,r,"internal-error");const{sub:a}=o;return U(t.uid===a,r,"user-mismatch"),Wr._forOperation(t,i,s)}catch(s){throw(s==null?void 0:s.code)==="auth/user-not-found"&&Ht(r,"user-mismatch"),s}}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */async function T1(t,e,n=!1){const r="signIn",i=await I1(t,r,e),s=await Wr._fromIdTokenResponse(t,r,i);return n||await t._updateCurrentUser(s.user),s}async function $N(t,e){return T1(cs(t),e)}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function UN(t,e,n){var r;U(((r=n.url)===null||r===void 0?void 0:r.length)>0,t,"invalid-continue-uri"),U(typeof n.dynamicLinkDomain>"u"||n.dynamicLinkDomain.length>0,t,"invalid-dynamic-link-domain"),e.continueUrl=n.url,e.dynamicLinkDomain=n.dynamicLinkDomain,e.canHandleCodeInApp=n.handleCodeInApp,n.iOS&&(U(n.iOS.bundleId.length>0,t,"missing-ios-bundle-id"),e.iOSBundleId=n.iOS.bundleId),n.android&&(U(n.android.packageName.length>0,t,"missing-android-pkg-name"),e.androidInstallApp=n.android.installApp,e.androidMinimumVersionCode=n.android.minimumVersion,e.androidPackageName=n.android.packageName)}async function bN(t,e,n){var r;const i=cs(t),s={returnSecureToken:!0,email:e,password:n,clientType:"CLIENT_TYPE_WEB"};let o;if(!((r=i._getRecaptchaConfig())===null||r===void 0)&&r.emailPasswordEnabled){const u=await Yl(i,s,"signUpPassword");o=sh(i,u)}else o=sh(i,s).catch(async u=>{if(u.code==="auth/missing-recaptcha-token"){console.log("Sign-up is protected by reCAPTCHA for this project. Automatically triggering the reCAPTCHA flow and restarting the sign-up flow.");const c=await Yl(i,s,"signUpPassword");return sh(i,c)}else return Promise.reject(u)});const a=await o.catch(u=>Promise.reject(u)),l=await Wr._fromIdTokenResponse(i,"signIn",a);return await i._updateCurrentUser(l.user),l}function FN(t,e,n){return $N(oe(t),hs.credential(e,n))}async function jN(t,e){const n=oe(t),i={requestType:"VERIFY_EMAIL",idToken:await t.getIdToken()};e&&UN(n.auth,i,e);const{email:s}=await RN(n.auth,i);s!==t.email&&await t.reload()}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */async function VN(t,e){return mr(t,"POST","/v1/accounts:update",e)}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */async function BN(t,{displayName:e,photoURL:n}){if(e===void 0&&n===void 0)return;const r=oe(t),s={idToken:await r.getIdToken(),displayName:e,photoUrl:n,returnSecureToken:!0},o=await Yi(r,VN(r.auth,s));r.displayName=o.displayName||null,r.photoURL=o.photoUrl||null;const a=r.providerData.find(({providerId:l})=>l==="password");a&&(a.displayName=r.displayName,a.photoURL=r.photoURL),await r._updateTokensIfNecessary(o)}function zN(t,e,n,r){return oe(t).onIdTokenChanged(e,n,r)}function HN(t,e,n){return oe(t).beforeAuthStateChanged(e,n)}function qN(t,e,n,r){return oe(t).onAuthStateChanged(e,n,r)}async function WN(t){return oe(t).delete()}const Jl="__sak";/** + * @license + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class k1{constructor(e,n){this.storageRetriever=e,this.type=n}_isAvailable(){try{return this.storage?(this.storage.setItem(Jl,"1"),this.storage.removeItem(Jl),Promise.resolve(!0)):Promise.resolve(!1)}catch{return Promise.resolve(!1)}}_set(e,n){return this.storage.setItem(e,JSON.stringify(n)),Promise.resolve()}_get(e){const n=this.storage.getItem(e);return Promise.resolve(n?JSON.parse(n):null)}_remove(e){return this.storage.removeItem(e),Promise.resolve()}get storage(){return this.storageRetriever()}}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function KN(){const t=et();return cp(t)||bu(t)}const GN=1e3,QN=10;class C1 extends k1{constructor(){super(()=>window.localStorage,"LOCAL"),this.boundEventHandler=(e,n)=>this.onStorageEvent(e,n),this.listeners={},this.localCache={},this.pollTimer=null,this.safariLocalStorageNotSynced=KN()&&fN(),this.fallbackToPolling=m1(),this._shouldAllowMigration=!0}forAllChangedKeys(e){for(const n of Object.keys(this.listeners)){const r=this.storage.getItem(n),i=this.localCache[n];r!==i&&e(n,i,r)}}onStorageEvent(e,n=!1){if(!e.key){this.forAllChangedKeys((o,a,l)=>{this.notifyListeners(o,l)});return}const r=e.key;if(n?this.detachListener():this.stopPolling(),this.safariLocalStorageNotSynced){const o=this.storage.getItem(r);if(e.newValue!==o)e.newValue!==null?this.storage.setItem(r,e.newValue):this.storage.removeItem(r);else if(this.localCache[r]===e.newValue&&!n)return}const i=()=>{const o=this.storage.getItem(r);!n&&this.localCache[r]===o||this.notifyListeners(r,o)},s=this.storage.getItem(r);dN()&&s!==e.newValue&&e.newValue!==e.oldValue?setTimeout(i,QN):i()}notifyListeners(e,n){this.localCache[e]=n;const r=this.listeners[e];if(r)for(const i of Array.from(r))i(n&&JSON.parse(n))}startPolling(){this.stopPolling(),this.pollTimer=setInterval(()=>{this.forAllChangedKeys((e,n,r)=>{this.onStorageEvent(new StorageEvent("storage",{key:e,oldValue:n,newValue:r}),!0)})},GN)}stopPolling(){this.pollTimer&&(clearInterval(this.pollTimer),this.pollTimer=null)}attachListener(){window.addEventListener("storage",this.boundEventHandler)}detachListener(){window.removeEventListener("storage",this.boundEventHandler)}_addListener(e,n){Object.keys(this.listeners).length===0&&(this.fallbackToPolling?this.startPolling():this.attachListener()),this.listeners[e]||(this.listeners[e]=new Set,this.localCache[e]=this.storage.getItem(e)),this.listeners[e].add(n)}_removeListener(e,n){this.listeners[e]&&(this.listeners[e].delete(n),this.listeners[e].size===0&&delete this.listeners[e]),Object.keys(this.listeners).length===0&&(this.detachListener(),this.stopPolling())}async _set(e,n){await super._set(e,n),this.localCache[e]=JSON.stringify(n)}async _get(e){const n=await super._get(e);return this.localCache[e]=JSON.stringify(n),n}async _remove(e){await super._remove(e),delete this.localCache[e]}}C1.type="LOCAL";const YN=C1;/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class N1 extends k1{constructor(){super(()=>window.sessionStorage,"SESSION")}_addListener(e,n){}_removeListener(e,n){}}N1.type="SESSION";const R1=N1;/** + * @license + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function XN(t){return Promise.all(t.map(async e=>{try{return{fulfilled:!0,value:await e}}catch(n){return{fulfilled:!1,reason:n}}}))}/** + * @license + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class Fu{constructor(e){this.eventTarget=e,this.handlersMap={},this.boundEventHandler=this.handleEvent.bind(this)}static _getInstance(e){const n=this.receivers.find(i=>i.isListeningto(e));if(n)return n;const r=new Fu(e);return this.receivers.push(r),r}isListeningto(e){return this.eventTarget===e}async handleEvent(e){const n=e,{eventId:r,eventType:i,data:s}=n.data,o=this.handlersMap[i];if(!(o!=null&&o.size))return;n.ports[0].postMessage({status:"ack",eventId:r,eventType:i});const a=Array.from(o).map(async u=>u(n.origin,s)),l=await XN(a);n.ports[0].postMessage({status:"done",eventId:r,eventType:i,response:l})}_subscribe(e,n){Object.keys(this.handlersMap).length===0&&this.eventTarget.addEventListener("message",this.boundEventHandler),this.handlersMap[e]||(this.handlersMap[e]=new Set),this.handlersMap[e].add(n)}_unsubscribe(e,n){this.handlersMap[e]&&n&&this.handlersMap[e].delete(n),(!n||this.handlersMap[e].size===0)&&delete this.handlersMap[e],Object.keys(this.handlersMap).length===0&&this.eventTarget.removeEventListener("message",this.boundEventHandler)}}Fu.receivers=[];/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function fp(t="",e=10){let n="";for(let r=0;r{const u=fp("",20);i.port1.start();const c=setTimeout(()=>{l(new Error("unsupported_event"))},r);o={messageChannel:i,onMessage(h){const d=h;if(d.data.eventId===u)switch(d.data.status){case"ack":clearTimeout(c),s=setTimeout(()=>{l(new Error("timeout"))},3e3);break;case"done":clearTimeout(s),a(d.data.response);break;default:clearTimeout(c),clearTimeout(s),l(new Error("invalid_response"));break}}},this.handlers.add(o),i.port1.addEventListener("message",o.onMessage),this.target.postMessage({eventType:e,eventId:u,data:n},[i.port2])}).finally(()=>{o&&this.removeMessageHandler(o)})}}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function on(){return window}function ZN(t){on().location.href=t}/** + * @license + * Copyright 2020 Google LLC. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function x1(){return typeof on().WorkerGlobalScope<"u"&&typeof on().importScripts=="function"}async function eR(){if(!(navigator!=null&&navigator.serviceWorker))return null;try{return(await navigator.serviceWorker.ready).active}catch{return null}}function tR(){var t;return((t=navigator==null?void 0:navigator.serviceWorker)===null||t===void 0?void 0:t.controller)||null}function nR(){return x1()?self:null}/** + * @license + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const A1="firebaseLocalStorageDb",rR=1,Zl="firebaseLocalStorage",P1="fbase_key";class ea{constructor(e){this.request=e}toPromise(){return new Promise((e,n)=>{this.request.addEventListener("success",()=>{e(this.request.result)}),this.request.addEventListener("error",()=>{n(this.request.error)})})}}function ju(t,e){return t.transaction([Zl],e?"readwrite":"readonly").objectStore(Zl)}function iR(){const t=indexedDB.deleteDatabase(A1);return new ea(t).toPromise()}function Td(){const t=indexedDB.open(A1,rR);return new Promise((e,n)=>{t.addEventListener("error",()=>{n(t.error)}),t.addEventListener("upgradeneeded",()=>{const r=t.result;try{r.createObjectStore(Zl,{keyPath:P1})}catch(i){n(i)}}),t.addEventListener("success",async()=>{const r=t.result;r.objectStoreNames.contains(Zl)?e(r):(r.close(),await iR(),e(await Td()))})})}async function ny(t,e,n){const r=ju(t,!0).put({[P1]:e,value:n});return new ea(r).toPromise()}async function sR(t,e){const n=ju(t,!1).get(e),r=await new ea(n).toPromise();return r===void 0?null:r.value}function ry(t,e){const n=ju(t,!0).delete(e);return new ea(n).toPromise()}const oR=800,aR=3;class D1{constructor(){this.type="LOCAL",this._shouldAllowMigration=!0,this.listeners={},this.localCache={},this.pollTimer=null,this.pendingWrites=0,this.receiver=null,this.sender=null,this.serviceWorkerReceiverAvailable=!1,this.activeServiceWorker=null,this._workerInitializationPromise=this.initializeServiceWorkerMessaging().then(()=>{},()=>{})}async _openDb(){return this.db?this.db:(this.db=await Td(),this.db)}async _withRetries(e){let n=0;for(;;)try{const r=await this._openDb();return await e(r)}catch(r){if(n++>aR)throw r;this.db&&(this.db.close(),this.db=void 0)}}async initializeServiceWorkerMessaging(){return x1()?this.initializeReceiver():this.initializeSender()}async initializeReceiver(){this.receiver=Fu._getInstance(nR()),this.receiver._subscribe("keyChanged",async(e,n)=>({keyProcessed:(await this._poll()).includes(n.key)})),this.receiver._subscribe("ping",async(e,n)=>["keyChanged"])}async initializeSender(){var e,n;if(this.activeServiceWorker=await eR(),!this.activeServiceWorker)return;this.sender=new JN(this.activeServiceWorker);const r=await this.sender._send("ping",{},800);r&&!((e=r[0])===null||e===void 0)&&e.fulfilled&&!((n=r[0])===null||n===void 0)&&n.value.includes("keyChanged")&&(this.serviceWorkerReceiverAvailable=!0)}async notifyServiceWorker(e){if(!(!this.sender||!this.activeServiceWorker||tR()!==this.activeServiceWorker))try{await this.sender._send("keyChanged",{key:e},this.serviceWorkerReceiverAvailable?800:50)}catch{}}async _isAvailable(){try{if(!indexedDB)return!1;const e=await Td();return await ny(e,Jl,"1"),await ry(e,Jl),!0}catch{}return!1}async _withPendingWrite(e){this.pendingWrites++;try{await e()}finally{this.pendingWrites--}}async _set(e,n){return this._withPendingWrite(async()=>(await this._withRetries(r=>ny(r,e,n)),this.localCache[e]=n,this.notifyServiceWorker(e)))}async _get(e){const n=await this._withRetries(r=>sR(r,e));return this.localCache[e]=n,n}async _remove(e){return this._withPendingWrite(async()=>(await this._withRetries(n=>ry(n,e)),delete this.localCache[e],this.notifyServiceWorker(e)))}async _poll(){const e=await this._withRetries(i=>{const s=ju(i,!1).getAll();return new ea(s).toPromise()});if(!e)return[];if(this.pendingWrites!==0)return[];const n=[],r=new Set;for(const{fbase_key:i,value:s}of e)r.add(i),JSON.stringify(this.localCache[i])!==JSON.stringify(s)&&(this.notifyListeners(i,s),n.push(i));for(const i of Object.keys(this.localCache))this.localCache[i]&&!r.has(i)&&(this.notifyListeners(i,null),n.push(i));return n}notifyListeners(e,n){this.localCache[e]=n;const r=this.listeners[e];if(r)for(const i of Array.from(r))i(n)}startPolling(){this.stopPolling(),this.pollTimer=setInterval(async()=>this._poll(),oR)}stopPolling(){this.pollTimer&&(clearInterval(this.pollTimer),this.pollTimer=null)}_addListener(e,n){Object.keys(this.listeners).length===0&&this.startPolling(),this.listeners[e]||(this.listeners[e]=new Set,this._get(e)),this.listeners[e].add(n)}_removeListener(e,n){this.listeners[e]&&(this.listeners[e].delete(n),this.listeners[e].size===0&&delete this.listeners[e]),Object.keys(this.listeners).length===0&&this.stopPolling()}}D1.type="LOCAL";const lR=D1;new Xo(3e4,6e4);/** + * @license + * Copyright 2021 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function uR(t,e){return e?gn(e):(U(t._popupRedirectResolver,t,"argument-error"),t._popupRedirectResolver)}/** + * @license + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class pp extends hp{constructor(e){super("custom","custom"),this.params=e}_getIdTokenResponse(e){return bi(e,this._buildIdpRequest())}_linkToIdToken(e,n){return bi(e,this._buildIdpRequest(n))}_getReauthenticationResolver(e){return bi(e,this._buildIdpRequest())}_buildIdpRequest(e){const n={requestUri:this.params.requestUri,sessionId:this.params.sessionId,postBody:this.params.postBody,tenantId:this.params.tenantId,pendingToken:this.params.pendingToken,returnSecureToken:!0,returnIdpCredential:!0};return e&&(n.idToken=e),n}}function cR(t){return T1(t.auth,new pp(t),t.bypassAuthState)}function hR(t){const{auth:e,user:n}=t;return U(n,e,"internal-error"),MN(n,new pp(t),t.bypassAuthState)}async function dR(t){const{auth:e,user:n}=t;return U(n,e,"internal-error"),LN(n,new pp(t),t.bypassAuthState)}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class O1{constructor(e,n,r,i,s=!1){this.auth=e,this.resolver=r,this.user=i,this.bypassAuthState=s,this.pendingPromise=null,this.eventManager=null,this.filter=Array.isArray(n)?n:[n]}execute(){return new Promise(async(e,n)=>{this.pendingPromise={resolve:e,reject:n};try{this.eventManager=await this.resolver._initialize(this.auth),await this.onExecution(),this.eventManager.registerConsumer(this)}catch(r){this.reject(r)}})}async onAuthEvent(e){const{urlResponse:n,sessionId:r,postBody:i,tenantId:s,error:o,type:a}=e;if(o){this.reject(o);return}const l={auth:this.auth,requestUri:n,sessionId:r,tenantId:s||void 0,postBody:i||void 0,user:this.user,bypassAuthState:this.bypassAuthState};try{this.resolve(await this.getIdpTask(a)(l))}catch(u){this.reject(u)}}onError(e){this.reject(e)}getIdpTask(e){switch(e){case"signInViaPopup":case"signInViaRedirect":return cR;case"linkViaPopup":case"linkViaRedirect":return dR;case"reauthViaPopup":case"reauthViaRedirect":return hR;default:Ht(this.auth,"internal-error")}}resolve(e){kn(this.pendingPromise,"Pending promise was never set"),this.pendingPromise.resolve(e),this.unregisterAndCleanUp()}reject(e){kn(this.pendingPromise,"Pending promise was never set"),this.pendingPromise.reject(e),this.unregisterAndCleanUp()}unregisterAndCleanUp(){this.eventManager&&this.eventManager.unregisterConsumer(this),this.pendingPromise=null,this.cleanUp()}}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const fR=new Xo(2e3,1e4);class Ri extends O1{constructor(e,n,r,i,s){super(e,n,i,s),this.provider=r,this.authWindow=null,this.pollId=null,Ri.currentPopupAction&&Ri.currentPopupAction.cancel(),Ri.currentPopupAction=this}async executeNotNull(){const e=await this.execute();return U(e,this.auth,"internal-error"),e}async onExecution(){kn(this.filter.length===1,"Popup operations only handle one event");const e=fp();this.authWindow=await this.resolver._openPopup(this.auth,this.provider,this.filter[0],e),this.authWindow.associatedEvent=e,this.resolver._originValidation(this.auth).catch(n=>{this.reject(n)}),this.resolver._isIframeWebStorageSupported(this.auth,n=>{n||this.reject(sn(this.auth,"web-storage-unsupported"))}),this.pollUserCancellation()}get eventId(){var e;return((e=this.authWindow)===null||e===void 0?void 0:e.associatedEvent)||null}cancel(){this.reject(sn(this.auth,"cancelled-popup-request"))}cleanUp(){this.authWindow&&this.authWindow.close(),this.pollId&&window.clearTimeout(this.pollId),this.authWindow=null,this.pollId=null,Ri.currentPopupAction=null}pollUserCancellation(){const e=()=>{var n,r;if(!((r=(n=this.authWindow)===null||n===void 0?void 0:n.window)===null||r===void 0)&&r.closed){this.pollId=window.setTimeout(()=>{this.pollId=null,this.reject(sn(this.auth,"popup-closed-by-user"))},8e3);return}this.pollId=window.setTimeout(e,fR.get())};e()}}Ri.currentPopupAction=null;/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const pR="pendingRedirect",ml=new Map;class mR extends O1{constructor(e,n,r=!1){super(e,["signInViaRedirect","linkViaRedirect","reauthViaRedirect","unknown"],n,void 0,r),this.eventId=null}async execute(){let e=ml.get(this.auth._key());if(!e){try{const r=await gR(this.resolver,this.auth)?await super.execute():null;e=()=>Promise.resolve(r)}catch(n){e=()=>Promise.reject(n)}ml.set(this.auth._key(),e)}return this.bypassAuthState||ml.set(this.auth._key(),()=>Promise.resolve(null)),e()}async onAuthEvent(e){if(e.type==="signInViaRedirect")return super.onAuthEvent(e);if(e.type==="unknown"){this.resolve(null);return}if(e.eventId){const n=await this.auth._redirectUserForId(e.eventId);if(n)return this.user=n,super.onAuthEvent(e);this.resolve(null)}}async onExecution(){}cleanUp(){}}async function gR(t,e){const n=wR(e),r=vR(t);if(!await r._isAvailable())return!1;const i=await r._get(n)==="true";return await r._remove(n),i}function yR(t,e){ml.set(t._key(),e)}function vR(t){return gn(t._redirectPersistence)}function wR(t){return pl(pR,t.config.apiKey,t.name)}async function _R(t,e,n=!1){const r=cs(t),i=uR(r,e),o=await new mR(r,i,n).execute();return o&&!n&&(delete o.user._redirectEventId,await r._persistUserIfCurrent(o.user),await r._setRedirectUser(null,e)),o}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const ER=10*60*1e3;class SR{constructor(e){this.auth=e,this.cachedEventUids=new Set,this.consumers=new Set,this.queuedRedirectEvent=null,this.hasHandledPotentialRedirect=!1,this.lastProcessedEventTime=Date.now()}registerConsumer(e){this.consumers.add(e),this.queuedRedirectEvent&&this.isEventForConsumer(this.queuedRedirectEvent,e)&&(this.sendToConsumer(this.queuedRedirectEvent,e),this.saveEventToCache(this.queuedRedirectEvent),this.queuedRedirectEvent=null)}unregisterConsumer(e){this.consumers.delete(e)}onEvent(e){if(this.hasEventBeenHandled(e))return!1;let n=!1;return this.consumers.forEach(r=>{this.isEventForConsumer(e,r)&&(n=!0,this.sendToConsumer(e,r),this.saveEventToCache(e))}),this.hasHandledPotentialRedirect||!IR(e)||(this.hasHandledPotentialRedirect=!0,n||(this.queuedRedirectEvent=e,n=!0)),n}sendToConsumer(e,n){var r;if(e.error&&!L1(e)){const i=((r=e.error.code)===null||r===void 0?void 0:r.split("auth/")[1])||"internal-error";n.onError(sn(this.auth,i))}else n.onAuthEvent(e)}isEventForConsumer(e,n){const r=n.eventId===null||!!e.eventId&&e.eventId===n.eventId;return n.filter.includes(e.type)&&r}hasEventBeenHandled(e){return Date.now()-this.lastProcessedEventTime>=ER&&this.cachedEventUids.clear(),this.cachedEventUids.has(iy(e))}saveEventToCache(e){this.cachedEventUids.add(iy(e)),this.lastProcessedEventTime=Date.now()}}function iy(t){return[t.type,t.eventId,t.sessionId,t.tenantId].filter(e=>e).join("-")}function L1({type:t,error:e}){return t==="unknown"&&(e==null?void 0:e.code)==="auth/no-auth-event"}function IR(t){switch(t.type){case"signInViaRedirect":case"linkViaRedirect":case"reauthViaRedirect":return!0;case"unknown":return L1(t);default:return!1}}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */async function TR(t,e={}){return mr(t,"GET","/v1/projects",e)}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const kR=/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/,CR=/^https?/;async function NR(t){if(t.config.emulator)return;const{authorizedDomains:e}=await TR(t);for(const n of e)try{if(RR(n))return}catch{}Ht(t,"unauthorized-domain")}function RR(t){const e=Id(),{protocol:n,hostname:r}=new URL(e);if(t.startsWith("chrome-extension://")){const o=new URL(t);return o.hostname===""&&r===""?n==="chrome-extension:"&&t.replace("chrome-extension://","")===e.replace("chrome-extension://",""):n==="chrome-extension:"&&o.hostname===r}if(!CR.test(n))return!1;if(kR.test(t))return r===t;const i=t.replace(/\./g,"\\.");return new RegExp("^(.+\\."+i+"|"+i+")$","i").test(r)}/** + * @license + * Copyright 2020 Google LLC. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const xR=new Xo(3e4,6e4);function sy(){const t=on().___jsl;if(t!=null&&t.H){for(const e of Object.keys(t.H))if(t.H[e].r=t.H[e].r||[],t.H[e].L=t.H[e].L||[],t.H[e].r=[...t.H[e].L],t.CP)for(let n=0;n{var r,i,s;function o(){sy(),gapi.load("gapi.iframes",{callback:()=>{e(gapi.iframes.getContext())},ontimeout:()=>{sy(),n(sn(t,"network-request-failed"))},timeout:xR.get()})}if(!((i=(r=on().gapi)===null||r===void 0?void 0:r.iframes)===null||i===void 0)&&i.Iframe)e(gapi.iframes.getContext());else if(!((s=on().gapi)===null||s===void 0)&&s.load)o();else{const a=mN("iframefcb");return on()[a]=()=>{gapi.load?o():n(sn(t,"network-request-failed"))},w1(`https://apis.google.com/js/api.js?onload=${a}`).catch(l=>n(l))}}).catch(e=>{throw gl=null,e})}let gl=null;function PR(t){return gl=gl||AR(t),gl}/** + * @license + * Copyright 2020 Google LLC. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const DR=new Xo(5e3,15e3),OR="__/auth/iframe",LR="emulator/auth/iframe",MR={style:{position:"absolute",top:"-100px",width:"1px",height:"1px"},"aria-hidden":"true",tabindex:"-1"},$R=new Map([["identitytoolkit.googleapis.com","p"],["staging-identitytoolkit.sandbox.googleapis.com","s"],["test-identitytoolkit.sandbox.googleapis.com","t"]]);function UR(t){const e=t.config;U(e.authDomain,t,"auth-domain-config-required");const n=e.emulator?lp(e,LR):`https://${t.config.authDomain}/${OR}`,r={apiKey:e.apiKey,appName:t.name,v:Zr},i=$R.get(t.config.apiHost);i&&(r.eid=i);const s=t._getFrameworks();return s.length&&(r.fw=s.join(",")),`${n}?${Yo(r).slice(1)}`}async function bR(t){const e=await PR(t),n=on().gapi;return U(n,t,"internal-error"),e.open({where:document.body,url:UR(t),messageHandlersFilter:n.iframes.CROSS_ORIGIN_IFRAMES_FILTER,attributes:MR,dontclear:!0},r=>new Promise(async(i,s)=>{await r.restyle({setHideOnLeave:!1});const o=sn(t,"network-request-failed"),a=on().setTimeout(()=>{s(o)},DR.get());function l(){on().clearTimeout(a),i(r)}r.ping(l).then(l,()=>{s(o)})}))}/** + * @license + * Copyright 2020 Google LLC. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const FR={location:"yes",resizable:"yes",statusbar:"yes",toolbar:"no"},jR=500,VR=600,BR="_blank",zR="http://localhost";class oy{constructor(e){this.window=e,this.associatedEvent=null}close(){if(this.window)try{this.window.close()}catch{}}}function HR(t,e,n,r=jR,i=VR){const s=Math.max((window.screen.availHeight-i)/2,0).toString(),o=Math.max((window.screen.availWidth-r)/2,0).toString();let a="";const l=Object.assign(Object.assign({},FR),{width:r.toString(),height:i.toString(),top:s,left:o}),u=et().toLowerCase();n&&(a=c1(u)?BR:n),u1(u)&&(e=e||zR,l.scrollbars="yes");const c=Object.entries(l).reduce((d,[p,y])=>`${d}${p}=${y},`,"");if(hN(u)&&a!=="_self")return qR(e||"",a),new oy(null);const h=window.open(e||"",a,c);U(h,t,"popup-blocked");try{h.focus()}catch{}return new oy(h)}function qR(t,e){const n=document.createElement("a");n.href=t,n.target=e;const r=document.createEvent("MouseEvent");r.initMouseEvent("click",!0,!0,window,1,0,0,0,0,!1,!1,!1,!1,1,null),n.dispatchEvent(r)}/** + * @license + * Copyright 2021 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const WR="__/auth/handler",KR="emulator/auth/handler",GR=encodeURIComponent("fac");async function ay(t,e,n,r,i,s){U(t.config.authDomain,t,"auth-domain-config-required"),U(t.config.apiKey,t,"invalid-api-key");const o={apiKey:t.config.apiKey,appName:t.name,authType:n,redirectUrl:r,v:Zr,eventId:i};if(e instanceof S1){e.setDefaultLanguage(t.languageCode),o.providerId=e.providerId||"",Mk(e.getCustomParameters())||(o.customParameters=JSON.stringify(e.getCustomParameters()));for(const[c,h]of Object.entries(s||{}))o[c]=h}if(e instanceof Zo){const c=e.getScopes().filter(h=>h!=="");c.length>0&&(o.scopes=c.join(","))}t.tenantId&&(o.tid=t.tenantId);const a=o;for(const c of Object.keys(a))a[c]===void 0&&delete a[c];const l=await t._getAppCheckToken(),u=l?`#${GR}=${encodeURIComponent(l)}`:"";return`${QR(t)}?${Yo(a).slice(1)}${u}`}function QR({config:t}){return t.emulator?lp(t,KR):`https://${t.authDomain}/${WR}`}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const oh="webStorageSupport";class YR{constructor(){this.eventManagers={},this.iframes={},this.originValidationPromises={},this._redirectPersistence=R1,this._completeRedirectFn=_R,this._overrideRedirectResult=yR}async _openPopup(e,n,r,i){var s;kn((s=this.eventManagers[e._key()])===null||s===void 0?void 0:s.manager,"_initialize() not called before _openPopup()");const o=await ay(e,n,r,Id(),i);return HR(e,o,fp())}async _openRedirect(e,n,r,i){await this._originValidation(e);const s=await ay(e,n,r,Id(),i);return ZN(s),new Promise(()=>{})}_initialize(e){const n=e._key();if(this.eventManagers[n]){const{manager:i,promise:s}=this.eventManagers[n];return i?Promise.resolve(i):(kn(s,"If manager is not set, promise should be"),s)}const r=this.initAndGetManager(e);return this.eventManagers[n]={promise:r},r.catch(()=>{delete this.eventManagers[n]}),r}async initAndGetManager(e){const n=await bR(e),r=new SR(e);return n.register("authEvent",i=>(U(i==null?void 0:i.authEvent,e,"invalid-auth-event"),{status:r.onEvent(i.authEvent)?"ACK":"ERROR"}),gapi.iframes.CROSS_ORIGIN_IFRAMES_FILTER),this.eventManagers[e._key()]={manager:r},this.iframes[e._key()]=n,r}_isIframeWebStorageSupported(e,n){this.iframes[e._key()].send(oh,{type:oh},i=>{var s;const o=(s=i==null?void 0:i[0])===null||s===void 0?void 0:s[oh];o!==void 0&&n(!!o),Ht(e,"internal-error")},gapi.iframes.CROSS_ORIGIN_IFRAMES_FILTER)}_originValidation(e){const n=e._key();return this.originValidationPromises[n]||(this.originValidationPromises[n]=NR(e)),this.originValidationPromises[n]}get _shouldInitProactively(){return m1()||cp()||bu()}}const XR=YR;var ly="@firebase/auth",uy="0.23.2";/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class JR{constructor(e){this.auth=e,this.internalListeners=new Map}getUid(){var e;return this.assertAuthConfigured(),((e=this.auth.currentUser)===null||e===void 0?void 0:e.uid)||null}async getToken(e){return this.assertAuthConfigured(),await this.auth._initializationPromise,this.auth.currentUser?{accessToken:await this.auth.currentUser.getIdToken(e)}:null}addAuthTokenListener(e){if(this.assertAuthConfigured(),this.internalListeners.has(e))return;const n=this.auth.onIdTokenChanged(r=>{e((r==null?void 0:r.stsTokenManager.accessToken)||null)});this.internalListeners.set(e,n),this.updateProactiveRefresh()}removeAuthTokenListener(e){this.assertAuthConfigured();const n=this.internalListeners.get(e);n&&(this.internalListeners.delete(e),n(),this.updateProactiveRefresh())}assertAuthConfigured(){U(this.auth._initializationPromise,"dependent-sdk-initialized-before-auth")}updateProactiveRefresh(){this.internalListeners.size>0?this.auth._startProactiveRefresh():this.auth._stopProactiveRefresh()}}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function ZR(t){switch(t){case"Node":return"node";case"ReactNative":return"rn";case"Worker":return"webworker";case"Cordova":return"cordova";default:return}}function ex(t){Hr(new lr("auth",(e,{options:n})=>{const r=e.getProvider("app").getImmediate(),i=e.getProvider("heartbeat"),s=e.getProvider("app-check-internal"),{apiKey:o,authDomain:a}=r.options;U(o&&!o.includes(":"),"invalid-api-key",{appName:r.name});const l={apiKey:o,authDomain:a,clientPlatform:t,apiHost:"identitytoolkit.googleapis.com",tokenApiHost:"securetoken.googleapis.com",apiScheme:"https",sdkClientVersion:g1(t)},u=new _N(r,i,s,l);return SN(u,n),u},"PUBLIC").setInstantiationMode("EXPLICIT").setInstanceCreatedCallback((e,n,r)=>{e.getProvider("auth-internal").initialize()})),Hr(new lr("auth-internal",e=>{const n=cs(e.getProvider("auth").getImmediate());return(r=>new JR(r))(n)},"PRIVATE").setInstantiationMode("EXPLICIT")),rn(ly,uy,ZR(t)),rn(ly,uy,"esm2017")}/** + * @license + * Copyright 2021 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const tx=5*60,nx=Qw("authIdTokenMaxAge")||tx;let cy=null;const rx=t=>async e=>{const n=e&&await e.getIdTokenResult(),r=n&&(new Date().getTime()-Date.parse(n.issuedAtTime))/1e3;if(r&&r>nx)return;const i=n==null?void 0:n.token;cy!==i&&(cy=i,await fetch(t,{method:i?"POST":"DELETE",headers:i?{Authorization:`Bearer ${i}`}:{}}))};function ix(t=sp()){const e=Uu(t,"auth");if(e.isInitialized())return e.getImmediate();const n=EN(t,{popupRedirectResolver:XR,persistence:[lR,YN,R1]}),r=Qw("authTokenSyncURL");if(r){const s=rx(r);HN(n,s,()=>s(n.currentUser)),zN(n,o=>s(o))}const i=Ww("auth");return i&&IN(n,`http://${i}`),n}ex("Browser");var sx=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},A,mp=mp||{},V=sx||self;function Vu(t){var e=typeof t;return e=e!="object"?e:t?Array.isArray(t)?"array":e:"null",e=="array"||e=="object"&&typeof t.length=="number"}function ta(t){var e=typeof t;return e=="object"&&t!=null||e=="function"}function ox(t){return Object.prototype.hasOwnProperty.call(t,ah)&&t[ah]||(t[ah]=++ax)}var ah="closure_uid_"+(1e9*Math.random()>>>0),ax=0;function lx(t,e,n){return t.call.apply(t.bind,arguments)}function ux(t,e,n){if(!t)throw Error();if(2{},e),V.removeEventListener("test",()=>{},e)}catch{}return t}();function Ro(t){return/^[\s\xa0]*$/.test(t)}function Bu(){var t=V.navigator;return t&&(t=t.userAgent)?t:""}function Yt(t){return Bu().indexOf(t)!=-1}function yp(t){return yp[" "](t),t}yp[" "]=function(){};function dx(t,e){var n=iA;return Object.prototype.hasOwnProperty.call(n,t)?n[t]:n[t]=e(t)}var fx=Yt("Opera"),Xi=Yt("Trident")||Yt("MSIE"),$1=Yt("Edge"),kd=$1||Xi,U1=Yt("Gecko")&&!(Bu().toLowerCase().indexOf("webkit")!=-1&&!Yt("Edge"))&&!(Yt("Trident")||Yt("MSIE"))&&!Yt("Edge"),px=Bu().toLowerCase().indexOf("webkit")!=-1&&!Yt("Edge");function b1(){var t=V.document;return t?t.documentMode:void 0}var Cd;e:{var lh="",uh=function(){var t=Bu();if(U1)return/rv:([^\);]+)(\)|;)/.exec(t);if($1)return/Edge\/([\d\.]+)/.exec(t);if(Xi)return/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(t);if(px)return/WebKit\/(\S+)/.exec(t);if(fx)return/(?:Version)[ \/]?(\S+)/.exec(t)}();if(uh&&(lh=uh?uh[1]:""),Xi){var ch=b1();if(ch!=null&&ch>parseFloat(lh)){Cd=String(ch);break e}}Cd=lh}var Nd;if(V.document&&Xi){var dy=b1();Nd=dy||parseInt(Cd,10)||void 0}else Nd=void 0;var mx=Nd;function xo(t,e){if(Ye.call(this,t?t.type:""),this.relatedTarget=this.g=this.target=null,this.button=this.screenY=this.screenX=this.clientY=this.clientX=0,this.key="",this.metaKey=this.shiftKey=this.altKey=this.ctrlKey=!1,this.state=null,this.pointerId=0,this.pointerType="",this.i=null,t){var n=this.type=t.type,r=t.changedTouches&&t.changedTouches.length?t.changedTouches[0]:null;if(this.target=t.target||t.srcElement,this.g=e,e=t.relatedTarget){if(U1){e:{try{yp(e.nodeName);var i=!0;break e}catch{}i=!1}i||(e=null)}}else n=="mouseover"?e=t.fromElement:n=="mouseout"&&(e=t.toElement);this.relatedTarget=e,r?(this.clientX=r.clientX!==void 0?r.clientX:r.pageX,this.clientY=r.clientY!==void 0?r.clientY:r.pageY,this.screenX=r.screenX||0,this.screenY=r.screenY||0):(this.clientX=t.clientX!==void 0?t.clientX:t.pageX,this.clientY=t.clientY!==void 0?t.clientY:t.pageY,this.screenX=t.screenX||0,this.screenY=t.screenY||0),this.button=t.button,this.key=t.key||"",this.ctrlKey=t.ctrlKey,this.altKey=t.altKey,this.shiftKey=t.shiftKey,this.metaKey=t.metaKey,this.pointerId=t.pointerId||0,this.pointerType=typeof t.pointerType=="string"?t.pointerType:gx[t.pointerType]||"",this.state=t.state,this.i=t,t.defaultPrevented&&xo.$.h.call(this)}}Le(xo,Ye);var gx={2:"touch",3:"pen",4:"mouse"};xo.prototype.h=function(){xo.$.h.call(this);var t=this.i;t.preventDefault?t.preventDefault():t.returnValue=!1};var na="closure_listenable_"+(1e6*Math.random()|0),yx=0;function vx(t,e,n,r,i){this.listener=t,this.proxy=null,this.src=e,this.type=n,this.capture=!!r,this.la=i,this.key=++yx,this.fa=this.ia=!1}function zu(t){t.fa=!0,t.listener=null,t.proxy=null,t.src=null,t.la=null}function vp(t,e,n){for(const r in t)e.call(n,t[r],r,t)}function wx(t,e){for(const n in t)e.call(void 0,t[n],n,t)}function F1(t){const e={};for(const n in t)e[n]=t[n];return e}const fy="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" ");function j1(t,e){let n,r;for(let i=1;i>>0);function Sp(t){return typeof t=="function"?t:(t[dh]||(t[dh]=function(e){return t.handleEvent(e)}),t[dh])}function Oe(){gr.call(this),this.i=new Hu(this),this.S=this,this.J=null}Le(Oe,gr);Oe.prototype[na]=!0;Oe.prototype.removeEventListener=function(t,e,n,r){H1(this,t,e,n,r)};function je(t,e){var n,r=t.J;if(r)for(n=[];r;r=r.J)n.push(r);if(t=t.S,r=e.type||e,typeof e=="string")e=new Ye(e,t);else if(e instanceof Ye)e.target=e.target||t;else{var i=e;e=new Ye(r,t),j1(e,i)}if(i=!0,n)for(var s=n.length-1;0<=s;s--){var o=e.g=n[s];i=za(o,r,!0,e)&&i}if(o=e.g=t,i=za(o,r,!0,e)&&i,i=za(o,r,!1,e)&&i,n)for(s=0;snew kx,t=>t.reset());class kx{constructor(){this.next=this.g=this.h=null}set(e,n){this.h=e,this.g=n,this.next=null}reset(){this.next=this.g=this.h=null}}function Cx(t){var e=1;t=t.split(":");const n=[];for(;0{throw t},0)}let Ao,Po=!1,Tp=new Tx,K1=()=>{const t=V.Promise.resolve(void 0);Ao=()=>{t.then(Rx)}};var Rx=()=>{for(var t;t=Ix();){try{t.h.call(t.g)}catch(n){Nx(n)}var e=W1;e.j(t),100>e.h&&(e.h++,t.next=e.g,e.g=t)}Po=!1};function qu(t,e){Oe.call(this),this.h=t||1,this.g=e||V,this.j=Qe(this.qb,this),this.l=Date.now()}Le(qu,Oe);A=qu.prototype;A.ga=!1;A.T=null;A.qb=function(){if(this.ga){var t=Date.now()-this.l;0{t.g=null,t.i&&(t.i=!1,G1(t))},t.j);const e=t.h;t.h=null,t.m.apply(null,e)}class xx extends gr{constructor(e,n){super(),this.m=e,this.j=n,this.h=null,this.i=!1,this.g=null}l(e){this.h=arguments,this.g?this.i=!0:G1(this)}N(){super.N(),this.g&&(V.clearTimeout(this.g),this.g=null,this.i=!1,this.h=null)}}function Do(t){gr.call(this),this.h=t,this.g={}}Le(Do,gr);var py=[];function Q1(t,e,n,r){Array.isArray(n)||(n&&(py[0]=n.toString()),n=py);for(var i=0;ir.length)){var i=r[1];if(Array.isArray(i)&&!(1>i.length)){var s=i[0];if(s!="noop"&&s!="stop"&&s!="close")for(var o=1;oc)&&(c!=3||kd||this.g&&(this.h.h||this.g.ja()||_y(this.g)))){this.J||c!=4||e==7||(e==8||0>=h?Oo(3):Oo(2)),Yu(this);var n=this.g.da();this.ca=n;t:if(i_(this)){var r=_y(this.g);t="";var i=r.length,s=Xt(this.g)==4;if(!this.h.i){if(typeof TextDecoder>"u"){Ar(this),to(this);var o="";break t}this.h.i=new V.TextDecoder}for(e=0;ee.length?eu:(e=e.slice(r,r+n),t.C=r+n,e)))}A.cancel=function(){this.J=!0,Ar(this)};function oa(t){t.Y=Date.now()+t.P,o_(t,t.P)}function o_(t,e){if(t.B!=null)throw Error("WatchDog timer not null");t.B=ra(Qe(t.lb,t),e)}function Yu(t){t.B&&(V.clearTimeout(t.B),t.B=null)}A.lb=function(){this.B=null;const t=Date.now();0<=t-this.Y?(Dx(this.j,this.A),this.L!=2&&(Oo(),it(17)),Ar(this),this.o=2,to(this)):o_(this,this.Y-t)};function to(t){t.l.H==0||t.J||R_(t.l,t)}function Ar(t){Yu(t);var e=t.M;e&&typeof e.sa=="function"&&e.sa(),t.M=null,kp(t.V),Y1(t.U),t.g&&(e=t.g,t.g=null,e.abort(),e.sa())}function Od(t,e){try{var n=t.l;if(n.H!=0&&(n.g==t||Ld(n.i,t))){if(!t.K&&Ld(n.i,t)&&n.H==3){try{var r=n.Ja.g.parse(e)}catch{r=null}if(Array.isArray(r)&&r.length==3){var i=r;if(i[0]==0){e:if(!n.u){if(n.g)if(n.g.G+3e3i[2]&&n.G&&n.A==0&&!n.v&&(n.v=ra(Qe(n.ib,n),6e3));if(1>=p_(n.i)&&n.oa){try{n.oa()}catch{}n.oa=void 0}}else Pr(n,11)}else if((t.K||n.g==t)&&ru(n),!Ro(e))for(i=n.Ja.g.parse(e),e=0;ee)throw Error("Bad port number "+e);t.m=e}else t.m=null}function yy(t,e,n){e instanceof Lo?(t.i=e,Hx(t.i,t.h)):(n||(e=Vs(e,Bx)),t.i=new Lo(e,t.h))}function ne(t,e,n){t.i.set(e,n)}function Xu(t){return ne(t,"zx",Math.floor(2147483648*Math.random()).toString(36)+Math.abs(Math.floor(2147483648*Math.random())^Date.now()).toString(36)),t}function js(t,e){return t?e?decodeURI(t.replace(/%25/g,"%2525")):decodeURIComponent(t):""}function Vs(t,e,n){return typeof t=="string"?(t=encodeURI(t).replace(e,Fx),n&&(t=t.replace(/%25([0-9a-fA-F]{2})/g,"%$1")),t):null}function Fx(t){return t=t.charCodeAt(0),"%"+(t>>4&15).toString(16)+(t&15).toString(16)}var vy=/[#\/\?@]/g,jx=/[#\?:]/g,Vx=/[#\?]/g,Bx=/[#\?@]/g,zx=/#/g;function Lo(t,e){this.h=this.g=null,this.i=t||null,this.j=!!e}function yr(t){t.g||(t.g=new Map,t.h=0,t.i&&bx(t.i,function(e,n){t.add(decodeURIComponent(e.replace(/\+/g," ")),n)}))}A=Lo.prototype;A.add=function(t,e){yr(this),this.i=null,t=ds(this,t);var n=this.g.get(t);return n||this.g.set(t,n=[]),n.push(e),this.h+=1,this};function u_(t,e){yr(t),e=ds(t,e),t.g.has(e)&&(t.i=null,t.h-=t.g.get(e).length,t.g.delete(e))}function c_(t,e){return yr(t),e=ds(t,e),t.g.has(e)}A.forEach=function(t,e){yr(this),this.g.forEach(function(n,r){n.forEach(function(i){t.call(e,i,r,this)},this)},this)};A.ta=function(){yr(this);const t=Array.from(this.g.values()),e=Array.from(this.g.keys()),n=[];for(let r=0;r=t.j:!1}function p_(t){return t.h?1:t.g?t.g.size:0}function Ld(t,e){return t.h?t.h==e:t.g?t.g.has(e):!1}function Ap(t,e){t.g?t.g.add(e):t.h=e}function m_(t,e){t.h&&t.h==e?t.h=null:t.g&&t.g.has(e)&&t.g.delete(e)}d_.prototype.cancel=function(){if(this.i=g_(this),this.h)this.h.cancel(),this.h=null;else if(this.g&&this.g.size!==0){for(const t of this.g.values())t.cancel();this.g.clear()}};function g_(t){if(t.h!=null)return t.i.concat(t.h.F);if(t.g!=null&&t.g.size!==0){let e=t.i;for(const n of t.g.values())e=e.concat(n.F);return e}return gp(t.i)}var Kx=class{stringify(t){return V.JSON.stringify(t,void 0)}parse(t){return V.JSON.parse(t,void 0)}};function Gx(){this.g=new Kx}function Qx(t,e,n){const r=n||"";try{a_(t,function(i,s){let o=i;ta(i)&&(o=Ip(i)),e.push(r+s+"="+encodeURIComponent(o))})}catch(i){throw e.push(r+"type="+encodeURIComponent("_badmap")),i}}function Yx(t,e){const n=new Wu;if(V.Image){const r=new Image;r.onload=Ba(Ha,n,r,"TestLoadImage: loaded",!0,e),r.onerror=Ba(Ha,n,r,"TestLoadImage: error",!1,e),r.onabort=Ba(Ha,n,r,"TestLoadImage: abort",!1,e),r.ontimeout=Ba(Ha,n,r,"TestLoadImage: timeout",!1,e),V.setTimeout(function(){r.ontimeout&&r.ontimeout()},1e4),r.src=t}else e(!1)}function Ha(t,e,n,r,i){try{e.onload=null,e.onerror=null,e.onabort=null,e.ontimeout=null,i(r)}catch{}}function aa(t){this.l=t.fc||null,this.j=t.ob||!1}Le(aa,Np);aa.prototype.g=function(){return new Ju(this.l,this.j)};aa.prototype.i=function(t){return function(){return t}}({});function Ju(t,e){Oe.call(this),this.F=t,this.u=e,this.m=void 0,this.readyState=Pp,this.status=0,this.responseType=this.responseText=this.response=this.statusText="",this.onreadystatechange=null,this.v=new Headers,this.h=null,this.C="GET",this.B="",this.g=!1,this.A=this.j=this.l=null}Le(Ju,Oe);var Pp=0;A=Ju.prototype;A.open=function(t,e){if(this.readyState!=Pp)throw this.abort(),Error("Error reopening a connection");this.C=t,this.B=e,this.readyState=1,Mo(this)};A.send=function(t){if(this.readyState!=1)throw this.abort(),Error("need to call open() first. ");this.g=!0;const e={headers:this.v,method:this.C,credentials:this.m,cache:void 0};t&&(e.body=t),(this.F||V).fetch(new Request(this.B,e)).then(this.$a.bind(this),this.ka.bind(this))};A.abort=function(){this.response=this.responseText="",this.v=new Headers,this.status=0,this.j&&this.j.cancel("Request was aborted.").catch(()=>{}),1<=this.readyState&&this.g&&this.readyState!=4&&(this.g=!1,la(this)),this.readyState=Pp};A.$a=function(t){if(this.g&&(this.l=t,this.h||(this.status=this.l.status,this.statusText=this.l.statusText,this.h=t.headers,this.readyState=2,Mo(this)),this.g&&(this.readyState=3,Mo(this),this.g)))if(this.responseType==="arraybuffer")t.arrayBuffer().then(this.Ya.bind(this),this.ka.bind(this));else if(typeof V.ReadableStream<"u"&&"body"in t){if(this.j=t.body.getReader(),this.u){if(this.responseType)throw Error('responseType must be empty for "streamBinaryChunks" mode responses.');this.response=[]}else this.response=this.responseText="",this.A=new TextDecoder;y_(this)}else t.text().then(this.Za.bind(this),this.ka.bind(this))};function y_(t){t.j.read().then(t.Xa.bind(t)).catch(t.ka.bind(t))}A.Xa=function(t){if(this.g){if(this.u&&t.value)this.response.push(t.value);else if(!this.u){var e=t.value?t.value:new Uint8Array(0);(e=this.A.decode(e,{stream:!t.done}))&&(this.response=this.responseText+=e)}t.done?la(this):Mo(this),this.readyState==3&&y_(this)}};A.Za=function(t){this.g&&(this.response=this.responseText=t,la(this))};A.Ya=function(t){this.g&&(this.response=t,la(this))};A.ka=function(){this.g&&la(this)};function la(t){t.readyState=4,t.l=null,t.j=null,t.A=null,Mo(t)}A.setRequestHeader=function(t,e){this.v.append(t,e)};A.getResponseHeader=function(t){return this.h&&this.h.get(t.toLowerCase())||""};A.getAllResponseHeaders=function(){if(!this.h)return"";const t=[],e=this.h.entries();for(var n=e.next();!n.done;)n=n.value,t.push(n[0]+": "+n[1]),n=e.next();return t.join(`\r +`)};function Mo(t){t.onreadystatechange&&t.onreadystatechange.call(t)}Object.defineProperty(Ju.prototype,"withCredentials",{get:function(){return this.m==="include"},set:function(t){this.m=t?"include":"same-origin"}});var Xx=V.JSON.parse;function ge(t){Oe.call(this),this.headers=new Map,this.u=t||null,this.h=!1,this.C=this.g=null,this.I="",this.m=0,this.j="",this.l=this.G=this.v=this.F=!1,this.B=0,this.A=null,this.K=v_,this.L=this.M=!1}Le(ge,Oe);var v_="",Jx=/^https?$/i,Zx=["POST","PUT"];A=ge.prototype;A.Oa=function(t){this.M=t};A.ha=function(t,e,n,r){if(this.g)throw Error("[goog.net.XhrIo] Object is active with another request="+this.I+"; newUri="+t);e=e?e.toUpperCase():"GET",this.I=t,this.j="",this.m=0,this.F=!1,this.h=!0,this.g=this.u?this.u.g():Ad.g(),this.C=this.u?gy(this.u):gy(Ad),this.g.onreadystatechange=Qe(this.La,this);try{this.G=!0,this.g.open(e,String(t),!0),this.G=!1}catch(s){wy(this,s);return}if(t=n||"",n=new Map(this.headers),r)if(Object.getPrototypeOf(r)===Object.prototype)for(var i in r)n.set(i,r[i]);else if(typeof r.keys=="function"&&typeof r.get=="function")for(const s of r.keys())n.set(s,r.get(s));else throw Error("Unknown input type for opt_headers: "+String(r));r=Array.from(n.keys()).find(s=>s.toLowerCase()=="content-type"),i=V.FormData&&t instanceof V.FormData,!(0<=M1(Zx,e))||r||i||n.set("Content-Type","application/x-www-form-urlencoded;charset=utf-8");for(const[s,o]of n)this.g.setRequestHeader(s,o);this.K&&(this.g.responseType=this.K),"withCredentials"in this.g&&this.g.withCredentials!==this.M&&(this.g.withCredentials=this.M);try{E_(this),0{}:null;t.g=null,t.C=null,e||je(t,"ready");try{n.onreadystatechange=r}catch{}}}function E_(t){t.g&&t.L&&(t.g.ontimeout=null),t.A&&(V.clearTimeout(t.A),t.A=null)}A.isActive=function(){return!!this.g};function Xt(t){return t.g?t.g.readyState:0}A.da=function(){try{return 2=t.i.j-(t.m?1:0)?!1:t.m?(t.j=e.F.concat(t.j),!0):t.H==1||t.H==2||t.C>=(t.cb?0:t.eb)?!1:(t.m=ra(Qe(t.Na,t,e),x_(t,t.C)),t.C++,!0)}A.Na=function(t){if(this.m)if(this.m=null,this.H==1){if(!t){this.W=Math.floor(1e5*Math.random()),t=this.W++;const i=new sa(this,this.l,t);let s=this.s;if(this.U&&(s?(s=F1(s),j1(s,this.U)):s=this.U),this.o!==null||this.O||(i.I=s,s=null),this.P)e:{for(var e=0,n=0;nu)s=Math.max(0,i[l].g-100),a=!1;else try{Qx(c,o,"req"+u+"_")}catch{r&&r(c)}}if(a){r=o.join("&");break e}}}return t=t.j.splice(0,n),e.F=t,r}function C_(t){if(!t.g&&!t.u){t.ba=1;var e=t.Ma;Ao||K1(),Po||(Ao(),Po=!0),Tp.add(e,t),t.A=0}}function Lp(t){return t.g||t.u||3<=t.A?!1:(t.ba++,t.u=ra(Qe(t.Ma,t),x_(t,t.A)),t.A++,!0)}A.Ma=function(){if(this.u=null,N_(this),this.ca&&!(this.M||this.g==null||0>=this.S)){var t=2*this.S;this.l.info("BP detection timer enabled: "+t),this.B=ra(Qe(this.jb,this),t)}};A.jb=function(){this.B&&(this.B=null,this.l.info("BP detection timeout reached."),this.l.info("Buffering proxy detected and switch to long-polling!"),this.G=!1,this.M=!0,it(10),ec(this),N_(this))};function Mp(t){t.B!=null&&(V.clearTimeout(t.B),t.B=null)}function N_(t){t.g=new sa(t,t.l,"rpc",t.ba),t.o===null&&(t.g.I=t.s),t.g.O=0;var e=Cn(t.wa);ne(e,"RID","rpc"),ne(e,"SID",t.K),ne(e,"AID",t.V),ne(e,"CI",t.G?"0":"1"),!t.G&&t.qa&&ne(e,"TO",t.qa),ne(e,"TYPE","xmlhttp"),ua(t,e),t.o&&t.s&&Dp(e,t.o,t.s),t.L&&t.g.setTimeout(t.L);var n=t.g;t=t.pa,n.L=1,n.v=Xu(Cn(e)),n.s=null,n.S=!0,r_(n,t)}A.ib=function(){this.v!=null&&(this.v=null,ec(this),Lp(this),it(19))};function ru(t){t.v!=null&&(V.clearTimeout(t.v),t.v=null)}function R_(t,e){var n=null;if(t.g==e){ru(t),Mp(t),t.g=null;var r=2}else if(Ld(t.i,e))n=e.F,m_(t.i,e),r=1;else return;if(t.H!=0){if(e.i)if(r==1){n=e.s?e.s.length:0,e=Date.now()-e.G;var i=t.C;r=Ku(),je(r,new Z1(r,n)),tc(t)}else C_(t);else if(i=e.o,i==3||i==0&&0i;++i)r[i]=e.charCodeAt(n++)|e.charCodeAt(n++)<<8|e.charCodeAt(n++)<<16|e.charCodeAt(n++)<<24;else for(i=0;16>i;++i)r[i]=e[n++]|e[n++]<<8|e[n++]<<16|e[n++]<<24;e=t.g[0],n=t.g[1],i=t.g[2];var s=t.g[3],o=e+(s^n&(i^s))+r[0]+3614090360&4294967295;e=n+(o<<7&4294967295|o>>>25),o=s+(i^e&(n^i))+r[1]+3905402710&4294967295,s=e+(o<<12&4294967295|o>>>20),o=i+(n^s&(e^n))+r[2]+606105819&4294967295,i=s+(o<<17&4294967295|o>>>15),o=n+(e^i&(s^e))+r[3]+3250441966&4294967295,n=i+(o<<22&4294967295|o>>>10),o=e+(s^n&(i^s))+r[4]+4118548399&4294967295,e=n+(o<<7&4294967295|o>>>25),o=s+(i^e&(n^i))+r[5]+1200080426&4294967295,s=e+(o<<12&4294967295|o>>>20),o=i+(n^s&(e^n))+r[6]+2821735955&4294967295,i=s+(o<<17&4294967295|o>>>15),o=n+(e^i&(s^e))+r[7]+4249261313&4294967295,n=i+(o<<22&4294967295|o>>>10),o=e+(s^n&(i^s))+r[8]+1770035416&4294967295,e=n+(o<<7&4294967295|o>>>25),o=s+(i^e&(n^i))+r[9]+2336552879&4294967295,s=e+(o<<12&4294967295|o>>>20),o=i+(n^s&(e^n))+r[10]+4294925233&4294967295,i=s+(o<<17&4294967295|o>>>15),o=n+(e^i&(s^e))+r[11]+2304563134&4294967295,n=i+(o<<22&4294967295|o>>>10),o=e+(s^n&(i^s))+r[12]+1804603682&4294967295,e=n+(o<<7&4294967295|o>>>25),o=s+(i^e&(n^i))+r[13]+4254626195&4294967295,s=e+(o<<12&4294967295|o>>>20),o=i+(n^s&(e^n))+r[14]+2792965006&4294967295,i=s+(o<<17&4294967295|o>>>15),o=n+(e^i&(s^e))+r[15]+1236535329&4294967295,n=i+(o<<22&4294967295|o>>>10),o=e+(i^s&(n^i))+r[1]+4129170786&4294967295,e=n+(o<<5&4294967295|o>>>27),o=s+(n^i&(e^n))+r[6]+3225465664&4294967295,s=e+(o<<9&4294967295|o>>>23),o=i+(e^n&(s^e))+r[11]+643717713&4294967295,i=s+(o<<14&4294967295|o>>>18),o=n+(s^e&(i^s))+r[0]+3921069994&4294967295,n=i+(o<<20&4294967295|o>>>12),o=e+(i^s&(n^i))+r[5]+3593408605&4294967295,e=n+(o<<5&4294967295|o>>>27),o=s+(n^i&(e^n))+r[10]+38016083&4294967295,s=e+(o<<9&4294967295|o>>>23),o=i+(e^n&(s^e))+r[15]+3634488961&4294967295,i=s+(o<<14&4294967295|o>>>18),o=n+(s^e&(i^s))+r[4]+3889429448&4294967295,n=i+(o<<20&4294967295|o>>>12),o=e+(i^s&(n^i))+r[9]+568446438&4294967295,e=n+(o<<5&4294967295|o>>>27),o=s+(n^i&(e^n))+r[14]+3275163606&4294967295,s=e+(o<<9&4294967295|o>>>23),o=i+(e^n&(s^e))+r[3]+4107603335&4294967295,i=s+(o<<14&4294967295|o>>>18),o=n+(s^e&(i^s))+r[8]+1163531501&4294967295,n=i+(o<<20&4294967295|o>>>12),o=e+(i^s&(n^i))+r[13]+2850285829&4294967295,e=n+(o<<5&4294967295|o>>>27),o=s+(n^i&(e^n))+r[2]+4243563512&4294967295,s=e+(o<<9&4294967295|o>>>23),o=i+(e^n&(s^e))+r[7]+1735328473&4294967295,i=s+(o<<14&4294967295|o>>>18),o=n+(s^e&(i^s))+r[12]+2368359562&4294967295,n=i+(o<<20&4294967295|o>>>12),o=e+(n^i^s)+r[5]+4294588738&4294967295,e=n+(o<<4&4294967295|o>>>28),o=s+(e^n^i)+r[8]+2272392833&4294967295,s=e+(o<<11&4294967295|o>>>21),o=i+(s^e^n)+r[11]+1839030562&4294967295,i=s+(o<<16&4294967295|o>>>16),o=n+(i^s^e)+r[14]+4259657740&4294967295,n=i+(o<<23&4294967295|o>>>9),o=e+(n^i^s)+r[1]+2763975236&4294967295,e=n+(o<<4&4294967295|o>>>28),o=s+(e^n^i)+r[4]+1272893353&4294967295,s=e+(o<<11&4294967295|o>>>21),o=i+(s^e^n)+r[7]+4139469664&4294967295,i=s+(o<<16&4294967295|o>>>16),o=n+(i^s^e)+r[10]+3200236656&4294967295,n=i+(o<<23&4294967295|o>>>9),o=e+(n^i^s)+r[13]+681279174&4294967295,e=n+(o<<4&4294967295|o>>>28),o=s+(e^n^i)+r[0]+3936430074&4294967295,s=e+(o<<11&4294967295|o>>>21),o=i+(s^e^n)+r[3]+3572445317&4294967295,i=s+(o<<16&4294967295|o>>>16),o=n+(i^s^e)+r[6]+76029189&4294967295,n=i+(o<<23&4294967295|o>>>9),o=e+(n^i^s)+r[9]+3654602809&4294967295,e=n+(o<<4&4294967295|o>>>28),o=s+(e^n^i)+r[12]+3873151461&4294967295,s=e+(o<<11&4294967295|o>>>21),o=i+(s^e^n)+r[15]+530742520&4294967295,i=s+(o<<16&4294967295|o>>>16),o=n+(i^s^e)+r[2]+3299628645&4294967295,n=i+(o<<23&4294967295|o>>>9),o=e+(i^(n|~s))+r[0]+4096336452&4294967295,e=n+(o<<6&4294967295|o>>>26),o=s+(n^(e|~i))+r[7]+1126891415&4294967295,s=e+(o<<10&4294967295|o>>>22),o=i+(e^(s|~n))+r[14]+2878612391&4294967295,i=s+(o<<15&4294967295|o>>>17),o=n+(s^(i|~e))+r[5]+4237533241&4294967295,n=i+(o<<21&4294967295|o>>>11),o=e+(i^(n|~s))+r[12]+1700485571&4294967295,e=n+(o<<6&4294967295|o>>>26),o=s+(n^(e|~i))+r[3]+2399980690&4294967295,s=e+(o<<10&4294967295|o>>>22),o=i+(e^(s|~n))+r[10]+4293915773&4294967295,i=s+(o<<15&4294967295|o>>>17),o=n+(s^(i|~e))+r[1]+2240044497&4294967295,n=i+(o<<21&4294967295|o>>>11),o=e+(i^(n|~s))+r[8]+1873313359&4294967295,e=n+(o<<6&4294967295|o>>>26),o=s+(n^(e|~i))+r[15]+4264355552&4294967295,s=e+(o<<10&4294967295|o>>>22),o=i+(e^(s|~n))+r[6]+2734768916&4294967295,i=s+(o<<15&4294967295|o>>>17),o=n+(s^(i|~e))+r[13]+1309151649&4294967295,n=i+(o<<21&4294967295|o>>>11),o=e+(i^(n|~s))+r[4]+4149444226&4294967295,e=n+(o<<6&4294967295|o>>>26),o=s+(n^(e|~i))+r[11]+3174756917&4294967295,s=e+(o<<10&4294967295|o>>>22),o=i+(e^(s|~n))+r[2]+718787259&4294967295,i=s+(o<<15&4294967295|o>>>17),o=n+(s^(i|~e))+r[9]+3951481745&4294967295,t.g[0]=t.g[0]+e&4294967295,t.g[1]=t.g[1]+(i+(o<<21&4294967295|o>>>11))&4294967295,t.g[2]=t.g[2]+i&4294967295,t.g[3]=t.g[3]+s&4294967295}qt.prototype.j=function(t,e){e===void 0&&(e=t.length);for(var n=e-this.blockSize,r=this.m,i=this.h,s=0;sthis.h?this.blockSize:2*this.blockSize)-this.h);t[0]=128;for(var e=1;ee;++e)for(var r=0;32>r;r+=8)t[n++]=this.g[e]>>>r&255;return t};function Z(t,e){this.h=e;for(var n=[],r=!0,i=t.length-1;0<=i;i--){var s=t[i]|0;r&&s==e||(n[i]=s,r=!1)}this.g=n}var iA={};function $p(t){return-128<=t&&128>t?dx(t,function(e){return new Z([e|0],0>e?-1:0)}):new Z([t|0],0>t?-1:0)}function Jt(t){if(isNaN(t)||!isFinite(t))return Fi;if(0>t)return be(Jt(-t));for(var e=[],n=1,r=0;t>=n;r++)e[r]=t/n|0,n*=Md;return new Z(e,0)}function $_(t,e){if(t.length==0)throw Error("number format error: empty string");if(e=e||10,2>e||36s?(s=Jt(Math.pow(e,s)),r=r.R(s).add(Jt(o))):(r=r.R(n),r=r.add(Jt(o)))}return r}var Md=4294967296,Fi=$p(0),$d=$p(1),Sy=$p(16777216);A=Z.prototype;A.ea=function(){if(Pt(this))return-be(this).ea();for(var t=0,e=1,n=0;nt||36>>0).toString(t);if(n=i,yn(n))return s+r;for(;6>s.length;)s="0"+s;r=s+r}};A.D=function(t){return 0>t?0:t>>16)+(this.D(i)>>>16)+(t.D(i)>>>16);r=o>>>16,s&=65535,o&=65535,n[i]=o<<16|s}return new Z(n,n[n.length-1]&-2147483648?-1:0)};function su(t,e){return t.add(be(e))}A.R=function(t){if(yn(this)||yn(t))return Fi;if(Pt(this))return Pt(t)?be(this).R(be(t)):be(be(this).R(t));if(Pt(t))return be(this.R(be(t)));if(0>this.X(Sy)&&0>t.X(Sy))return Jt(this.ea()*t.ea());for(var e=this.g.length+t.g.length,n=[],r=0;r<2*e;r++)n[r]=0;for(r=0;r>>16,o=this.D(r)&65535,a=t.D(i)>>>16,l=t.D(i)&65535;n[2*r+2*i]+=o*l,qa(n,2*r+2*i),n[2*r+2*i+1]+=s*l,qa(n,2*r+2*i+1),n[2*r+2*i+1]+=o*a,qa(n,2*r+2*i+1),n[2*r+2*i+2]+=s*a,qa(n,2*r+2*i+2)}for(r=0;r>>16,t[e]&=65535,e++}function Ds(t,e){this.g=t,this.h=e}function ou(t,e){if(yn(e))throw Error("division by zero");if(yn(t))return new Ds(Fi,Fi);if(Pt(t))return e=ou(be(t),e),new Ds(be(e.g),be(e.h));if(Pt(e))return e=ou(t,be(e)),new Ds(be(e.g),e.h);if(30=r.X(t);)n=Iy(n),r=Iy(r);var i=ci(n,1),s=ci(r,1);for(r=ci(r,2),n=ci(n,2);!yn(r);){var o=s.add(r);0>=o.X(t)&&(i=i.add(n),s=o),r=ci(r,1),n=ci(n,1)}return e=su(t,i.R(e)),new Ds(i,e)}for(i=Fi;0<=t.X(e);){for(n=Math.max(1,Math.floor(t.ea()/e.ea())),r=Math.ceil(Math.log(n)/Math.LN2),r=48>=r?1:Math.pow(2,r-48),s=Jt(n),o=s.R(e);Pt(o)||0>>31;return new Z(n,t.h)}function ci(t,e){var n=e>>5;e%=32;for(var r=t.g.length-n,i=[],s=0;s>>e|t.D(s+n+1)<<32-e:t.D(s+n);return new Z(i,t.h)}iu.prototype.createWebChannel=iu.prototype.g;kt.prototype.send=kt.prototype.u;kt.prototype.open=kt.prototype.m;kt.prototype.close=kt.prototype.close;Gu.NO_ERROR=0;Gu.TIMEOUT=8;Gu.HTTP_ERROR=6;e_.COMPLETE="complete";t_.EventType=ia;ia.OPEN="a";ia.CLOSE="b";ia.ERROR="c";ia.MESSAGE="d";Oe.prototype.listen=Oe.prototype.O;ge.prototype.listenOnce=ge.prototype.P;ge.prototype.getLastError=ge.prototype.Sa;ge.prototype.getLastErrorCode=ge.prototype.Ia;ge.prototype.getStatus=ge.prototype.da;ge.prototype.getResponseJson=ge.prototype.Wa;ge.prototype.getResponseText=ge.prototype.ja;ge.prototype.send=ge.prototype.ha;ge.prototype.setWithCredentials=ge.prototype.Oa;qt.prototype.digest=qt.prototype.l;qt.prototype.reset=qt.prototype.reset;qt.prototype.update=qt.prototype.j;Z.prototype.add=Z.prototype.add;Z.prototype.multiply=Z.prototype.R;Z.prototype.modulo=Z.prototype.gb;Z.prototype.compare=Z.prototype.X;Z.prototype.toNumber=Z.prototype.ea;Z.prototype.toString=Z.prototype.toString;Z.prototype.getBits=Z.prototype.D;Z.fromNumber=Jt;Z.fromString=$_;var sA=function(){return new iu},oA=function(){return Ku()},ph=Gu,aA=e_,lA=ti,Ty={xb:0,Ab:1,Bb:2,Ub:3,Zb:4,Wb:5,Xb:6,Vb:7,Tb:8,Yb:9,PROXY:10,NOPROXY:11,Rb:12,Nb:13,Ob:14,Mb:15,Pb:16,Qb:17,tb:18,sb:19,ub:20},uA=aa,Wa=t_,cA=ge,hA=qt,ji=Z;const ky="@firebase/firestore";/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class qe{constructor(e){this.uid=e}isAuthenticated(){return this.uid!=null}toKey(){return this.isAuthenticated()?"uid:"+this.uid:"anonymous-user"}isEqual(e){return e.uid===this.uid}}qe.UNAUTHENTICATED=new qe(null),qe.GOOGLE_CREDENTIALS=new qe("google-credentials-uid"),qe.FIRST_PARTY=new qe("first-party-uid"),qe.MOCK_USER=new qe("mock-user");/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */let ps="9.22.1";/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const Kr=new rp("@firebase/firestore");function Cy(){return Kr.logLevel}function M(t,...e){if(Kr.logLevel<=Y.DEBUG){const n=e.map(Up);Kr.debug(`Firestore (${ps}): ${t}`,...n)}}function Nn(t,...e){if(Kr.logLevel<=Y.ERROR){const n=e.map(Up);Kr.error(`Firestore (${ps}): ${t}`,...n)}}function Ji(t,...e){if(Kr.logLevel<=Y.WARN){const n=e.map(Up);Kr.warn(`Firestore (${ps}): ${t}`,...n)}}function Up(t){if(typeof t=="string")return t;try{return e=t,JSON.stringify(e)}catch{return t}/** +* @license +* Copyright 2020 Google LLC +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/var e}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function F(t="Unexpected state"){const e=`FIRESTORE (${ps}) INTERNAL ASSERTION FAILED: `+t;throw Nn(e),new Error(e)}function se(t,e){t||F()}function z(t,e){return t}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const T={OK:"ok",CANCELLED:"cancelled",UNKNOWN:"unknown",INVALID_ARGUMENT:"invalid-argument",DEADLINE_EXCEEDED:"deadline-exceeded",NOT_FOUND:"not-found",ALREADY_EXISTS:"already-exists",PERMISSION_DENIED:"permission-denied",UNAUTHENTICATED:"unauthenticated",RESOURCE_EXHAUSTED:"resource-exhausted",FAILED_PRECONDITION:"failed-precondition",ABORTED:"aborted",OUT_OF_RANGE:"out-of-range",UNIMPLEMENTED:"unimplemented",INTERNAL:"internal",UNAVAILABLE:"unavailable",DATA_LOSS:"data-loss"};class P extends un{constructor(e,n){super(e,n),this.code=e,this.message=n,this.toString=()=>`${this.name}: [code=${this.code}]: ${this.message}`}}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class wn{constructor(){this.promise=new Promise((e,n)=>{this.resolve=e,this.reject=n})}}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class U_{constructor(e,n){this.user=n,this.type="OAuth",this.headers=new Map,this.headers.set("Authorization",`Bearer ${e}`)}}class dA{getToken(){return Promise.resolve(null)}invalidateToken(){}start(e,n){e.enqueueRetryable(()=>n(qe.UNAUTHENTICATED))}shutdown(){}}class fA{constructor(e){this.token=e,this.changeListener=null}getToken(){return Promise.resolve(this.token)}invalidateToken(){}start(e,n){this.changeListener=n,e.enqueueRetryable(()=>n(this.token.user))}shutdown(){this.changeListener=null}}class pA{constructor(e){this.t=e,this.currentUser=qe.UNAUTHENTICATED,this.i=0,this.forceRefresh=!1,this.auth=null}start(e,n){let r=this.i;const i=l=>this.i!==r?(r=this.i,n(l)):Promise.resolve();let s=new wn;this.o=()=>{this.i++,this.currentUser=this.u(),s.resolve(),s=new wn,e.enqueueRetryable(()=>i(this.currentUser))};const o=()=>{const l=s;e.enqueueRetryable(async()=>{await l.promise,await i(this.currentUser)})},a=l=>{M("FirebaseAuthCredentialsProvider","Auth detected"),this.auth=l,this.auth.addAuthTokenListener(this.o),o()};this.t.onInit(l=>a(l)),setTimeout(()=>{if(!this.auth){const l=this.t.getImmediate({optional:!0});l?a(l):(M("FirebaseAuthCredentialsProvider","Auth not yet detected"),s.resolve(),s=new wn)}},0),o()}getToken(){const e=this.i,n=this.forceRefresh;return this.forceRefresh=!1,this.auth?this.auth.getToken(n).then(r=>this.i!==e?(M("FirebaseAuthCredentialsProvider","getToken aborted due to token change."),this.getToken()):r?(se(typeof r.accessToken=="string"),new U_(r.accessToken,this.currentUser)):null):Promise.resolve(null)}invalidateToken(){this.forceRefresh=!0}shutdown(){this.auth&&this.auth.removeAuthTokenListener(this.o)}u(){const e=this.auth&&this.auth.getUid();return se(e===null||typeof e=="string"),new qe(e)}}class mA{constructor(e,n,r){this.h=e,this.l=n,this.m=r,this.type="FirstParty",this.user=qe.FIRST_PARTY,this.g=new Map}p(){return this.m?this.m():null}get headers(){this.g.set("X-Goog-AuthUser",this.h);const e=this.p();return e&&this.g.set("Authorization",e),this.l&&this.g.set("X-Goog-Iam-Authorization-Token",this.l),this.g}}class gA{constructor(e,n,r){this.h=e,this.l=n,this.m=r}getToken(){return Promise.resolve(new mA(this.h,this.l,this.m))}start(e,n){e.enqueueRetryable(()=>n(qe.FIRST_PARTY))}shutdown(){}invalidateToken(){}}class yA{constructor(e){this.value=e,this.type="AppCheck",this.headers=new Map,e&&e.length>0&&this.headers.set("x-firebase-appcheck",this.value)}}class vA{constructor(e){this.I=e,this.forceRefresh=!1,this.appCheck=null,this.T=null}start(e,n){const r=s=>{s.error!=null&&M("FirebaseAppCheckTokenProvider",`Error getting App Check token; using placeholder token instead. Error: ${s.error.message}`);const o=s.token!==this.T;return this.T=s.token,M("FirebaseAppCheckTokenProvider",`Received ${o?"new":"existing"} token.`),o?n(s.token):Promise.resolve()};this.o=s=>{e.enqueueRetryable(()=>r(s))};const i=s=>{M("FirebaseAppCheckTokenProvider","AppCheck detected"),this.appCheck=s,this.appCheck.addTokenListener(this.o)};this.I.onInit(s=>i(s)),setTimeout(()=>{if(!this.appCheck){const s=this.I.getImmediate({optional:!0});s?i(s):M("FirebaseAppCheckTokenProvider","AppCheck not yet detected")}},0)}getToken(){const e=this.forceRefresh;return this.forceRefresh=!1,this.appCheck?this.appCheck.getToken(e).then(n=>n?(se(typeof n.token=="string"),this.T=n.token,new yA(n.token)):null):Promise.resolve(null)}invalidateToken(){this.forceRefresh=!0}shutdown(){this.appCheck&&this.appCheck.removeTokenListener(this.o)}}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function wA(t){const e=typeof self<"u"&&(self.crypto||self.msCrypto),n=new Uint8Array(t);if(e&&typeof e.getRandomValues=="function")e.getRandomValues(n);else for(let r=0;re?1:0}function Zi(t,e,n){return t.length===e.length&&t.every((r,i)=>n(r,e[i]))}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class we{constructor(e,n){if(this.seconds=e,this.nanoseconds=n,n<0)throw new P(T.INVALID_ARGUMENT,"Timestamp nanoseconds out of range: "+n);if(n>=1e9)throw new P(T.INVALID_ARGUMENT,"Timestamp nanoseconds out of range: "+n);if(e<-62135596800)throw new P(T.INVALID_ARGUMENT,"Timestamp seconds out of range: "+e);if(e>=253402300800)throw new P(T.INVALID_ARGUMENT,"Timestamp seconds out of range: "+e)}static now(){return we.fromMillis(Date.now())}static fromDate(e){return we.fromMillis(e.getTime())}static fromMillis(e){const n=Math.floor(e/1e3),r=Math.floor(1e6*(e-1e3*n));return new we(n,r)}toDate(){return new Date(this.toMillis())}toMillis(){return 1e3*this.seconds+this.nanoseconds/1e6}_compareTo(e){return this.seconds===e.seconds?X(this.nanoseconds,e.nanoseconds):X(this.seconds,e.seconds)}isEqual(e){return e.seconds===this.seconds&&e.nanoseconds===this.nanoseconds}toString(){return"Timestamp(seconds="+this.seconds+", nanoseconds="+this.nanoseconds+")"}toJSON(){return{seconds:this.seconds,nanoseconds:this.nanoseconds}}valueOf(){const e=this.seconds- -62135596800;return String(e).padStart(12,"0")+"."+String(this.nanoseconds).padStart(9,"0")}}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class B{constructor(e){this.timestamp=e}static fromTimestamp(e){return new B(e)}static min(){return new B(new we(0,0))}static max(){return new B(new we(253402300799,999999999))}compareTo(e){return this.timestamp._compareTo(e.timestamp)}isEqual(e){return this.timestamp.isEqual(e.timestamp)}toMicroseconds(){return 1e6*this.timestamp.seconds+this.timestamp.nanoseconds/1e3}toString(){return"SnapshotVersion("+this.timestamp.toString()+")"}toTimestamp(){return this.timestamp}}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class $o{constructor(e,n,r){n===void 0?n=0:n>e.length&&F(),r===void 0?r=e.length-n:r>e.length-n&&F(),this.segments=e,this.offset=n,this.len=r}get length(){return this.len}isEqual(e){return $o.comparator(this,e)===0}child(e){const n=this.segments.slice(this.offset,this.limit());return e instanceof $o?e.forEach(r=>{n.push(r)}):n.push(e),this.construct(n)}limit(){return this.offset+this.length}popFirst(e){return e=e===void 0?1:e,this.construct(this.segments,this.offset+e,this.length-e)}popLast(){return this.construct(this.segments,this.offset,this.length-1)}firstSegment(){return this.segments[this.offset]}lastSegment(){return this.get(this.length-1)}get(e){return this.segments[this.offset+e]}isEmpty(){return this.length===0}isPrefixOf(e){if(e.lengtho)return 1}return e.lengthn.length?1:0}}class re extends $o{construct(e,n,r){return new re(e,n,r)}canonicalString(){return this.toArray().join("/")}toString(){return this.canonicalString()}static fromString(...e){const n=[];for(const r of e){if(r.indexOf("//")>=0)throw new P(T.INVALID_ARGUMENT,`Invalid segment (${r}). Paths must not contain // in them.`);n.push(...r.split("/").filter(i=>i.length>0))}return new re(n)}static emptyPath(){return new re([])}}const _A=/^[_a-zA-Z][_a-zA-Z0-9]*$/;class Ge extends $o{construct(e,n,r){return new Ge(e,n,r)}static isValidIdentifier(e){return _A.test(e)}canonicalString(){return this.toArray().map(e=>(e=e.replace(/\\/g,"\\\\").replace(/`/g,"\\`"),Ge.isValidIdentifier(e)||(e="`"+e+"`"),e)).join(".")}toString(){return this.canonicalString()}isKeyField(){return this.length===1&&this.get(0)==="__name__"}static keyField(){return new Ge(["__name__"])}static fromServerFormat(e){const n=[];let r="",i=0;const s=()=>{if(r.length===0)throw new P(T.INVALID_ARGUMENT,`Invalid field path (${e}). Paths must not be empty, begin with '.', end with '.', or contain '..'`);n.push(r),r=""};let o=!1;for(;i=2&&this.path.get(this.path.length-2)===e}getCollectionGroup(){return this.path.get(this.path.length-2)}getCollectionPath(){return this.path.popLast()}isEqual(e){return e!==null&&re.comparator(this.path,e.path)===0}toString(){return this.path.toString()}static comparator(e,n){return re.comparator(e.path,n.path)}static isDocumentKey(e){return e.length%2==0}static fromSegments(e){return new $(new re(e.slice()))}}function EA(t,e){const n=t.toTimestamp().seconds,r=t.toTimestamp().nanoseconds+1,i=B.fromTimestamp(r===1e9?new we(n+1,0):new we(n,r));return new ur(i,$.empty(),e)}function SA(t){return new ur(t.readTime,t.key,-1)}class ur{constructor(e,n,r){this.readTime=e,this.documentKey=n,this.largestBatchId=r}static min(){return new ur(B.min(),$.empty(),-1)}static max(){return new ur(B.max(),$.empty(),-1)}}function IA(t,e){let n=t.readTime.compareTo(e.readTime);return n!==0?n:(n=$.comparator(t.documentKey,e.documentKey),n!==0?n:X(t.largestBatchId,e.largestBatchId))}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const TA="The current tab is not in the required state to perform this operation. It might be necessary to refresh the browser tab.";class kA{constructor(){this.onCommittedListeners=[]}addOnCommittedListener(e){this.onCommittedListeners.push(e)}raiseOnCommittedEvent(){this.onCommittedListeners.forEach(e=>e())}}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */async function ca(t){if(t.code!==T.FAILED_PRECONDITION||t.message!==TA)throw t;M("LocalStore","Unexpectedly lost primary lease")}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class N{constructor(e){this.nextCallback=null,this.catchCallback=null,this.result=void 0,this.error=void 0,this.isDone=!1,this.callbackAttached=!1,e(n=>{this.isDone=!0,this.result=n,this.nextCallback&&this.nextCallback(n)},n=>{this.isDone=!0,this.error=n,this.catchCallback&&this.catchCallback(n)})}catch(e){return this.next(void 0,e)}next(e,n){return this.callbackAttached&&F(),this.callbackAttached=!0,this.isDone?this.error?this.wrapFailure(n,this.error):this.wrapSuccess(e,this.result):new N((r,i)=>{this.nextCallback=s=>{this.wrapSuccess(e,s).next(r,i)},this.catchCallback=s=>{this.wrapFailure(n,s).next(r,i)}})}toPromise(){return new Promise((e,n)=>{this.next(e,n)})}wrapUserFunction(e){try{const n=e();return n instanceof N?n:N.resolve(n)}catch(n){return N.reject(n)}}wrapSuccess(e,n){return e?this.wrapUserFunction(()=>e(n)):N.resolve(n)}wrapFailure(e,n){return e?this.wrapUserFunction(()=>e(n)):N.reject(n)}static resolve(e){return new N((n,r)=>{n(e)})}static reject(e){return new N((n,r)=>{r(e)})}static waitFor(e){return new N((n,r)=>{let i=0,s=0,o=!1;e.forEach(a=>{++i,a.next(()=>{++s,o&&s===i&&n()},l=>r(l))}),o=!0,s===i&&n()})}static or(e){let n=N.resolve(!1);for(const r of e)n=n.next(i=>i?N.resolve(i):r());return n}static forEach(e,n){const r=[];return e.forEach((i,s)=>{r.push(n.call(this,i,s))}),this.waitFor(r)}static mapArray(e,n){return new N((r,i)=>{const s=e.length,o=new Array(s);let a=0;for(let l=0;l{o[u]=c,++a,a===s&&r(o)},c=>i(c))}})}static doWhile(e,n){return new N((r,i)=>{const s=()=>{e()===!0?n().next(()=>{s()},i):r()};s()})}}function ha(t){return t.name==="IndexedDbTransactionError"}/** + * @license + * Copyright 2018 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class bp{constructor(e,n){this.previousValue=e,n&&(n.sequenceNumberHandler=r=>this.ot(r),this.ut=r=>n.writeSequenceNumber(r))}ot(e){return this.previousValue=Math.max(e,this.previousValue),this.previousValue}next(){const e=++this.previousValue;return this.ut&&this.ut(e),e}}bp.ct=-1;function nc(t){return t==null}function au(t){return t===0&&1/t==-1/0}function CA(t){return typeof t=="number"&&Number.isInteger(t)&&!au(t)&&t<=Number.MAX_SAFE_INTEGER&&t>=Number.MIN_SAFE_INTEGER}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function Ny(t){let e=0;for(const n in t)Object.prototype.hasOwnProperty.call(t,n)&&e++;return e}function ni(t,e){for(const n in t)Object.prototype.hasOwnProperty.call(t,n)&&e(n,t[n])}function F_(t){for(const e in t)if(Object.prototype.hasOwnProperty.call(t,e))return!1;return!0}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class fe{constructor(e,n){this.comparator=e,this.root=n||Ue.EMPTY}insert(e,n){return new fe(this.comparator,this.root.insert(e,n,this.comparator).copy(null,null,Ue.BLACK,null,null))}remove(e){return new fe(this.comparator,this.root.remove(e,this.comparator).copy(null,null,Ue.BLACK,null,null))}get(e){let n=this.root;for(;!n.isEmpty();){const r=this.comparator(e,n.key);if(r===0)return n.value;r<0?n=n.left:r>0&&(n=n.right)}return null}indexOf(e){let n=0,r=this.root;for(;!r.isEmpty();){const i=this.comparator(e,r.key);if(i===0)return n+r.left.size;i<0?r=r.left:(n+=r.left.size+1,r=r.right)}return-1}isEmpty(){return this.root.isEmpty()}get size(){return this.root.size}minKey(){return this.root.minKey()}maxKey(){return this.root.maxKey()}inorderTraversal(e){return this.root.inorderTraversal(e)}forEach(e){this.inorderTraversal((n,r)=>(e(n,r),!1))}toString(){const e=[];return this.inorderTraversal((n,r)=>(e.push(`${n}:${r}`),!1)),`{${e.join(", ")}}`}reverseTraversal(e){return this.root.reverseTraversal(e)}getIterator(){return new Ka(this.root,null,this.comparator,!1)}getIteratorFrom(e){return new Ka(this.root,e,this.comparator,!1)}getReverseIterator(){return new Ka(this.root,null,this.comparator,!0)}getReverseIteratorFrom(e){return new Ka(this.root,e,this.comparator,!0)}}class Ka{constructor(e,n,r,i){this.isReverse=i,this.nodeStack=[];let s=1;for(;!e.isEmpty();)if(s=n?r(e.key,n):1,n&&i&&(s*=-1),s<0)e=this.isReverse?e.left:e.right;else{if(s===0){this.nodeStack.push(e);break}this.nodeStack.push(e),e=this.isReverse?e.right:e.left}}getNext(){let e=this.nodeStack.pop();const n={key:e.key,value:e.value};if(this.isReverse)for(e=e.left;!e.isEmpty();)this.nodeStack.push(e),e=e.right;else for(e=e.right;!e.isEmpty();)this.nodeStack.push(e),e=e.left;return n}hasNext(){return this.nodeStack.length>0}peek(){if(this.nodeStack.length===0)return null;const e=this.nodeStack[this.nodeStack.length-1];return{key:e.key,value:e.value}}}class Ue{constructor(e,n,r,i,s){this.key=e,this.value=n,this.color=r??Ue.RED,this.left=i??Ue.EMPTY,this.right=s??Ue.EMPTY,this.size=this.left.size+1+this.right.size}copy(e,n,r,i,s){return new Ue(e??this.key,n??this.value,r??this.color,i??this.left,s??this.right)}isEmpty(){return!1}inorderTraversal(e){return this.left.inorderTraversal(e)||e(this.key,this.value)||this.right.inorderTraversal(e)}reverseTraversal(e){return this.right.reverseTraversal(e)||e(this.key,this.value)||this.left.reverseTraversal(e)}min(){return this.left.isEmpty()?this:this.left.min()}minKey(){return this.min().key}maxKey(){return this.right.isEmpty()?this.key:this.right.maxKey()}insert(e,n,r){let i=this;const s=r(e,i.key);return i=s<0?i.copy(null,null,null,i.left.insert(e,n,r),null):s===0?i.copy(null,n,null,null,null):i.copy(null,null,null,null,i.right.insert(e,n,r)),i.fixUp()}removeMin(){if(this.left.isEmpty())return Ue.EMPTY;let e=this;return e.left.isRed()||e.left.left.isRed()||(e=e.moveRedLeft()),e=e.copy(null,null,null,e.left.removeMin(),null),e.fixUp()}remove(e,n){let r,i=this;if(n(e,i.key)<0)i.left.isEmpty()||i.left.isRed()||i.left.left.isRed()||(i=i.moveRedLeft()),i=i.copy(null,null,null,i.left.remove(e,n),null);else{if(i.left.isRed()&&(i=i.rotateRight()),i.right.isEmpty()||i.right.isRed()||i.right.left.isRed()||(i=i.moveRedRight()),n(e,i.key)===0){if(i.right.isEmpty())return Ue.EMPTY;r=i.right.min(),i=i.copy(r.key,r.value,null,null,i.right.removeMin())}i=i.copy(null,null,null,null,i.right.remove(e,n))}return i.fixUp()}isRed(){return this.color}fixUp(){let e=this;return e.right.isRed()&&!e.left.isRed()&&(e=e.rotateLeft()),e.left.isRed()&&e.left.left.isRed()&&(e=e.rotateRight()),e.left.isRed()&&e.right.isRed()&&(e=e.colorFlip()),e}moveRedLeft(){let e=this.colorFlip();return e.right.left.isRed()&&(e=e.copy(null,null,null,null,e.right.rotateRight()),e=e.rotateLeft(),e=e.colorFlip()),e}moveRedRight(){let e=this.colorFlip();return e.left.left.isRed()&&(e=e.rotateRight(),e=e.colorFlip()),e}rotateLeft(){const e=this.copy(null,null,Ue.RED,null,this.right.left);return this.right.copy(null,null,this.color,e,null)}rotateRight(){const e=this.copy(null,null,Ue.RED,this.left.right,null);return this.left.copy(null,null,this.color,null,e)}colorFlip(){const e=this.left.copy(null,null,!this.left.color,null,null),n=this.right.copy(null,null,!this.right.color,null,null);return this.copy(null,null,!this.color,e,n)}checkMaxDepth(){const e=this.check();return Math.pow(2,e)<=this.size+1}check(){if(this.isRed()&&this.left.isRed()||this.right.isRed())throw F();const e=this.left.check();if(e!==this.right.check())throw F();return e+(this.isRed()?0:1)}}Ue.EMPTY=null,Ue.RED=!0,Ue.BLACK=!1;Ue.EMPTY=new class{constructor(){this.size=0}get key(){throw F()}get value(){throw F()}get color(){throw F()}get left(){throw F()}get right(){throw F()}copy(t,e,n,r,i){return this}insert(t,e,n){return new Ue(t,e)}remove(t,e){return this}isEmpty(){return!0}inorderTraversal(t){return!1}reverseTraversal(t){return!1}minKey(){return null}maxKey(){return null}isRed(){return!1}checkMaxDepth(){return!0}check(){return 0}};/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class Xe{constructor(e){this.comparator=e,this.data=new fe(this.comparator)}has(e){return this.data.get(e)!==null}first(){return this.data.minKey()}last(){return this.data.maxKey()}get size(){return this.data.size}indexOf(e){return this.data.indexOf(e)}forEach(e){this.data.inorderTraversal((n,r)=>(e(n),!1))}forEachInRange(e,n){const r=this.data.getIteratorFrom(e[0]);for(;r.hasNext();){const i=r.getNext();if(this.comparator(i.key,e[1])>=0)return;n(i.key)}}forEachWhile(e,n){let r;for(r=n!==void 0?this.data.getIteratorFrom(n):this.data.getIterator();r.hasNext();)if(!e(r.getNext().key))return}firstAfterOrEqual(e){const n=this.data.getIteratorFrom(e);return n.hasNext()?n.getNext().key:null}getIterator(){return new Ry(this.data.getIterator())}getIteratorFrom(e){return new Ry(this.data.getIteratorFrom(e))}add(e){return this.copy(this.data.remove(e).insert(e,!0))}delete(e){return this.has(e)?this.copy(this.data.remove(e)):this}isEmpty(){return this.data.isEmpty()}unionWith(e){let n=this;return n.size{n=n.add(r)}),n}isEqual(e){if(!(e instanceof Xe)||this.size!==e.size)return!1;const n=this.data.getIterator(),r=e.data.getIterator();for(;n.hasNext();){const i=n.getNext().key,s=r.getNext().key;if(this.comparator(i,s)!==0)return!1}return!0}toArray(){const e=[];return this.forEach(n=>{e.push(n)}),e}toString(){const e=[];return this.forEach(n=>e.push(n)),"SortedSet("+e.toString()+")"}copy(e){const n=new Xe(this.comparator);return n.data=e,n}}class Ry{constructor(e){this.iter=e}getNext(){return this.iter.getNext().key}hasNext(){return this.iter.hasNext()}}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class _t{constructor(e){this.fields=e,e.sort(Ge.comparator)}static empty(){return new _t([])}unionWith(e){let n=new Xe(Ge.comparator);for(const r of this.fields)n=n.add(r);for(const r of e)n=n.add(r);return new _t(n.toArray())}covers(e){for(const n of this.fields)if(n.isPrefixOf(e))return!0;return!1}isEqual(e){return Zi(this.fields,e.fields,(n,r)=>n.isEqual(r))}}/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class j_ extends Error{constructor(){super(...arguments),this.name="Base64DecodeError"}}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class tt{constructor(e){this.binaryString=e}static fromBase64String(e){const n=function(r){try{return atob(r)}catch(i){throw typeof DOMException<"u"&&i instanceof DOMException?new j_("Invalid base64 string: "+i):i}}(e);return new tt(n)}static fromUint8Array(e){const n=function(r){let i="";for(let s=0;seln(n,e))!==void 0}function es(t,e){if(t===e)return 0;const n=Qr(t),r=Qr(e);if(n!==r)return X(n,r);switch(n){case 0:case 9007199254740991:return 0;case 1:return X(t.booleanValue,e.booleanValue);case 2:return function(i,s){const o=Se(i.integerValue||i.doubleValue),a=Se(s.integerValue||s.doubleValue);return oa?1:o===a?0:isNaN(o)?isNaN(a)?0:-1:1}(t,e);case 3:return xy(t.timestampValue,e.timestampValue);case 4:return xy(Uo(t),Uo(e));case 5:return X(t.stringValue,e.stringValue);case 6:return function(i,s){const o=Gr(i),a=Gr(s);return o.compareTo(a)}(t.bytesValue,e.bytesValue);case 7:return function(i,s){const o=i.split("/"),a=s.split("/");for(let l=0;le.mapValue.fields[n]=no(r)),e}if(t.arrayValue){const e={arrayValue:{values:[]}};for(let n=0;n<(t.arrayValue.values||[]).length;++n)e.arrayValue.values[n]=no(t.arrayValue.values[n]);return e}return Object.assign({},t)}function xA(t){return(((t.mapValue||{}).fields||{}).__type__||{}).stringValue==="__max__"}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class ht{constructor(e){this.value=e}static empty(){return new ht({mapValue:{}})}field(e){if(e.isEmpty())return this.value;{let n=this.value;for(let r=0;r{if(!n.isImmediateParentOf(a)){const l=this.getFieldsMap(n);this.applyChanges(l,r,i),r={},i=[],n=a.popLast()}o?r[a.lastSegment()]=no(o):i.push(a.lastSegment())});const s=this.getFieldsMap(n);this.applyChanges(s,r,i)}delete(e){const n=this.field(e.popLast());yl(n)&&n.mapValue.fields&&delete n.mapValue.fields[e.lastSegment()]}isEqual(e){return ln(this.value,e.value)}getFieldsMap(e){let n=this.value;n.mapValue.fields||(n.mapValue={fields:{}});for(let r=0;re[i]=s);for(const i of r)delete e[i]}clone(){return new ht(no(this.value))}}function V_(t){const e=[];return ni(t.fields,(n,r)=>{const i=new Ge([n]);if(yl(r)){const s=V_(r.mapValue).fields;if(s.length===0)e.push(i);else for(const o of s)e.push(i.child(o))}else e.push(i)}),new _t(e)}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class Ke{constructor(e,n,r,i,s,o,a){this.key=e,this.documentType=n,this.version=r,this.readTime=i,this.createTime=s,this.data=o,this.documentState=a}static newInvalidDocument(e){return new Ke(e,0,B.min(),B.min(),B.min(),ht.empty(),0)}static newFoundDocument(e,n,r,i){return new Ke(e,1,n,B.min(),r,i,0)}static newNoDocument(e,n){return new Ke(e,2,n,B.min(),B.min(),ht.empty(),0)}static newUnknownDocument(e,n){return new Ke(e,3,n,B.min(),B.min(),ht.empty(),2)}convertToFoundDocument(e,n){return!this.createTime.isEqual(B.min())||this.documentType!==2&&this.documentType!==0||(this.createTime=e),this.version=e,this.documentType=1,this.data=n,this.documentState=0,this}convertToNoDocument(e){return this.version=e,this.documentType=2,this.data=ht.empty(),this.documentState=0,this}convertToUnknownDocument(e){return this.version=e,this.documentType=3,this.data=ht.empty(),this.documentState=2,this}setHasCommittedMutations(){return this.documentState=2,this}setHasLocalMutations(){return this.documentState=1,this.version=B.min(),this}setReadTime(e){return this.readTime=e,this}get hasLocalMutations(){return this.documentState===1}get hasCommittedMutations(){return this.documentState===2}get hasPendingWrites(){return this.hasLocalMutations||this.hasCommittedMutations}isValidDocument(){return this.documentType!==0}isFoundDocument(){return this.documentType===1}isNoDocument(){return this.documentType===2}isUnknownDocument(){return this.documentType===3}isEqual(e){return e instanceof Ke&&this.key.isEqual(e.key)&&this.version.isEqual(e.version)&&this.documentType===e.documentType&&this.documentState===e.documentState&&this.data.isEqual(e.data)}mutableCopy(){return new Ke(this.key,this.documentType,this.version,this.readTime,this.createTime,this.data.clone(),this.documentState)}toString(){return`Document(${this.key}, ${this.version}, ${JSON.stringify(this.data.value)}, {createTime: ${this.createTime}}), {documentType: ${this.documentType}}), {documentState: ${this.documentState}})`}}/** + * @license + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class lu{constructor(e,n){this.position=e,this.inclusive=n}}function Oy(t,e,n){let r=0;for(let i=0;i":return e>0;case">=":return e>=0;default:return F()}}isInequality(){return["<","<=",">",">=","!=","not-in"].indexOf(this.op)>=0}getFlattenedFilters(){return[this]}getFilters(){return[this]}getFirstInequalityField(){return this.isInequality()?this.field:null}}class Wt extends B_{constructor(e,n){super(),this.filters=e,this.op=n,this.lt=null}static create(e,n){return new Wt(e,n)}matches(e){return z_(this)?this.filters.find(n=>!n.matches(e))===void 0:this.filters.find(n=>n.matches(e))!==void 0}getFlattenedFilters(){return this.lt!==null||(this.lt=this.filters.reduce((e,n)=>e.concat(n.getFlattenedFilters()),[])),this.lt}getFilters(){return Object.assign([],this.filters)}getFirstInequalityField(){const e=this.ft(n=>n.isInequality());return e!==null?e.field:null}ft(e){for(const n of this.getFlattenedFilters())if(e(n))return n;return null}}function z_(t){return t.op==="and"}function H_(t){return PA(t)&&z_(t)}function PA(t){for(const e of t.filters)if(e instanceof Wt)return!1;return!0}function Fd(t){if(t instanceof Te)return t.field.canonicalString()+t.op.toString()+ts(t.value);if(H_(t))return t.filters.map(e=>Fd(e)).join(",");{const e=t.filters.map(n=>Fd(n)).join(",");return`${t.op}(${e})`}}function q_(t,e){return t instanceof Te?function(n,r){return r instanceof Te&&n.op===r.op&&n.field.isEqual(r.field)&&ln(n.value,r.value)}(t,e):t instanceof Wt?function(n,r){return r instanceof Wt&&n.op===r.op&&n.filters.length===r.filters.length?n.filters.reduce((i,s,o)=>i&&q_(s,r.filters[o]),!0):!1}(t,e):void F()}function W_(t){return t instanceof Te?function(e){return`${e.field.canonicalString()} ${e.op} ${ts(e.value)}`}(t):t instanceof Wt?function(e){return e.op.toString()+" {"+e.getFilters().map(W_).join(" ,")+"}"}(t):"Filter"}class DA extends Te{constructor(e,n,r){super(e,n,r),this.key=$.fromName(r.referenceValue)}matches(e){const n=$.comparator(e.key,this.key);return this.matchesComparison(n)}}class OA extends Te{constructor(e,n){super(e,"in",n),this.keys=K_("in",n)}matches(e){return this.keys.some(n=>n.isEqual(e.key))}}class LA extends Te{constructor(e,n){super(e,"not-in",n),this.keys=K_("not-in",n)}matches(e){return!this.keys.some(n=>n.isEqual(e.key))}}function K_(t,e){var n;return(((n=e.arrayValue)===null||n===void 0?void 0:n.values)||[]).map(r=>$.fromName(r.referenceValue))}class MA extends Te{constructor(e,n){super(e,"array-contains",n)}matches(e){const n=e.data.field(this.field);return Vp(n)&&Fo(n.arrayValue,this.value)}}class $A extends Te{constructor(e,n){super(e,"in",n)}matches(e){const n=e.data.field(this.field);return n!==null&&Fo(this.value.arrayValue,n)}}class UA extends Te{constructor(e,n){super(e,"not-in",n)}matches(e){if(Fo(this.value.arrayValue,{nullValue:"NULL_VALUE"}))return!1;const n=e.data.field(this.field);return n!==null&&!Fo(this.value.arrayValue,n)}}class bA extends Te{constructor(e,n){super(e,"array-contains-any",n)}matches(e){const n=e.data.field(this.field);return!(!Vp(n)||!n.arrayValue.values)&&n.arrayValue.values.some(r=>Fo(this.value.arrayValue,r))}}/** + * @license + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class FA{constructor(e,n=null,r=[],i=[],s=null,o=null,a=null){this.path=e,this.collectionGroup=n,this.orderBy=r,this.filters=i,this.limit=s,this.startAt=o,this.endAt=a,this.dt=null}}function My(t,e=null,n=[],r=[],i=null,s=null,o=null){return new FA(t,e,n,r,i,s,o)}function Bp(t){const e=z(t);if(e.dt===null){let n=e.path.canonicalString();e.collectionGroup!==null&&(n+="|cg:"+e.collectionGroup),n+="|f:",n+=e.filters.map(r=>Fd(r)).join(","),n+="|ob:",n+=e.orderBy.map(r=>function(i){return i.field.canonicalString()+i.dir}(r)).join(","),nc(e.limit)||(n+="|l:",n+=e.limit),e.startAt&&(n+="|lb:",n+=e.startAt.inclusive?"b:":"a:",n+=e.startAt.position.map(r=>ts(r)).join(",")),e.endAt&&(n+="|ub:",n+=e.endAt.inclusive?"a:":"b:",n+=e.endAt.position.map(r=>ts(r)).join(",")),e.dt=n}return e.dt}function zp(t,e){if(t.limit!==e.limit||t.orderBy.length!==e.orderBy.length)return!1;for(let n=0;n0?t.explicitOrderBy[0].field:null}function Hp(t){for(const e of t.filters){const n=e.getFirstInequalityField();if(n!==null)return n}return null}function Q_(t){return t.collectionGroup!==null}function Vi(t){const e=z(t);if(e.wt===null){e.wt=[];const n=Hp(e),r=G_(e);if(n!==null&&r===null)n.isKeyField()||e.wt.push(new ro(n)),e.wt.push(new ro(Ge.keyField(),"asc"));else{let i=!1;for(const s of e.explicitOrderBy)e.wt.push(s),s.field.isKeyField()&&(i=!0);if(!i){const s=e.explicitOrderBy.length>0?e.explicitOrderBy[e.explicitOrderBy.length-1].dir:"asc";e.wt.push(new ro(Ge.keyField(),s))}}}return e.wt}function Rn(t){const e=z(t);if(!e._t)if(e.limitType==="F")e._t=My(e.path,e.collectionGroup,Vi(e),e.filters,e.limit,e.startAt,e.endAt);else{const n=[];for(const s of Vi(e)){const o=s.dir==="desc"?"asc":"desc";n.push(new ro(s.field,o))}const r=e.endAt?new lu(e.endAt.position,e.endAt.inclusive):null,i=e.startAt?new lu(e.startAt.position,e.startAt.inclusive):null;e._t=My(e.path,e.collectionGroup,n,e.filters,e.limit,r,i)}return e._t}function Vd(t,e){e.getFirstInequalityField(),Hp(t);const n=t.filters.concat([e]);return new da(t.path,t.collectionGroup,t.explicitOrderBy.slice(),n,t.limit,t.limitType,t.startAt,t.endAt)}function Bd(t,e,n){return new da(t.path,t.collectionGroup,t.explicitOrderBy.slice(),t.filters.slice(),e,n,t.startAt,t.endAt)}function ic(t,e){return zp(Rn(t),Rn(e))&&t.limitType===e.limitType}function Y_(t){return`${Bp(Rn(t))}|lt:${t.limitType}`}function zd(t){return`Query(target=${function(e){let n=e.path.canonicalString();return e.collectionGroup!==null&&(n+=" collectionGroup="+e.collectionGroup),e.filters.length>0&&(n+=`, filters: [${e.filters.map(r=>W_(r)).join(", ")}]`),nc(e.limit)||(n+=", limit: "+e.limit),e.orderBy.length>0&&(n+=`, orderBy: [${e.orderBy.map(r=>function(i){return`${i.field.canonicalString()} (${i.dir})`}(r)).join(", ")}]`),e.startAt&&(n+=", startAt: ",n+=e.startAt.inclusive?"b:":"a:",n+=e.startAt.position.map(r=>ts(r)).join(",")),e.endAt&&(n+=", endAt: ",n+=e.endAt.inclusive?"a:":"b:",n+=e.endAt.position.map(r=>ts(r)).join(",")),`Target(${n})`}(Rn(t))}; limitType=${t.limitType})`}function sc(t,e){return e.isFoundDocument()&&function(n,r){const i=r.key.path;return n.collectionGroup!==null?r.key.hasCollectionId(n.collectionGroup)&&n.path.isPrefixOf(i):$.isDocumentKey(n.path)?n.path.isEqual(i):n.path.isImmediateParentOf(i)}(t,e)&&function(n,r){for(const i of Vi(n))if(!i.field.isKeyField()&&r.data.field(i.field)===null)return!1;return!0}(t,e)&&function(n,r){for(const i of n.filters)if(!i.matches(r))return!1;return!0}(t,e)&&function(n,r){return!(n.startAt&&!function(i,s,o){const a=Oy(i,s,o);return i.inclusive?a<=0:a<0}(n.startAt,Vi(n),r)||n.endAt&&!function(i,s,o){const a=Oy(i,s,o);return i.inclusive?a>=0:a>0}(n.endAt,Vi(n),r))}(t,e)}function VA(t){return t.collectionGroup||(t.path.length%2==1?t.path.lastSegment():t.path.get(t.path.length-2))}function X_(t){return(e,n)=>{let r=!1;for(const i of Vi(t)){const s=BA(i,e,n);if(s!==0)return s;r=r||i.field.isKeyField()}return 0}}function BA(t,e,n){const r=t.field.isKeyField()?$.comparator(e.key,n.key):function(i,s,o){const a=s.data.field(i),l=o.data.field(i);return a!==null&&l!==null?es(a,l):F()}(t.field,e,n);switch(t.dir){case"asc":return r;case"desc":return-1*r;default:return F()}}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class ms{constructor(e,n){this.mapKeyFn=e,this.equalsFn=n,this.inner={},this.innerSize=0}get(e){const n=this.mapKeyFn(e),r=this.inner[n];if(r!==void 0){for(const[i,s]of r)if(this.equalsFn(i,e))return s}}has(e){return this.get(e)!==void 0}set(e,n){const r=this.mapKeyFn(e),i=this.inner[r];if(i===void 0)return this.inner[r]=[[e,n]],void this.innerSize++;for(let s=0;s{for(const[i,s]of r)e(i,s)})}isEmpty(){return F_(this.inner)}size(){return this.innerSize}}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const zA=new fe($.comparator);function xn(){return zA}const J_=new fe($.comparator);function Bs(...t){let e=J_;for(const n of t)e=e.insert(n.key,n);return e}function Z_(t){let e=J_;return t.forEach((n,r)=>e=e.insert(n,r.overlayedDocument)),e}function Dr(){return io()}function eE(){return io()}function io(){return new ms(t=>t.toString(),(t,e)=>t.isEqual(e))}const HA=new fe($.comparator),qA=new Xe($.comparator);function W(...t){let e=qA;for(const n of t)e=e.add(n);return e}const WA=new Xe(X);function KA(){return WA}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function tE(t,e){if(t.useProto3Json){if(isNaN(e))return{doubleValue:"NaN"};if(e===1/0)return{doubleValue:"Infinity"};if(e===-1/0)return{doubleValue:"-Infinity"}}return{doubleValue:au(e)?"-0":e}}function nE(t){return{integerValue:""+t}}function GA(t,e){return CA(e)?nE(e):tE(t,e)}/** + * @license + * Copyright 2018 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class oc{constructor(){this._=void 0}}function QA(t,e,n){return t instanceof jo?function(r,i){const s={fields:{__type__:{stringValue:"server_timestamp"},__local_write_time__:{timestampValue:{seconds:r.seconds,nanos:r.nanoseconds}}}};return i&&Fp(i)&&(i=jp(i)),i&&(s.fields.__previous_value__=i),{mapValue:s}}(n,e):t instanceof ns?iE(t,e):t instanceof Vo?sE(t,e):function(r,i){const s=rE(r,i),o=Uy(s)+Uy(r.gt);return bd(s)&&bd(r.gt)?nE(o):tE(r.serializer,o)}(t,e)}function YA(t,e,n){return t instanceof ns?iE(t,e):t instanceof Vo?sE(t,e):n}function rE(t,e){return t instanceof uu?bd(n=e)||function(r){return!!r&&"doubleValue"in r}(n)?e:{integerValue:0}:null;var n}class jo extends oc{}class ns extends oc{constructor(e){super(),this.elements=e}}function iE(t,e){const n=oE(e);for(const r of t.elements)n.some(i=>ln(i,r))||n.push(r);return{arrayValue:{values:n}}}class Vo extends oc{constructor(e){super(),this.elements=e}}function sE(t,e){let n=oE(e);for(const r of t.elements)n=n.filter(i=>!ln(i,r));return{arrayValue:{values:n}}}class uu extends oc{constructor(e,n){super(),this.serializer=e,this.gt=n}}function Uy(t){return Se(t.integerValue||t.doubleValue)}function oE(t){return Vp(t)&&t.arrayValue.values?t.arrayValue.values.slice():[]}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class aE{constructor(e,n){this.field=e,this.transform=n}}function XA(t,e){return t.field.isEqual(e.field)&&function(n,r){return n instanceof ns&&r instanceof ns||n instanceof Vo&&r instanceof Vo?Zi(n.elements,r.elements,ln):n instanceof uu&&r instanceof uu?ln(n.gt,r.gt):n instanceof jo&&r instanceof jo}(t.transform,e.transform)}class JA{constructor(e,n){this.version=e,this.transformResults=n}}class Lt{constructor(e,n){this.updateTime=e,this.exists=n}static none(){return new Lt}static exists(e){return new Lt(void 0,e)}static updateTime(e){return new Lt(e)}get isNone(){return this.updateTime===void 0&&this.exists===void 0}isEqual(e){return this.exists===e.exists&&(this.updateTime?!!e.updateTime&&this.updateTime.isEqual(e.updateTime):!e.updateTime)}}function vl(t,e){return t.updateTime!==void 0?e.isFoundDocument()&&e.version.isEqual(t.updateTime):t.exists===void 0||t.exists===e.isFoundDocument()}class ac{}function lE(t,e){if(!t.hasLocalMutations||e&&e.fields.length===0)return null;if(e===null)return t.isNoDocument()?new qp(t.key,Lt.none()):new fa(t.key,t.data,Lt.none());{const n=t.data,r=ht.empty();let i=new Xe(Ge.comparator);for(let s of e.fields)if(!i.has(s)){let o=n.field(s);o===null&&s.length>1&&(s=s.popLast(),o=n.field(s)),o===null?r.delete(s):r.set(s,o),i=i.add(s)}return new vr(t.key,r,new _t(i.toArray()),Lt.none())}}function ZA(t,e,n){t instanceof fa?function(r,i,s){const o=r.value.clone(),a=Fy(r.fieldTransforms,i,s.transformResults);o.setAll(a),i.convertToFoundDocument(s.version,o).setHasCommittedMutations()}(t,e,n):t instanceof vr?function(r,i,s){if(!vl(r.precondition,i))return void i.convertToUnknownDocument(s.version);const o=Fy(r.fieldTransforms,i,s.transformResults),a=i.data;a.setAll(uE(r)),a.setAll(o),i.convertToFoundDocument(s.version,a).setHasCommittedMutations()}(t,e,n):function(r,i,s){i.convertToNoDocument(s.version).setHasCommittedMutations()}(0,e,n)}function so(t,e,n,r){return t instanceof fa?function(i,s,o,a){if(!vl(i.precondition,s))return o;const l=i.value.clone(),u=jy(i.fieldTransforms,a,s);return l.setAll(u),s.convertToFoundDocument(s.version,l).setHasLocalMutations(),null}(t,e,n,r):t instanceof vr?function(i,s,o,a){if(!vl(i.precondition,s))return o;const l=jy(i.fieldTransforms,a,s),u=s.data;return u.setAll(uE(i)),u.setAll(l),s.convertToFoundDocument(s.version,u).setHasLocalMutations(),o===null?null:o.unionWith(i.fieldMask.fields).unionWith(i.fieldTransforms.map(c=>c.field))}(t,e,n,r):function(i,s,o){return vl(i.precondition,s)?(s.convertToNoDocument(s.version).setHasLocalMutations(),null):o}(t,e,n)}function eP(t,e){let n=null;for(const r of t.fieldTransforms){const i=e.data.field(r.field),s=rE(r.transform,i||null);s!=null&&(n===null&&(n=ht.empty()),n.set(r.field,s))}return n||null}function by(t,e){return t.type===e.type&&!!t.key.isEqual(e.key)&&!!t.precondition.isEqual(e.precondition)&&!!function(n,r){return n===void 0&&r===void 0||!(!n||!r)&&Zi(n,r,(i,s)=>XA(i,s))}(t.fieldTransforms,e.fieldTransforms)&&(t.type===0?t.value.isEqual(e.value):t.type!==1||t.data.isEqual(e.data)&&t.fieldMask.isEqual(e.fieldMask))}class fa extends ac{constructor(e,n,r,i=[]){super(),this.key=e,this.value=n,this.precondition=r,this.fieldTransforms=i,this.type=0}getFieldMask(){return null}}class vr extends ac{constructor(e,n,r,i,s=[]){super(),this.key=e,this.data=n,this.fieldMask=r,this.precondition=i,this.fieldTransforms=s,this.type=1}getFieldMask(){return this.fieldMask}}function uE(t){const e=new Map;return t.fieldMask.fields.forEach(n=>{if(!n.isEmpty()){const r=t.data.field(n);e.set(n,r)}}),e}function Fy(t,e,n){const r=new Map;se(t.length===n.length);for(let i=0;i{const s=e.get(i.key),o=s.overlayedDocument;let a=this.applyToLocalView(o,s.mutatedFields);a=n.has(i.key)?null:a;const l=lE(o,a);l!==null&&r.set(i.key,l),o.isValidDocument()||o.convertToNoDocument(B.min())}),r}keys(){return this.mutations.reduce((e,n)=>e.add(n.key),W())}isEqual(e){return this.batchId===e.batchId&&Zi(this.mutations,e.mutations,(n,r)=>by(n,r))&&Zi(this.baseMutations,e.baseMutations,(n,r)=>by(n,r))}}class Wp{constructor(e,n,r,i){this.batch=e,this.commitVersion=n,this.mutationResults=r,this.docVersions=i}static from(e,n,r){se(e.mutations.length===r.length);let i=HA;const s=e.mutations;for(let o=0;othis.onExistenceFilterMismatchCallbacks.delete(n)}notifyOnExistenceFilterMismatch(e){this.onExistenceFilterMismatchCallbacks.forEach(n=>n(e))}}let Qa=null;/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function oP(){return new TextEncoder}/** + * @license + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const aP=new ji([4294967295,4294967295],0);function Vy(t){const e=oP().encode(t),n=new hA;return n.update(e),new Uint8Array(n.digest())}function By(t){const e=new DataView(t.buffer),n=e.getUint32(0,!0),r=e.getUint32(4,!0),i=e.getUint32(8,!0),s=e.getUint32(12,!0);return[new ji([n,r],0),new ji([i,s],0)]}class Gp{constructor(e,n,r){if(this.bitmap=e,this.padding=n,this.hashCount=r,n<0||n>=8)throw new zs(`Invalid padding: ${n}`);if(r<0)throw new zs(`Invalid hash count: ${r}`);if(e.length>0&&this.hashCount===0)throw new zs(`Invalid hash count: ${r}`);if(e.length===0&&n!==0)throw new zs(`Invalid padding when bitmap length is 0: ${n}`);this.It=8*e.length-n,this.Tt=ji.fromNumber(this.It)}Et(e,n,r){let i=e.add(n.multiply(ji.fromNumber(r)));return i.compare(aP)===1&&(i=new ji([i.getBits(0),i.getBits(1)],0)),i.modulo(this.Tt).toNumber()}At(e){return(this.bitmap[Math.floor(e/8)]&1<o.insert(a)),o}insert(e){if(this.It===0)return;const n=Vy(e),[r,i]=By(n);for(let s=0;s0&&(this.Nt=!0,this.Ct=e)}Ot(){let e=W(),n=W(),r=W();return this.Dt.forEach((i,s)=>{switch(s){case 0:e=e.add(i);break;case 2:n=n.add(i);break;case 1:r=r.add(i);break;default:F()}}),new pa(this.Ct,this.xt,e,n,r)}Ft(){this.Nt=!1,this.Dt=qy()}Bt(e,n){this.Nt=!0,this.Dt=this.Dt.insert(e,n)}Lt(e){this.Nt=!0,this.Dt=this.Dt.remove(e)}qt(){this.St+=1}Ut(){this.St-=1}Kt(){this.Nt=!0,this.xt=!0}}class lP{constructor(e){this.Gt=e,this.Qt=new Map,this.jt=xn(),this.zt=Hy(),this.Wt=new fe(X)}Ht(e){for(const n of e.Pt)e.bt&&e.bt.isFoundDocument()?this.Jt(n,e.bt):this.Yt(n,e.key,e.bt);for(const n of e.removedTargetIds)this.Yt(n,e.key,e.bt)}Xt(e){this.forEachTarget(e,n=>{const r=this.Zt(n);switch(e.state){case 0:this.te(n)&&r.$t(e.resumeToken);break;case 1:r.Ut(),r.kt||r.Ft(),r.$t(e.resumeToken);break;case 2:r.Ut(),r.kt||this.removeTarget(n);break;case 3:this.te(n)&&(r.Kt(),r.$t(e.resumeToken));break;case 4:this.te(n)&&(this.ee(n),r.$t(e.resumeToken));break;default:F()}})}forEachTarget(e,n){e.targetIds.length>0?e.targetIds.forEach(n):this.Qt.forEach((r,i)=>{this.te(i)&&n(i)})}ne(e){var n;const r=e.targetId,i=e.Vt.count,s=this.se(r);if(s){const o=s.target;if(jd(o))if(i===0){const a=new $(o.path);this.Yt(r,a,Ke.newNoDocument(a,B.min()))}else se(i===1);else{const a=this.ie(r);if(a!==i){const l=this.re(e,a);if(l!==0){this.ee(r);const u=l===2?"TargetPurposeExistenceFilterMismatchBloom":"TargetPurposeExistenceFilterMismatch";this.Wt=this.Wt.insert(r,u)}(n=Kp.instance)===null||n===void 0||n.notifyOnExistenceFilterMismatch(function(u,c,h){var d,p,y,w,S,m;const f={localCacheCount:c,existenceFilterCount:h.count},g=h.unchangedNames;return g&&(f.bloomFilter={applied:u===0,hashCount:(d=g==null?void 0:g.hashCount)!==null&&d!==void 0?d:0,bitmapLength:(w=(y=(p=g==null?void 0:g.bits)===null||p===void 0?void 0:p.bitmap)===null||y===void 0?void 0:y.length)!==null&&w!==void 0?w:0,padding:(m=(S=g==null?void 0:g.bits)===null||S===void 0?void 0:S.padding)!==null&&m!==void 0?m:0}),f}(l,a,e.Vt))}}}}re(e,n){const{unchangedNames:r,count:i}=e.Vt;if(!r||!r.bits)return 1;const{bits:{bitmap:s="",padding:o=0},hashCount:a=0}=r;let l,u;try{l=Gr(s).toUint8Array()}catch(c){if(c instanceof j_)return Ji("Decoding the base64 bloom filter in existence filter failed ("+c.message+"); ignoring the bloom filter and falling back to full re-query."),1;throw c}try{u=new Gp(l,o,a)}catch(c){return Ji(c instanceof zs?"BloomFilter error: ":"Applying bloom filter failed: ",c),1}return u.It===0?1:i!==n-this.oe(e.targetId,u)?2:0}oe(e,n){const r=this.Gt.getRemoteKeysForTarget(e);let i=0;return r.forEach(s=>{const o=this.Gt.ue(),a=`projects/${o.projectId}/databases/${o.database}/documents/${s.path.canonicalString()}`;n.vt(a)||(this.Yt(e,s,null),i++)}),i}ce(e){const n=new Map;this.Qt.forEach((s,o)=>{const a=this.se(o);if(a){if(s.current&&jd(a.target)){const l=new $(a.target.path);this.jt.get(l)!==null||this.ae(o,l)||this.Yt(o,l,Ke.newNoDocument(l,e))}s.Mt&&(n.set(o,s.Ot()),s.Ft())}});let r=W();this.zt.forEach((s,o)=>{let a=!0;o.forEachWhile(l=>{const u=this.se(l);return!u||u.purpose==="TargetPurposeLimboResolution"||(a=!1,!1)}),a&&(r=r.add(s))}),this.jt.forEach((s,o)=>o.setReadTime(e));const i=new lc(e,n,this.Wt,this.jt,r);return this.jt=xn(),this.zt=Hy(),this.Wt=new fe(X),i}Jt(e,n){if(!this.te(e))return;const r=this.ae(e,n.key)?2:0;this.Zt(e).Bt(n.key,r),this.jt=this.jt.insert(n.key,n),this.zt=this.zt.insert(n.key,this.he(n.key).add(e))}Yt(e,n,r){if(!this.te(e))return;const i=this.Zt(e);this.ae(e,n)?i.Bt(n,1):i.Lt(n),this.zt=this.zt.insert(n,this.he(n).delete(e)),r&&(this.jt=this.jt.insert(n,r))}removeTarget(e){this.Qt.delete(e)}ie(e){const n=this.Zt(e).Ot();return this.Gt.getRemoteKeysForTarget(e).size+n.addedDocuments.size-n.removedDocuments.size}qt(e){this.Zt(e).qt()}Zt(e){let n=this.Qt.get(e);return n||(n=new zy,this.Qt.set(e,n)),n}he(e){let n=this.zt.get(e);return n||(n=new Xe(X),this.zt=this.zt.insert(e,n)),n}te(e){const n=this.se(e)!==null;return n||M("WatchChangeAggregator","Detected inactive target",e),n}se(e){const n=this.Qt.get(e);return n&&n.kt?null:this.Gt.le(e)}ee(e){this.Qt.set(e,new zy),this.Gt.getRemoteKeysForTarget(e).forEach(n=>{this.Yt(e,n,null)})}ae(e,n){return this.Gt.getRemoteKeysForTarget(e).has(n)}}function Hy(){return new fe($.comparator)}function qy(){return new fe($.comparator)}const uP=(()=>({asc:"ASCENDING",desc:"DESCENDING"}))(),cP=(()=>({"<":"LESS_THAN","<=":"LESS_THAN_OR_EQUAL",">":"GREATER_THAN",">=":"GREATER_THAN_OR_EQUAL","==":"EQUAL","!=":"NOT_EQUAL","array-contains":"ARRAY_CONTAINS",in:"IN","not-in":"NOT_IN","array-contains-any":"ARRAY_CONTAINS_ANY"}))(),hP=(()=>({and:"AND",or:"OR"}))();class dP{constructor(e,n){this.databaseId=e,this.useProto3Json=n}}function Hd(t,e){return t.useProto3Json||nc(e)?e:{value:e}}function cu(t,e){return t.useProto3Json?`${new Date(1e3*e.seconds).toISOString().replace(/\.\d*/,"").replace("Z","")}.${("000000000"+e.nanoseconds).slice(-9)}Z`:{seconds:""+e.seconds,nanos:e.nanoseconds}}function fE(t,e){return t.useProto3Json?e.toBase64():e.toUint8Array()}function fP(t,e){return cu(t,e.toTimestamp())}function an(t){return se(!!t),B.fromTimestamp(function(e){const n=cr(e);return new we(n.seconds,n.nanos)}(t))}function Qp(t,e){return function(n){return new re(["projects",n.projectId,"databases",n.database])}(t).child("documents").child(e).canonicalString()}function pE(t){const e=re.fromString(t);return se(vE(e)),e}function qd(t,e){return Qp(t.databaseId,e.path)}function mh(t,e){const n=pE(e);if(n.get(1)!==t.databaseId.projectId)throw new P(T.INVALID_ARGUMENT,"Tried to deserialize key from different project: "+n.get(1)+" vs "+t.databaseId.projectId);if(n.get(3)!==t.databaseId.database)throw new P(T.INVALID_ARGUMENT,"Tried to deserialize key from different database: "+n.get(3)+" vs "+t.databaseId.database);return new $(mE(n))}function Wd(t,e){return Qp(t.databaseId,e)}function pP(t){const e=pE(t);return e.length===4?re.emptyPath():mE(e)}function Kd(t){return new re(["projects",t.databaseId.projectId,"databases",t.databaseId.database]).canonicalString()}function mE(t){return se(t.length>4&&t.get(4)==="documents"),t.popFirst(5)}function Wy(t,e,n){return{name:qd(t,e),fields:n.value.mapValue.fields}}function mP(t,e){let n;if("targetChange"in e){e.targetChange;const r=function(l){return l==="NO_CHANGE"?0:l==="ADD"?1:l==="REMOVE"?2:l==="CURRENT"?3:l==="RESET"?4:F()}(e.targetChange.targetChangeType||"NO_CHANGE"),i=e.targetChange.targetIds||[],s=function(l,u){return l.useProto3Json?(se(u===void 0||typeof u=="string"),tt.fromBase64String(u||"")):(se(u===void 0||u instanceof Uint8Array),tt.fromUint8Array(u||new Uint8Array))}(t,e.targetChange.resumeToken),o=e.targetChange.cause,a=o&&function(l){const u=l.code===void 0?T.UNKNOWN:cE(l.code);return new P(u,l.message||"")}(o);n=new dE(r,i,s,a||null)}else if("documentChange"in e){e.documentChange;const r=e.documentChange;r.document,r.document.name,r.document.updateTime;const i=mh(t,r.document.name),s=an(r.document.updateTime),o=r.document.createTime?an(r.document.createTime):B.min(),a=new ht({mapValue:{fields:r.document.fields}}),l=Ke.newFoundDocument(i,s,o,a),u=r.targetIds||[],c=r.removedTargetIds||[];n=new wl(u,c,l.key,l)}else if("documentDelete"in e){e.documentDelete;const r=e.documentDelete;r.document;const i=mh(t,r.document),s=r.readTime?an(r.readTime):B.min(),o=Ke.newNoDocument(i,s),a=r.removedTargetIds||[];n=new wl([],a,o.key,o)}else if("documentRemove"in e){e.documentRemove;const r=e.documentRemove;r.document;const i=mh(t,r.document),s=r.removedTargetIds||[];n=new wl([],s,i,null)}else{if(!("filter"in e))return F();{e.filter;const r=e.filter;r.targetId;const{count:i=0,unchangedNames:s}=r,o=new iP(i,s),a=r.targetId;n=new hE(a,o)}}return n}function gP(t,e){let n;if(e instanceof fa)n={update:Wy(t,e.key,e.value)};else if(e instanceof qp)n={delete:qd(t,e.key)};else if(e instanceof vr)n={update:Wy(t,e.key,e.data),updateMask:kP(e.fieldMask)};else{if(!(e instanceof tP))return F();n={verify:qd(t,e.key)}}return e.fieldTransforms.length>0&&(n.updateTransforms=e.fieldTransforms.map(r=>function(i,s){const o=s.transform;if(o instanceof jo)return{fieldPath:s.field.canonicalString(),setToServerValue:"REQUEST_TIME"};if(o instanceof ns)return{fieldPath:s.field.canonicalString(),appendMissingElements:{values:o.elements}};if(o instanceof Vo)return{fieldPath:s.field.canonicalString(),removeAllFromArray:{values:o.elements}};if(o instanceof uu)return{fieldPath:s.field.canonicalString(),increment:o.gt};throw F()}(0,r))),e.precondition.isNone||(n.currentDocument=function(r,i){return i.updateTime!==void 0?{updateTime:fP(r,i.updateTime)}:i.exists!==void 0?{exists:i.exists}:F()}(t,e.precondition)),n}function yP(t,e){return t&&t.length>0?(se(e!==void 0),t.map(n=>function(r,i){let s=r.updateTime?an(r.updateTime):an(i);return s.isEqual(B.min())&&(s=an(i)),new JA(s,r.transformResults||[])}(n,e))):[]}function vP(t,e){return{documents:[Wd(t,e.path)]}}function wP(t,e){const n={structuredQuery:{}},r=e.path;e.collectionGroup!==null?(n.parent=Wd(t,r),n.structuredQuery.from=[{collectionId:e.collectionGroup,allDescendants:!0}]):(n.parent=Wd(t,r.popLast()),n.structuredQuery.from=[{collectionId:r.lastSegment()}]);const i=function(l){if(l.length!==0)return yE(Wt.create(l,"and"))}(e.filters);i&&(n.structuredQuery.where=i);const s=function(l){if(l.length!==0)return l.map(u=>function(c){return{field:di(c.field),direction:SP(c.dir)}}(u))}(e.orderBy);s&&(n.structuredQuery.orderBy=s);const o=Hd(t,e.limit);var a;return o!==null&&(n.structuredQuery.limit=o),e.startAt&&(n.structuredQuery.startAt={before:(a=e.startAt).inclusive,values:a.position}),e.endAt&&(n.structuredQuery.endAt=function(l){return{before:!l.inclusive,values:l.position}}(e.endAt)),n}function _P(t){let e=pP(t.parent);const n=t.structuredQuery,r=n.from?n.from.length:0;let i=null;if(r>0){se(r===1);const c=n.from[0];c.allDescendants?i=c.collectionId:e=e.child(c.collectionId)}let s=[];n.where&&(s=function(c){const h=gE(c);return h instanceof Wt&&H_(h)?h.getFilters():[h]}(n.where));let o=[];n.orderBy&&(o=n.orderBy.map(c=>function(h){return new ro(fi(h.field),function(d){switch(d){case"ASCENDING":return"asc";case"DESCENDING":return"desc";default:return}}(h.direction))}(c)));let a=null;n.limit&&(a=function(c){let h;return h=typeof c=="object"?c.value:c,nc(h)?null:h}(n.limit));let l=null;n.startAt&&(l=function(c){const h=!!c.before,d=c.values||[];return new lu(d,h)}(n.startAt));let u=null;return n.endAt&&(u=function(c){const h=!c.before,d=c.values||[];return new lu(d,h)}(n.endAt)),jA(e,i,o,s,a,"F",l,u)}function EP(t,e){const n=function(r){switch(r){case"TargetPurposeListen":return null;case"TargetPurposeExistenceFilterMismatch":return"existence-filter-mismatch";case"TargetPurposeExistenceFilterMismatchBloom":return"existence-filter-mismatch-bloom";case"TargetPurposeLimboResolution":return"limbo-document";default:return F()}}(e.purpose);return n==null?null:{"goog-listen-tags":n}}function gE(t){return t.unaryFilter!==void 0?function(e){switch(e.unaryFilter.op){case"IS_NAN":const n=fi(e.unaryFilter.field);return Te.create(n,"==",{doubleValue:NaN});case"IS_NULL":const r=fi(e.unaryFilter.field);return Te.create(r,"==",{nullValue:"NULL_VALUE"});case"IS_NOT_NAN":const i=fi(e.unaryFilter.field);return Te.create(i,"!=",{doubleValue:NaN});case"IS_NOT_NULL":const s=fi(e.unaryFilter.field);return Te.create(s,"!=",{nullValue:"NULL_VALUE"});default:return F()}}(t):t.fieldFilter!==void 0?function(e){return Te.create(fi(e.fieldFilter.field),function(n){switch(n){case"EQUAL":return"==";case"NOT_EQUAL":return"!=";case"GREATER_THAN":return">";case"GREATER_THAN_OR_EQUAL":return">=";case"LESS_THAN":return"<";case"LESS_THAN_OR_EQUAL":return"<=";case"ARRAY_CONTAINS":return"array-contains";case"IN":return"in";case"NOT_IN":return"not-in";case"ARRAY_CONTAINS_ANY":return"array-contains-any";default:return F()}}(e.fieldFilter.op),e.fieldFilter.value)}(t):t.compositeFilter!==void 0?function(e){return Wt.create(e.compositeFilter.filters.map(n=>gE(n)),function(n){switch(n){case"AND":return"and";case"OR":return"or";default:return F()}}(e.compositeFilter.op))}(t):F()}function SP(t){return uP[t]}function IP(t){return cP[t]}function TP(t){return hP[t]}function di(t){return{fieldPath:t.canonicalString()}}function fi(t){return Ge.fromServerFormat(t.fieldPath)}function yE(t){return t instanceof Te?function(e){if(e.op==="=="){if(Dy(e.value))return{unaryFilter:{field:di(e.field),op:"IS_NAN"}};if(Py(e.value))return{unaryFilter:{field:di(e.field),op:"IS_NULL"}}}else if(e.op==="!="){if(Dy(e.value))return{unaryFilter:{field:di(e.field),op:"IS_NOT_NAN"}};if(Py(e.value))return{unaryFilter:{field:di(e.field),op:"IS_NOT_NULL"}}}return{fieldFilter:{field:di(e.field),op:IP(e.op),value:e.value}}}(t):t instanceof Wt?function(e){const n=e.getFilters().map(r=>yE(r));return n.length===1?n[0]:{compositeFilter:{op:TP(e.op),filters:n}}}(t):F()}function kP(t){const e=[];return t.fields.forEach(n=>e.push(n.canonicalString())),{fieldPaths:e}}function vE(t){return t.length>=4&&t.get(0)==="projects"&&t.get(2)==="databases"}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class Wn{constructor(e,n,r,i,s=B.min(),o=B.min(),a=tt.EMPTY_BYTE_STRING,l=null){this.target=e,this.targetId=n,this.purpose=r,this.sequenceNumber=i,this.snapshotVersion=s,this.lastLimboFreeSnapshotVersion=o,this.resumeToken=a,this.expectedCount=l}withSequenceNumber(e){return new Wn(this.target,this.targetId,this.purpose,e,this.snapshotVersion,this.lastLimboFreeSnapshotVersion,this.resumeToken,this.expectedCount)}withResumeToken(e,n){return new Wn(this.target,this.targetId,this.purpose,this.sequenceNumber,n,this.lastLimboFreeSnapshotVersion,e,null)}withExpectedCount(e){return new Wn(this.target,this.targetId,this.purpose,this.sequenceNumber,this.snapshotVersion,this.lastLimboFreeSnapshotVersion,this.resumeToken,e)}withLastLimboFreeSnapshotVersion(e){return new Wn(this.target,this.targetId,this.purpose,this.sequenceNumber,this.snapshotVersion,e,this.resumeToken,this.expectedCount)}}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class CP{constructor(e){this.fe=e}}function NP(t){const e=_P({parent:t.parent,structuredQuery:t.structuredQuery});return t.limitType==="LAST"?Bd(e,e.limit,"L"):e}/** + * @license + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class RP{constructor(){this.rn=new xP}addToCollectionParentIndex(e,n){return this.rn.add(n),N.resolve()}getCollectionParents(e,n){return N.resolve(this.rn.getEntries(n))}addFieldIndex(e,n){return N.resolve()}deleteFieldIndex(e,n){return N.resolve()}getDocumentsMatchingTarget(e,n){return N.resolve(null)}getIndexType(e,n){return N.resolve(0)}getFieldIndexes(e,n){return N.resolve([])}getNextCollectionGroupToUpdate(e){return N.resolve(null)}getMinOffset(e,n){return N.resolve(ur.min())}getMinOffsetFromCollectionGroup(e,n){return N.resolve(ur.min())}updateCollectionGroup(e,n,r){return N.resolve()}updateIndexEntries(e,n){return N.resolve()}}class xP{constructor(){this.index={}}add(e){const n=e.lastSegment(),r=e.popLast(),i=this.index[n]||new Xe(re.comparator),s=!i.has(r);return this.index[n]=i.add(r),s}has(e){const n=e.lastSegment(),r=e.popLast(),i=this.index[n];return i&&i.has(r)}getEntries(e){return(this.index[e]||new Xe(re.comparator)).toArray()}}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class rs{constructor(e){this.Nn=e}next(){return this.Nn+=2,this.Nn}static kn(){return new rs(0)}static Mn(){return new rs(-1)}}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class AP{constructor(){this.changes=new ms(e=>e.toString(),(e,n)=>e.isEqual(n)),this.changesApplied=!1}addEntry(e){this.assertNotApplied(),this.changes.set(e.key,e)}removeEntry(e,n){this.assertNotApplied(),this.changes.set(e,Ke.newInvalidDocument(e).setReadTime(n))}getEntry(e,n){this.assertNotApplied();const r=this.changes.get(n);return r!==void 0?N.resolve(r):this.getFromCache(e,n)}getEntries(e,n){return this.getAllFromCache(e,n)}apply(e){return this.assertNotApplied(),this.changesApplied=!0,this.applyChanges(e)}assertNotApplied(){}}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *//** + * @license + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class PP{constructor(e,n){this.overlayedDocument=e,this.mutatedFields=n}}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class DP{constructor(e,n,r,i){this.remoteDocumentCache=e,this.mutationQueue=n,this.documentOverlayCache=r,this.indexManager=i}getDocument(e,n){let r=null;return this.documentOverlayCache.getOverlay(e,n).next(i=>(r=i,this.remoteDocumentCache.getEntry(e,n))).next(i=>(r!==null&&so(r.mutation,i,_t.empty(),we.now()),i))}getDocuments(e,n){return this.remoteDocumentCache.getEntries(e,n).next(r=>this.getLocalViewOfDocuments(e,r,W()).next(()=>r))}getLocalViewOfDocuments(e,n,r=W()){const i=Dr();return this.populateOverlays(e,i,n).next(()=>this.computeViews(e,n,i,r).next(s=>{let o=Bs();return s.forEach((a,l)=>{o=o.insert(a,l.overlayedDocument)}),o}))}getOverlayedDocuments(e,n){const r=Dr();return this.populateOverlays(e,r,n).next(()=>this.computeViews(e,n,r,W()))}populateOverlays(e,n,r){const i=[];return r.forEach(s=>{n.has(s)||i.push(s)}),this.documentOverlayCache.getOverlays(e,i).next(s=>{s.forEach((o,a)=>{n.set(o,a)})})}computeViews(e,n,r,i){let s=xn();const o=io(),a=io();return n.forEach((l,u)=>{const c=r.get(u.key);i.has(u.key)&&(c===void 0||c.mutation instanceof vr)?s=s.insert(u.key,u):c!==void 0?(o.set(u.key,c.mutation.getFieldMask()),so(c.mutation,u,c.mutation.getFieldMask(),we.now())):o.set(u.key,_t.empty())}),this.recalculateAndSaveOverlays(e,s).next(l=>(l.forEach((u,c)=>o.set(u,c)),n.forEach((u,c)=>{var h;return a.set(u,new PP(c,(h=o.get(u))!==null&&h!==void 0?h:null))}),a))}recalculateAndSaveOverlays(e,n){const r=io();let i=new fe((o,a)=>o-a),s=W();return this.mutationQueue.getAllMutationBatchesAffectingDocumentKeys(e,n).next(o=>{for(const a of o)a.keys().forEach(l=>{const u=n.get(l);if(u===null)return;let c=r.get(l)||_t.empty();c=a.applyToLocalView(u,c),r.set(l,c);const h=(i.get(a.batchId)||W()).add(l);i=i.insert(a.batchId,h)})}).next(()=>{const o=[],a=i.getReverseIterator();for(;a.hasNext();){const l=a.getNext(),u=l.key,c=l.value,h=eE();c.forEach(d=>{if(!s.has(d)){const p=lE(n.get(d),r.get(d));p!==null&&h.set(d,p),s=s.add(d)}}),o.push(this.documentOverlayCache.saveOverlays(e,u,h))}return N.waitFor(o)}).next(()=>r)}recalculateAndSaveOverlaysForDocumentKeys(e,n){return this.remoteDocumentCache.getEntries(e,n).next(r=>this.recalculateAndSaveOverlays(e,r))}getDocumentsMatchingQuery(e,n,r){return function(i){return $.isDocumentKey(i.path)&&i.collectionGroup===null&&i.filters.length===0}(n)?this.getDocumentsMatchingDocumentQuery(e,n.path):Q_(n)?this.getDocumentsMatchingCollectionGroupQuery(e,n,r):this.getDocumentsMatchingCollectionQuery(e,n,r)}getNextDocuments(e,n,r,i){return this.remoteDocumentCache.getAllFromCollectionGroup(e,n,r,i).next(s=>{const o=i-s.size>0?this.documentOverlayCache.getOverlaysForCollectionGroup(e,n,r.largestBatchId,i-s.size):N.resolve(Dr());let a=-1,l=s;return o.next(u=>N.forEach(u,(c,h)=>(a{l=l.insert(c,d)}))).next(()=>this.populateOverlays(e,u,s)).next(()=>this.computeViews(e,l,u,W())).next(c=>({batchId:a,changes:Z_(c)})))})}getDocumentsMatchingDocumentQuery(e,n){return this.getDocument(e,new $(n)).next(r=>{let i=Bs();return r.isFoundDocument()&&(i=i.insert(r.key,r)),i})}getDocumentsMatchingCollectionGroupQuery(e,n,r){const i=n.collectionGroup;let s=Bs();return this.indexManager.getCollectionParents(e,i).next(o=>N.forEach(o,a=>{const l=function(u,c){return new da(c,null,u.explicitOrderBy.slice(),u.filters.slice(),u.limit,u.limitType,u.startAt,u.endAt)}(n,a.child(i));return this.getDocumentsMatchingCollectionQuery(e,l,r).next(u=>{u.forEach((c,h)=>{s=s.insert(c,h)})})}).next(()=>s))}getDocumentsMatchingCollectionQuery(e,n,r){let i;return this.documentOverlayCache.getOverlaysForCollection(e,n.path,r.largestBatchId).next(s=>(i=s,this.remoteDocumentCache.getDocumentsMatchingQuery(e,n,r,i))).next(s=>{i.forEach((a,l)=>{const u=l.getKey();s.get(u)===null&&(s=s.insert(u,Ke.newInvalidDocument(u)))});let o=Bs();return s.forEach((a,l)=>{const u=i.get(a);u!==void 0&&so(u.mutation,l,_t.empty(),we.now()),sc(n,l)&&(o=o.insert(a,l))}),o})}}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class OP{constructor(e){this.serializer=e,this.cs=new Map,this.hs=new Map}getBundleMetadata(e,n){return N.resolve(this.cs.get(n))}saveBundleMetadata(e,n){var r;return this.cs.set(n.id,{id:(r=n).id,version:r.version,createTime:an(r.createTime)}),N.resolve()}getNamedQuery(e,n){return N.resolve(this.hs.get(n))}saveNamedQuery(e,n){return this.hs.set(n.name,function(r){return{name:r.name,query:NP(r.bundledQuery),readTime:an(r.readTime)}}(n)),N.resolve()}}/** + * @license + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class LP{constructor(){this.overlays=new fe($.comparator),this.ls=new Map}getOverlay(e,n){return N.resolve(this.overlays.get(n))}getOverlays(e,n){const r=Dr();return N.forEach(n,i=>this.getOverlay(e,i).next(s=>{s!==null&&r.set(i,s)})).next(()=>r)}saveOverlays(e,n,r){return r.forEach((i,s)=>{this.we(e,n,s)}),N.resolve()}removeOverlaysForBatchId(e,n,r){const i=this.ls.get(r);return i!==void 0&&(i.forEach(s=>this.overlays=this.overlays.remove(s)),this.ls.delete(r)),N.resolve()}getOverlaysForCollection(e,n,r){const i=Dr(),s=n.length+1,o=new $(n.child("")),a=this.overlays.getIteratorFrom(o);for(;a.hasNext();){const l=a.getNext().value,u=l.getKey();if(!n.isPrefixOf(u.path))break;u.path.length===s&&l.largestBatchId>r&&i.set(l.getKey(),l)}return N.resolve(i)}getOverlaysForCollectionGroup(e,n,r,i){let s=new fe((u,c)=>u-c);const o=this.overlays.getIterator();for(;o.hasNext();){const u=o.getNext().value;if(u.getKey().getCollectionGroup()===n&&u.largestBatchId>r){let c=s.get(u.largestBatchId);c===null&&(c=Dr(),s=s.insert(u.largestBatchId,c)),c.set(u.getKey(),u)}}const a=Dr(),l=s.getIterator();for(;l.hasNext()&&(l.getNext().value.forEach((u,c)=>a.set(u,c)),!(a.size()>=i)););return N.resolve(a)}we(e,n,r){const i=this.overlays.get(r.key);if(i!==null){const o=this.ls.get(i.largestBatchId).delete(r.key);this.ls.set(i.largestBatchId,o)}this.overlays=this.overlays.insert(r.key,new rP(n,r));let s=this.ls.get(n);s===void 0&&(s=W(),this.ls.set(n,s)),this.ls.set(n,s.add(r.key))}}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class Yp{constructor(){this.fs=new Xe(Ae.ds),this.ws=new Xe(Ae._s)}isEmpty(){return this.fs.isEmpty()}addReference(e,n){const r=new Ae(e,n);this.fs=this.fs.add(r),this.ws=this.ws.add(r)}gs(e,n){e.forEach(r=>this.addReference(r,n))}removeReference(e,n){this.ys(new Ae(e,n))}ps(e,n){e.forEach(r=>this.removeReference(r,n))}Is(e){const n=new $(new re([])),r=new Ae(n,e),i=new Ae(n,e+1),s=[];return this.ws.forEachInRange([r,i],o=>{this.ys(o),s.push(o.key)}),s}Ts(){this.fs.forEach(e=>this.ys(e))}ys(e){this.fs=this.fs.delete(e),this.ws=this.ws.delete(e)}Es(e){const n=new $(new re([])),r=new Ae(n,e),i=new Ae(n,e+1);let s=W();return this.ws.forEachInRange([r,i],o=>{s=s.add(o.key)}),s}containsKey(e){const n=new Ae(e,0),r=this.fs.firstAfterOrEqual(n);return r!==null&&e.isEqual(r.key)}}class Ae{constructor(e,n){this.key=e,this.As=n}static ds(e,n){return $.comparator(e.key,n.key)||X(e.As,n.As)}static _s(e,n){return X(e.As,n.As)||$.comparator(e.key,n.key)}}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class MP{constructor(e,n){this.indexManager=e,this.referenceDelegate=n,this.mutationQueue=[],this.vs=1,this.Rs=new Xe(Ae.ds)}checkEmpty(e){return N.resolve(this.mutationQueue.length===0)}addMutationBatch(e,n,r,i){const s=this.vs;this.vs++,this.mutationQueue.length>0&&this.mutationQueue[this.mutationQueue.length-1];const o=new nP(s,n,r,i);this.mutationQueue.push(o);for(const a of i)this.Rs=this.Rs.add(new Ae(a.key,s)),this.indexManager.addToCollectionParentIndex(e,a.key.path.popLast());return N.resolve(o)}lookupMutationBatch(e,n){return N.resolve(this.Ps(n))}getNextMutationBatchAfterBatchId(e,n){const r=n+1,i=this.bs(r),s=i<0?0:i;return N.resolve(this.mutationQueue.length>s?this.mutationQueue[s]:null)}getHighestUnacknowledgedBatchId(){return N.resolve(this.mutationQueue.length===0?-1:this.vs-1)}getAllMutationBatches(e){return N.resolve(this.mutationQueue.slice())}getAllMutationBatchesAffectingDocumentKey(e,n){const r=new Ae(n,0),i=new Ae(n,Number.POSITIVE_INFINITY),s=[];return this.Rs.forEachInRange([r,i],o=>{const a=this.Ps(o.As);s.push(a)}),N.resolve(s)}getAllMutationBatchesAffectingDocumentKeys(e,n){let r=new Xe(X);return n.forEach(i=>{const s=new Ae(i,0),o=new Ae(i,Number.POSITIVE_INFINITY);this.Rs.forEachInRange([s,o],a=>{r=r.add(a.As)})}),N.resolve(this.Vs(r))}getAllMutationBatchesAffectingQuery(e,n){const r=n.path,i=r.length+1;let s=r;$.isDocumentKey(s)||(s=s.child(""));const o=new Ae(new $(s),0);let a=new Xe(X);return this.Rs.forEachWhile(l=>{const u=l.key.path;return!!r.isPrefixOf(u)&&(u.length===i&&(a=a.add(l.As)),!0)},o),N.resolve(this.Vs(a))}Vs(e){const n=[];return e.forEach(r=>{const i=this.Ps(r);i!==null&&n.push(i)}),n}removeMutationBatch(e,n){se(this.Ss(n.batchId,"removed")===0),this.mutationQueue.shift();let r=this.Rs;return N.forEach(n.mutations,i=>{const s=new Ae(i.key,n.batchId);return r=r.delete(s),this.referenceDelegate.markPotentiallyOrphaned(e,i.key)}).next(()=>{this.Rs=r})}Cn(e){}containsKey(e,n){const r=new Ae(n,0),i=this.Rs.firstAfterOrEqual(r);return N.resolve(n.isEqual(i&&i.key))}performConsistencyCheck(e){return this.mutationQueue.length,N.resolve()}Ss(e,n){return this.bs(e)}bs(e){return this.mutationQueue.length===0?0:e-this.mutationQueue[0].batchId}Ps(e){const n=this.bs(e);return n<0||n>=this.mutationQueue.length?null:this.mutationQueue[n]}}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class $P{constructor(e){this.Ds=e,this.docs=new fe($.comparator),this.size=0}setIndexManager(e){this.indexManager=e}addEntry(e,n){const r=n.key,i=this.docs.get(r),s=i?i.size:0,o=this.Ds(n);return this.docs=this.docs.insert(r,{document:n.mutableCopy(),size:o}),this.size+=o-s,this.indexManager.addToCollectionParentIndex(e,r.path.popLast())}removeEntry(e){const n=this.docs.get(e);n&&(this.docs=this.docs.remove(e),this.size-=n.size)}getEntry(e,n){const r=this.docs.get(n);return N.resolve(r?r.document.mutableCopy():Ke.newInvalidDocument(n))}getEntries(e,n){let r=xn();return n.forEach(i=>{const s=this.docs.get(i);r=r.insert(i,s?s.document.mutableCopy():Ke.newInvalidDocument(i))}),N.resolve(r)}getDocumentsMatchingQuery(e,n,r,i){let s=xn();const o=n.path,a=new $(o.child("")),l=this.docs.getIteratorFrom(a);for(;l.hasNext();){const{key:u,value:{document:c}}=l.getNext();if(!o.isPrefixOf(u.path))break;u.path.length>o.length+1||IA(SA(c),r)<=0||(i.has(c.key)||sc(n,c))&&(s=s.insert(c.key,c.mutableCopy()))}return N.resolve(s)}getAllFromCollectionGroup(e,n,r,i){F()}Cs(e,n){return N.forEach(this.docs,r=>n(r))}newChangeBuffer(e){return new UP(this)}getSize(e){return N.resolve(this.size)}}class UP extends AP{constructor(e){super(),this.os=e}applyChanges(e){const n=[];return this.changes.forEach((r,i)=>{i.isValidDocument()?n.push(this.os.addEntry(e,i)):this.os.removeEntry(r)}),N.waitFor(n)}getFromCache(e,n){return this.os.getEntry(e,n)}getAllFromCache(e,n){return this.os.getEntries(e,n)}}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class bP{constructor(e){this.persistence=e,this.xs=new ms(n=>Bp(n),zp),this.lastRemoteSnapshotVersion=B.min(),this.highestTargetId=0,this.Ns=0,this.ks=new Yp,this.targetCount=0,this.Ms=rs.kn()}forEachTarget(e,n){return this.xs.forEach((r,i)=>n(i)),N.resolve()}getLastRemoteSnapshotVersion(e){return N.resolve(this.lastRemoteSnapshotVersion)}getHighestSequenceNumber(e){return N.resolve(this.Ns)}allocateTargetId(e){return this.highestTargetId=this.Ms.next(),N.resolve(this.highestTargetId)}setTargetsMetadata(e,n,r){return r&&(this.lastRemoteSnapshotVersion=r),n>this.Ns&&(this.Ns=n),N.resolve()}Fn(e){this.xs.set(e.target,e);const n=e.targetId;n>this.highestTargetId&&(this.Ms=new rs(n),this.highestTargetId=n),e.sequenceNumber>this.Ns&&(this.Ns=e.sequenceNumber)}addTargetData(e,n){return this.Fn(n),this.targetCount+=1,N.resolve()}updateTargetData(e,n){return this.Fn(n),N.resolve()}removeTargetData(e,n){return this.xs.delete(n.target),this.ks.Is(n.targetId),this.targetCount-=1,N.resolve()}removeTargets(e,n,r){let i=0;const s=[];return this.xs.forEach((o,a)=>{a.sequenceNumber<=n&&r.get(a.targetId)===null&&(this.xs.delete(o),s.push(this.removeMatchingKeysForTargetId(e,a.targetId)),i++)}),N.waitFor(s).next(()=>i)}getTargetCount(e){return N.resolve(this.targetCount)}getTargetData(e,n){const r=this.xs.get(n)||null;return N.resolve(r)}addMatchingKeys(e,n,r){return this.ks.gs(n,r),N.resolve()}removeMatchingKeys(e,n,r){this.ks.ps(n,r);const i=this.persistence.referenceDelegate,s=[];return i&&n.forEach(o=>{s.push(i.markPotentiallyOrphaned(e,o))}),N.waitFor(s)}removeMatchingKeysForTargetId(e,n){return this.ks.Is(n),N.resolve()}getMatchingKeysForTargetId(e,n){const r=this.ks.Es(n);return N.resolve(r)}containsKey(e,n){return N.resolve(this.ks.containsKey(n))}}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class FP{constructor(e,n){this.$s={},this.overlays={},this.Os=new bp(0),this.Fs=!1,this.Fs=!0,this.referenceDelegate=e(this),this.Bs=new bP(this),this.indexManager=new RP,this.remoteDocumentCache=function(r){return new $P(r)}(r=>this.referenceDelegate.Ls(r)),this.serializer=new CP(n),this.qs=new OP(this.serializer)}start(){return Promise.resolve()}shutdown(){return this.Fs=!1,Promise.resolve()}get started(){return this.Fs}setDatabaseDeletedListener(){}setNetworkEnabled(){}getIndexManager(e){return this.indexManager}getDocumentOverlayCache(e){let n=this.overlays[e.toKey()];return n||(n=new LP,this.overlays[e.toKey()]=n),n}getMutationQueue(e,n){let r=this.$s[e.toKey()];return r||(r=new MP(n,this.referenceDelegate),this.$s[e.toKey()]=r),r}getTargetCache(){return this.Bs}getRemoteDocumentCache(){return this.remoteDocumentCache}getBundleCache(){return this.qs}runTransaction(e,n,r){M("MemoryPersistence","Starting transaction:",e);const i=new jP(this.Os.next());return this.referenceDelegate.Us(),r(i).next(s=>this.referenceDelegate.Ks(i).next(()=>s)).toPromise().then(s=>(i.raiseOnCommittedEvent(),s))}Gs(e,n){return N.or(Object.values(this.$s).map(r=>()=>r.containsKey(e,n)))}}class jP extends kA{constructor(e){super(),this.currentSequenceNumber=e}}class Xp{constructor(e){this.persistence=e,this.Qs=new Yp,this.js=null}static zs(e){return new Xp(e)}get Ws(){if(this.js)return this.js;throw F()}addReference(e,n,r){return this.Qs.addReference(r,n),this.Ws.delete(r.toString()),N.resolve()}removeReference(e,n,r){return this.Qs.removeReference(r,n),this.Ws.add(r.toString()),N.resolve()}markPotentiallyOrphaned(e,n){return this.Ws.add(n.toString()),N.resolve()}removeTarget(e,n){this.Qs.Is(n.targetId).forEach(i=>this.Ws.add(i.toString()));const r=this.persistence.getTargetCache();return r.getMatchingKeysForTargetId(e,n.targetId).next(i=>{i.forEach(s=>this.Ws.add(s.toString()))}).next(()=>r.removeTargetData(e,n))}Us(){this.js=new Set}Ks(e){const n=this.persistence.getRemoteDocumentCache().newChangeBuffer();return N.forEach(this.Ws,r=>{const i=$.fromPath(r);return this.Hs(e,i).next(s=>{s||n.removeEntry(i,B.min())})}).next(()=>(this.js=null,n.apply(e)))}updateLimboDocument(e,n){return this.Hs(e,n).next(r=>{r?this.Ws.delete(n.toString()):this.Ws.add(n.toString())})}Ls(e){return 0}Hs(e,n){return N.or([()=>N.resolve(this.Qs.containsKey(n)),()=>this.persistence.getTargetCache().containsKey(e,n),()=>this.persistence.Gs(e,n)])}}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class Jp{constructor(e,n,r,i){this.targetId=e,this.fromCache=n,this.Fi=r,this.Bi=i}static Li(e,n){let r=W(),i=W();for(const s of n.docChanges)switch(s.type){case 0:r=r.add(s.doc.key);break;case 1:i=i.add(s.doc.key)}return new Jp(e,n.fromCache,r,i)}}/** + * @license + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class VP{constructor(){this.qi=!1}initialize(e,n){this.Ui=e,this.indexManager=n,this.qi=!0}getDocumentsMatchingQuery(e,n,r,i){return this.Ki(e,n).next(s=>s||this.Gi(e,n,i,r)).next(s=>s||this.Qi(e,n))}Ki(e,n){if($y(n))return N.resolve(null);let r=Rn(n);return this.indexManager.getIndexType(e,r).next(i=>i===0?null:(n.limit!==null&&i===1&&(n=Bd(n,null,"F"),r=Rn(n)),this.indexManager.getDocumentsMatchingTarget(e,r).next(s=>{const o=W(...s);return this.Ui.getDocuments(e,o).next(a=>this.indexManager.getMinOffset(e,r).next(l=>{const u=this.ji(n,a);return this.zi(n,u,o,l.readTime)?this.Ki(e,Bd(n,null,"F")):this.Wi(e,u,n,l)}))})))}Gi(e,n,r,i){return $y(n)||i.isEqual(B.min())?this.Qi(e,n):this.Ui.getDocuments(e,r).next(s=>{const o=this.ji(n,s);return this.zi(n,o,r,i)?this.Qi(e,n):(Cy()<=Y.DEBUG&&M("QueryEngine","Re-using previous result from %s to execute query: %s",i.toString(),zd(n)),this.Wi(e,o,n,EA(i,-1)))})}ji(e,n){let r=new Xe(X_(e));return n.forEach((i,s)=>{sc(e,s)&&(r=r.add(s))}),r}zi(e,n,r,i){if(e.limit===null)return!1;if(r.size!==n.size)return!0;const s=e.limitType==="F"?n.last():n.first();return!!s&&(s.hasPendingWrites||s.version.compareTo(i)>0)}Qi(e,n){return Cy()<=Y.DEBUG&&M("QueryEngine","Using full collection scan to execute query:",zd(n)),this.Ui.getDocumentsMatchingQuery(e,n,ur.min())}Wi(e,n,r,i){return this.Ui.getDocumentsMatchingQuery(e,r,i).next(s=>(n.forEach(o=>{s=s.insert(o.key,o)}),s))}}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class BP{constructor(e,n,r,i){this.persistence=e,this.Hi=n,this.serializer=i,this.Ji=new fe(X),this.Yi=new ms(s=>Bp(s),zp),this.Xi=new Map,this.Zi=e.getRemoteDocumentCache(),this.Bs=e.getTargetCache(),this.qs=e.getBundleCache(),this.tr(r)}tr(e){this.documentOverlayCache=this.persistence.getDocumentOverlayCache(e),this.indexManager=this.persistence.getIndexManager(e),this.mutationQueue=this.persistence.getMutationQueue(e,this.indexManager),this.localDocuments=new DP(this.Zi,this.mutationQueue,this.documentOverlayCache,this.indexManager),this.Zi.setIndexManager(this.indexManager),this.Hi.initialize(this.localDocuments,this.indexManager)}collectGarbage(e){return this.persistence.runTransaction("Collect garbage","readwrite-primary",n=>e.collect(n,this.Ji))}}function zP(t,e,n,r){return new BP(t,e,n,r)}async function wE(t,e){const n=z(t);return await n.persistence.runTransaction("Handle user change","readonly",r=>{let i;return n.mutationQueue.getAllMutationBatches(r).next(s=>(i=s,n.tr(e),n.mutationQueue.getAllMutationBatches(r))).next(s=>{const o=[],a=[];let l=W();for(const u of i){o.push(u.batchId);for(const c of u.mutations)l=l.add(c.key)}for(const u of s){a.push(u.batchId);for(const c of u.mutations)l=l.add(c.key)}return n.localDocuments.getDocuments(r,l).next(u=>({er:u,removedBatchIds:o,addedBatchIds:a}))})})}function HP(t,e){const n=z(t);return n.persistence.runTransaction("Acknowledge batch","readwrite-primary",r=>{const i=e.batch.keys(),s=n.Zi.newChangeBuffer({trackRemovals:!0});return function(o,a,l,u){const c=l.batch,h=c.keys();let d=N.resolve();return h.forEach(p=>{d=d.next(()=>u.getEntry(a,p)).next(y=>{const w=l.docVersions.get(p);se(w!==null),y.version.compareTo(w)<0&&(c.applyToRemoteDocument(y,l),y.isValidDocument()&&(y.setReadTime(l.commitVersion),u.addEntry(y)))})}),d.next(()=>o.mutationQueue.removeMutationBatch(a,c))}(n,r,e,s).next(()=>s.apply(r)).next(()=>n.mutationQueue.performConsistencyCheck(r)).next(()=>n.documentOverlayCache.removeOverlaysForBatchId(r,i,e.batch.batchId)).next(()=>n.localDocuments.recalculateAndSaveOverlaysForDocumentKeys(r,function(o){let a=W();for(let l=0;l0&&(a=a.add(o.batch.mutations[l].key));return a}(e))).next(()=>n.localDocuments.getDocuments(r,i))})}function _E(t){const e=z(t);return e.persistence.runTransaction("Get last remote snapshot version","readonly",n=>e.Bs.getLastRemoteSnapshotVersion(n))}function qP(t,e){const n=z(t),r=e.snapshotVersion;let i=n.Ji;return n.persistence.runTransaction("Apply remote event","readwrite-primary",s=>{const o=n.Zi.newChangeBuffer({trackRemovals:!0});i=n.Ji;const a=[];e.targetChanges.forEach((c,h)=>{const d=i.get(h);if(!d)return;a.push(n.Bs.removeMatchingKeys(s,c.removedDocuments,h).next(()=>n.Bs.addMatchingKeys(s,c.addedDocuments,h)));let p=d.withSequenceNumber(s.currentSequenceNumber);e.targetMismatches.get(h)!==null?p=p.withResumeToken(tt.EMPTY_BYTE_STRING,B.min()).withLastLimboFreeSnapshotVersion(B.min()):c.resumeToken.approximateByteSize()>0&&(p=p.withResumeToken(c.resumeToken,r)),i=i.insert(h,p),function(y,w,S){return y.resumeToken.approximateByteSize()===0||w.snapshotVersion.toMicroseconds()-y.snapshotVersion.toMicroseconds()>=3e8?!0:S.addedDocuments.size+S.modifiedDocuments.size+S.removedDocuments.size>0}(d,p,c)&&a.push(n.Bs.updateTargetData(s,p))});let l=xn(),u=W();if(e.documentUpdates.forEach(c=>{e.resolvedLimboDocuments.has(c)&&a.push(n.persistence.referenceDelegate.updateLimboDocument(s,c))}),a.push(WP(s,o,e.documentUpdates).next(c=>{l=c.nr,u=c.sr})),!r.isEqual(B.min())){const c=n.Bs.getLastRemoteSnapshotVersion(s).next(h=>n.Bs.setTargetsMetadata(s,s.currentSequenceNumber,r));a.push(c)}return N.waitFor(a).next(()=>o.apply(s)).next(()=>n.localDocuments.getLocalViewOfDocuments(s,l,u)).next(()=>l)}).then(s=>(n.Ji=i,s))}function WP(t,e,n){let r=W(),i=W();return n.forEach(s=>r=r.add(s)),e.getEntries(t,r).next(s=>{let o=xn();return n.forEach((a,l)=>{const u=s.get(a);l.isFoundDocument()!==u.isFoundDocument()&&(i=i.add(a)),l.isNoDocument()&&l.version.isEqual(B.min())?(e.removeEntry(a,l.readTime),o=o.insert(a,l)):!u.isValidDocument()||l.version.compareTo(u.version)>0||l.version.compareTo(u.version)===0&&u.hasPendingWrites?(e.addEntry(l),o=o.insert(a,l)):M("LocalStore","Ignoring outdated watch update for ",a,". Current version:",u.version," Watch version:",l.version)}),{nr:o,sr:i}})}function KP(t,e){const n=z(t);return n.persistence.runTransaction("Get next mutation batch","readonly",r=>(e===void 0&&(e=-1),n.mutationQueue.getNextMutationBatchAfterBatchId(r,e)))}function GP(t,e){const n=z(t);return n.persistence.runTransaction("Allocate target","readwrite",r=>{let i;return n.Bs.getTargetData(r,e).next(s=>s?(i=s,N.resolve(i)):n.Bs.allocateTargetId(r).next(o=>(i=new Wn(e,o,"TargetPurposeListen",r.currentSequenceNumber),n.Bs.addTargetData(r,i).next(()=>i))))}).then(r=>{const i=n.Ji.get(r.targetId);return(i===null||r.snapshotVersion.compareTo(i.snapshotVersion)>0)&&(n.Ji=n.Ji.insert(r.targetId,r),n.Yi.set(e,r.targetId)),r})}async function Gd(t,e,n){const r=z(t),i=r.Ji.get(e),s=n?"readwrite":"readwrite-primary";try{n||await r.persistence.runTransaction("Release target",s,o=>r.persistence.referenceDelegate.removeTarget(o,i))}catch(o){if(!ha(o))throw o;M("LocalStore",`Failed to update sequence numbers for target ${e}: ${o}`)}r.Ji=r.Ji.remove(e),r.Yi.delete(i.target)}function Ky(t,e,n){const r=z(t);let i=B.min(),s=W();return r.persistence.runTransaction("Execute query","readonly",o=>function(a,l,u){const c=z(a),h=c.Yi.get(u);return h!==void 0?N.resolve(c.Ji.get(h)):c.Bs.getTargetData(l,u)}(r,o,Rn(e)).next(a=>{if(a)return i=a.lastLimboFreeSnapshotVersion,r.Bs.getMatchingKeysForTargetId(o,a.targetId).next(l=>{s=l})}).next(()=>r.Hi.getDocumentsMatchingQuery(o,e,n?i:B.min(),n?s:W())).next(a=>(QP(r,VA(e),a),{documents:a,ir:s})))}function QP(t,e,n){let r=t.Xi.get(e)||B.min();n.forEach((i,s)=>{s.readTime.compareTo(r)>0&&(r=s.readTime)}),t.Xi.set(e,r)}class Gy{constructor(){this.activeTargetIds=KA()}lr(e){this.activeTargetIds=this.activeTargetIds.add(e)}dr(e){this.activeTargetIds=this.activeTargetIds.delete(e)}hr(){const e={activeTargetIds:this.activeTargetIds.toArray(),updateTimeMs:Date.now()};return JSON.stringify(e)}}class YP{constructor(){this.Hr=new Gy,this.Jr={},this.onlineStateHandler=null,this.sequenceNumberHandler=null}addPendingMutation(e){}updateMutationState(e,n,r){}addLocalQueryTarget(e){return this.Hr.lr(e),this.Jr[e]||"not-current"}updateQueryState(e,n,r){this.Jr[e]=n}removeLocalQueryTarget(e){this.Hr.dr(e)}isLocalQueryTarget(e){return this.Hr.activeTargetIds.has(e)}clearQueryState(e){delete this.Jr[e]}getAllActiveQueryTargets(){return this.Hr.activeTargetIds}isActiveQueryTarget(e){return this.Hr.activeTargetIds.has(e)}start(){return this.Hr=new Gy,Promise.resolve()}handleUserChange(e,n,r){}setOnlineState(e){}shutdown(){}writeSequenceNumber(e){}notifyBundleLoaded(e){}}/** + * @license + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class XP{Yr(e){}shutdown(){}}/** + * @license + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class Qy{constructor(){this.Xr=()=>this.Zr(),this.eo=()=>this.no(),this.so=[],this.io()}Yr(e){this.so.push(e)}shutdown(){window.removeEventListener("online",this.Xr),window.removeEventListener("offline",this.eo)}io(){window.addEventListener("online",this.Xr),window.addEventListener("offline",this.eo)}Zr(){M("ConnectivityMonitor","Network connectivity changed: AVAILABLE");for(const e of this.so)e(0)}no(){M("ConnectivityMonitor","Network connectivity changed: UNAVAILABLE");for(const e of this.so)e(1)}static D(){return typeof window<"u"&&window.addEventListener!==void 0&&window.removeEventListener!==void 0}}/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */let Ya=null;function gh(){return Ya===null?Ya=268435456+Math.round(2147483648*Math.random()):Ya++,"0x"+Ya.toString(16)}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const JP={BatchGetDocuments:"batchGet",Commit:"commit",RunQuery:"runQuery",RunAggregationQuery:"runAggregationQuery"};/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class ZP{constructor(e){this.ro=e.ro,this.oo=e.oo}uo(e){this.co=e}ao(e){this.ho=e}onMessage(e){this.lo=e}close(){this.oo()}send(e){this.ro(e)}fo(){this.co()}wo(e){this.ho(e)}_o(e){this.lo(e)}}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const He="WebChannelConnection";class e2 extends class{constructor(e){this.databaseInfo=e,this.databaseId=e.databaseId;const n=e.ssl?"https":"http";this.mo=n+"://"+e.host,this.yo="projects/"+this.databaseId.projectId+"/databases/"+this.databaseId.database+"/documents"}get po(){return!1}Io(e,n,r,i,s){const o=gh(),a=this.To(e,n);M("RestConnection",`Sending RPC '${e}' ${o}:`,a,r);const l={};return this.Eo(l,i,s),this.Ao(e,a,l,r).then(u=>(M("RestConnection",`Received RPC '${e}' ${o}: `,u),u),u=>{throw Ji("RestConnection",`RPC '${e}' ${o} failed with error: `,u,"url: ",a,"request:",r),u})}vo(e,n,r,i,s,o){return this.Io(e,n,r,i,s)}Eo(e,n,r){e["X-Goog-Api-Client"]="gl-js/ fire/"+ps,e["Content-Type"]="text/plain",this.databaseInfo.appId&&(e["X-Firebase-GMPID"]=this.databaseInfo.appId),n&&n.headers.forEach((i,s)=>e[s]=i),r&&r.headers.forEach((i,s)=>e[s]=i)}To(e,n){const r=JP[e];return`${this.mo}/v1/${n}:${r}`}}{constructor(e){super(e),this.forceLongPolling=e.forceLongPolling,this.autoDetectLongPolling=e.autoDetectLongPolling,this.useFetchStreams=e.useFetchStreams,this.longPollingOptions=e.longPollingOptions}Ao(e,n,r,i){const s=gh();return new Promise((o,a)=>{const l=new cA;l.setWithCredentials(!0),l.listenOnce(aA.COMPLETE,()=>{try{switch(l.getLastErrorCode()){case ph.NO_ERROR:const c=l.getResponseJson();M(He,`XHR for RPC '${e}' ${s} received:`,JSON.stringify(c)),o(c);break;case ph.TIMEOUT:M(He,`RPC '${e}' ${s} timed out`),a(new P(T.DEADLINE_EXCEEDED,"Request time out"));break;case ph.HTTP_ERROR:const h=l.getStatus();if(M(He,`RPC '${e}' ${s} failed with status:`,h,"response text:",l.getResponseText()),h>0){let d=l.getResponseJson();Array.isArray(d)&&(d=d[0]);const p=d==null?void 0:d.error;if(p&&p.status&&p.message){const y=function(w){const S=w.toLowerCase().replace(/_/g,"-");return Object.values(T).indexOf(S)>=0?S:T.UNKNOWN}(p.status);a(new P(y,p.message))}else a(new P(T.UNKNOWN,"Server responded with status "+l.getStatus()))}else a(new P(T.UNAVAILABLE,"Connection failed."));break;default:F()}}finally{M(He,`RPC '${e}' ${s} completed.`)}});const u=JSON.stringify(i);M(He,`RPC '${e}' ${s} sending request:`,i),l.send(n,"POST",u,r,15)})}Ro(e,n,r){const i=gh(),s=[this.mo,"/","google.firestore.v1.Firestore","/",e,"/channel"],o=sA(),a=oA(),l={httpSessionIdParam:"gsessionid",initMessageHeaders:{},messageUrlParams:{database:`projects/${this.databaseId.projectId}/databases/${this.databaseId.database}`},sendRawJson:!0,supportsCrossDomainXhr:!0,internalChannelParams:{forwardChannelRequestTimeoutMs:6e5},forceLongPolling:this.forceLongPolling,detectBufferingProxy:this.autoDetectLongPolling},u=this.longPollingOptions.timeoutSeconds;u!==void 0&&(l.longPollingTimeout=Math.round(1e3*u)),this.useFetchStreams&&(l.xmlHttpFactory=new uA({})),this.Eo(l.initMessageHeaders,n,r),l.encodeInitMessageHeaders=!0;const c=s.join("");M(He,`Creating RPC '${e}' stream ${i}: ${c}`,l);const h=o.createWebChannel(c,l);let d=!1,p=!1;const y=new ZP({ro:S=>{p?M(He,`Not sending because RPC '${e}' stream ${i} is closed:`,S):(d||(M(He,`Opening RPC '${e}' stream ${i} transport.`),h.open(),d=!0),M(He,`RPC '${e}' stream ${i} sending:`,S),h.send(S))},oo:()=>h.close()}),w=(S,m,f)=>{S.listen(m,g=>{try{f(g)}catch(_){setTimeout(()=>{throw _},0)}})};return w(h,Wa.EventType.OPEN,()=>{p||M(He,`RPC '${e}' stream ${i} transport opened.`)}),w(h,Wa.EventType.CLOSE,()=>{p||(p=!0,M(He,`RPC '${e}' stream ${i} transport closed`),y.wo())}),w(h,Wa.EventType.ERROR,S=>{p||(p=!0,Ji(He,`RPC '${e}' stream ${i} transport errored:`,S),y.wo(new P(T.UNAVAILABLE,"The operation could not be completed")))}),w(h,Wa.EventType.MESSAGE,S=>{var m;if(!p){const f=S.data[0];se(!!f);const g=f,_=g.error||((m=g[0])===null||m===void 0?void 0:m.error);if(_){M(He,`RPC '${e}' stream ${i} received error:`,_);const k=_.status;let R=function(I){const L=Ee[I];if(L!==void 0)return cE(L)}(k),x=_.message;R===void 0&&(R=T.INTERNAL,x="Unknown error status: "+k+" with message "+_.message),p=!0,y.wo(new P(R,x)),h.close()}else M(He,`RPC '${e}' stream ${i} received:`,f),y._o(f)}}),w(a,lA.STAT_EVENT,S=>{S.stat===Ty.PROXY?M(He,`RPC '${e}' stream ${i} detected buffering proxy`):S.stat===Ty.NOPROXY&&M(He,`RPC '${e}' stream ${i} detected no buffering proxy`)}),setTimeout(()=>{y.fo()},0),y}}function yh(){return typeof document<"u"?document:null}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function uc(t){return new dP(t,!0)}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class EE{constructor(e,n,r=1e3,i=1.5,s=6e4){this.ii=e,this.timerId=n,this.Po=r,this.bo=i,this.Vo=s,this.So=0,this.Do=null,this.Co=Date.now(),this.reset()}reset(){this.So=0}xo(){this.So=this.Vo}No(e){this.cancel();const n=Math.floor(this.So+this.ko()),r=Math.max(0,Date.now()-this.Co),i=Math.max(0,n-r);i>0&&M("ExponentialBackoff",`Backing off for ${i} ms (base delay: ${this.So} ms, delay with jitter: ${n} ms, last attempt: ${r} ms ago)`),this.Do=this.ii.enqueueAfterDelay(this.timerId,i,()=>(this.Co=Date.now(),e())),this.So*=this.bo,this.Sothis.Vo&&(this.So=this.Vo)}Mo(){this.Do!==null&&(this.Do.skipDelay(),this.Do=null)}cancel(){this.Do!==null&&(this.Do.cancel(),this.Do=null)}ko(){return(Math.random()-.5)*this.So}}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class SE{constructor(e,n,r,i,s,o,a,l){this.ii=e,this.$o=r,this.Oo=i,this.connection=s,this.authCredentialsProvider=o,this.appCheckCredentialsProvider=a,this.listener=l,this.state=0,this.Fo=0,this.Bo=null,this.Lo=null,this.stream=null,this.qo=new EE(e,n)}Uo(){return this.state===1||this.state===5||this.Ko()}Ko(){return this.state===2||this.state===3}start(){this.state!==4?this.auth():this.Go()}async stop(){this.Uo()&&await this.close(0)}Qo(){this.state=0,this.qo.reset()}jo(){this.Ko()&&this.Bo===null&&(this.Bo=this.ii.enqueueAfterDelay(this.$o,6e4,()=>this.zo()))}Wo(e){this.Ho(),this.stream.send(e)}async zo(){if(this.Ko())return this.close(0)}Ho(){this.Bo&&(this.Bo.cancel(),this.Bo=null)}Jo(){this.Lo&&(this.Lo.cancel(),this.Lo=null)}async close(e,n){this.Ho(),this.Jo(),this.qo.cancel(),this.Fo++,e!==4?this.qo.reset():n&&n.code===T.RESOURCE_EXHAUSTED?(Nn(n.toString()),Nn("Using maximum backoff delay to prevent overloading the backend."),this.qo.xo()):n&&n.code===T.UNAUTHENTICATED&&this.state!==3&&(this.authCredentialsProvider.invalidateToken(),this.appCheckCredentialsProvider.invalidateToken()),this.stream!==null&&(this.Yo(),this.stream.close(),this.stream=null),this.state=e,await this.listener.ao(n)}Yo(){}auth(){this.state=1;const e=this.Xo(this.Fo),n=this.Fo;Promise.all([this.authCredentialsProvider.getToken(),this.appCheckCredentialsProvider.getToken()]).then(([r,i])=>{this.Fo===n&&this.Zo(r,i)},r=>{e(()=>{const i=new P(T.UNKNOWN,"Fetching auth token failed: "+r.message);return this.tu(i)})})}Zo(e,n){const r=this.Xo(this.Fo);this.stream=this.eu(e,n),this.stream.uo(()=>{r(()=>(this.state=2,this.Lo=this.ii.enqueueAfterDelay(this.Oo,1e4,()=>(this.Ko()&&(this.state=3),Promise.resolve())),this.listener.uo()))}),this.stream.ao(i=>{r(()=>this.tu(i))}),this.stream.onMessage(i=>{r(()=>this.onMessage(i))})}Go(){this.state=5,this.qo.No(async()=>{this.state=0,this.start()})}tu(e){return M("PersistentStream",`close with error: ${e}`),this.stream=null,this.close(4,e)}Xo(e){return n=>{this.ii.enqueueAndForget(()=>this.Fo===e?n():(M("PersistentStream","stream callback skipped by getCloseGuardedDispatcher."),Promise.resolve()))}}}class t2 extends SE{constructor(e,n,r,i,s,o){super(e,"listen_stream_connection_backoff","listen_stream_idle","health_check_timeout",n,r,i,o),this.serializer=s}eu(e,n){return this.connection.Ro("Listen",e,n)}onMessage(e){this.qo.reset();const n=mP(this.serializer,e),r=function(i){if(!("targetChange"in i))return B.min();const s=i.targetChange;return s.targetIds&&s.targetIds.length?B.min():s.readTime?an(s.readTime):B.min()}(e);return this.listener.nu(n,r)}su(e){const n={};n.database=Kd(this.serializer),n.addTarget=function(i,s){let o;const a=s.target;if(o=jd(a)?{documents:vP(i,a)}:{query:wP(i,a)},o.targetId=s.targetId,s.resumeToken.approximateByteSize()>0){o.resumeToken=fE(i,s.resumeToken);const l=Hd(i,s.expectedCount);l!==null&&(o.expectedCount=l)}else if(s.snapshotVersion.compareTo(B.min())>0){o.readTime=cu(i,s.snapshotVersion.toTimestamp());const l=Hd(i,s.expectedCount);l!==null&&(o.expectedCount=l)}return o}(this.serializer,e);const r=EP(this.serializer,e);r&&(n.labels=r),this.Wo(n)}iu(e){const n={};n.database=Kd(this.serializer),n.removeTarget=e,this.Wo(n)}}class n2 extends SE{constructor(e,n,r,i,s,o){super(e,"write_stream_connection_backoff","write_stream_idle","health_check_timeout",n,r,i,o),this.serializer=s,this.ru=!1}get ou(){return this.ru}start(){this.ru=!1,this.lastStreamToken=void 0,super.start()}Yo(){this.ru&&this.uu([])}eu(e,n){return this.connection.Ro("Write",e,n)}onMessage(e){if(se(!!e.streamToken),this.lastStreamToken=e.streamToken,this.ru){this.qo.reset();const n=yP(e.writeResults,e.commitTime),r=an(e.commitTime);return this.listener.cu(r,n)}return se(!e.writeResults||e.writeResults.length===0),this.ru=!0,this.listener.au()}hu(){const e={};e.database=Kd(this.serializer),this.Wo(e)}uu(e){const n={streamToken:this.lastStreamToken,writes:e.map(r=>gP(this.serializer,r))};this.Wo(n)}}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class r2 extends class{}{constructor(e,n,r,i){super(),this.authCredentials=e,this.appCheckCredentials=n,this.connection=r,this.serializer=i,this.lu=!1}fu(){if(this.lu)throw new P(T.FAILED_PRECONDITION,"The client has already been terminated.")}Io(e,n,r){return this.fu(),Promise.all([this.authCredentials.getToken(),this.appCheckCredentials.getToken()]).then(([i,s])=>this.connection.Io(e,n,r,i,s)).catch(i=>{throw i.name==="FirebaseError"?(i.code===T.UNAUTHENTICATED&&(this.authCredentials.invalidateToken(),this.appCheckCredentials.invalidateToken()),i):new P(T.UNKNOWN,i.toString())})}vo(e,n,r,i){return this.fu(),Promise.all([this.authCredentials.getToken(),this.appCheckCredentials.getToken()]).then(([s,o])=>this.connection.vo(e,n,r,s,o,i)).catch(s=>{throw s.name==="FirebaseError"?(s.code===T.UNAUTHENTICATED&&(this.authCredentials.invalidateToken(),this.appCheckCredentials.invalidateToken()),s):new P(T.UNKNOWN,s.toString())})}terminate(){this.lu=!0}}class i2{constructor(e,n){this.asyncQueue=e,this.onlineStateHandler=n,this.state="Unknown",this.wu=0,this._u=null,this.mu=!0}gu(){this.wu===0&&(this.yu("Unknown"),this._u=this.asyncQueue.enqueueAfterDelay("online_state_timeout",1e4,()=>(this._u=null,this.pu("Backend didn't respond within 10 seconds."),this.yu("Offline"),Promise.resolve())))}Iu(e){this.state==="Online"?this.yu("Unknown"):(this.wu++,this.wu>=1&&(this.Tu(),this.pu(`Connection failed 1 times. Most recent error: ${e.toString()}`),this.yu("Offline")))}set(e){this.Tu(),this.wu=0,e==="Online"&&(this.mu=!1),this.yu(e)}yu(e){e!==this.state&&(this.state=e,this.onlineStateHandler(e))}pu(e){const n=`Could not reach Cloud Firestore backend. ${e} +This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.`;this.mu?(Nn(n),this.mu=!1):M("OnlineStateTracker",n)}Tu(){this._u!==null&&(this._u.cancel(),this._u=null)}}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class s2{constructor(e,n,r,i,s){this.localStore=e,this.datastore=n,this.asyncQueue=r,this.remoteSyncer={},this.Eu=[],this.Au=new Map,this.vu=new Set,this.Ru=[],this.Pu=s,this.Pu.Yr(o=>{r.enqueueAndForget(async()=>{ri(this)&&(M("RemoteStore","Restarting streams for network reachability change."),await async function(a){const l=z(a);l.vu.add(4),await ma(l),l.bu.set("Unknown"),l.vu.delete(4),await cc(l)}(this))})}),this.bu=new i2(r,i)}}async function cc(t){if(ri(t))for(const e of t.Ru)await e(!0)}async function ma(t){for(const e of t.Ru)await e(!1)}function IE(t,e){const n=z(t);n.Au.has(e.targetId)||(n.Au.set(e.targetId,e),tm(n)?em(n):gs(n).Ko()&&Zp(n,e))}function TE(t,e){const n=z(t),r=gs(n);n.Au.delete(e),r.Ko()&&kE(n,e),n.Au.size===0&&(r.Ko()?r.jo():ri(n)&&n.bu.set("Unknown"))}function Zp(t,e){if(t.Vu.qt(e.targetId),e.resumeToken.approximateByteSize()>0||e.snapshotVersion.compareTo(B.min())>0){const n=t.remoteSyncer.getRemoteKeysForTarget(e.targetId).size;e=e.withExpectedCount(n)}gs(t).su(e)}function kE(t,e){t.Vu.qt(e),gs(t).iu(e)}function em(t){t.Vu=new lP({getRemoteKeysForTarget:e=>t.remoteSyncer.getRemoteKeysForTarget(e),le:e=>t.Au.get(e)||null,ue:()=>t.datastore.serializer.databaseId}),gs(t).start(),t.bu.gu()}function tm(t){return ri(t)&&!gs(t).Uo()&&t.Au.size>0}function ri(t){return z(t).vu.size===0}function CE(t){t.Vu=void 0}async function o2(t){t.Au.forEach((e,n)=>{Zp(t,e)})}async function a2(t,e){CE(t),tm(t)?(t.bu.Iu(e),em(t)):t.bu.set("Unknown")}async function l2(t,e,n){if(t.bu.set("Online"),e instanceof dE&&e.state===2&&e.cause)try{await async function(r,i){const s=i.cause;for(const o of i.targetIds)r.Au.has(o)&&(await r.remoteSyncer.rejectListen(o,s),r.Au.delete(o),r.Vu.removeTarget(o))}(t,e)}catch(r){M("RemoteStore","Failed to remove targets %s: %s ",e.targetIds.join(","),r),await hu(t,r)}else if(e instanceof wl?t.Vu.Ht(e):e instanceof hE?t.Vu.ne(e):t.Vu.Xt(e),!n.isEqual(B.min()))try{const r=await _E(t.localStore);n.compareTo(r)>=0&&await function(i,s){const o=i.Vu.ce(s);return o.targetChanges.forEach((a,l)=>{if(a.resumeToken.approximateByteSize()>0){const u=i.Au.get(l);u&&i.Au.set(l,u.withResumeToken(a.resumeToken,s))}}),o.targetMismatches.forEach((a,l)=>{const u=i.Au.get(a);if(!u)return;i.Au.set(a,u.withResumeToken(tt.EMPTY_BYTE_STRING,u.snapshotVersion)),kE(i,a);const c=new Wn(u.target,a,l,u.sequenceNumber);Zp(i,c)}),i.remoteSyncer.applyRemoteEvent(o)}(t,n)}catch(r){M("RemoteStore","Failed to raise snapshot:",r),await hu(t,r)}}async function hu(t,e,n){if(!ha(e))throw e;t.vu.add(1),await ma(t),t.bu.set("Offline"),n||(n=()=>_E(t.localStore)),t.asyncQueue.enqueueRetryable(async()=>{M("RemoteStore","Retrying IndexedDB access"),await n(),t.vu.delete(1),await cc(t)})}function NE(t,e){return e().catch(n=>hu(t,n,e))}async function hc(t){const e=z(t),n=hr(e);let r=e.Eu.length>0?e.Eu[e.Eu.length-1].batchId:-1;for(;u2(e);)try{const i=await KP(e.localStore,r);if(i===null){e.Eu.length===0&&n.jo();break}r=i.batchId,c2(e,i)}catch(i){await hu(e,i)}RE(e)&&xE(e)}function u2(t){return ri(t)&&t.Eu.length<10}function c2(t,e){t.Eu.push(e);const n=hr(t);n.Ko()&&n.ou&&n.uu(e.mutations)}function RE(t){return ri(t)&&!hr(t).Uo()&&t.Eu.length>0}function xE(t){hr(t).start()}async function h2(t){hr(t).hu()}async function d2(t){const e=hr(t);for(const n of t.Eu)e.uu(n.mutations)}async function f2(t,e,n){const r=t.Eu.shift(),i=Wp.from(r,e,n);await NE(t,()=>t.remoteSyncer.applySuccessfulWrite(i)),await hc(t)}async function p2(t,e){e&&hr(t).ou&&await async function(n,r){if(i=r.code,sP(i)&&i!==T.ABORTED){const s=n.Eu.shift();hr(n).Qo(),await NE(n,()=>n.remoteSyncer.rejectFailedWrite(s.batchId,r)),await hc(n)}var i}(t,e),RE(t)&&xE(t)}async function Yy(t,e){const n=z(t);n.asyncQueue.verifyOperationInProgress(),M("RemoteStore","RemoteStore received new credentials");const r=ri(n);n.vu.add(3),await ma(n),r&&n.bu.set("Unknown"),await n.remoteSyncer.handleCredentialChange(e),n.vu.delete(3),await cc(n)}async function m2(t,e){const n=z(t);e?(n.vu.delete(2),await cc(n)):e||(n.vu.add(2),await ma(n),n.bu.set("Unknown"))}function gs(t){return t.Su||(t.Su=function(e,n,r){const i=z(e);return i.fu(),new t2(n,i.connection,i.authCredentials,i.appCheckCredentials,i.serializer,r)}(t.datastore,t.asyncQueue,{uo:o2.bind(null,t),ao:a2.bind(null,t),nu:l2.bind(null,t)}),t.Ru.push(async e=>{e?(t.Su.Qo(),tm(t)?em(t):t.bu.set("Unknown")):(await t.Su.stop(),CE(t))})),t.Su}function hr(t){return t.Du||(t.Du=function(e,n,r){const i=z(e);return i.fu(),new n2(n,i.connection,i.authCredentials,i.appCheckCredentials,i.serializer,r)}(t.datastore,t.asyncQueue,{uo:h2.bind(null,t),ao:p2.bind(null,t),au:d2.bind(null,t),cu:f2.bind(null,t)}),t.Ru.push(async e=>{e?(t.Du.Qo(),await hc(t)):(await t.Du.stop(),t.Eu.length>0&&(M("RemoteStore",`Stopping write stream with ${t.Eu.length} pending writes`),t.Eu=[]))})),t.Du}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class nm{constructor(e,n,r,i,s){this.asyncQueue=e,this.timerId=n,this.targetTimeMs=r,this.op=i,this.removalCallback=s,this.deferred=new wn,this.then=this.deferred.promise.then.bind(this.deferred.promise),this.deferred.promise.catch(o=>{})}static createAndSchedule(e,n,r,i,s){const o=Date.now()+r,a=new nm(e,n,o,i,s);return a.start(r),a}start(e){this.timerHandle=setTimeout(()=>this.handleDelayElapsed(),e)}skipDelay(){return this.handleDelayElapsed()}cancel(e){this.timerHandle!==null&&(this.clearTimeout(),this.deferred.reject(new P(T.CANCELLED,"Operation cancelled"+(e?": "+e:""))))}handleDelayElapsed(){this.asyncQueue.enqueueAndForget(()=>this.timerHandle!==null?(this.clearTimeout(),this.op().then(e=>this.deferred.resolve(e))):Promise.resolve())}clearTimeout(){this.timerHandle!==null&&(this.removalCallback(this),clearTimeout(this.timerHandle),this.timerHandle=null)}}function rm(t,e){if(Nn("AsyncQueue",`${e}: ${t}`),ha(t))return new P(T.UNAVAILABLE,`${e}: ${t}`);throw t}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class Bi{constructor(e){this.comparator=e?(n,r)=>e(n,r)||$.comparator(n.key,r.key):(n,r)=>$.comparator(n.key,r.key),this.keyedMap=Bs(),this.sortedSet=new fe(this.comparator)}static emptySet(e){return new Bi(e.comparator)}has(e){return this.keyedMap.get(e)!=null}get(e){return this.keyedMap.get(e)}first(){return this.sortedSet.minKey()}last(){return this.sortedSet.maxKey()}isEmpty(){return this.sortedSet.isEmpty()}indexOf(e){const n=this.keyedMap.get(e);return n?this.sortedSet.indexOf(n):-1}get size(){return this.sortedSet.size}forEach(e){this.sortedSet.inorderTraversal((n,r)=>(e(n),!1))}add(e){const n=this.delete(e.key);return n.copy(n.keyedMap.insert(e.key,e),n.sortedSet.insert(e,null))}delete(e){const n=this.get(e);return n?this.copy(this.keyedMap.remove(e),this.sortedSet.remove(n)):this}isEqual(e){if(!(e instanceof Bi)||this.size!==e.size)return!1;const n=this.sortedSet.getIterator(),r=e.sortedSet.getIterator();for(;n.hasNext();){const i=n.getNext().key,s=r.getNext().key;if(!i.isEqual(s))return!1}return!0}toString(){const e=[];return this.forEach(n=>{e.push(n.toString())}),e.length===0?"DocumentSet ()":`DocumentSet ( + `+e.join(` +`)+` +)`}copy(e,n){const r=new Bi;return r.comparator=this.comparator,r.keyedMap=e,r.sortedSet=n,r}}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class Xy{constructor(){this.Cu=new fe($.comparator)}track(e){const n=e.doc.key,r=this.Cu.get(n);r?e.type!==0&&r.type===3?this.Cu=this.Cu.insert(n,e):e.type===3&&r.type!==1?this.Cu=this.Cu.insert(n,{type:r.type,doc:e.doc}):e.type===2&&r.type===2?this.Cu=this.Cu.insert(n,{type:2,doc:e.doc}):e.type===2&&r.type===0?this.Cu=this.Cu.insert(n,{type:0,doc:e.doc}):e.type===1&&r.type===0?this.Cu=this.Cu.remove(n):e.type===1&&r.type===2?this.Cu=this.Cu.insert(n,{type:1,doc:r.doc}):e.type===0&&r.type===1?this.Cu=this.Cu.insert(n,{type:2,doc:e.doc}):F():this.Cu=this.Cu.insert(n,e)}xu(){const e=[];return this.Cu.inorderTraversal((n,r)=>{e.push(r)}),e}}class is{constructor(e,n,r,i,s,o,a,l,u){this.query=e,this.docs=n,this.oldDocs=r,this.docChanges=i,this.mutatedKeys=s,this.fromCache=o,this.syncStateChanged=a,this.excludesMetadataChanges=l,this.hasCachedResults=u}static fromInitialDocuments(e,n,r,i,s){const o=[];return n.forEach(a=>{o.push({type:0,doc:a})}),new is(e,n,Bi.emptySet(n),o,r,i,!0,!1,s)}get hasPendingWrites(){return!this.mutatedKeys.isEmpty()}isEqual(e){if(!(this.fromCache===e.fromCache&&this.hasCachedResults===e.hasCachedResults&&this.syncStateChanged===e.syncStateChanged&&this.mutatedKeys.isEqual(e.mutatedKeys)&&ic(this.query,e.query)&&this.docs.isEqual(e.docs)&&this.oldDocs.isEqual(e.oldDocs)))return!1;const n=this.docChanges,r=e.docChanges;if(n.length!==r.length)return!1;for(let i=0;iY_(e),ic),this.onlineState="Unknown",this.ku=new Set}}async function im(t,e){const n=z(t),r=e.query;let i=!1,s=n.queries.get(r);if(s||(i=!0,s=new g2),i)try{s.Nu=await n.onListen(r)}catch(o){const a=rm(o,`Initialization of query '${zd(e.query)}' failed`);return void e.onError(a)}n.queries.set(r,s),s.listeners.push(e),e.Mu(n.onlineState),s.Nu&&e.$u(s.Nu)&&om(n)}async function sm(t,e){const n=z(t),r=e.query;let i=!1;const s=n.queries.get(r);if(s){const o=s.listeners.indexOf(e);o>=0&&(s.listeners.splice(o,1),i=s.listeners.length===0)}if(i)return n.queries.delete(r),n.onUnlisten(r)}function v2(t,e){const n=z(t);let r=!1;for(const i of e){const s=i.query,o=n.queries.get(s);if(o){for(const a of o.listeners)a.$u(i)&&(r=!0);o.Nu=i}}r&&om(n)}function w2(t,e,n){const r=z(t),i=r.queries.get(e);if(i)for(const s of i.listeners)s.onError(n);r.queries.delete(e)}function om(t){t.ku.forEach(e=>{e.next()})}class am{constructor(e,n,r){this.query=e,this.Ou=n,this.Fu=!1,this.Bu=null,this.onlineState="Unknown",this.options=r||{}}$u(e){if(!this.options.includeMetadataChanges){const r=[];for(const i of e.docChanges)i.type!==3&&r.push(i);e=new is(e.query,e.docs,e.oldDocs,r,e.mutatedKeys,e.fromCache,e.syncStateChanged,!0,e.hasCachedResults)}let n=!1;return this.Fu?this.Lu(e)&&(this.Ou.next(e),n=!0):this.qu(e,this.onlineState)&&(this.Uu(e),n=!0),this.Bu=e,n}onError(e){this.Ou.error(e)}Mu(e){this.onlineState=e;let n=!1;return this.Bu&&!this.Fu&&this.qu(this.Bu,e)&&(this.Uu(this.Bu),n=!0),n}qu(e,n){if(!e.fromCache)return!0;const r=n!=="Offline";return(!this.options.Ku||!r)&&(!e.docs.isEmpty()||e.hasCachedResults||n==="Offline")}Lu(e){if(e.docChanges.length>0)return!0;const n=this.Bu&&this.Bu.hasPendingWrites!==e.hasPendingWrites;return!(!e.syncStateChanged&&!n)&&this.options.includeMetadataChanges===!0}Uu(e){e=is.fromInitialDocuments(e.query,e.docs,e.mutatedKeys,e.fromCache,e.hasCachedResults),this.Fu=!0,this.Ou.next(e)}}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class AE{constructor(e){this.key=e}}class PE{constructor(e){this.key=e}}class _2{constructor(e,n){this.query=e,this.Yu=n,this.Xu=null,this.hasCachedResults=!1,this.current=!1,this.Zu=W(),this.mutatedKeys=W(),this.tc=X_(e),this.ec=new Bi(this.tc)}get nc(){return this.Yu}sc(e,n){const r=n?n.ic:new Xy,i=n?n.ec:this.ec;let s=n?n.mutatedKeys:this.mutatedKeys,o=i,a=!1;const l=this.query.limitType==="F"&&i.size===this.query.limit?i.last():null,u=this.query.limitType==="L"&&i.size===this.query.limit?i.first():null;if(e.inorderTraversal((c,h)=>{const d=i.get(c),p=sc(this.query,h)?h:null,y=!!d&&this.mutatedKeys.has(d.key),w=!!p&&(p.hasLocalMutations||this.mutatedKeys.has(p.key)&&p.hasCommittedMutations);let S=!1;d&&p?d.data.isEqual(p.data)?y!==w&&(r.track({type:3,doc:p}),S=!0):this.rc(d,p)||(r.track({type:2,doc:p}),S=!0,(l&&this.tc(p,l)>0||u&&this.tc(p,u)<0)&&(a=!0)):!d&&p?(r.track({type:0,doc:p}),S=!0):d&&!p&&(r.track({type:1,doc:d}),S=!0,(l||u)&&(a=!0)),S&&(p?(o=o.add(p),s=w?s.add(c):s.delete(c)):(o=o.delete(c),s=s.delete(c)))}),this.query.limit!==null)for(;o.size>this.query.limit;){const c=this.query.limitType==="F"?o.last():o.first();o=o.delete(c.key),s=s.delete(c.key),r.track({type:1,doc:c})}return{ec:o,ic:r,zi:a,mutatedKeys:s}}rc(e,n){return e.hasLocalMutations&&n.hasCommittedMutations&&!n.hasLocalMutations}applyChanges(e,n,r){const i=this.ec;this.ec=e.ec,this.mutatedKeys=e.mutatedKeys;const s=e.ic.xu();s.sort((u,c)=>function(h,d){const p=y=>{switch(y){case 0:return 1;case 2:case 3:return 2;case 1:return 0;default:return F()}};return p(h)-p(d)}(u.type,c.type)||this.tc(u.doc,c.doc)),this.oc(r);const o=n?this.uc():[],a=this.Zu.size===0&&this.current?1:0,l=a!==this.Xu;return this.Xu=a,s.length!==0||l?{snapshot:new is(this.query,e.ec,i,s,e.mutatedKeys,a===0,l,!1,!!r&&r.resumeToken.approximateByteSize()>0),cc:o}:{cc:o}}Mu(e){return this.current&&e==="Offline"?(this.current=!1,this.applyChanges({ec:this.ec,ic:new Xy,mutatedKeys:this.mutatedKeys,zi:!1},!1)):{cc:[]}}ac(e){return!this.Yu.has(e)&&!!this.ec.has(e)&&!this.ec.get(e).hasLocalMutations}oc(e){e&&(e.addedDocuments.forEach(n=>this.Yu=this.Yu.add(n)),e.modifiedDocuments.forEach(n=>{}),e.removedDocuments.forEach(n=>this.Yu=this.Yu.delete(n)),this.current=e.current)}uc(){if(!this.current)return[];const e=this.Zu;this.Zu=W(),this.ec.forEach(r=>{this.ac(r.key)&&(this.Zu=this.Zu.add(r.key))});const n=[];return e.forEach(r=>{this.Zu.has(r)||n.push(new PE(r))}),this.Zu.forEach(r=>{e.has(r)||n.push(new AE(r))}),n}hc(e){this.Yu=e.ir,this.Zu=W();const n=this.sc(e.documents);return this.applyChanges(n,!0)}lc(){return is.fromInitialDocuments(this.query,this.ec,this.mutatedKeys,this.Xu===0,this.hasCachedResults)}}class E2{constructor(e,n,r){this.query=e,this.targetId=n,this.view=r}}class S2{constructor(e){this.key=e,this.fc=!1}}class I2{constructor(e,n,r,i,s,o){this.localStore=e,this.remoteStore=n,this.eventManager=r,this.sharedClientState=i,this.currentUser=s,this.maxConcurrentLimboResolutions=o,this.dc={},this.wc=new ms(a=>Y_(a),ic),this._c=new Map,this.mc=new Set,this.gc=new fe($.comparator),this.yc=new Map,this.Ic=new Yp,this.Tc={},this.Ec=new Map,this.Ac=rs.Mn(),this.onlineState="Unknown",this.vc=void 0}get isPrimaryClient(){return this.vc===!0}}async function T2(t,e){const n=L2(t);let r,i;const s=n.wc.get(e);if(s)r=s.targetId,n.sharedClientState.addLocalQueryTarget(r),i=s.view.lc();else{const o=await GP(n.localStore,Rn(e)),a=n.sharedClientState.addLocalQueryTarget(o.targetId);r=o.targetId,i=await k2(n,e,r,a==="current",o.resumeToken),n.isPrimaryClient&&IE(n.remoteStore,o)}return i}async function k2(t,e,n,r,i){t.Rc=(h,d,p)=>async function(y,w,S,m){let f=w.view.sc(S);f.zi&&(f=await Ky(y.localStore,w.query,!1).then(({documents:k})=>w.view.sc(k,f)));const g=m&&m.targetChanges.get(w.targetId),_=w.view.applyChanges(f,y.isPrimaryClient,g);return Zy(y,w.targetId,_.cc),_.snapshot}(t,h,d,p);const s=await Ky(t.localStore,e,!0),o=new _2(e,s.ir),a=o.sc(s.documents),l=pa.createSynthesizedTargetChangeForCurrentChange(n,r&&t.onlineState!=="Offline",i),u=o.applyChanges(a,t.isPrimaryClient,l);Zy(t,n,u.cc);const c=new E2(e,n,o);return t.wc.set(e,c),t._c.has(n)?t._c.get(n).push(e):t._c.set(n,[e]),u.snapshot}async function C2(t,e){const n=z(t),r=n.wc.get(e),i=n._c.get(r.targetId);if(i.length>1)return n._c.set(r.targetId,i.filter(s=>!ic(s,e))),void n.wc.delete(e);n.isPrimaryClient?(n.sharedClientState.removeLocalQueryTarget(r.targetId),n.sharedClientState.isActiveQueryTarget(r.targetId)||await Gd(n.localStore,r.targetId,!1).then(()=>{n.sharedClientState.clearQueryState(r.targetId),TE(n.remoteStore,r.targetId),Qd(n,r.targetId)}).catch(ca)):(Qd(n,r.targetId),await Gd(n.localStore,r.targetId,!0))}async function N2(t,e,n){const r=M2(t);try{const i=await function(s,o){const a=z(s),l=we.now(),u=o.reduce((d,p)=>d.add(p.key),W());let c,h;return a.persistence.runTransaction("Locally write mutations","readwrite",d=>{let p=xn(),y=W();return a.Zi.getEntries(d,u).next(w=>{p=w,p.forEach((S,m)=>{m.isValidDocument()||(y=y.add(S))})}).next(()=>a.localDocuments.getOverlayedDocuments(d,p)).next(w=>{c=w;const S=[];for(const m of o){const f=eP(m,c.get(m.key).overlayedDocument);f!=null&&S.push(new vr(m.key,f,V_(f.value.mapValue),Lt.exists(!0)))}return a.mutationQueue.addMutationBatch(d,l,S,o)}).next(w=>{h=w;const S=w.applyToLocalDocumentSet(c,y);return a.documentOverlayCache.saveOverlays(d,w.batchId,S)})}).then(()=>({batchId:h.batchId,changes:Z_(c)}))}(r.localStore,e);r.sharedClientState.addPendingMutation(i.batchId),function(s,o,a){let l=s.Tc[s.currentUser.toKey()];l||(l=new fe(X)),l=l.insert(o,a),s.Tc[s.currentUser.toKey()]=l}(r,i.batchId,n),await ga(r,i.changes),await hc(r.remoteStore)}catch(i){const s=rm(i,"Failed to persist write");n.reject(s)}}async function DE(t,e){const n=z(t);try{const r=await qP(n.localStore,e);e.targetChanges.forEach((i,s)=>{const o=n.yc.get(s);o&&(se(i.addedDocuments.size+i.modifiedDocuments.size+i.removedDocuments.size<=1),i.addedDocuments.size>0?o.fc=!0:i.modifiedDocuments.size>0?se(o.fc):i.removedDocuments.size>0&&(se(o.fc),o.fc=!1))}),await ga(n,r,e)}catch(r){await ca(r)}}function Jy(t,e,n){const r=z(t);if(r.isPrimaryClient&&n===0||!r.isPrimaryClient&&n===1){const i=[];r.wc.forEach((s,o)=>{const a=o.view.Mu(e);a.snapshot&&i.push(a.snapshot)}),function(s,o){const a=z(s);a.onlineState=o;let l=!1;a.queries.forEach((u,c)=>{for(const h of c.listeners)h.Mu(o)&&(l=!0)}),l&&om(a)}(r.eventManager,e),i.length&&r.dc.nu(i),r.onlineState=e,r.isPrimaryClient&&r.sharedClientState.setOnlineState(e)}}async function R2(t,e,n){const r=z(t);r.sharedClientState.updateQueryState(e,"rejected",n);const i=r.yc.get(e),s=i&&i.key;if(s){let o=new fe($.comparator);o=o.insert(s,Ke.newNoDocument(s,B.min()));const a=W().add(s),l=new lc(B.min(),new Map,new fe(X),o,a);await DE(r,l),r.gc=r.gc.remove(s),r.yc.delete(e),lm(r)}else await Gd(r.localStore,e,!1).then(()=>Qd(r,e,n)).catch(ca)}async function x2(t,e){const n=z(t),r=e.batch.batchId;try{const i=await HP(n.localStore,e);LE(n,r,null),OE(n,r),n.sharedClientState.updateMutationState(r,"acknowledged"),await ga(n,i)}catch(i){await ca(i)}}async function A2(t,e,n){const r=z(t);try{const i=await function(s,o){const a=z(s);return a.persistence.runTransaction("Reject batch","readwrite-primary",l=>{let u;return a.mutationQueue.lookupMutationBatch(l,o).next(c=>(se(c!==null),u=c.keys(),a.mutationQueue.removeMutationBatch(l,c))).next(()=>a.mutationQueue.performConsistencyCheck(l)).next(()=>a.documentOverlayCache.removeOverlaysForBatchId(l,u,o)).next(()=>a.localDocuments.recalculateAndSaveOverlaysForDocumentKeys(l,u)).next(()=>a.localDocuments.getDocuments(l,u))})}(r.localStore,e);LE(r,e,n),OE(r,e),r.sharedClientState.updateMutationState(e,"rejected",n),await ga(r,i)}catch(i){await ca(i)}}function OE(t,e){(t.Ec.get(e)||[]).forEach(n=>{n.resolve()}),t.Ec.delete(e)}function LE(t,e,n){const r=z(t);let i=r.Tc[r.currentUser.toKey()];if(i){const s=i.get(e);s&&(n?s.reject(n):s.resolve(),i=i.remove(e)),r.Tc[r.currentUser.toKey()]=i}}function Qd(t,e,n=null){t.sharedClientState.removeLocalQueryTarget(e);for(const r of t._c.get(e))t.wc.delete(r),n&&t.dc.Pc(r,n);t._c.delete(e),t.isPrimaryClient&&t.Ic.Is(e).forEach(r=>{t.Ic.containsKey(r)||ME(t,r)})}function ME(t,e){t.mc.delete(e.path.canonicalString());const n=t.gc.get(e);n!==null&&(TE(t.remoteStore,n),t.gc=t.gc.remove(e),t.yc.delete(n),lm(t))}function Zy(t,e,n){for(const r of n)r instanceof AE?(t.Ic.addReference(r.key,e),P2(t,r)):r instanceof PE?(M("SyncEngine","Document no longer in limbo: "+r.key),t.Ic.removeReference(r.key,e),t.Ic.containsKey(r.key)||ME(t,r.key)):F()}function P2(t,e){const n=e.key,r=n.path.canonicalString();t.gc.get(n)||t.mc.has(r)||(M("SyncEngine","New document in limbo: "+n),t.mc.add(r),lm(t))}function lm(t){for(;t.mc.size>0&&t.gc.size{o.push(r.Rc(l,e,n).then(u=>{if((u||n)&&r.isPrimaryClient&&r.sharedClientState.updateQueryState(l.targetId,u!=null&&u.fromCache?"not-current":"current"),u){i.push(u);const c=Jp.Li(l.targetId,u);s.push(c)}}))}),await Promise.all(o),r.dc.nu(i),await async function(a,l){const u=z(a);try{await u.persistence.runTransaction("notifyLocalViewChanges","readwrite",c=>N.forEach(l,h=>N.forEach(h.Fi,d=>u.persistence.referenceDelegate.addReference(c,h.targetId,d)).next(()=>N.forEach(h.Bi,d=>u.persistence.referenceDelegate.removeReference(c,h.targetId,d)))))}catch(c){if(!ha(c))throw c;M("LocalStore","Failed to update sequence numbers: "+c)}for(const c of l){const h=c.targetId;if(!c.fromCache){const d=u.Ji.get(h),p=d.snapshotVersion,y=d.withLastLimboFreeSnapshotVersion(p);u.Ji=u.Ji.insert(h,y)}}}(r.localStore,s))}async function D2(t,e){const n=z(t);if(!n.currentUser.isEqual(e)){M("SyncEngine","User change. New user:",e.toKey());const r=await wE(n.localStore,e);n.currentUser=e,function(i,s){i.Ec.forEach(o=>{o.forEach(a=>{a.reject(new P(T.CANCELLED,s))})}),i.Ec.clear()}(n,"'waitForPendingWrites' promise is rejected due to a user change."),n.sharedClientState.handleUserChange(e,r.removedBatchIds,r.addedBatchIds),await ga(n,r.er)}}function O2(t,e){const n=z(t),r=n.yc.get(e);if(r&&r.fc)return W().add(r.key);{let i=W();const s=n._c.get(e);if(!s)return i;for(const o of s){const a=n.wc.get(o);i=i.unionWith(a.view.nc)}return i}}function L2(t){const e=z(t);return e.remoteStore.remoteSyncer.applyRemoteEvent=DE.bind(null,e),e.remoteStore.remoteSyncer.getRemoteKeysForTarget=O2.bind(null,e),e.remoteStore.remoteSyncer.rejectListen=R2.bind(null,e),e.dc.nu=v2.bind(null,e.eventManager),e.dc.Pc=w2.bind(null,e.eventManager),e}function M2(t){const e=z(t);return e.remoteStore.remoteSyncer.applySuccessfulWrite=x2.bind(null,e),e.remoteStore.remoteSyncer.rejectFailedWrite=A2.bind(null,e),e}class ev{constructor(){this.synchronizeTabs=!1}async initialize(e){this.serializer=uc(e.databaseInfo.databaseId),this.sharedClientState=this.createSharedClientState(e),this.persistence=this.createPersistence(e),await this.persistence.start(),this.localStore=this.createLocalStore(e),this.gcScheduler=this.createGarbageCollectionScheduler(e,this.localStore),this.indexBackfillerScheduler=this.createIndexBackfillerScheduler(e,this.localStore)}createGarbageCollectionScheduler(e,n){return null}createIndexBackfillerScheduler(e,n){return null}createLocalStore(e){return zP(this.persistence,new VP,e.initialUser,this.serializer)}createPersistence(e){return new FP(Xp.zs,this.serializer)}createSharedClientState(e){return new YP}async terminate(){this.gcScheduler&&this.gcScheduler.stop(),await this.sharedClientState.shutdown(),await this.persistence.shutdown()}}class $2{async initialize(e,n){this.localStore||(this.localStore=e.localStore,this.sharedClientState=e.sharedClientState,this.datastore=this.createDatastore(n),this.remoteStore=this.createRemoteStore(n),this.eventManager=this.createEventManager(n),this.syncEngine=this.createSyncEngine(n,!e.synchronizeTabs),this.sharedClientState.onlineStateHandler=r=>Jy(this.syncEngine,r,1),this.remoteStore.remoteSyncer.handleCredentialChange=D2.bind(null,this.syncEngine),await m2(this.remoteStore,this.syncEngine.isPrimaryClient))}createEventManager(e){return new y2}createDatastore(e){const n=uc(e.databaseInfo.databaseId),r=(i=e.databaseInfo,new e2(i));var i;return function(s,o,a,l){return new r2(s,o,a,l)}(e.authCredentials,e.appCheckCredentials,r,n)}createRemoteStore(e){return n=this.localStore,r=this.datastore,i=e.asyncQueue,s=a=>Jy(this.syncEngine,a,0),o=Qy.D()?new Qy:new XP,new s2(n,r,i,s,o);var n,r,i,s,o}createSyncEngine(e,n){return function(r,i,s,o,a,l,u){const c=new I2(r,i,s,o,a,l);return u&&(c.vc=!0),c}(this.localStore,this.remoteStore,this.eventManager,this.sharedClientState,e.initialUser,e.maxConcurrentLimboResolutions,n)}terminate(){return async function(e){const n=z(e);M("RemoteStore","RemoteStore shutting down."),n.vu.add(5),await ma(n),n.Pu.shutdown(),n.bu.set("Unknown")}(this.remoteStore)}}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *//** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class um{constructor(e){this.observer=e,this.muted=!1}next(e){this.observer.next&&this.Sc(this.observer.next,e)}error(e){this.observer.error?this.Sc(this.observer.error,e):Nn("Uncaught Error in snapshot listener:",e.toString())}Dc(){this.muted=!0}Sc(e,n){this.muted||setTimeout(()=>{this.muted||e(n)},0)}}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class U2{constructor(e,n,r,i){this.authCredentials=e,this.appCheckCredentials=n,this.asyncQueue=r,this.databaseInfo=i,this.user=qe.UNAUTHENTICATED,this.clientId=b_.A(),this.authCredentialListener=()=>Promise.resolve(),this.appCheckCredentialListener=()=>Promise.resolve(),this.authCredentials.start(r,async s=>{M("FirestoreClient","Received user=",s.uid),await this.authCredentialListener(s),this.user=s}),this.appCheckCredentials.start(r,s=>(M("FirestoreClient","Received new app check token=",s),this.appCheckCredentialListener(s,this.user)))}async getConfiguration(){return{asyncQueue:this.asyncQueue,databaseInfo:this.databaseInfo,clientId:this.clientId,authCredentials:this.authCredentials,appCheckCredentials:this.appCheckCredentials,initialUser:this.user,maxConcurrentLimboResolutions:100}}setCredentialChangeListener(e){this.authCredentialListener=e}setAppCheckTokenChangeListener(e){this.appCheckCredentialListener=e}verifyNotTerminated(){if(this.asyncQueue.isShuttingDown)throw new P(T.FAILED_PRECONDITION,"The client has already been terminated.")}terminate(){this.asyncQueue.enterRestrictedMode();const e=new wn;return this.asyncQueue.enqueueAndForgetEvenWhileRestricted(async()=>{try{this._onlineComponents&&await this._onlineComponents.terminate(),this._offlineComponents&&await this._offlineComponents.terminate(),this.authCredentials.shutdown(),this.appCheckCredentials.shutdown(),e.resolve()}catch(n){const r=rm(n,"Failed to shutdown persistence");e.reject(r)}}),e.promise}}async function vh(t,e){t.asyncQueue.verifyOperationInProgress(),M("FirestoreClient","Initializing OfflineComponentProvider");const n=await t.getConfiguration();await e.initialize(n);let r=n.initialUser;t.setCredentialChangeListener(async i=>{r.isEqual(i)||(await wE(e.localStore,i),r=i)}),e.persistence.setDatabaseDeletedListener(()=>t.terminate()),t._offlineComponents=e}async function tv(t,e){t.asyncQueue.verifyOperationInProgress();const n=await F2(t);M("FirestoreClient","Initializing OnlineComponentProvider");const r=await t.getConfiguration();await e.initialize(n,r),t.setCredentialChangeListener(i=>Yy(e.remoteStore,i)),t.setAppCheckTokenChangeListener((i,s)=>Yy(e.remoteStore,s)),t._onlineComponents=e}function b2(t){return t.name==="FirebaseError"?t.code===T.FAILED_PRECONDITION||t.code===T.UNIMPLEMENTED:!(typeof DOMException<"u"&&t instanceof DOMException)||t.code===22||t.code===20||t.code===11}async function F2(t){if(!t._offlineComponents)if(t._uninitializedComponentsProvider){M("FirestoreClient","Using user provided OfflineComponentProvider");try{await vh(t,t._uninitializedComponentsProvider._offline)}catch(e){const n=e;if(!b2(n))throw n;Ji("Error using user provided cache. Falling back to memory cache: "+n),await vh(t,new ev)}}else M("FirestoreClient","Using default OfflineComponentProvider"),await vh(t,new ev);return t._offlineComponents}async function $E(t){return t._onlineComponents||(t._uninitializedComponentsProvider?(M("FirestoreClient","Using user provided OnlineComponentProvider"),await tv(t,t._uninitializedComponentsProvider._online)):(M("FirestoreClient","Using default OnlineComponentProvider"),await tv(t,new $2))),t._onlineComponents}function j2(t){return $E(t).then(e=>e.syncEngine)}async function du(t){const e=await $E(t),n=e.eventManager;return n.onListen=T2.bind(null,e.syncEngine),n.onUnlisten=C2.bind(null,e.syncEngine),n}function V2(t,e,n={}){const r=new wn;return t.asyncQueue.enqueueAndForget(async()=>function(i,s,o,a,l){const u=new um({next:h=>{s.enqueueAndForget(()=>sm(i,c));const d=h.docs.has(o);!d&&h.fromCache?l.reject(new P(T.UNAVAILABLE,"Failed to get document because the client is offline.")):d&&h.fromCache&&a&&a.source==="server"?l.reject(new P(T.UNAVAILABLE,'Failed to get document from server. (However, this document does exist in the local cache. Run again without setting source to "server" to retrieve the cached document.)')):l.resolve(h)},error:h=>l.reject(h)}),c=new am(rc(o.path),u,{includeMetadataChanges:!0,Ku:!0});return im(i,c)}(await du(t),t.asyncQueue,e,n,r)),r.promise}function B2(t,e,n={}){const r=new wn;return t.asyncQueue.enqueueAndForget(async()=>function(i,s,o,a,l){const u=new um({next:h=>{s.enqueueAndForget(()=>sm(i,c)),h.fromCache&&a.source==="server"?l.reject(new P(T.UNAVAILABLE,'Failed to get documents from server. (However, these documents may exist in the local cache. Run again without setting source to "server" to retrieve the cached documents.)')):l.resolve(h)},error:h=>l.reject(h)}),c=new am(o,u,{includeMetadataChanges:!0,Ku:!0});return im(i,c)}(await du(t),t.asyncQueue,e,n,r)),r.promise}/** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function UE(t){const e={};return t.timeoutSeconds!==void 0&&(e.timeoutSeconds=t.timeoutSeconds),e}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const nv=new Map;/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function bE(t,e,n){if(!n)throw new P(T.INVALID_ARGUMENT,`Function ${t}() cannot be called with an empty ${e}.`)}function z2(t,e,n,r){if(e===!0&&r===!0)throw new P(T.INVALID_ARGUMENT,`${t} and ${n} cannot be used together.`)}function rv(t){if(!$.isDocumentKey(t))throw new P(T.INVALID_ARGUMENT,`Invalid document reference. Document references must have an even number of segments, but ${t} has ${t.length}.`)}function iv(t){if($.isDocumentKey(t))throw new P(T.INVALID_ARGUMENT,`Invalid collection reference. Collection references must have an odd number of segments, but ${t} has ${t.length}.`)}function dc(t){if(t===void 0)return"undefined";if(t===null)return"null";if(typeof t=="string")return t.length>20&&(t=`${t.substring(0,20)}...`),JSON.stringify(t);if(typeof t=="number"||typeof t=="boolean")return""+t;if(typeof t=="object"){if(t instanceof Array)return"an array";{const e=function(n){return n.constructor?n.constructor.name:null}(t);return e?`a custom ${e} object`:"an object"}}return typeof t=="function"?"a function":F()}function gt(t,e){if("_delegate"in t&&(t=t._delegate),!(t instanceof e)){if(e.name===t.constructor.name)throw new P(T.INVALID_ARGUMENT,"Type does not match the expected instance. Did you pass a reference from a different Firestore SDK?");{const n=dc(t);throw new P(T.INVALID_ARGUMENT,`Expected type '${e.name}', but it was: ${n}`)}}return t}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class sv{constructor(e){var n,r;if(e.host===void 0){if(e.ssl!==void 0)throw new P(T.INVALID_ARGUMENT,"Can't provide ssl option if host option is not set");this.host="firestore.googleapis.com",this.ssl=!0}else this.host=e.host,this.ssl=(n=e.ssl)===null||n===void 0||n;if(this.credentials=e.credentials,this.ignoreUndefinedProperties=!!e.ignoreUndefinedProperties,this.cache=e.localCache,e.cacheSizeBytes===void 0)this.cacheSizeBytes=41943040;else{if(e.cacheSizeBytes!==-1&&e.cacheSizeBytes<1048576)throw new P(T.INVALID_ARGUMENT,"cacheSizeBytes must be at least 1048576");this.cacheSizeBytes=e.cacheSizeBytes}z2("experimentalForceLongPolling",e.experimentalForceLongPolling,"experimentalAutoDetectLongPolling",e.experimentalAutoDetectLongPolling),this.experimentalForceLongPolling=!!e.experimentalForceLongPolling,this.experimentalForceLongPolling?this.experimentalAutoDetectLongPolling=!1:e.experimentalAutoDetectLongPolling===void 0?this.experimentalAutoDetectLongPolling=!0:this.experimentalAutoDetectLongPolling=!!e.experimentalAutoDetectLongPolling,this.experimentalLongPollingOptions=UE((r=e.experimentalLongPollingOptions)!==null&&r!==void 0?r:{}),function(i){if(i.timeoutSeconds!==void 0){if(isNaN(i.timeoutSeconds))throw new P(T.INVALID_ARGUMENT,`invalid long polling timeout: ${i.timeoutSeconds} (must not be NaN)`);if(i.timeoutSeconds<5)throw new P(T.INVALID_ARGUMENT,`invalid long polling timeout: ${i.timeoutSeconds} (minimum allowed value is 5)`);if(i.timeoutSeconds>30)throw new P(T.INVALID_ARGUMENT,`invalid long polling timeout: ${i.timeoutSeconds} (maximum allowed value is 30)`)}}(this.experimentalLongPollingOptions),this.useFetchStreams=!!e.useFetchStreams}isEqual(e){return this.host===e.host&&this.ssl===e.ssl&&this.credentials===e.credentials&&this.cacheSizeBytes===e.cacheSizeBytes&&this.experimentalForceLongPolling===e.experimentalForceLongPolling&&this.experimentalAutoDetectLongPolling===e.experimentalAutoDetectLongPolling&&(n=this.experimentalLongPollingOptions,r=e.experimentalLongPollingOptions,n.timeoutSeconds===r.timeoutSeconds)&&this.ignoreUndefinedProperties===e.ignoreUndefinedProperties&&this.useFetchStreams===e.useFetchStreams;var n,r}}class fc{constructor(e,n,r,i){this._authCredentials=e,this._appCheckCredentials=n,this._databaseId=r,this._app=i,this.type="firestore-lite",this._persistenceKey="(lite)",this._settings=new sv({}),this._settingsFrozen=!1}get app(){if(!this._app)throw new P(T.FAILED_PRECONDITION,"Firestore was not initialized using the Firebase SDK. 'app' is not available");return this._app}get _initialized(){return this._settingsFrozen}get _terminated(){return this._terminateTask!==void 0}_setSettings(e){if(this._settingsFrozen)throw new P(T.FAILED_PRECONDITION,"Firestore has already been started and its settings can no longer be changed. You can only modify settings before calling any other methods on a Firestore object.");this._settings=new sv(e),e.credentials!==void 0&&(this._authCredentials=function(n){if(!n)return new dA;switch(n.type){case"firstParty":return new gA(n.sessionIndex||"0",n.iamToken||null,n.authTokenFactory||null);case"provider":return n.client;default:throw new P(T.INVALID_ARGUMENT,"makeAuthCredentialsProvider failed due to invalid credential type")}}(e.credentials))}_getSettings(){return this._settings}_freezeSettings(){return this._settingsFrozen=!0,this._settings}_delete(){return this._terminateTask||(this._terminateTask=this._terminate()),this._terminateTask}toJSON(){return{app:this._app,databaseId:this._databaseId,settings:this._settings}}_terminate(){return function(e){const n=nv.get(e);n&&(M("ComponentProvider","Removing Datastore"),nv.delete(e),n.terminate())}(this),Promise.resolve()}}function H2(t,e,n,r={}){var i;const s=(t=gt(t,fc))._getSettings();if(s.host!=="firestore.googleapis.com"&&s.host!==e&&Ji("Host has been set in both settings() and useEmulator(), emulator host will be used"),t._setSettings(Object.assign(Object.assign({},s),{host:`${e}:${n}`,ssl:!1})),r.mockUserToken){let o,a;if(typeof r.mockUserToken=="string")o=r.mockUserToken,a=qe.MOCK_USER;else{o=Yw(r.mockUserToken,(i=t._app)===null||i===void 0?void 0:i.options.projectId);const l=r.mockUserToken.sub||r.mockUserToken.user_id;if(!l)throw new P(T.INVALID_ARGUMENT,"mockUserToken must contain 'sub' or 'user_id' field!");a=new qe(l)}t._authCredentials=new fA(new U_(o,a))}}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class Je{constructor(e,n,r){this.converter=n,this._key=r,this.type="document",this.firestore=e}get _path(){return this._key.path}get id(){return this._key.path.lastSegment()}get path(){return this._key.path.canonicalString()}get parent(){return new ir(this.firestore,this.converter,this._key.path.popLast())}withConverter(e){return new Je(this.firestore,e,this._key)}}class ii{constructor(e,n,r){this.converter=n,this._query=r,this.type="query",this.firestore=e}withConverter(e){return new ii(this.firestore,e,this._query)}}class ir extends ii{constructor(e,n,r){super(e,n,rc(r)),this._path=r,this.type="collection"}get id(){return this._query.path.lastSegment()}get path(){return this._query.path.canonicalString()}get parent(){const e=this._path.popLast();return e.isEmpty()?null:new Je(this.firestore,null,new $(e))}withConverter(e){return new ir(this.firestore,e,this._path)}}function pc(t,e,...n){if(t=oe(t),bE("collection","path",e),t instanceof fc){const r=re.fromString(e,...n);return iv(r),new ir(t,null,r)}{if(!(t instanceof Je||t instanceof ir))throw new P(T.INVALID_ARGUMENT,"Expected first argument to collection() to be a CollectionReference, a DocumentReference or FirebaseFirestore");const r=t._path.child(re.fromString(e,...n));return iv(r),new ir(t.firestore,null,r)}}function ke(t,e,...n){if(t=oe(t),arguments.length===1&&(e=b_.A()),bE("doc","path",e),t instanceof fc){const r=re.fromString(e,...n);return rv(r),new Je(t,null,new $(r))}{if(!(t instanceof Je||t instanceof ir))throw new P(T.INVALID_ARGUMENT,"Expected first argument to collection() to be a CollectionReference, a DocumentReference or FirebaseFirestore");const r=t._path.child(re.fromString(e,...n));return rv(r),new Je(t.firestore,t instanceof ir?t.converter:null,new $(r))}}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class q2{constructor(){this.Gc=Promise.resolve(),this.Qc=[],this.jc=!1,this.zc=[],this.Wc=null,this.Hc=!1,this.Jc=!1,this.Yc=[],this.qo=new EE(this,"async_queue_retry"),this.Xc=()=>{const n=yh();n&&M("AsyncQueue","Visibility state changed to "+n.visibilityState),this.qo.Mo()};const e=yh();e&&typeof e.addEventListener=="function"&&e.addEventListener("visibilitychange",this.Xc)}get isShuttingDown(){return this.jc}enqueueAndForget(e){this.enqueue(e)}enqueueAndForgetEvenWhileRestricted(e){this.Zc(),this.ta(e)}enterRestrictedMode(e){if(!this.jc){this.jc=!0,this.Jc=e||!1;const n=yh();n&&typeof n.removeEventListener=="function"&&n.removeEventListener("visibilitychange",this.Xc)}}enqueue(e){if(this.Zc(),this.jc)return new Promise(()=>{});const n=new wn;return this.ta(()=>this.jc&&this.Jc?Promise.resolve():(e().then(n.resolve,n.reject),n.promise)).then(()=>n.promise)}enqueueRetryable(e){this.enqueueAndForget(()=>(this.Qc.push(e),this.ea()))}async ea(){if(this.Qc.length!==0){try{await this.Qc[0](),this.Qc.shift(),this.qo.reset()}catch(e){if(!ha(e))throw e;M("AsyncQueue","Operation failed with retryable error: "+e)}this.Qc.length>0&&this.qo.No(()=>this.ea())}}ta(e){const n=this.Gc.then(()=>(this.Hc=!0,e().catch(r=>{this.Wc=r,this.Hc=!1;const i=function(s){let o=s.message||"";return s.stack&&(o=s.stack.includes(s.message)?s.stack:s.message+` +`+s.stack),o}(r);throw Nn("INTERNAL UNHANDLED ERROR: ",i),r}).then(r=>(this.Hc=!1,r))));return this.Gc=n,n}enqueueAfterDelay(e,n,r){this.Zc(),this.Yc.indexOf(e)>-1&&(n=0);const i=nm.createAndSchedule(this,e,n,r,s=>this.na(s));return this.zc.push(i),i}Zc(){this.Wc&&F()}verifyOperationInProgress(){}async sa(){let e;do e=this.Gc,await e;while(e!==this.Gc)}ia(e){for(const n of this.zc)if(n.timerId===e)return!0;return!1}ra(e){return this.sa().then(()=>{this.zc.sort((n,r)=>n.targetTimeMs-r.targetTimeMs);for(const n of this.zc)if(n.skipDelay(),e!=="all"&&n.timerId===e)break;return this.sa()})}oa(e){this.Yc.push(e)}na(e){const n=this.zc.indexOf(e);this.zc.splice(n,1)}}function ov(t){return function(e,n){if(typeof e!="object"||e===null)return!1;const r=e;for(const i of n)if(i in r&&typeof r[i]=="function")return!0;return!1}(t,["next","error","complete"])}class An extends fc{constructor(e,n,r,i){super(e,n,r,i),this.type="firestore",this._queue=new q2,this._persistenceKey=(i==null?void 0:i.name)||"[DEFAULT]"}_terminate(){return this._firestoreClient||FE(this),this._firestoreClient.terminate()}}function W2(t,e){const n=typeof t=="object"?t:sp(),r=typeof t=="string"?t:e||"(default)",i=Uu(n,"firestore").getImmediate({identifier:r});if(!i._initialized){const s=Kw("firestore");s&&H2(i,...s)}return i}function mc(t){return t._firestoreClient||FE(t),t._firestoreClient.verifyNotTerminated(),t._firestoreClient}function FE(t){var e,n,r;const i=t._freezeSettings(),s=function(o,a,l,u){return new RA(o,a,l,u.host,u.ssl,u.experimentalForceLongPolling,u.experimentalAutoDetectLongPolling,UE(u.experimentalLongPollingOptions),u.useFetchStreams)}(t._databaseId,((e=t._app)===null||e===void 0?void 0:e.options.appId)||"",t._persistenceKey,i);t._firestoreClient=new U2(t._authCredentials,t._appCheckCredentials,t._queue,s),!((n=i.cache)===null||n===void 0)&&n._offlineComponentProvider&&(!((r=i.cache)===null||r===void 0)&&r._onlineComponentProvider)&&(t._firestoreClient._uninitializedComponentsProvider={_offlineKind:i.cache.kind,_offline:i.cache._offlineComponentProvider,_online:i.cache._onlineComponentProvider})}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class ss{constructor(e){this._byteString=e}static fromBase64String(e){try{return new ss(tt.fromBase64String(e))}catch(n){throw new P(T.INVALID_ARGUMENT,"Failed to construct data from Base64 string: "+n)}}static fromUint8Array(e){return new ss(tt.fromUint8Array(e))}toBase64(){return this._byteString.toBase64()}toUint8Array(){return this._byteString.toUint8Array()}toString(){return"Bytes(base64: "+this.toBase64()+")"}isEqual(e){return this._byteString.isEqual(e._byteString)}}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class gc{constructor(...e){for(let n=0;n90)throw new P(T.INVALID_ARGUMENT,"Latitude must be a number between -90 and 90, but was: "+e);if(!isFinite(n)||n<-180||n>180)throw new P(T.INVALID_ARGUMENT,"Longitude must be a number between -180 and 180, but was: "+n);this._lat=e,this._long=n}get latitude(){return this._lat}get longitude(){return this._long}isEqual(e){return this._lat===e._lat&&this._long===e._long}toJSON(){return{latitude:this._lat,longitude:this._long}}_compareTo(e){return X(this._lat,e._lat)||X(this._long,e._long)}}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const K2=/^__.*__$/;class G2{constructor(e,n,r){this.data=e,this.fieldMask=n,this.fieldTransforms=r}toMutation(e,n){return this.fieldMask!==null?new vr(e,this.data,this.fieldMask,n,this.fieldTransforms):new fa(e,this.data,n,this.fieldTransforms)}}class jE{constructor(e,n,r){this.data=e,this.fieldMask=n,this.fieldTransforms=r}toMutation(e,n){return new vr(e,this.data,this.fieldMask,n,this.fieldTransforms)}}function VE(t){switch(t){case 0:case 2:case 1:return!0;case 3:case 4:return!1;default:throw F()}}class yc{constructor(e,n,r,i,s,o){this.settings=e,this.databaseId=n,this.serializer=r,this.ignoreUndefinedProperties=i,s===void 0&&this.ua(),this.fieldTransforms=s||[],this.fieldMask=o||[]}get path(){return this.settings.path}get ca(){return this.settings.ca}aa(e){return new yc(Object.assign(Object.assign({},this.settings),e),this.databaseId,this.serializer,this.ignoreUndefinedProperties,this.fieldTransforms,this.fieldMask)}ha(e){var n;const r=(n=this.path)===null||n===void 0?void 0:n.child(e),i=this.aa({path:r,la:!1});return i.fa(e),i}da(e){var n;const r=(n=this.path)===null||n===void 0?void 0:n.child(e),i=this.aa({path:r,la:!1});return i.ua(),i}wa(e){return this.aa({path:void 0,la:!0})}_a(e){return fu(e,this.settings.methodName,this.settings.ma||!1,this.path,this.settings.ga)}contains(e){return this.fieldMask.find(n=>e.isPrefixOf(n))!==void 0||this.fieldTransforms.find(n=>e.isPrefixOf(n.field))!==void 0}ua(){if(this.path)for(let e=0;el.covers(h.field))}else l=null,u=o.fieldTransforms;return new G2(new ht(a),l,u)}class wc extends ya{_toFieldTransform(e){if(e.ca!==2)throw e.ca===1?e._a(`${this._methodName}() can only appear at the top level of your update data`):e._a(`${this._methodName}() cannot be used with set() unless you pass {merge:true}`);return e.fieldMask.push(e.path),null}isEqual(e){return e instanceof wc}}function Y2(t,e,n){return new yc({ca:3,ga:e.settings.ga,methodName:t._methodName,la:n},e.databaseId,e.serializer,e.ignoreUndefinedProperties)}class hm extends ya{_toFieldTransform(e){return new aE(e.path,new jo)}isEqual(e){return e instanceof hm}}class X2 extends ya{constructor(e,n){super(e),this.pa=n}_toFieldTransform(e){const n=Y2(this,e,!0),r=this.pa.map(s=>ys(s,n)),i=new ns(r);return new aE(e.path,i)}isEqual(e){return this===e}}function J2(t,e,n,r){const i=t.ya(1,e,n);dm("Data must be an object, but it was:",i,r);const s=[],o=ht.empty();ni(r,(l,u)=>{const c=fm(e,l,n);u=oe(u);const h=i.da(c);if(u instanceof wc)s.push(c);else{const d=ys(u,h);d!=null&&(s.push(c),o.set(c,d))}});const a=new _t(s);return new jE(o,a,i.fieldTransforms)}function Z2(t,e,n,r,i,s){const o=t.ya(1,e,n),a=[Yd(e,r,n)],l=[i];if(s.length%2!=0)throw new P(T.INVALID_ARGUMENT,`Function ${e}() needs to be called with an even number of arguments that alternate between field names and values.`);for(let d=0;d=0;--d)if(!qE(u,a[d])){const p=a[d];let y=l[d];y=oe(y);const w=o.da(p);if(y instanceof wc)u.push(p);else{const S=ys(y,w);S!=null&&(u.push(p),c.set(p,S))}}const h=new _t(u);return new jE(c,h,o.fieldTransforms)}function eD(t,e,n,r=!1){return ys(n,t.ya(r?4:3,e))}function ys(t,e){if(HE(t=oe(t)))return dm("Unsupported field value:",e,t),zE(t,e);if(t instanceof ya)return function(n,r){if(!VE(r.ca))throw r._a(`${n._methodName}() can only be used with update() and set()`);if(!r.path)throw r._a(`${n._methodName}() is not currently supported inside arrays`);const i=n._toFieldTransform(r);i&&r.fieldTransforms.push(i)}(t,e),null;if(t===void 0&&e.ignoreUndefinedProperties)return null;if(e.path&&e.fieldMask.push(e.path),t instanceof Array){if(e.settings.la&&e.ca!==4)throw e._a("Nested arrays are not supported");return function(n,r){const i=[];let s=0;for(const o of n){let a=ys(o,r.wa(s));a==null&&(a={nullValue:"NULL_VALUE"}),i.push(a),s++}return{arrayValue:{values:i}}}(t,e)}return function(n,r){if((n=oe(n))===null)return{nullValue:"NULL_VALUE"};if(typeof n=="number")return GA(r.serializer,n);if(typeof n=="boolean")return{booleanValue:n};if(typeof n=="string")return{stringValue:n};if(n instanceof Date){const i=we.fromDate(n);return{timestampValue:cu(r.serializer,i)}}if(n instanceof we){const i=new we(n.seconds,1e3*Math.floor(n.nanoseconds/1e3));return{timestampValue:cu(r.serializer,i)}}if(n instanceof cm)return{geoPointValue:{latitude:n.latitude,longitude:n.longitude}};if(n instanceof ss)return{bytesValue:fE(r.serializer,n._byteString)};if(n instanceof Je){const i=r.databaseId,s=n.firestore._databaseId;if(!s.isEqual(i))throw r._a(`Document reference is for database ${s.projectId}/${s.database} but should be for database ${i.projectId}/${i.database}`);return{referenceValue:Qp(n.firestore._databaseId||r.databaseId,n._key.path)}}throw r._a(`Unsupported field value: ${dc(n)}`)}(t,e)}function zE(t,e){const n={};return F_(t)?e.path&&e.path.length>0&&e.fieldMask.push(e.path):ni(t,(r,i)=>{const s=ys(i,e.ha(r));s!=null&&(n[r]=s)}),{mapValue:{fields:n}}}function HE(t){return!(typeof t!="object"||t===null||t instanceof Array||t instanceof Date||t instanceof we||t instanceof cm||t instanceof ss||t instanceof Je||t instanceof ya)}function dm(t,e,n){if(!HE(n)||!function(r){return typeof r=="object"&&r!==null&&(Object.getPrototypeOf(r)===Object.prototype||Object.getPrototypeOf(r)===null)}(n)){const r=dc(n);throw r==="an object"?e._a(t+" a custom object"):e._a(t+" "+r)}}function Yd(t,e,n){if((e=oe(e))instanceof gc)return e._internalPath;if(typeof e=="string")return fm(t,e);throw fu("Field path arguments must be of type string or ",t,!1,void 0,n)}const tD=new RegExp("[~\\*/\\[\\]]");function fm(t,e,n){if(e.search(tD)>=0)throw fu(`Invalid field path (${e}). Paths must not contain '~', '*', '/', '[', or ']'`,t,!1,void 0,n);try{return new gc(...e.split("."))._internalPath}catch{throw fu(`Invalid field path (${e}). Paths must not be empty, begin with '.', end with '.', or contain '..'`,t,!1,void 0,n)}}function fu(t,e,n,r,i){const s=r&&!r.isEmpty(),o=i!==void 0;let a=`Function ${e}() called with invalid data`;n&&(a+=" (via `toFirestore()`)"),a+=". ";let l="";return(s||o)&&(l+=" (found",s&&(l+=` in field ${r}`),o&&(l+=` in document ${i}`),l+=")"),new P(T.INVALID_ARGUMENT,a+t+l)}function qE(t,e){return t.some(n=>n.isEqual(e))}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class WE{constructor(e,n,r,i,s){this._firestore=e,this._userDataWriter=n,this._key=r,this._document=i,this._converter=s}get id(){return this._key.path.lastSegment()}get ref(){return new Je(this._firestore,this._converter,this._key)}exists(){return this._document!==null}data(){if(this._document){if(this._converter){const e=new nD(this._firestore,this._userDataWriter,this._key,this._document,null);return this._converter.fromFirestore(e)}return this._userDataWriter.convertValue(this._document.data.value)}}get(e){if(this._document){const n=this._document.data.field(pm("DocumentSnapshot.get",e));if(n!==null)return this._userDataWriter.convertValue(n)}}}class nD extends WE{data(){return super.data()}}function pm(t,e){return typeof e=="string"?fm(t,e):e instanceof gc?e._internalPath:e._delegate._internalPath}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function KE(t){if(t.limitType==="L"&&t.explicitOrderBy.length===0)throw new P(T.UNIMPLEMENTED,"limitToLast() queries require specifying at least one orderBy() clause")}class mm{}class rD extends mm{}function GE(t,e,...n){let r=[];e instanceof mm&&r.push(e),r=r.concat(n),function(i){const s=i.filter(a=>a instanceof gm).length,o=i.filter(a=>a instanceof _c).length;if(s>1||s>0&&o>0)throw new P(T.INVALID_ARGUMENT,"InvalidQuery. When using composite filters, you cannot use more than one filter at the top level. Consider nesting the multiple filters within an `and(...)` statement. For example: change `query(query, where(...), or(...))` to `query(query, and(where(...), or(...)))`.")}(r);for(const i of r)t=i._apply(t);return t}class _c extends rD{constructor(e,n,r){super(),this._field=e,this._op=n,this._value=r,this.type="where"}static _create(e,n,r){return new _c(e,n,r)}_apply(e){const n=this._parse(e);return YE(e._query,n),new ii(e.firestore,e.converter,Vd(e._query,n))}_parse(e){const n=vc(e.firestore);return function(i,s,o,a,l,u,c){let h;if(l.isKeyField()){if(u==="array-contains"||u==="array-contains-any")throw new P(T.INVALID_ARGUMENT,`Invalid Query. You can't perform '${u}' queries on documentId().`);if(u==="in"||u==="not-in"){lv(c,u);const d=[];for(const p of c)d.push(av(a,i,p));h={arrayValue:{values:d}}}else h=av(a,i,c)}else u!=="in"&&u!=="not-in"&&u!=="array-contains-any"||lv(c,u),h=eD(o,s,c,u==="in"||u==="not-in");return Te.create(l,u,h)}(e._query,"where",n,e.firestore._databaseId,this._field,this._op,this._value)}}function QE(t,e,n){const r=e,i=pm("where",t);return _c._create(i,r,n)}class gm extends mm{constructor(e,n){super(),this.type=e,this._queryConstraints=n}static _create(e,n){return new gm(e,n)}_parse(e){const n=this._queryConstraints.map(r=>r._parse(e)).filter(r=>r.getFilters().length>0);return n.length===1?n[0]:Wt.create(n,this._getOperator())}_apply(e){const n=this._parse(e);return n.getFilters().length===0?e:(function(r,i){let s=r;const o=i.getFlattenedFilters();for(const a of o)YE(s,a),s=Vd(s,a)}(e._query,n),new ii(e.firestore,e.converter,Vd(e._query,n)))}_getQueryConstraints(){return this._queryConstraints}_getOperator(){return this.type==="and"?"and":"or"}}function av(t,e,n){if(typeof(n=oe(n))=="string"){if(n==="")throw new P(T.INVALID_ARGUMENT,"Invalid query. When querying with documentId(), you must provide a valid document ID, but it was an empty string.");if(!Q_(e)&&n.indexOf("/")!==-1)throw new P(T.INVALID_ARGUMENT,`Invalid query. When querying a collection by documentId(), you must provide a plain document ID, but '${n}' contains a '/' character.`);const r=e.path.child(re.fromString(n));if(!$.isDocumentKey(r))throw new P(T.INVALID_ARGUMENT,`Invalid query. When querying a collection group by documentId(), the value provided must result in a valid document path, but '${r}' is not because it has an odd number of segments (${r.length}).`);return Ay(t,new $(r))}if(n instanceof Je)return Ay(t,n._key);throw new P(T.INVALID_ARGUMENT,`Invalid query. When querying with documentId(), you must provide a valid string or a DocumentReference, but it was: ${dc(n)}.`)}function lv(t,e){if(!Array.isArray(t)||t.length===0)throw new P(T.INVALID_ARGUMENT,`Invalid Query. A non-empty array is required for '${e.toString()}' filters.`)}function YE(t,e){if(e.isInequality()){const r=Hp(t),i=e.field;if(r!==null&&!r.isEqual(i))throw new P(T.INVALID_ARGUMENT,`Invalid query. All where filters with an inequality (<, <=, !=, not-in, >, or >=) must be on the same field. But you have inequality filters on '${r.toString()}' and '${i.toString()}'`);const s=G_(t);s!==null&&iD(t,i,s)}const n=function(r,i){for(const s of r)for(const o of s.getFlattenedFilters())if(i.indexOf(o.op)>=0)return o.op;return null}(t.filters,function(r){switch(r){case"!=":return["!=","not-in"];case"array-contains-any":case"in":return["not-in"];case"not-in":return["array-contains-any","in","not-in","!="];default:return[]}}(e.op));if(n!==null)throw n===e.op?new P(T.INVALID_ARGUMENT,`Invalid query. You cannot use more than one '${e.op.toString()}' filter.`):new P(T.INVALID_ARGUMENT,`Invalid query. You cannot use '${e.op.toString()}' filters with '${n.toString()}' filters.`)}function iD(t,e,n){if(!n.isEqual(e))throw new P(T.INVALID_ARGUMENT,`Invalid query. You have a where filter with an inequality (<, <=, !=, not-in, >, or >=) on field '${e.toString()}' and so you must also use '${e.toString()}' as your first argument to orderBy(), but your first orderBy() is on field '${n.toString()}' instead.`)}class sD{convertValue(e,n="none"){switch(Qr(e)){case 0:return null;case 1:return e.booleanValue;case 2:return Se(e.integerValue||e.doubleValue);case 3:return this.convertTimestamp(e.timestampValue);case 4:return this.convertServerTimestamp(e,n);case 5:return e.stringValue;case 6:return this.convertBytes(Gr(e.bytesValue));case 7:return this.convertReference(e.referenceValue);case 8:return this.convertGeoPoint(e.geoPointValue);case 9:return this.convertArray(e.arrayValue,n);case 10:return this.convertObject(e.mapValue,n);default:throw F()}}convertObject(e,n){return this.convertObjectMap(e.fields,n)}convertObjectMap(e,n="none"){const r={};return ni(e,(i,s)=>{r[i]=this.convertValue(s,n)}),r}convertGeoPoint(e){return new cm(Se(e.latitude),Se(e.longitude))}convertArray(e,n){return(e.values||[]).map(r=>this.convertValue(r,n))}convertServerTimestamp(e,n){switch(n){case"previous":const r=jp(e);return r==null?null:this.convertValue(r,n);case"estimate":return this.convertTimestamp(Uo(e));default:return null}}convertTimestamp(e){const n=cr(e);return new we(n.seconds,n.nanos)}convertDocumentKey(e,n){const r=re.fromString(e);se(vE(r));const i=new bo(r.get(1),r.get(3)),s=new $(r.popFirst(5));return i.isEqual(n)||Nn(`Document ${s} contains a document reference within a different database (${i.projectId}/${i.database}) which is not supported. It will be treated as a reference in the current database (${n.projectId}/${n.database}) instead.`),s}}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function XE(t,e,n){let r;return r=t?n&&(n.merge||n.mergeFields)?t.toFirestore(e,n):t.toFirestore(e):e,r}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class Hs{constructor(e,n){this.hasPendingWrites=e,this.fromCache=n}isEqual(e){return this.hasPendingWrites===e.hasPendingWrites&&this.fromCache===e.fromCache}}class JE extends WE{constructor(e,n,r,i,s,o){super(e,n,r,i,o),this._firestore=e,this._firestoreImpl=e,this.metadata=s}exists(){return super.exists()}data(e={}){if(this._document){if(this._converter){const n=new _l(this._firestore,this._userDataWriter,this._key,this._document,this.metadata,null);return this._converter.fromFirestore(n,e)}return this._userDataWriter.convertValue(this._document.data.value,e.serverTimestamps)}}get(e,n={}){if(this._document){const r=this._document.data.field(pm("DocumentSnapshot.get",e));if(r!==null)return this._userDataWriter.convertValue(r,n.serverTimestamps)}}}class _l extends JE{data(e={}){return super.data(e)}}class ZE{constructor(e,n,r,i){this._firestore=e,this._userDataWriter=n,this._snapshot=i,this.metadata=new Hs(i.hasPendingWrites,i.fromCache),this.query=r}get docs(){const e=[];return this.forEach(n=>e.push(n)),e}get size(){return this._snapshot.docs.size}get empty(){return this.size===0}forEach(e,n){this._snapshot.docs.forEach(r=>{e.call(n,new _l(this._firestore,this._userDataWriter,r.key,r,new Hs(this._snapshot.mutatedKeys.has(r.key),this._snapshot.fromCache),this.query.converter))})}docChanges(e={}){const n=!!e.includeMetadataChanges;if(n&&this._snapshot.excludesMetadataChanges)throw new P(T.INVALID_ARGUMENT,"To include metadata changes with your document changes, you must also pass { includeMetadataChanges:true } to onSnapshot().");return this._cachedChanges&&this._cachedChangesIncludeMetadataChanges===n||(this._cachedChanges=function(r,i){if(r._snapshot.oldDocs.isEmpty()){let s=0;return r._snapshot.docChanges.map(o=>{const a=new _l(r._firestore,r._userDataWriter,o.doc.key,o.doc,new Hs(r._snapshot.mutatedKeys.has(o.doc.key),r._snapshot.fromCache),r.query.converter);return o.doc,{type:"added",doc:a,oldIndex:-1,newIndex:s++}})}{let s=r._snapshot.oldDocs;return r._snapshot.docChanges.filter(o=>i||o.type!==3).map(o=>{const a=new _l(r._firestore,r._userDataWriter,o.doc.key,o.doc,new Hs(r._snapshot.mutatedKeys.has(o.doc.key),r._snapshot.fromCache),r.query.converter);let l=-1,u=-1;return o.type!==0&&(l=s.indexOf(o.doc.key),s=s.delete(o.doc.key)),o.type!==1&&(s=s.add(o.doc),u=s.indexOf(o.doc.key)),{type:oD(o.type),doc:a,oldIndex:l,newIndex:u}})}}(this,n),this._cachedChangesIncludeMetadataChanges=n),this._cachedChanges}}function oD(t){switch(t){case 0:return"added";case 2:case 3:return"modified";case 1:return"removed";default:return F()}}/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function os(t){t=gt(t,Je);const e=gt(t.firestore,An);return V2(mc(e),t._key).then(n=>tS(e,t,n))}class ym extends sD{constructor(e){super(),this.firestore=e}convertBytes(e){return new ss(e)}convertReference(e){const n=this.convertDocumentKey(e,this.firestore._databaseId);return new Je(this.firestore,null,n)}}function vm(t){t=gt(t,ii);const e=gt(t.firestore,An),n=mc(e),r=new ym(e);return KE(t._query),B2(n,t._query).then(i=>new ZE(e,r,t,i))}function pu(t,e,n){t=gt(t,Je);const r=gt(t.firestore,An),i=XE(t.converter,e,n);return Ec(r,[BE(vc(r),"setDoc",t._key,i,t.converter!==null,n).toMutation(t._key,Lt.none())])}function Ai(t,e,n,...r){t=gt(t,Je);const i=gt(t.firestore,An),s=vc(i);let o;return o=typeof(e=oe(e))=="string"||e instanceof gc?Z2(s,"updateDoc",t._key,e,n,r):J2(s,"updateDoc",t._key,e),Ec(i,[o.toMutation(t._key,Lt.exists(!0))])}function aD(t){return Ec(gt(t.firestore,An),[new qp(t._key,Lt.none())])}function lD(t,e){const n=gt(t.firestore,An),r=ke(t),i=XE(t.converter,e);return Ec(n,[BE(vc(t.firestore),"addDoc",r._key,i,t.converter!==null,{}).toMutation(r._key,Lt.exists(!1))]).then(()=>r)}function eS(t,...e){var n,r,i;t=oe(t);let s={includeMetadataChanges:!1},o=0;typeof e[o]!="object"||ov(e[o])||(s=e[o],o++);const a={includeMetadataChanges:s.includeMetadataChanges};if(ov(e[o])){const h=e[o];e[o]=(n=h.next)===null||n===void 0?void 0:n.bind(h),e[o+1]=(r=h.error)===null||r===void 0?void 0:r.bind(h),e[o+2]=(i=h.complete)===null||i===void 0?void 0:i.bind(h)}let l,u,c;if(t instanceof Je)u=gt(t.firestore,An),c=rc(t._key.path),l={next:h=>{e[o]&&e[o](tS(u,t,h))},error:e[o+1],complete:e[o+2]};else{const h=gt(t,ii);u=gt(h.firestore,An),c=h._query;const d=new ym(u);l={next:p=>{e[o]&&e[o](new ZE(u,d,h,p))},error:e[o+1],complete:e[o+2]},KE(t._query)}return function(h,d,p,y){const w=new um(y),S=new am(d,w,p);return h.asyncQueue.enqueueAndForget(async()=>im(await du(h),S)),()=>{w.Dc(),h.asyncQueue.enqueueAndForget(async()=>sm(await du(h),S))}}(mc(u),c,a,l)}function Ec(t,e){return function(n,r){const i=new wn;return n.asyncQueue.enqueueAndForget(async()=>N2(await j2(n),r,i)),i.promise}(mc(t),e)}function tS(t,e,n){const r=n.docs.get(e._key),i=new ym(t);return new JE(t,i,e._key,r,new Hs(n.hasPendingWrites,n.fromCache),e.converter)}function mu(){return new hm("serverTimestamp")}function uv(...t){return new X2("arrayUnion",t)}(function(t,e=!0){(function(n){ps=n})(Zr),Hr(new lr("firestore",(n,{instanceIdentifier:r,options:i})=>{const s=n.getProvider("app").getImmediate(),o=new An(new pA(n.getProvider("auth-internal")),new vA(n.getProvider("app-check-internal")),function(a,l){if(!Object.prototype.hasOwnProperty.apply(a.options,["projectId"]))throw new P(T.INVALID_ARGUMENT,'"projectId" not provided in firebase.initializeApp.');return new bo(a.options.projectId,l)}(s,r),s);return i=Object.assign({useFetchStreams:e},i),o._setSettings(i),o},"PUBLIC").setMultipleInstances(!0)),rn(ky,"3.12.1",t),rn(ky,"3.12.1","esm2017")})();/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const nS="firebasestorage.googleapis.com",rS="storageBucket",uD=2*60*1e3,cD=10*60*1e3,hD=1e3;/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class pe extends un{constructor(e,n,r=0){super(wh(e),`Firebase Storage: ${n} (${wh(e)})`),this.status_=r,this.customData={serverResponse:null},this._baseMessage=this.message,Object.setPrototypeOf(this,pe.prototype)}get status(){return this.status_}set status(e){this.status_=e}_codeEquals(e){return wh(e)===this.code}get serverResponse(){return this.customData.serverResponse}set serverResponse(e){this.customData.serverResponse=e,this.customData.serverResponse?this.message=`${this._baseMessage} +${this.customData.serverResponse}`:this.message=this._baseMessage}}var ae;(function(t){t.UNKNOWN="unknown",t.OBJECT_NOT_FOUND="object-not-found",t.BUCKET_NOT_FOUND="bucket-not-found",t.PROJECT_NOT_FOUND="project-not-found",t.QUOTA_EXCEEDED="quota-exceeded",t.UNAUTHENTICATED="unauthenticated",t.UNAUTHORIZED="unauthorized",t.UNAUTHORIZED_APP="unauthorized-app",t.RETRY_LIMIT_EXCEEDED="retry-limit-exceeded",t.INVALID_CHECKSUM="invalid-checksum",t.CANCELED="canceled",t.INVALID_EVENT_NAME="invalid-event-name",t.INVALID_URL="invalid-url",t.INVALID_DEFAULT_BUCKET="invalid-default-bucket",t.NO_DEFAULT_BUCKET="no-default-bucket",t.CANNOT_SLICE_BLOB="cannot-slice-blob",t.SERVER_FILE_WRONG_SIZE="server-file-wrong-size",t.NO_DOWNLOAD_URL="no-download-url",t.INVALID_ARGUMENT="invalid-argument",t.INVALID_ARGUMENT_COUNT="invalid-argument-count",t.APP_DELETED="app-deleted",t.INVALID_ROOT_OPERATION="invalid-root-operation",t.INVALID_FORMAT="invalid-format",t.INTERNAL_ERROR="internal-error",t.UNSUPPORTED_ENVIRONMENT="unsupported-environment"})(ae||(ae={}));function wh(t){return"storage/"+t}function wm(){const t="An unknown error occurred, please check the error payload for server response.";return new pe(ae.UNKNOWN,t)}function dD(t){return new pe(ae.OBJECT_NOT_FOUND,"Object '"+t+"' does not exist.")}function fD(t){return new pe(ae.QUOTA_EXCEEDED,"Quota for bucket '"+t+"' exceeded, please view quota on https://firebase.google.com/pricing/.")}function pD(){const t="User is not authenticated, please authenticate using Firebase Authentication and try again.";return new pe(ae.UNAUTHENTICATED,t)}function mD(){return new pe(ae.UNAUTHORIZED_APP,"This app does not have permission to access Firebase Storage on this project.")}function gD(t){return new pe(ae.UNAUTHORIZED,"User does not have permission to access '"+t+"'.")}function iS(){return new pe(ae.RETRY_LIMIT_EXCEEDED,"Max retry time for operation exceeded, please try again.")}function sS(){return new pe(ae.CANCELED,"User canceled the upload/download.")}function yD(t){return new pe(ae.INVALID_URL,"Invalid URL '"+t+"'.")}function vD(t){return new pe(ae.INVALID_DEFAULT_BUCKET,"Invalid default bucket '"+t+"'.")}function wD(){return new pe(ae.NO_DEFAULT_BUCKET,"No default bucket found. Did you set the '"+rS+"' property when initializing the app?")}function oS(){return new pe(ae.CANNOT_SLICE_BLOB,"Cannot slice blob for upload. Please retry the upload.")}function _D(){return new pe(ae.SERVER_FILE_WRONG_SIZE,"Server recorded incorrect upload file size, please retry the upload.")}function ED(){return new pe(ae.NO_DOWNLOAD_URL,"The given file does not have any download URLs.")}function SD(t){return new pe(ae.UNSUPPORTED_ENVIRONMENT,`${t} is missing. Make sure to install the required polyfills. See https://firebase.google.com/docs/web/environments-js-sdk#polyfills for more information.`)}function Xd(t){return new pe(ae.INVALID_ARGUMENT,t)}function aS(){return new pe(ae.APP_DELETED,"The Firebase app was deleted.")}function ID(t){return new pe(ae.INVALID_ROOT_OPERATION,"The operation '"+t+"' cannot be performed on a root reference, create a non-root reference using child, such as .child('file.png').")}function oo(t,e){return new pe(ae.INVALID_FORMAT,"String does not match format '"+t+"': "+e)}function Os(t){throw new pe(ae.INTERNAL_ERROR,"Internal error: "+t)}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class Et{constructor(e,n){this.bucket=e,this.path_=n}get path(){return this.path_}get isRoot(){return this.path.length===0}fullServerUrl(){const e=encodeURIComponent;return"/b/"+e(this.bucket)+"/o/"+e(this.path)}bucketOnlyServerUrl(){return"/b/"+encodeURIComponent(this.bucket)+"/o"}static makeFromBucketSpec(e,n){let r;try{r=Et.makeFromUrl(e,n)}catch{return new Et(e,"")}if(r.path==="")return r;throw vD(e)}static makeFromUrl(e,n){let r=null;const i="([A-Za-z0-9.\\-_]+)";function s(_){_.path.charAt(_.path.length-1)==="/"&&(_.path_=_.path_.slice(0,-1))}const o="(/(.*))?$",a=new RegExp("^gs://"+i+o,"i"),l={bucket:1,path:3};function u(_){_.path_=decodeURIComponent(_.path)}const c="v[A-Za-z0-9_]+",h=n.replace(/[.]/g,"\\."),d="(/([^?#]*).*)?$",p=new RegExp(`^https?://${h}/${c}/b/${i}/o${d}`,"i"),y={bucket:1,path:3},w=n===nS?"(?:storage.googleapis.com|storage.cloud.google.com)":n,S="([^?#]*)",m=new RegExp(`^https?://${w}/${i}/${S}`,"i"),g=[{regex:a,indices:l,postModify:s},{regex:p,indices:y,postModify:u},{regex:m,indices:{bucket:1,path:2},postModify:u}];for(let _=0;_{i=null,t(p,l())},S)}function d(){s&&clearTimeout(s)}function p(S,...m){if(u){d();return}if(S){d(),c.call(null,S,...m);return}if(l()||o){d(),c.call(null,S,...m);return}r<64&&(r*=2);let g;a===1?(a=2,g=0):g=(r+Math.random())*1e3,h(g)}let y=!1;function w(S){y||(y=!0,d(),!u&&(i!==null?(S||(a=2),clearTimeout(i),h(0)):S||(a=1)))}return h(0),s=setTimeout(()=>{o=!0,w(!0)},n),w}function CD(t){t(!1)}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function ND(t){return t!==void 0}function RD(t){return typeof t=="function"}function xD(t){return typeof t=="object"&&!Array.isArray(t)}function Sc(t){return typeof t=="string"||t instanceof String}function cv(t){return _m()&&t instanceof Blob}function _m(){return typeof Blob<"u"&&!Ck()}function hv(t,e,n,r){if(rn)throw Xd(`Invalid value for '${t}'. Expected ${n} or less.`)}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function va(t,e,n){let r=e;return n==null&&(r=`https://${e}`),`${n}://${r}/v0${t}`}function lS(t){const e=encodeURIComponent;let n="?";for(const r in t)if(t.hasOwnProperty(r)){const i=e(r)+"="+e(t[r]);n=n+i+"&"}return n=n.slice(0,-1),n}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */var Ur;(function(t){t[t.NO_ERROR=0]="NO_ERROR",t[t.NETWORK_ERROR=1]="NETWORK_ERROR",t[t.ABORT=2]="ABORT"})(Ur||(Ur={}));/** + * @license + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function uS(t,e){const n=t>=500&&t<600,i=[408,429].indexOf(t)!==-1,s=e.indexOf(t)!==-1;return n||i||s}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class AD{constructor(e,n,r,i,s,o,a,l,u,c,h,d=!0){this.url_=e,this.method_=n,this.headers_=r,this.body_=i,this.successCodes_=s,this.additionalRetryCodes_=o,this.callback_=a,this.errorCallback_=l,this.timeout_=u,this.progressCallback_=c,this.connectionFactory_=h,this.retry=d,this.pendingConnection_=null,this.backoffId_=null,this.canceled_=!1,this.appDelete_=!1,this.promise_=new Promise((p,y)=>{this.resolve_=p,this.reject_=y,this.start_()})}start_(){const e=(r,i)=>{if(i){r(!1,new Xa(!1,null,!0));return}const s=this.connectionFactory_();this.pendingConnection_=s;const o=a=>{const l=a.loaded,u=a.lengthComputable?a.total:-1;this.progressCallback_!==null&&this.progressCallback_(l,u)};this.progressCallback_!==null&&s.addUploadProgressListener(o),s.send(this.url_,this.method_,this.body_,this.headers_).then(()=>{this.progressCallback_!==null&&s.removeUploadProgressListener(o),this.pendingConnection_=null;const a=s.getErrorCode()===Ur.NO_ERROR,l=s.getStatus();if(!a||uS(l,this.additionalRetryCodes_)&&this.retry){const c=s.getErrorCode()===Ur.ABORT;r(!1,new Xa(!1,null,c));return}const u=this.successCodes_.indexOf(l)!==-1;r(!0,new Xa(u,s))})},n=(r,i)=>{const s=this.resolve_,o=this.reject_,a=i.connection;if(i.wasSuccessCode)try{const l=this.callback_(a,a.getResponse());ND(l)?s(l):s()}catch(l){o(l)}else if(a!==null){const l=wm();l.serverResponse=a.getErrorText(),this.errorCallback_?o(this.errorCallback_(a,l)):o(l)}else if(i.canceled){const l=this.appDelete_?aS():sS();o(l)}else{const l=iS();o(l)}};this.canceled_?n(!1,new Xa(!1,null,!0)):this.backoffId_=kD(e,n,this.timeout_)}getPromise(){return this.promise_}cancel(e){this.canceled_=!0,this.appDelete_=e||!1,this.backoffId_!==null&&CD(this.backoffId_),this.pendingConnection_!==null&&this.pendingConnection_.abort()}}class Xa{constructor(e,n,r){this.wasSuccessCode=e,this.connection=n,this.canceled=!!r}}function PD(t,e){e!==null&&e.length>0&&(t.Authorization="Firebase "+e)}function DD(t,e){t["X-Firebase-Storage-Version"]="webjs/"+(e??"AppManager")}function OD(t,e){e&&(t["X-Firebase-GMPID"]=e)}function LD(t,e){e!==null&&(t["X-Firebase-AppCheck"]=e)}function MD(t,e,n,r,i,s,o=!0){const a=lS(t.urlParams),l=t.url+a,u=Object.assign({},t.headers);return OD(u,e),PD(u,n),DD(u,s),LD(u,r),new AD(l,t.method,u,t.body,t.successCodes,t.additionalRetryCodes,t.handler,t.errorHandler,t.timeout,t.progressCallback,i,o)}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function $D(){return typeof BlobBuilder<"u"?BlobBuilder:typeof WebKitBlobBuilder<"u"?WebKitBlobBuilder:void 0}function UD(...t){const e=$D();if(e!==void 0){const n=new e;for(let r=0;r"u")throw SD("base-64");return atob(t)}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const Zt={RAW:"raw",BASE64:"base64",BASE64URL:"base64url",DATA_URL:"data_url"};class _h{constructor(e,n){this.data=e,this.contentType=n||null}}function jD(t,e){switch(t){case Zt.RAW:return new _h(cS(e));case Zt.BASE64:case Zt.BASE64URL:return new _h(hS(t,e));case Zt.DATA_URL:return new _h(BD(e),zD(e))}throw wm()}function cS(t){const e=[];for(let n=0;n>6,128|r&63);else if((r&64512)===55296)if(!(n>18,128|r>>12&63,128|r>>6&63,128|r&63)}else(r&64512)===56320?e.push(239,191,189):e.push(224|r>>12,128|r>>6&63,128|r&63)}return new Uint8Array(e)}function VD(t){let e;try{e=decodeURIComponent(t)}catch{throw oo(Zt.DATA_URL,"Malformed data URL.")}return cS(e)}function hS(t,e){switch(t){case Zt.BASE64:{const i=e.indexOf("-")!==-1,s=e.indexOf("_")!==-1;if(i||s)throw oo(t,"Invalid character '"+(i?"-":"_")+"' found: is it base64url encoded?");break}case Zt.BASE64URL:{const i=e.indexOf("+")!==-1,s=e.indexOf("/")!==-1;if(i||s)throw oo(t,"Invalid character '"+(i?"+":"/")+"' found: is it base64 encoded?");e=e.replace(/-/g,"+").replace(/_/g,"/");break}}let n;try{n=FD(e)}catch(i){throw i.message.includes("polyfill")?i:oo(t,"Invalid character found")}const r=new Uint8Array(n.length);for(let i=0;i][;base64],");const r=n[1]||null;r!=null&&(this.base64=HD(r,";base64"),this.contentType=this.base64?r.substring(0,r.length-7):r),this.rest=e.substring(e.indexOf(",")+1)}}function BD(t){const e=new dS(t);return e.base64?hS(Zt.BASE64,e.rest):VD(e.rest)}function zD(t){return new dS(t).contentType}function HD(t,e){return t.length>=e.length?t.substring(t.length-e.length)===e:!1}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class zn{constructor(e,n){let r=0,i="";cv(e)?(this.data_=e,r=e.size,i=e.type):e instanceof ArrayBuffer?(n?this.data_=new Uint8Array(e):(this.data_=new Uint8Array(e.byteLength),this.data_.set(new Uint8Array(e))),r=this.data_.length):e instanceof Uint8Array&&(n?this.data_=e:(this.data_=new Uint8Array(e.length),this.data_.set(e)),r=e.length),this.size_=r,this.type_=i}size(){return this.size_}type(){return this.type_}slice(e,n){if(cv(this.data_)){const r=this.data_,i=bD(r,e,n);return i===null?null:new zn(i)}else{const r=new Uint8Array(this.data_.buffer,e,n-e);return new zn(r,!0)}}static getBlob(...e){if(_m()){const n=e.map(r=>r instanceof zn?r.data_:r);return new zn(UD.apply(null,n))}else{const n=e.map(o=>Sc(o)?jD(Zt.RAW,o).data:o.data_);let r=0;n.forEach(o=>{r+=o.byteLength});const i=new Uint8Array(r);let s=0;return n.forEach(o=>{for(let a=0;ar.length>0).join("/");return t.length===0?n:t+"/"+n}function pS(t){const e=t.lastIndexOf("/",t.length-2);return e===-1?t:t.slice(e+1)}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function KD(t,e){return e}class nt{constructor(e,n,r,i){this.server=e,this.local=n||e,this.writable=!!r,this.xform=i||KD}}let Ja=null;function GD(t){return!Sc(t)||t.length<2?t:pS(t)}function mS(){if(Ja)return Ja;const t=[];t.push(new nt("bucket")),t.push(new nt("generation")),t.push(new nt("metageneration")),t.push(new nt("name","fullPath",!0));function e(s,o){return GD(o)}const n=new nt("name");n.xform=e,t.push(n);function r(s,o){return o!==void 0?Number(o):o}const i=new nt("size");return i.xform=r,t.push(i),t.push(new nt("timeCreated")),t.push(new nt("updated")),t.push(new nt("md5Hash",null,!0)),t.push(new nt("cacheControl",null,!0)),t.push(new nt("contentDisposition",null,!0)),t.push(new nt("contentEncoding",null,!0)),t.push(new nt("contentLanguage",null,!0)),t.push(new nt("contentType",null,!0)),t.push(new nt("metadata","customMetadata",!0)),Ja=t,Ja}function QD(t,e){function n(){const r=t.bucket,i=t.fullPath,s=new Et(r,i);return e._makeStorageReference(s)}Object.defineProperty(t,"ref",{get:n})}function YD(t,e,n){const r={};r.type="file";const i=n.length;for(let s=0;s{const c=t.bucket,h=t.fullPath,d="/b/"+o(c)+"/o/"+o(h),p=va(d,n,r),y=lS({alt:"media",token:u});return p+y})[0]}function yS(t,e){const n={},r=e.length;for(let i=0;i0&&(c=Math.min(c,i));const h=l.current,d=h+c;let p="";c===0?p="finalize":u===c?p="upload, finalize":p="upload";const y={"X-Goog-Upload-Command":p,"X-Goog-Upload-Offset":`${l.current}`},w=r.slice(h,d);if(w===null)throw oS();function S(_,k){const R=Sm(_,["active","final"]),x=l.current+c,I=r.size();let L;return R==="final"?L=Em(e,s)(_,k):L=null,new gu(x,I,R==="final",L)}const m="POST",f=e.maxUploadRetryTime,g=new vs(n,m,S,f);return g.headers=y,g.body=w.uploadData(),g.progressCallback=a||null,g.errorHandler=wa(t),g}const ut={RUNNING:"running",PAUSED:"paused",SUCCESS:"success",CANCELED:"canceled",ERROR:"error"};function Eh(t){switch(t){case"running":case"pausing":case"canceling":return ut.RUNNING;case"paused":return ut.PAUSED;case"success":return ut.SUCCESS;case"canceled":return ut.CANCELED;case"error":return ut.ERROR;default:return ut.ERROR}}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class oO{constructor(e,n,r){if(RD(e)||n!=null||r!=null)this.next=e,this.error=n??void 0,this.complete=r??void 0;else{const s=e;this.next=s.next,this.error=s.error,this.complete=s.complete}}}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function hi(t){return(...e)=>{Promise.resolve().then(()=>t(...e))}}class aO{constructor(){this.sent_=!1,this.xhr_=new XMLHttpRequest,this.initXhr(),this.errorCode_=Ur.NO_ERROR,this.sendPromise_=new Promise(e=>{this.xhr_.addEventListener("abort",()=>{this.errorCode_=Ur.ABORT,e()}),this.xhr_.addEventListener("error",()=>{this.errorCode_=Ur.NETWORK_ERROR,e()}),this.xhr_.addEventListener("load",()=>{e()})})}send(e,n,r,i){if(this.sent_)throw Os("cannot .send() more than once");if(this.sent_=!0,this.xhr_.open(n,e,!0),i!==void 0)for(const s in i)i.hasOwnProperty(s)&&this.xhr_.setRequestHeader(s,i[s].toString());return r!==void 0?this.xhr_.send(r):this.xhr_.send(),this.sendPromise_}getErrorCode(){if(!this.sent_)throw Os("cannot .getErrorCode() before sending");return this.errorCode_}getStatus(){if(!this.sent_)throw Os("cannot .getStatus() before sending");try{return this.xhr_.status}catch{return-1}}getResponse(){if(!this.sent_)throw Os("cannot .getResponse() before sending");return this.xhr_.response}getErrorText(){if(!this.sent_)throw Os("cannot .getErrorText() before sending");return this.xhr_.statusText}abort(){this.xhr_.abort()}getResponseHeader(e){return this.xhr_.getResponseHeader(e)}addUploadProgressListener(e){this.xhr_.upload!=null&&this.xhr_.upload.addEventListener("progress",e)}removeUploadProgressListener(e){this.xhr_.upload!=null&&this.xhr_.upload.removeEventListener("progress",e)}}class lO extends aO{initXhr(){this.xhr_.responseType="text"}}function pi(){return new lO}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class uO{constructor(e,n,r=null){this._transferred=0,this._needToFetchStatus=!1,this._needToFetchMetadata=!1,this._observers=[],this._error=void 0,this._uploadUrl=void 0,this._request=void 0,this._chunkMultiplier=1,this._resolve=void 0,this._reject=void 0,this._ref=e,this._blob=n,this._metadata=r,this._mappings=mS(),this._resumable=this._shouldDoResumable(this._blob),this._state="running",this._errorHandler=i=>{if(this._request=void 0,this._chunkMultiplier=1,i._codeEquals(ae.CANCELED))this._needToFetchStatus=!0,this.completeTransitions_();else{const s=this.isExponentialBackoffExpired();if(uS(i.status,[]))if(s)i=iS();else{this.sleepTime=Math.max(this.sleepTime*2,hD),this._needToFetchStatus=!0,this.completeTransitions_();return}this._error=i,this._transition("error")}},this._metadataErrorHandler=i=>{this._request=void 0,i._codeEquals(ae.CANCELED)?this.completeTransitions_():(this._error=i,this._transition("error"))},this.sleepTime=0,this.maxSleepTime=this._ref.storage.maxUploadRetryTime,this._promise=new Promise((i,s)=>{this._resolve=i,this._reject=s,this._start()}),this._promise.then(null,()=>{})}isExponentialBackoffExpired(){return this.sleepTime>this.maxSleepTime}_makeProgressCallback(){const e=this._transferred;return n=>this._updateProgress(e+n)}_shouldDoResumable(e){return e.size()>256*1024}_start(){this._state==="running"&&this._request===void 0&&(this._resumable?this._uploadUrl===void 0?this._createResumable():this._needToFetchStatus?this._fetchStatus():this._needToFetchMetadata?this._fetchMetadata():this.pendingTimeout=setTimeout(()=>{this.pendingTimeout=void 0,this._continueUpload()},this.sleepTime):this._oneShotUpload())}_resolveToken(e){Promise.all([this._ref.storage._getAuthToken(),this._ref.storage._getAppCheckToken()]).then(([n,r])=>{switch(this._state){case"running":e(n,r);break;case"canceling":this._transition("canceled");break;case"pausing":this._transition("paused");break}})}_createResumable(){this._resolveToken((e,n)=>{const r=rO(this._ref.storage,this._ref._location,this._mappings,this._blob,this._metadata),i=this._ref.storage._makeRequest(r,pi,e,n);this._request=i,i.getPromise().then(s=>{this._request=void 0,this._uploadUrl=s,this._needToFetchStatus=!1,this.completeTransitions_()},this._errorHandler)})}_fetchStatus(){const e=this._uploadUrl;this._resolveToken((n,r)=>{const i=iO(this._ref.storage,this._ref._location,e,this._blob),s=this._ref.storage._makeRequest(i,pi,n,r);this._request=s,s.getPromise().then(o=>{o=o,this._request=void 0,this._updateProgress(o.current),this._needToFetchStatus=!1,o.finalized&&(this._needToFetchMetadata=!0),this.completeTransitions_()},this._errorHandler)})}_continueUpload(){const e=dv*this._chunkMultiplier,n=new gu(this._transferred,this._blob.size()),r=this._uploadUrl;this._resolveToken((i,s)=>{let o;try{o=sO(this._ref._location,this._ref.storage,r,this._blob,e,this._mappings,n,this._makeProgressCallback())}catch(l){this._error=l,this._transition("error");return}const a=this._ref.storage._makeRequest(o,pi,i,s,!1);this._request=a,a.getPromise().then(l=>{this._increaseMultiplier(),this._request=void 0,this._updateProgress(l.current),l.finalized?(this._metadata=l.metadata,this._transition("success")):this.completeTransitions_()},this._errorHandler)})}_increaseMultiplier(){dv*this._chunkMultiplier*2<32*1024*1024&&(this._chunkMultiplier*=2)}_fetchMetadata(){this._resolveToken((e,n)=>{const r=ZD(this._ref.storage,this._ref._location,this._mappings),i=this._ref.storage._makeRequest(r,pi,e,n);this._request=i,i.getPromise().then(s=>{this._request=void 0,this._metadata=s,this._transition("success")},this._metadataErrorHandler)})}_oneShotUpload(){this._resolveToken((e,n)=>{const r=nO(this._ref.storage,this._ref._location,this._mappings,this._blob,this._metadata),i=this._ref.storage._makeRequest(r,pi,e,n);this._request=i,i.getPromise().then(s=>{this._request=void 0,this._metadata=s,this._updateProgress(this._blob.size()),this._transition("success")},this._errorHandler)})}_updateProgress(e){const n=this._transferred;this._transferred=e,this._transferred!==n&&this._notifyObservers()}_transition(e){if(this._state!==e)switch(e){case"canceling":case"pausing":this._state=e,this._request!==void 0?this._request.cancel():this.pendingTimeout&&(clearTimeout(this.pendingTimeout),this.pendingTimeout=void 0,this.completeTransitions_());break;case"running":const n=this._state==="paused";this._state=e,n&&(this._notifyObservers(),this._start());break;case"paused":this._state=e,this._notifyObservers();break;case"canceled":this._error=sS(),this._state=e,this._notifyObservers();break;case"error":this._state=e,this._notifyObservers();break;case"success":this._state=e,this._notifyObservers();break}}completeTransitions_(){switch(this._state){case"pausing":this._transition("paused");break;case"canceling":this._transition("canceled");break;case"running":this._start();break}}get snapshot(){const e=Eh(this._state);return{bytesTransferred:this._transferred,totalBytes:this._blob.size(),state:e,metadata:this._metadata,task:this,ref:this._ref}}on(e,n,r,i){const s=new oO(n||void 0,r||void 0,i||void 0);return this._addObserver(s),()=>{this._removeObserver(s)}}then(e,n){return this._promise.then(e,n)}catch(e){return this.then(null,e)}_addObserver(e){this._observers.push(e),this._notifyObserver(e)}_removeObserver(e){const n=this._observers.indexOf(e);n!==-1&&this._observers.splice(n,1)}_notifyObservers(){this._finishPromise(),this._observers.slice().forEach(n=>{this._notifyObserver(n)})}_finishPromise(){if(this._resolve!==void 0){let e=!0;switch(Eh(this._state)){case ut.SUCCESS:hi(this._resolve.bind(null,this.snapshot))();break;case ut.CANCELED:case ut.ERROR:const n=this._reject;hi(n.bind(null,this._error))();break;default:e=!1;break}e&&(this._resolve=void 0,this._reject=void 0)}}_notifyObserver(e){switch(Eh(this._state)){case ut.RUNNING:case ut.PAUSED:e.next&&hi(e.next.bind(e,this.snapshot))();break;case ut.SUCCESS:e.complete&&hi(e.complete.bind(e))();break;case ut.CANCELED:case ut.ERROR:e.error&&hi(e.error.bind(e,this._error))();break;default:e.error&&hi(e.error.bind(e,this._error))()}}resume(){const e=this._state==="paused"||this._state==="pausing";return e&&this._transition("running"),e}pause(){const e=this._state==="running";return e&&this._transition("pausing"),e}cancel(){const e=this._state==="running"||this._state==="pausing";return e&&this._transition("canceling"),e}}/** + * @license + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */class Yr{constructor(e,n){this._service=e,n instanceof Et?this._location=n:this._location=Et.makeFromUrl(n,e.host)}toString(){return"gs://"+this._location.bucket+"/"+this._location.path}_newRef(e,n){return new Yr(e,n)}get root(){const e=new Et(this._location.bucket,"");return this._newRef(this._service,e)}get bucket(){return this._location.bucket}get fullPath(){return this._location.path}get name(){return pS(this._location.path)}get storage(){return this._service}get parent(){const e=qD(this._location.path);if(e===null)return null;const n=new Et(this._location.bucket,e);return new Yr(this._service,n)}_throwIfRoot(e){if(this._location.path==="")throw ID(e)}}function cO(t,e,n){return t._throwIfRoot("uploadBytesResumable"),new uO(t,new zn(e),n)}function hO(t){t._throwIfRoot("getDownloadURL");const e=eO(t.storage,t._location,mS());return t.storage.makeRequestWithTokens(e,pi).then(n=>{if(n===null)throw ED();return n})}function dO(t,e){const n=WD(t._location.path,e),r=new Et(t._location.bucket,n);return new Yr(t.storage,r)}/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */function fO(t){return/^[A-Za-z]+:\/\//.test(t)}function pO(t,e){return new Yr(t,e)}function _S(t,e){if(t instanceof Im){const n=t;if(n._bucket==null)throw wD();const r=new Yr(n,n._bucket);return e!=null?_S(r,e):r}else return e!==void 0?dO(t,e):t}function mO(t,e){if(e&&fO(e)){if(t instanceof Im)return pO(t,e);throw Xd("To use ref(service, url), the first argument must be a Storage instance.")}else return _S(t,e)}function fv(t,e){const n=e==null?void 0:e[rS];return n==null?null:Et.makeFromBucketSpec(n,t)}function gO(t,e,n,r={}){t.host=`${e}:${n}`,t._protocol="http";const{mockUserToken:i}=r;i&&(t._overrideAuthToken=typeof i=="string"?i:Yw(i,t.app.options.projectId))}class Im{constructor(e,n,r,i,s){this.app=e,this._authProvider=n,this._appCheckProvider=r,this._url=i,this._firebaseVersion=s,this._bucket=null,this._host=nS,this._protocol="https",this._appId=null,this._deleted=!1,this._maxOperationRetryTime=uD,this._maxUploadRetryTime=cD,this._requests=new Set,i!=null?this._bucket=Et.makeFromBucketSpec(i,this._host):this._bucket=fv(this._host,this.app.options)}get host(){return this._host}set host(e){this._host=e,this._url!=null?this._bucket=Et.makeFromBucketSpec(this._url,e):this._bucket=fv(e,this.app.options)}get maxUploadRetryTime(){return this._maxUploadRetryTime}set maxUploadRetryTime(e){hv("time",0,Number.POSITIVE_INFINITY,e),this._maxUploadRetryTime=e}get maxOperationRetryTime(){return this._maxOperationRetryTime}set maxOperationRetryTime(e){hv("time",0,Number.POSITIVE_INFINITY,e),this._maxOperationRetryTime=e}async _getAuthToken(){if(this._overrideAuthToken)return this._overrideAuthToken;const e=this._authProvider.getImmediate({optional:!0});if(e){const n=await e.getToken();if(n!==null)return n.accessToken}return null}async _getAppCheckToken(){const e=this._appCheckProvider.getImmediate({optional:!0});return e?(await e.getToken()).token:null}_delete(){return this._deleted||(this._deleted=!0,this._requests.forEach(e=>e.cancel()),this._requests.clear()),Promise.resolve()}_makeStorageReference(e){return new Yr(this,e)}_makeRequest(e,n,r,i,s=!0){if(this._deleted)return new TD(aS());{const o=MD(e,this._appId,r,i,n,this._firebaseVersion,s);return this._requests.add(o),o.getPromise().then(()=>this._requests.delete(o),()=>this._requests.delete(o)),o}}async makeRequestWithTokens(e,n){const[r,i]=await Promise.all([this._getAuthToken(),this._getAppCheckToken()]);return this._makeRequest(e,n,r,i).getPromise()}}const pv="@firebase/storage",mv="0.11.2";/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */const ES="storage";function SS(t,e,n){return t=oe(t),cO(t,e,n)}function IS(t){return t=oe(t),hO(t)}function TS(t,e){return t=oe(t),mO(t,e)}function yO(t=sp(),e){t=oe(t);const r=Uu(t,ES).getImmediate({identifier:e}),i=Kw("storage");return i&&vO(r,...i),r}function vO(t,e,n,r={}){gO(t,e,n,r)}function wO(t,{instanceIdentifier:e}){const n=t.getProvider("app").getImmediate(),r=t.getProvider("auth-internal"),i=t.getProvider("app-check-internal");return new Im(n,r,i,e,Zr)}function _O(){Hr(new lr(ES,wO,"PUBLIC").setMultipleInstances(!0)),rn(pv,mv,""),rn(pv,mv,"esm2017")}_O();const EO={apiKey:"AIzaSyCouaKIjh5aWsSpQH0a5cd_8Z9ENikwxjc",authDomain:"fir-chat-app-2a0d7.firebaseapp.com",projectId:"fir-chat-app-2a0d7",storageBucket:"fir-chat-app-2a0d7.appspot.com",messagingSenderId:"199040834706",appId:"1:199040834706:web:d35a816fc9c57efbb79a4b"};Zw(EO);const St=ix(),kS=yO(),ce=W2();new dn;const On=E.createContext(),SO=({children:t})=>{const[e,n]=E.useState({});return E.useEffect(()=>{const r=qN(St,i=>{n(i),console.log(i)});return()=>{r()}},[]),v.jsx(On.Provider,{value:{currentUser:e},children:t})},IO=()=>{const{currentUser:t}=E.useContext(On);return v.jsxs("div",{className:"navbar",children:[v.jsx("span",{className:"logo",children:"CHATS"}),t&&v.jsx("div",{className:"user",children:v.jsx("img",{src:t.photoURL,alt:""})})]})},si=E.createContext(),TO=({children:t})=>{const{currentUser:e}=E.useContext(On),n={chatId:"null",user:{},showInput:!1},r=(o,a)=>{switch(a.type){case"CHANGE_USER":return{...o,user:a.payload,chatId:e&&e.uid>a.payload.uid?e.uid+a.payload.uid:a.payload.uid+e.uid};case"TOGGLE_INPUT":return{...o,showInput:a.payload};default:return o}},[i,s]=E.useReducer(r,n);return v.jsx(si.Provider,{value:{data:i,dispatch:s},children:t})},kO=()=>{const[t,e]=E.useState(""),[n,r]=E.useState(null),[i,s]=E.useState(!1),{currentUser:o}=E.useContext(On),{dispatch:a}=E.useContext(si),l=async()=>{const h=GE(pc(ce,"users"),QE("displayName","==",t));try{(await vm(h)).forEach(p=>{r(p.data())})}catch{s(!0)}},u=h=>{h.code=="Enter"&&l()},c=async()=>{if(n){const h=o.uid>n.uid?o.uid+n.uid:n.uid+o.uid;try{(await os(ke(ce,"chats",h))).exists()||(await pu(ke(ce,"chats",h),{messages:[]}),await Ai(ke(ce,"userChats",o.uid),{[h+".userInfo"]:{uid:n.uid,displayName:n.displayName,photoURL:n.photoURL},[h+".date"]:mu()}),await Ai(ke(ce,"userChats",n.uid),{[h+".userInfo"]:{uid:o.uid,displayName:o.displayName,photoURL:o.photoURL},[h+".date"]:mu()}))}catch(d){console.error(d)}a({type:"CHANGE_USER",payload:n}),a({type:"TOGGLE_INPUT",payload:!0}),r(null),e("")}};return v.jsxs("div",{className:"search",children:[v.jsx("div",{className:"searchform",children:v.jsx("input",{type:"text",placeholder:"find contact",onKeyDown:u,onChange:h=>e(h.target.value),value:t})}),i&&v.jsx("span",{children:" Not found"}),n&&v.jsxs("div",{className:"userChat",onClick:c,children:[v.jsx("img",{src:n.photoURL,alt:""}),v.jsx("div",{className:"userChatInfo",children:v.jsx("span",{children:n.displayName})})]})]})},CO=()=>{var s;const[t,e]=E.useState({}),{currentUser:n}=E.useContext(On),{dispatch:r}=E.useContext(si);E.useEffect(()=>{const o=()=>{const a=eS(ke(ce,"userChats",n.uid),l=>{e(l.data())});return()=>{a()}};n.uid&&o()},[n.uid]);const i=o=>{r({type:"CHANGE_USER",payload:o}),r({type:"TOGGLE_INPUT",payload:!0})};return v.jsx("div",{className:"chats",children:(s=Object.entries(t||{}))==null?void 0:s.sort((o,a)=>a[1].date-o[1].date).map(o=>{const a=o[0],{userInfo:l,lastMessage:u}=o[1],{displayName:c,photoURL:h}=l||{},{text:d}=u||{};return v.jsxs("div",{className:"userChat",onClick:()=>i(l),children:[v.jsx("img",{src:h,alt:""}),v.jsxs("div",{className:"userChatInfo",children:[v.jsx("span",{children:c}),v.jsx("p",{children:d})]})]},a)})})},NO=()=>v.jsxs("div",{className:"sidebar",children:[v.jsx(IO,{})," ",v.jsx(kO,{})," ",v.jsx(CO,{})," "]}),RO=({message:t})=>{const{currentUser:e}=E.useContext(On),{data:n}=E.useContext(si),r=E.useRef();E.useEffect(()=>{var s;(s=r.current)==null||s.scrollIntoView({behavior:"smooth"})});const i=()=>{const s=t.date.toDate(),o=s.getDate(),a=s.toLocaleString("default",{month:"short"}),l=s.getHours(),u=s.getMinutes(),c=`${o}-${a}`,h=l>12?`${l-12}:${u} PM`:`${l}:${u} AM`;return v.jsxs(v.Fragment,{children:[c," ",v.jsx("br",{}),h]})};return v.jsxs("div",{ref:r,className:`message ${t.senderId===e.uid&&"owner"}`,children:[v.jsxs("div",{className:"messageInfo",children:[v.jsx("img",{src:t.senderId===e.uid?e.photoURL:n.user.photoURL,alt:""}),v.jsx("span",{children:i()})]}),v.jsxs("div",{className:"messageContent",children:[v.jsx("p",{children:t.text}),t.image&&v.jsx("img",{src:t.image,alt:""})]})]})},xO=()=>{const[t,e]=E.useState([]),{data:n}=E.useContext(si);return E.useEffect(()=>{const r=eS(ke(ce,"chats",n.chatId),i=>{i.exists()&&e(i.data().messages)});return()=>{r()}},[n.chatId]),console.log(t),v.jsx("div",{className:"messages",children:t.map(r=>v.jsx(RO,{message:r},r.id))})},AO="/assets/addimg-a0dd27eb.png",PO="/assets/attach-81290024.png";let Za;const DO=new Uint8Array(16);function OO(){if(!Za&&(Za=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!Za))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Za(DO)}const Me=[];for(let t=0;t<256;++t)Me.push((t+256).toString(16).slice(1));function LO(t,e=0){return(Me[t[e+0]]+Me[t[e+1]]+Me[t[e+2]]+Me[t[e+3]]+"-"+Me[t[e+4]]+Me[t[e+5]]+"-"+Me[t[e+6]]+Me[t[e+7]]+"-"+Me[t[e+8]]+Me[t[e+9]]+"-"+Me[t[e+10]]+Me[t[e+11]]+Me[t[e+12]]+Me[t[e+13]]+Me[t[e+14]]+Me[t[e+15]]).toLowerCase()}const MO=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),gv={randomUUID:MO};function Sh(t,e,n){if(gv.randomUUID&&!e&&!t)return gv.randomUUID();t=t||{};const r=t.random||(t.rng||OO)();if(r[6]=r[6]&15|64,r[8]=r[8]&63|128,e){n=n||0;for(let i=0;i<16;++i)e[n+i]=r[i];return e}return LO(r)}const $O=()=>{const[t,e]=E.useState(""),[n,r]=E.useState(null),{currentUser:i}=E.useContext(On),{data:s}=E.useContext(si),o=async()=>{if(n){const a=TS(kS,Sh()),l=SS(a,n);l.on(u=>{},()=>{IS(l.snapshot.ref).then(async u=>{await Ai(ke(ce,"chats",s.chatId),{messages:uv({id:Sh(),text:t,senderId:i.uid,date:we.now(),image:u})})})})}else await Ai(ke(ce,"chats",s.chatId),{messages:uv({id:Sh(),text:t,senderId:i.uid,date:we.now()})});await Ai(ke(ce,"userChats",i.uid),{[s.chatId+".lastMessage"]:{text:t},[s.chatId+".date"]:mu()}),await Ai(ke(ce,"userChats",s.user.uid),{[s.chatId+".lastMessage"]:{text:t},[s.chatId+".date"]:mu()}),e(""),r(null)};return v.jsxs("div",{className:"input",children:[v.jsx("input",{type:"text",placeholder:"Type Something.....",onChange:a=>e(a.target.value),value:t}),v.jsxs("div",{className:"send",children:[v.jsx("img",{src:PO,alt:""}),v.jsx("input",{type:"file",style:{display:"none"},id:"file",onChange:a=>r(a.target.files[0])}),v.jsx("label",{htmlFor:"file",children:v.jsx("img",{src:AO,alt:""})}),v.jsx("button",{onClick:o,children:" Send"})]})]})};const UO=({onSearch:t})=>{const[e,n]=E.useState(""),r=s=>{n(s.target.value)},i=s=>{s.preventDefault(),t(e)};return v.jsxs("form",{onSubmit:i,className:"d-flex ",children:[v.jsx("input",{type:"text",value:e,onChange:r,placeholder:"Type to search",className:"form-control me-2"}),v.jsx("button",{type:"submit",className:"btn btn-primary",children:"Search"})]})};function Pn(t){return Array.isArray?Array.isArray(t):RS(t)==="[object Array]"}const bO=1/0;function FO(t){if(typeof t=="string")return t;let e=t+"";return e=="0"&&1/t==-bO?"-0":e}function jO(t){return t==null?"":FO(t)}function en(t){return typeof t=="string"}function CS(t){return typeof t=="number"}function VO(t){return t===!0||t===!1||BO(t)&&RS(t)=="[object Boolean]"}function NS(t){return typeof t=="object"}function BO(t){return NS(t)&&t!==null}function vt(t){return t!=null}function Ih(t){return!t.trim().length}function RS(t){return t==null?t===void 0?"[object Undefined]":"[object Null]":Object.prototype.toString.call(t)}const zO="Incorrect 'index' type",HO=t=>`Invalid value for key ${t}`,qO=t=>`Pattern length exceeds max of ${t}.`,WO=t=>`Missing ${t} property in key`,KO=t=>`Property 'weight' in key '${t}' must be a positive integer`,yv=Object.prototype.hasOwnProperty;class GO{constructor(e){this._keys=[],this._keyMap={};let n=0;e.forEach(r=>{let i=xS(r);n+=i.weight,this._keys.push(i),this._keyMap[i.id]=i,n+=i.weight}),this._keys.forEach(r=>{r.weight/=n})}get(e){return this._keyMap[e]}keys(){return this._keys}toJSON(){return JSON.stringify(this._keys)}}function xS(t){let e=null,n=null,r=null,i=1,s=null;if(en(t)||Pn(t))r=t,e=vv(t),n=Jd(t);else{if(!yv.call(t,"name"))throw new Error(WO("name"));const o=t.name;if(r=o,yv.call(t,"weight")&&(i=t.weight,i<=0))throw new Error(KO(o));e=vv(o),n=Jd(o),s=t.getFn}return{path:e,id:n,weight:i,src:r,getFn:s}}function vv(t){return Pn(t)?t:t.split(".")}function Jd(t){return Pn(t)?t.join("."):t}function QO(t,e){let n=[],r=!1;const i=(s,o,a)=>{if(vt(s))if(!o[a])n.push(s);else{let l=o[a];const u=s[l];if(!vt(u))return;if(a===o.length-1&&(en(u)||CS(u)||VO(u)))n.push(jO(u));else if(Pn(u)){r=!0;for(let c=0,h=u.length;ct.score===e.score?t.idx{this._keysMap[n.id]=r})}create(){this.isCreated||!this.docs.length||(this.isCreated=!0,en(this.docs[0])?this.docs.forEach((e,n)=>{this._addString(e,n)}):this.docs.forEach((e,n)=>{this._addObject(e,n)}),this.norm.clear())}add(e){const n=this.size();en(e)?this._addString(e,n):this._addObject(e,n)}removeAt(e){this.records.splice(e,1);for(let n=e,r=this.size();n{let o=i.getFn?i.getFn(e):this.getFn(e,i.path);if(vt(o)){if(Pn(o)){let a=[];const l=[{nestedArrIndex:-1,value:o}];for(;l.length;){const{nestedArrIndex:u,value:c}=l.pop();if(vt(c))if(en(c)&&!Ih(c)){let h={v:c,i:u,n:this.norm.get(c)};a.push(h)}else Pn(c)&&c.forEach((h,d)=>{l.push({nestedArrIndex:d,value:h})})}r.$[s]=a}else if(en(o)&&!Ih(o)){let a={v:o,n:this.norm.get(o)};r.$[s]=a}}}),this.records.push(r)}toJSON(){return{keys:this.keys,records:this.records}}}function AS(t,e,{getFn:n=j.getFn,fieldNormWeight:r=j.fieldNormWeight}={}){const i=new Tm({getFn:n,fieldNormWeight:r});return i.setKeys(t.map(xS)),i.setSources(e),i.create(),i}function nL(t,{getFn:e=j.getFn,fieldNormWeight:n=j.fieldNormWeight}={}){const{keys:r,records:i}=t,s=new Tm({getFn:e,fieldNormWeight:n});return s.setKeys(r),s.setIndexRecords(i),s}function el(t,{errors:e=0,currentLocation:n=0,expectedLocation:r=0,distance:i=j.distance,ignoreLocation:s=j.ignoreLocation}={}){const o=e/t.length;if(s)return o;const a=Math.abs(r-n);return i?o+a/i:a?1:o}function rL(t=[],e=j.minMatchCharLength){let n=[],r=-1,i=-1,s=0;for(let o=t.length;s=e&&n.push([r,i]),r=-1)}return t[s-1]&&s-r>=e&&n.push([r,s-1]),n}const Cr=32;function iL(t,e,n,{location:r=j.location,distance:i=j.distance,threshold:s=j.threshold,findAllMatches:o=j.findAllMatches,minMatchCharLength:a=j.minMatchCharLength,includeMatches:l=j.includeMatches,ignoreLocation:u=j.ignoreLocation}={}){if(e.length>Cr)throw new Error(qO(Cr));const c=e.length,h=t.length,d=Math.max(0,Math.min(r,h));let p=s,y=d;const w=a>1||l,S=w?Array(h):[];let m;for(;(m=t.indexOf(e,y))>-1;){let x=el(e,{currentLocation:m,expectedLocation:d,distance:i,ignoreLocation:u});if(p=Math.min(x,p),y=m+c,w){let I=0;for(;I=b;lt-=1){let ai=lt-1,li=n[t.charAt(ai)];if(w&&(S[ai]=+!!li),Rt[lt]=(Rt[lt+1]<<1|1)&li,x&&(Rt[lt]|=(f[lt+1]|f[lt])<<1|1|f[lt+1]),Rt[lt]&k&&(g=el(e,{errors:x,currentLocation:ai,expectedLocation:d,distance:i,ignoreLocation:u}),g<=p)){if(p=g,y=ai,y<=d)break;b=Math.max(1,2*d-y)}}if(el(e,{errors:x+1,currentLocation:d,expectedLocation:d,distance:i,ignoreLocation:u})>p)break;f=Rt}const R={isMatch:y>=0,score:Math.max(.001,g)};if(w){const x=rL(S,a);x.length?l&&(R.indices=x):R.isMatch=!1}return R}function sL(t){let e={};for(let n=0,r=t.length;n{this.chunks.push({pattern:d,alphabet:sL(d),startIndex:p})},h=this.pattern.length;if(h>Cr){let d=0;const p=h%Cr,y=h-p;for(;d{const{isMatch:m,score:f,indices:g}=iL(e,y,w,{location:i+S,distance:s,threshold:o,findAllMatches:a,minMatchCharLength:l,includeMatches:r,ignoreLocation:u});m&&(d=!0),h+=f,m&&g&&(c=[...c,...g])});let p={isMatch:d,score:d?h/this.chunks.length:1};return d&&r&&(p.indices=c),p}}class wr{constructor(e){this.pattern=e}static isMultiMatch(e){return wv(e,this.multiRegex)}static isSingleMatch(e){return wv(e,this.singleRegex)}search(){}}function wv(t,e){const n=t.match(e);return n?n[1]:null}class oL extends wr{constructor(e){super(e)}static get type(){return"exact"}static get multiRegex(){return/^="(.*)"$/}static get singleRegex(){return/^=(.*)$/}search(e){const n=e===this.pattern;return{isMatch:n,score:n?0:1,indices:[0,this.pattern.length-1]}}}class aL extends wr{constructor(e){super(e)}static get type(){return"inverse-exact"}static get multiRegex(){return/^!"(.*)"$/}static get singleRegex(){return/^!(.*)$/}search(e){const r=e.indexOf(this.pattern)===-1;return{isMatch:r,score:r?0:1,indices:[0,e.length-1]}}}class lL extends wr{constructor(e){super(e)}static get type(){return"prefix-exact"}static get multiRegex(){return/^\^"(.*)"$/}static get singleRegex(){return/^\^(.*)$/}search(e){const n=e.startsWith(this.pattern);return{isMatch:n,score:n?0:1,indices:[0,this.pattern.length-1]}}}class uL extends wr{constructor(e){super(e)}static get type(){return"inverse-prefix-exact"}static get multiRegex(){return/^!\^"(.*)"$/}static get singleRegex(){return/^!\^(.*)$/}search(e){const n=!e.startsWith(this.pattern);return{isMatch:n,score:n?0:1,indices:[0,e.length-1]}}}class cL extends wr{constructor(e){super(e)}static get type(){return"suffix-exact"}static get multiRegex(){return/^"(.*)"\$$/}static get singleRegex(){return/^(.*)\$$/}search(e){const n=e.endsWith(this.pattern);return{isMatch:n,score:n?0:1,indices:[e.length-this.pattern.length,e.length-1]}}}class hL extends wr{constructor(e){super(e)}static get type(){return"inverse-suffix-exact"}static get multiRegex(){return/^!"(.*)"\$$/}static get singleRegex(){return/^!(.*)\$$/}search(e){const n=!e.endsWith(this.pattern);return{isMatch:n,score:n?0:1,indices:[0,e.length-1]}}}class DS extends wr{constructor(e,{location:n=j.location,threshold:r=j.threshold,distance:i=j.distance,includeMatches:s=j.includeMatches,findAllMatches:o=j.findAllMatches,minMatchCharLength:a=j.minMatchCharLength,isCaseSensitive:l=j.isCaseSensitive,ignoreLocation:u=j.ignoreLocation}={}){super(e),this._bitapSearch=new PS(e,{location:n,threshold:r,distance:i,includeMatches:s,findAllMatches:o,minMatchCharLength:a,isCaseSensitive:l,ignoreLocation:u})}static get type(){return"fuzzy"}static get multiRegex(){return/^"(.*)"$/}static get singleRegex(){return/^(.*)$/}search(e){return this._bitapSearch.searchIn(e)}}class OS extends wr{constructor(e){super(e)}static get type(){return"include"}static get multiRegex(){return/^'"(.*)"$/}static get singleRegex(){return/^'(.*)$/}search(e){let n=0,r;const i=[],s=this.pattern.length;for(;(r=e.indexOf(this.pattern,n))>-1;)n=r+s,i.push([r,n-1]);const o=!!i.length;return{isMatch:o,score:o?0:1,indices:i}}}const Zd=[oL,OS,lL,uL,hL,cL,aL,DS],_v=Zd.length,dL=/ +(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/,fL="|";function pL(t,e={}){return t.split(fL).map(n=>{let r=n.trim().split(dL).filter(s=>s&&!!s.trim()),i=[];for(let s=0,o=r.length;s!!(t[yu.AND]||t[yu.OR]),vL=t=>!!t[nf.PATH],wL=t=>!Pn(t)&&NS(t)&&!rf(t),Ev=t=>({[yu.AND]:Object.keys(t).map(e=>({[e]:t[e]}))});function LS(t,e,{auto:n=!0}={}){const r=i=>{let s=Object.keys(i);const o=vL(i);if(!o&&s.length>1&&!rf(i))return r(Ev(i));if(wL(i)){const l=o?i[nf.PATH]:s[0],u=o?i[nf.PATTERN]:i[l];if(!en(u))throw new Error(HO(l));const c={keyId:Jd(l),pattern:u};return n&&(c.searcher=tf(u,e)),c}let a={children:[],operator:s[0]};return s.forEach(l=>{const u=i[l];Pn(u)&&u.forEach(c=>{a.children.push(r(c))})}),a};return rf(t)||(t=Ev(t)),r(t)}function _L(t,{ignoreFieldNorm:e=j.ignoreFieldNorm}){t.forEach(n=>{let r=1;n.matches.forEach(({key:i,norm:s,score:o})=>{const a=i?i.weight:null;r*=Math.pow(o===0&&a?Number.EPSILON:o,(a||1)*(e?1:s))}),n.score=r})}function EL(t,e){const n=t.matches;e.matches=[],vt(n)&&n.forEach(r=>{if(!vt(r.indices)||!r.indices.length)return;const{indices:i,value:s}=r;let o={indices:i,value:s};r.key&&(o.key=r.key.src),r.idx>-1&&(o.refIndex=r.idx),e.matches.push(o)})}function SL(t,e){e.score=t.score}function IL(t,e,{includeMatches:n=j.includeMatches,includeScore:r=j.includeScore}={}){const i=[];return n&&i.push(EL),r&&i.push(SL),t.map(s=>{const{idx:o}=s,a={item:e[o],refIndex:o};return i.length&&i.forEach(l=>{l(s,a)}),a})}class ws{constructor(e,n={},r){this.options={...j,...n},this.options.useExtendedSearch,this._keyStore=new GO(this.options.keys),this.setCollection(e,r)}setCollection(e,n){if(this._docs=e,n&&!(n instanceof Tm))throw new Error(zO);this._myIndex=n||AS(this.options.keys,this._docs,{getFn:this.options.getFn,fieldNormWeight:this.options.fieldNormWeight})}add(e){vt(e)&&(this._docs.push(e),this._myIndex.add(e))}remove(e=()=>!1){const n=[];for(let r=0,i=this._docs.length;r-1&&(l=l.slice(0,n)),IL(l,this._docs,{includeMatches:r,includeScore:i})}_searchStringList(e){const n=tf(e,this.options),{records:r}=this._myIndex,i=[];return r.forEach(({v:s,i:o,n:a})=>{if(!vt(s))return;const{isMatch:l,score:u,indices:c}=n.searchIn(s);l&&i.push({item:s,idx:o,matches:[{score:u,value:s,norm:a,indices:c}]})}),i}_searchLogical(e){const n=LS(e,this.options),r=(a,l,u)=>{if(!a.children){const{keyId:h,searcher:d}=a,p=this._findMatches({key:this._keyStore.get(h),value:this._myIndex.getValueForItemAtKeyId(l,h),searcher:d});return p&&p.length?[{idx:u,item:l,matches:p}]:[]}const c=[];for(let h=0,d=a.children.length;h{if(vt(a)){let u=r(n,a,l);u.length&&(s[l]||(s[l]={idx:l,item:a,matches:[]},o.push(s[l])),u.forEach(({matches:c})=>{s[l].matches.push(...c)}))}}),o}_searchObjectList(e){const n=tf(e,this.options),{keys:r,records:i}=this._myIndex,s=[];return i.forEach(({$:o,i:a})=>{if(!vt(o))return;let l=[];r.forEach((u,c)=>{l.push(...this._findMatches({key:u,value:o[c],searcher:n}))}),l.length&&s.push({idx:a,item:o,matches:l})}),s}_findMatches({key:e,value:n,searcher:r}){if(!vt(n))return[];let i=[];if(Pn(n))n.forEach(({v:s,i:o,n:a})=>{if(!vt(s))return;const{isMatch:l,score:u,indices:c}=r.searchIn(s);l&&i.push({score:u,key:e,value:s,idx:o,norm:a,indices:c})});else{const{v:s,n:o}=n,{isMatch:a,score:l,indices:u}=r.searchIn(s);a&&i.push({score:l,key:e,value:s,norm:o,indices:u})}return i}}ws.version="6.6.2";ws.createIndex=AS;ws.parseIndex=nL;ws.config=j;ws.parseQuery=LS;yL(gL);const km=({isAuth:t,handleShowPosts:e})=>{const[n,r]=E.useState([]),[i,s]=E.useState(!1),[o,a]=E.useState([]),[l,u]=E.useState(""),[c,h]=E.useState([]),[d,p]=E.useState(null),[y,w]=E.useState(null),S=pc(ce,"posts"),m=async()=>{s(!0);const L=(await vm(S)).docs.map(Re=>({...Re.data(),id:Re.id})),b=new ws(L,{keys:["title","postContent","skills"],includeScore:!0,threshold:.3,shouldSort:!0,findAllMatches:!0,distance:1e3});p(b),r(L),h(L),s(!1)};E.useEffect(()=>{m()},[]);const f=async I=>{const L=ke(ce,"posts",I);await aD(L),m()},g=I=>{a(L=>L.includes(I)?L.filter(b=>b!==I):[...L,I])},_=I=>o.includes(I),k=I=>{if(u(I),!!d)if(I==="")h(n);else{const L=d.search(I).map(b=>b.item);h(L)}},R=I=>{w(I)};E.useEffect(()=>{y&&x(y)},[y]);const x=I=>{console.log(`Opening chat window with ${I}`),typeof e=="function"&&e()};return i?v.jsx("h3",{children:"LOADING..."}):v.jsx(v.Fragment,{children:v.jsx("div",{className:"homepage",children:v.jsxs("div",{children:[v.jsx("div",{className:" search-bar col-lg-6 offset-lg-3",children:v.jsx(UO,{onSearch:k})}),v.jsx("div",{children:c.length===0?v.jsx("h3",{children:"No posts"}):c.map(I=>{const L=_(I.id)?I.postContent:I.postContent.slice(0,300)+"...",b=I.postContent.length>300;return v.jsx("div",{className:"card mb-4 shadow-small",children:v.jsxs("div",{className:"card-body",children:[t&&St.currentUser&&I.author.id===St.currentUser.uid&&v.jsx("div",{className:"d-flex justify-content-end",children:v.jsx("button",{className:"btn btn-danger my-3 mx-3",onClick:()=>{f(I.id)},children:"X"})}),v.jsxs("h5",{className:"card-title mb-3 fw-bold",children:[I.title," "]}),v.jsxs("p",{className:"card-text mb-3",children:[L,b&&v.jsx("button",{className:"btn btn-link",onClick:()=>g(I.id),children:_(I.id)?"Read less":"Read more"})]}),I.skills&&v.jsxs("div",{className:"skills-container",children:[v.jsx("h6",{children:"Skills Required:"}),v.jsx("p",{children:I.skills})]}),v.jsx("span",{className:"badge rounded-pill bg-dark",children:I.author.name}),I.author.name&&v.jsx("span",{className:"badge rounded-pill bg-info text-dark",onClick:()=>R(I.author.name),style:{cursor:"pointer"},children:I.author.name})]})},I.id)})})]})})})},TL=({user:t})=>{const[e,n]=E.useState(""),[r,i]=E.useState(""),[s,o]=E.useState(""),[a,l]=E.useState(""),[u,c]=E.useState(""),[h,d]=E.useState(""),[p,y]=E.useState(""),[w,S]=E.useState("");return E.useEffect(()=>{(async()=>{try{const f=ke(ce,"bio",t),g=await os(f),_=ke(ce,"users",t),k=await os(_);if(g.exists()){const R=g.data().eduLevel,x=g.data().courseOfStudy,I=g.data().skills,L=g.data().school;n(R),i(x),o(I),l(L)}else n("No bio available"),i("No course details available"),o("No were skills updated"),l("No school name updated");if(k.exists()){const R=k.data().email,x=k.data().photoURL,I=k.data().displayName,L=k.data().myname;c(R),d(x),S(I),y(L)}}catch(f){console.error("Error fetching bio:",f)}})()},[t]),v.jsxs("div",{children:[v.jsxs("div",{children:[v.jsx("img",{src:h,alt:"",style:{width:"100px",height:"100px",borderRadius:"50%",objectFit:"cover"}})," ",v.jsxs("h6",{children:[" ",v.jsx("strong",{children:" User Name: "})," ",w," "]}),v.jsxs("h6",{children:[" ",v.jsx("strong",{children:" Name: "})," ",p," "]}),v.jsxs("h6",{children:[" ",v.jsx("strong",{children:" Email: "})," ",u," "]})," ",v.jsx("br",{})]}),v.jsxs("div",{style:{maxHeight:"200px",overflow:"auto"},children:[" ",v.jsxs("h6",{children:[v.jsx("strong",{children:"Education Level:"})," ",e," "]})," "]}),v.jsxs("div",{style:{maxHeight:"100px",overflow:"auto"},children:[" ",v.jsxs("h6",{children:[v.jsx("strong",{children:"Course of Study:"})," ",r," "]})," "]}),v.jsxs("div",{style:{maxHeight:"100px",overflow:"auto"},children:[" ",v.jsxs("h6",{children:[v.jsx("strong",{children:"Skills:"})," ",s," "]})," "]}),v.jsxs("div",{style:{maxHeight:"100px",overflow:"auto"},children:[" ",v.jsxs("h6",{children:[v.jsx("strong",{children:"School:"})," ",a," "]})," "]})]})},kL=()=>{var a,l;const{data:t}=E.useContext(si),[e,n]=E.useState(!1),[r,i]=E.useState(!1),s=()=>{i(u=>!u)},o=()=>{i(!1)};return v.jsxs("div",{className:"chat",children:[v.jsxs("div",{className:"chatInfo",children:[v.jsxs("span",{children:[" ",(a=t.user)==null?void 0:a.displayName]}),t.showInput&&v.jsx("button",{onClick:s,children:"Open Bio"}),v.jsx("div",{className:"chatIcons"})]}),v.jsx(xO,{}),t.showInput&&v.jsx($O,{}),e&&v.jsx(km,{}),r&&v.jsxs("div",{className:"popup",children:[v.jsx("button",{className:"close-button",onClick:o,children:"X"}),v.jsx(TL,{user:(l=t.user)==null?void 0:l.uid})]})]})};/** + * @remix-run/router v1.6.3 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function Bo(){return Bo=Object.assign?Object.assign.bind():function(t){for(var e=1;e"u")throw new Error(e)}function Cm(t,e){if(!t){typeof console<"u"&&console.warn(e);try{throw new Error(e)}catch{}}}function NL(){return Math.random().toString(36).substr(2,8)}function Iv(t,e){return{usr:t.state,key:t.key,idx:e}}function sf(t,e,n,r){return n===void 0&&(n=null),Bo({pathname:typeof t=="string"?t:t.pathname,search:"",hash:""},typeof e=="string"?_s(e):e,{state:n,key:e&&e.key||r||NL()})}function vu(t){let{pathname:e="/",search:n="",hash:r=""}=t;return n&&n!=="?"&&(e+=n.charAt(0)==="?"?n:"?"+n),r&&r!=="#"&&(e+=r.charAt(0)==="#"?r:"#"+r),e}function _s(t){let e={};if(t){let n=t.indexOf("#");n>=0&&(e.hash=t.substr(n),t=t.substr(0,n));let r=t.indexOf("?");r>=0&&(e.search=t.substr(r),t=t.substr(0,r)),t&&(e.pathname=t)}return e}function RL(t,e,n,r){r===void 0&&(r={});let{window:i=document.defaultView,v5Compat:s=!1}=r,o=i.history,a=Kn.Pop,l=null,u=c();u==null&&(u=0,o.replaceState(Bo({},o.state,{idx:u}),""));function c(){return(o.state||{idx:null}).idx}function h(){a=Kn.Pop;let S=c(),m=S==null?null:S-u;u=S,l&&l({action:a,location:w.location,delta:m})}function d(S,m){a=Kn.Push;let f=sf(w.location,S,m);n&&n(f,S),u=c()+1;let g=Iv(f,u),_=w.createHref(f);try{o.pushState(g,"",_)}catch(k){if(k instanceof DOMException&&k.name==="DataCloneError")throw k;i.location.assign(_)}s&&l&&l({action:a,location:w.location,delta:1})}function p(S,m){a=Kn.Replace;let f=sf(w.location,S,m);n&&n(f,S),u=c();let g=Iv(f,u),_=w.createHref(f);o.replaceState(g,"",_),s&&l&&l({action:a,location:w.location,delta:0})}function y(S){let m=i.location.origin!=="null"?i.location.origin:i.location.href,f=typeof S=="string"?S:vu(S);return _e(m,"No window.location.(origin|href) available to create URL for href: "+f),new URL(f,m)}let w={get action(){return a},get location(){return t(i,o)},listen(S){if(l)throw new Error("A history only accepts one active listener");return i.addEventListener(Sv,h),l=S,()=>{i.removeEventListener(Sv,h),l=null}},createHref(S){return e(i,S)},createURL:y,encodeLocation(S){let m=y(S);return{pathname:m.pathname,search:m.search,hash:m.hash}},push:d,replace:p,go(S){return o.go(S)}};return w}var Tv;(function(t){t.data="data",t.deferred="deferred",t.redirect="redirect",t.error="error"})(Tv||(Tv={}));function xL(t,e,n){n===void 0&&(n="/");let r=typeof e=="string"?_s(e):e,i=Nm(r.pathname||"/",n);if(i==null)return null;let s=MS(t);AL(s);let o=null;for(let a=0;o==null&&a{let l={relativePath:a===void 0?s.path||"":a,caseSensitive:s.caseSensitive===!0,childrenIndex:o,route:s};l.relativePath.startsWith("/")&&(_e(l.relativePath.startsWith(r),'Absolute route path "'+l.relativePath+'" nested under path '+('"'+r+'" is not valid. An absolute child route path ')+"must start with the combined path of all its parent routes."),l.relativePath=l.relativePath.slice(r.length));let u=sr([r,l.relativePath]),c=n.concat(l);s.children&&s.children.length>0&&(_e(s.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+u+'".')),MS(s.children,e,c,u)),!(s.path==null&&!s.index)&&e.push({path:u,score:UL(u,s.index),routesMeta:c})};return t.forEach((s,o)=>{var a;if(s.path===""||!((a=s.path)!=null&&a.includes("?")))i(s,o);else for(let l of $S(s.path))i(s,o,l)}),e}function $S(t){let e=t.split("/");if(e.length===0)return[];let[n,...r]=e,i=n.endsWith("?"),s=n.replace(/\?$/,"");if(r.length===0)return i?[s,""]:[s];let o=$S(r.join("/")),a=[];return a.push(...o.map(l=>l===""?s:[s,l].join("/"))),i&&a.push(...o),a.map(l=>t.startsWith("/")&&l===""?"/":l)}function AL(t){t.sort((e,n)=>e.score!==n.score?n.score-e.score:bL(e.routesMeta.map(r=>r.childrenIndex),n.routesMeta.map(r=>r.childrenIndex)))}const PL=/^:\w+$/,DL=3,OL=2,LL=1,ML=10,$L=-2,kv=t=>t==="*";function UL(t,e){let n=t.split("/"),r=n.length;return n.some(kv)&&(r+=$L),e&&(r+=OL),n.filter(i=>!kv(i)).reduce((i,s)=>i+(PL.test(s)?DL:s===""?LL:ML),r)}function bL(t,e){return t.length===e.length&&t.slice(0,-1).every((r,i)=>r===e[i])?t[t.length-1]-e[e.length-1]:0}function FL(t,e){let{routesMeta:n}=t,r={},i="/",s=[];for(let o=0;o{if(c==="*"){let d=a[h]||"";o=s.slice(0,s.length-d.length).replace(/(.)\/+$/,"$1")}return u[c]=zL(a[h]||"",c),u},{}),pathname:s,pathnameBase:o,pattern:t}}function VL(t,e,n){e===void 0&&(e=!1),n===void 0&&(n=!0),Cm(t==="*"||!t.endsWith("*")||t.endsWith("/*"),'Route path "'+t+'" will be treated as if it were '+('"'+t.replace(/\*$/,"/*")+'" because the `*` character must ')+"always follow a `/` in the pattern. To get rid of this warning, "+('please change the route path to "'+t.replace(/\*$/,"/*")+'".'));let r=[],i="^"+t.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^$?{}|()[\]]/g,"\\$&").replace(/\/:(\w+)/g,(o,a)=>(r.push(a),"/([^\\/]+)"));return t.endsWith("*")?(r.push("*"),i+=t==="*"||t==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?i+="\\/*$":t!==""&&t!=="/"&&(i+="(?:(?=\\/|$))"),[new RegExp(i,e?void 0:"i"),r]}function BL(t){try{return decodeURI(t)}catch(e){return Cm(!1,'The URL path "'+t+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent '+("encoding ("+e+").")),t}}function zL(t,e){try{return decodeURIComponent(t)}catch(n){return Cm(!1,'The value for the URL param "'+e+'" will not be decoded because'+(' the string "'+t+'" is a malformed URL segment. This is probably')+(" due to a bad percent encoding ("+n+").")),t}}function Nm(t,e){if(e==="/")return t;if(!t.toLowerCase().startsWith(e.toLowerCase()))return null;let n=e.endsWith("/")?e.length-1:e.length,r=t.charAt(n);return r&&r!=="/"?null:t.slice(n)||"/"}function HL(t,e){e===void 0&&(e="/");let{pathname:n,search:r="",hash:i=""}=typeof t=="string"?_s(t):t;return{pathname:n?n.startsWith("/")?n:qL(n,e):e,search:KL(r),hash:GL(i)}}function qL(t,e){let n=e.replace(/\/+$/,"").split("/");return t.split("/").forEach(i=>{i===".."?n.length>1&&n.pop():i!=="."&&n.push(i)}),n.length>1?n.join("/"):"/"}function Th(t,e,n,r){return"Cannot include a '"+t+"' character in a manually specified "+("`to."+e+"` field ["+JSON.stringify(r)+"]. Please separate it out to the ")+("`to."+n+"` field. Alternatively you may provide the full path as ")+'a string in and the router will parse it for you.'}function Rm(t){return t.filter((e,n)=>n===0||e.route.path&&e.route.path.length>0)}function xm(t,e,n,r){r===void 0&&(r=!1);let i;typeof t=="string"?i=_s(t):(i=Bo({},t),_e(!i.pathname||!i.pathname.includes("?"),Th("?","pathname","search",i)),_e(!i.pathname||!i.pathname.includes("#"),Th("#","pathname","hash",i)),_e(!i.search||!i.search.includes("#"),Th("#","search","hash",i)));let s=t===""||i.pathname==="",o=s?"/":i.pathname,a;if(r||o==null)a=n;else{let h=e.length-1;if(o.startsWith("..")){let d=o.split("/");for(;d[0]==="..";)d.shift(),h-=1;i.pathname=d.join("/")}a=h>=0?e[h]:"/"}let l=HL(i,a),u=o&&o!=="/"&&o.endsWith("/"),c=(s||o===".")&&n.endsWith("/");return!l.pathname.endsWith("/")&&(u||c)&&(l.pathname+="/"),l}const sr=t=>t.join("/").replace(/\/\/+/g,"/"),WL=t=>t.replace(/\/+$/,"").replace(/^\/*/,"/"),KL=t=>!t||t==="?"?"":t.startsWith("?")?t:"?"+t,GL=t=>!t||t==="#"?"":t.startsWith("#")?t:"#"+t;function QL(t){return t!=null&&typeof t.status=="number"&&typeof t.statusText=="string"&&typeof t.internal=="boolean"&&"data"in t}const US=["post","put","patch","delete"];new Set(US);const YL=["get",...US];new Set(YL);/** + * React Router v6.12.0 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function wu(){return wu=Object.assign?Object.assign.bind():function(t){for(var e=1;el.pathnameBase)),o=E.useRef(!1);return FS(()=>{o.current=!0}),E.useCallback(function(l,u){if(u===void 0&&(u={}),!o.current)return;if(typeof l=="number"){n.go(l);return}let c=xm(l,JSON.parse(s),i,u.relative==="path");t==null&&e!=="/"&&(c.pathname=c.pathname==="/"?e:sr([e,c.pathname])),(u.replace?n.replace:n.push)(c,u.state,u)},[e,n,s,i,t])}function jS(t,e){let{relative:n}=e===void 0?{}:e,{matches:r}=E.useContext(_r),{pathname:i}=_a(),s=JSON.stringify(Rm(r).map(o=>o.pathnameBase));return E.useMemo(()=>xm(t,JSON.parse(s),i,n==="path"),[t,s,i,n])}function eM(t,e){return tM(t,e)}function tM(t,e,n){Ss()||_e(!1);let{navigator:r}=E.useContext(Es),{matches:i}=E.useContext(_r),s=i[i.length-1],o=s?s.params:{};s&&s.pathname;let a=s?s.pathnameBase:"/";s&&s.route;let l=_a(),u;if(e){var c;let w=typeof e=="string"?_s(e):e;a==="/"||(c=w.pathname)!=null&&c.startsWith(a)||_e(!1),u=w}else u=l;let h=u.pathname||"/",d=a==="/"?h:h.slice(a.length)||"/",p=xL(t,{pathname:d}),y=oM(p&&p.map(w=>Object.assign({},w,{params:Object.assign({},o,w.params),pathname:sr([a,r.encodeLocation?r.encodeLocation(w.pathname).pathname:w.pathname]),pathnameBase:w.pathnameBase==="/"?a:sr([a,r.encodeLocation?r.encodeLocation(w.pathnameBase).pathname:w.pathnameBase])})),i,n);return e&&y?E.createElement(Ic.Provider,{value:{location:wu({pathname:"/",search:"",hash:"",state:null,key:"default"},u),navigationType:Kn.Pop}},y):y}function nM(){let t=cM(),e=QL(t)?t.status+" "+t.statusText:t instanceof Error?t.message:JSON.stringify(t),n=t instanceof Error?t.stack:null,i={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"},s=null;return E.createElement(E.Fragment,null,E.createElement("h2",null,"Unexpected Application Error!"),E.createElement("h3",{style:{fontStyle:"italic"}},e),n?E.createElement("pre",{style:i},n):null,s)}const rM=E.createElement(nM,null);class iM extends E.Component{constructor(e){super(e),this.state={location:e.location,revalidation:e.revalidation,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,n){return n.location!==e.location||n.revalidation!=="idle"&&e.revalidation==="idle"?{error:e.error,location:e.location,revalidation:e.revalidation}:{error:e.error||n.error,location:n.location,revalidation:e.revalidation||n.revalidation}}componentDidCatch(e,n){console.error("React Router caught the following error during render",e,n)}render(){return this.state.error?E.createElement(_r.Provider,{value:this.props.routeContext},E.createElement(bS.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function sM(t){let{routeContext:e,match:n,children:r}=t,i=E.useContext(Am);return i&&i.static&&i.staticContext&&(n.route.errorElement||n.route.ErrorBoundary)&&(i.staticContext._deepestRenderedBoundaryId=n.route.id),E.createElement(_r.Provider,{value:e},r)}function oM(t,e,n){var r;if(e===void 0&&(e=[]),n===void 0&&(n=null),t==null){var i;if((i=n)!=null&&i.errors)t=n.matches;else return null}let s=t,o=(r=n)==null?void 0:r.errors;if(o!=null){let a=s.findIndex(l=>l.route.id&&(o==null?void 0:o[l.route.id]));a>=0||_e(!1),s=s.slice(0,Math.min(s.length,a+1))}return s.reduceRight((a,l,u)=>{let c=l.route.id?o==null?void 0:o[l.route.id]:null,h=null;n&&(h=l.route.errorElement||rM);let d=e.concat(s.slice(0,u+1)),p=()=>{let y;return c?y=h:l.route.Component?y=E.createElement(l.route.Component,null):l.route.element?y=l.route.element:y=a,E.createElement(sM,{match:l,routeContext:{outlet:a,matches:d,isDataRoute:n!=null},children:y})};return n&&(l.route.ErrorBoundary||l.route.errorElement||u===0)?E.createElement(iM,{location:n.location,revalidation:n.revalidation,component:h,error:c,children:p(),routeContext:{outlet:null,matches:d,isDataRoute:!0}}):p()},null)}var of;(function(t){t.UseBlocker="useBlocker",t.UseRevalidator="useRevalidator",t.UseNavigateStable="useNavigate"})(of||(of={}));var zo;(function(t){t.UseBlocker="useBlocker",t.UseLoaderData="useLoaderData",t.UseActionData="useActionData",t.UseRouteError="useRouteError",t.UseNavigation="useNavigation",t.UseRouteLoaderData="useRouteLoaderData",t.UseMatches="useMatches",t.UseRevalidator="useRevalidator",t.UseNavigateStable="useNavigate",t.UseRouteId="useRouteId"})(zo||(zo={}));function aM(t){let e=E.useContext(Am);return e||_e(!1),e}function lM(t){let e=E.useContext(XL);return e||_e(!1),e}function uM(t){let e=E.useContext(_r);return e||_e(!1),e}function VS(t){let e=uM(),n=e.matches[e.matches.length-1];return n.route.id||_e(!1),n.route.id}function cM(){var t;let e=E.useContext(bS),n=lM(zo.UseRouteError),r=VS(zo.UseRouteError);return e||((t=n.errors)==null?void 0:t[r])}function hM(){let{router:t}=aM(of.UseNavigateStable),e=VS(zo.UseNavigateStable),n=E.useRef(!1);return FS(()=>{n.current=!0}),E.useCallback(function(i,s){s===void 0&&(s={}),n.current&&(typeof i=="number"?t.navigate(i):t.navigate(i,wu({fromRouteId:e},s)))},[t,e])}function dM(t){let{to:e,replace:n,state:r,relative:i}=t;Ss()||_e(!1);let{matches:s}=E.useContext(_r),{pathname:o}=_a(),a=Ea(),l=xm(e,Rm(s).map(c=>c.pathnameBase),o,i==="path"),u=JSON.stringify(l);return E.useEffect(()=>a(JSON.parse(u),{replace:n,state:r,relative:i}),[a,u,i,n,r]),null}function mi(t){_e(!1)}function fM(t){let{basename:e="/",children:n=null,location:r,navigationType:i=Kn.Pop,navigator:s,static:o=!1}=t;Ss()&&_e(!1);let a=e.replace(/^\/*/,"/"),l=E.useMemo(()=>({basename:a,navigator:s,static:o}),[a,s,o]);typeof r=="string"&&(r=_s(r));let{pathname:u="/",search:c="",hash:h="",state:d=null,key:p="default"}=r,y=E.useMemo(()=>{let w=Nm(u,a);return w==null?null:{location:{pathname:w,search:c,hash:h,state:d,key:p},navigationType:i}},[a,u,c,h,d,p,i]);return y==null?null:E.createElement(Es.Provider,{value:l},E.createElement(Ic.Provider,{children:n,value:y}))}function pM(t){let{children:e,location:n}=t;return eM(af(e),n)}var Cv;(function(t){t[t.pending=0]="pending",t[t.success=1]="success",t[t.error=2]="error"})(Cv||(Cv={}));new Promise(()=>{});function af(t,e){e===void 0&&(e=[]);let n=[];return E.Children.forEach(t,(r,i)=>{if(!E.isValidElement(r))return;let s=[...e,i];if(r.type===E.Fragment){n.push.apply(n,af(r.props.children,s));return}r.type!==mi&&_e(!1),!r.props.index||!r.props.children||_e(!1);let o={id:r.props.id||s.join("-"),caseSensitive:r.props.caseSensitive,element:r.props.element,Component:r.props.Component,index:r.props.index,path:r.props.path,loader:r.props.loader,action:r.props.action,errorElement:r.props.errorElement,ErrorBoundary:r.props.ErrorBoundary,hasErrorBoundary:r.props.ErrorBoundary!=null||r.props.errorElement!=null,shouldRevalidate:r.props.shouldRevalidate,handle:r.props.handle,lazy:r.props.lazy};r.props.children&&(o.children=af(r.props.children,s)),n.push(o)}),n}/** + * React Router DOM v6.12.0 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function lf(){return lf=Object.assign?Object.assign.bind():function(t){for(var e=1;e=0)&&(n[i]=t[i]);return n}function gM(t){return!!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey)}function yM(t,e){return t.button===0&&(!e||e==="_self")&&!gM(t)}const vM=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset"];function wM(t){let{basename:e,children:n,window:r}=t,i=E.useRef();i.current==null&&(i.current=CL({window:r,v5Compat:!0}));let s=i.current,[o,a]=E.useState({action:s.action,location:s.location}),l=E.useCallback(u=>{"startTransition"in oI?E.startTransition(()=>a(u)):a(u)},[a]);return E.useLayoutEffect(()=>s.listen(l),[s,l]),E.createElement(fM,{basename:e,children:n,location:o.location,navigationType:o.action,navigator:s})}const _M=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",EM=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,BS=E.forwardRef(function(e,n){let{onClick:r,relative:i,reloadDocument:s,replace:o,state:a,target:l,to:u,preventScrollReset:c}=e,h=mM(e,vM),{basename:d}=E.useContext(Es),p,y=!1;if(typeof u=="string"&&EM.test(u)&&(p=u,_M))try{let f=new URL(window.location.href),g=u.startsWith("//")?new URL(f.protocol+u):new URL(u),_=Nm(g.pathname,d);g.origin===f.origin&&_!=null?u=_+g.search+g.hash:y=!0}catch{}let w=JL(u,{relative:i}),S=SM(u,{replace:o,state:a,target:l,preventScrollReset:c,relative:i});function m(f){r&&r(f),f.defaultPrevented||S(f)}return E.createElement("a",lf({},h,{href:p||w,onClick:y||s?r:m,ref:n,target:l}))});var Nv;(function(t){t.UseScrollRestoration="useScrollRestoration",t.UseSubmitImpl="useSubmitImpl",t.UseFetcher="useFetcher"})(Nv||(Nv={}));var Rv;(function(t){t.UseFetchers="useFetchers",t.UseScrollRestoration="useScrollRestoration"})(Rv||(Rv={}));function SM(t,e){let{target:n,replace:r,state:i,preventScrollReset:s,relative:o}=e===void 0?{}:e,a=Ea(),l=_a(),u=jS(t,{relative:o});return E.useCallback(c=>{if(yM(c,n)){c.preventDefault();let h=r!==void 0?r:vu(l)===vu(u);a(t,{replace:h,state:i,preventScrollReset:s,relative:o})}},[l,a,u,r,i,n,t,s,o])}const IM=({onPostSuccess:t})=>{const[e,n]=E.useState(""),[r,i]=E.useState(""),[s,o]=E.useState(""),a=Ea();E.useEffect(()=>{St.currentUser||a("/login")},[a]);const l=pc(ce,"posts"),u=async()=>{if(e===""||r==="")alert("Fill up the fields");else try{await lD(l,{title:e,postContent:r,skills:s,contact:St.currentUser.displayName,author:{name:St.currentUser.displayName,id:St.currentUser.uid}}),t()}catch(c){console.log(c)}};return v.jsx("div",{className:"createPost-container",children:v.jsxs("div",{className:"postForm",children:[v.jsx("h1",{className:"createPost-heading",children:" Create a Project Post"}),v.jsxs("div",{className:"createPost-split-container",children:[v.jsxs("div",{className:"split-container",children:[" ",v.jsxs("div",{className:"mb-3",children:[v.jsx("label",{htmlFor:"title",className:"form-label",children:" Title:"}),v.jsx("input",{type:"text",placeholder:"Project Title",className:"form-control",onChange:c=>n(c.target.value)})]}),v.jsxs("div",{className:"mb-3",children:[v.jsx("label",{htmlFor:"posts",className:"form-label",children:"Description:"}),v.jsx("textarea",{placeholder:"Elaborate on your idea!",className:"form-control",onChange:c=>i(c.target.value)})]})]}),v.jsxs("div",{className:"split-container",children:[" ",v.jsxs("div",{className:"mb-3",children:[v.jsx("label",{htmlFor:"tags",className:"form-label",children:"Skills Required:"}),v.jsx("textarea",{placeholder:"Technical Skills needed for your project...",className:"form-control",onChange:c=>o(c.target.value)})]})]})]}),v.jsx("div",{children:v.jsx("button",{className:"publish-button",onClick:u,children:"PUBLISH"})})]})})},TM=()=>{const[t,e]=E.useState(void 0),[n,r]=E.useState(void 0),[i,s]=E.useState(void 0),[o,a]=E.useState(void 0),[l,u]=E.useState(void 0),[c,h]=E.useState(void 0),[d,p]=E.useState(void 0),[y,w]=E.useState(void 0),S=St.currentUser.uid;E.useEffect(()=>{(async()=>{const g=ke(ce,"bio",S),_=await os(g),k=ke(ce,"users",S),R=await os(k);_.exists()?(e(_.data().eduLevel),r(_.data().courseOfStudy),s(_.data().skills),a(_.data().school)):(e(void 0),r(void 0),s(void 0),a(void 0)),R.exists()?(u(R.data().email),h(R.data().photoURL),p(R.data().displayName),w(R.data().myname)):(u(void 0),p(void 0),w(void 0),h(void 0))})()},[S]);const m=async()=>{const f=ke(ce,"bio",S);await pu(f,{eduLevel:t,courseOfStudy:n,skills:i,school:o},{merge:!0})};return v.jsxs("div",{children:[v.jsxs("div",{children:[v.jsx("img",{src:c,alt:"",style:{width:"100px",height:"100px",borderRadius:"50%",objectFit:"cover"}}),v.jsxs("h6",{children:[" ",v.jsx("strong",{children:" User Name: "})," ",d," "]}),v.jsxs("h6",{children:[" ",v.jsx("strong",{children:" Name: "})," ",y," "]}),v.jsxs("h6",{children:[" ",v.jsx("strong",{children:" Email: "})," ",l," "]})," ",v.jsx("br",{})]}),v.jsx("textarea",{value:t||"",onChange:f=>e(f.target.value),rows:5}),v.jsx("input",{type:"text",value:n||"",onChange:f=>r(f.target.value),placeholder:"Course of Study"}),v.jsx("input",{type:"text",value:i||"",onChange:f=>s(f.target.value),placeholder:"Skills"}),v.jsx("input",{type:"text",value:o||"",onChange:f=>a(f.target.value),placeholder:"School"}),v.jsx("button",{onClick:m,children:"Save"})]})},kM=()=>{const[t,e]=E.useState(!0),[n,r]=E.useState(!0),[i,s]=E.useState(!1),[o,a]=E.useState(!1),l=()=>{e(!t),r(!n),s(!1),a(!1)},u=()=>{s(!i),a(!1)},c=()=>{a(!0),s(!1),e(!1),r(!1)},h=()=>{e(!0),r(!0),s(!1),a(!1)},d=()=>{St.signOut().then(()=>{}).catch(y=>{console.log(y)})},{currentUser:p}=E.useContext(On);return v.jsxs("div",{className:"home",children:[v.jsxs("div",{className:"top-navigation-bar",children:[v.jsxs("div",{className:"left-top-navigation-bar",children:[v.jsx("img",{className:"collab-logo",src:"src/images/ColLAB__1_-removebg-preview.png"}),v.jsxs("div",{className:"greeting-text",children:["Hello, ",p.displayName,"!"]})]}),v.jsxs("div",{className:"center-top-navigation-bar",children:[v.jsx("button",{className:"navigation-bar-button",onClick:l,children:n?"Chats":"Home"}),n&&v.jsx("button",{className:"navigation-bar-button",onClick:u,children:i?"Home":"Create Post"}),n&&!i&&v.jsx("button",{className:"navigation-bar-button",onClick:c,children:"Profile"})]}),v.jsx("button",{className:"logout-button",onClick:d,children:"Logout"})]}),v.jsxs("div",{className:"container",children:[!t&&!o&&v.jsx(NO,{}),!t&&!o&&v.jsx(kL,{}),t?i?v.jsx(IM,{onPostSuccess:h}):v.jsx(km,{isAuth:!0,handleShowPosts:l}):null,o&&v.jsx(TM,{})," "]})]})},CM=()=>{const[t,e]=E.useState(!1),n=Ea(),r=async i=>{i.preventDefault();const s=i.target[0].value,o=i.target[1].value;try{await FN(St,s,o),n("/")}catch{e(!0)}};return v.jsx("div",{className:"login-container",children:v.jsxs("div",{className:"login-wrapper",children:[v.jsx("img",{className:"colLAB-logo",src:"src/images/ColLAB__1_-removebg-preview.png"}),v.jsx("span",{className:"login-caption",children:"collaborate today!"}),v.jsx("span",{className:"login-title",children:"Log In"}),v.jsxs("form",{className:"login-form",onSubmit:r,children:[v.jsx("input",{type:"email",placeholder:"Email"}),v.jsx("input",{type:"password",placeholder:"Password"}),v.jsx("button",{className:"login-button",children:"Login"}),t&&v.jsx("span",{className:"error-msg",children:"*Something went wrong"})]}),v.jsxs("p",{children:["Don't have an account? ",v.jsx(BS,{to:"/register",children:" Register"})," "]})]})})},NM=()=>{const[t,e]=E.useState(!1),n=Ea(),[r,i]=E.useState(!1),[s,o]=E.useState("");E.useState("");const[a,l]=E.useState(!1),u=async()=>{const h=GE(pc(ce,"users"),QE("displayName","==",s));try{(await vm(h)).empty?l(!1):l(!0)}catch{e(!0)}},c=async h=>{h.preventDefault();const d=h.target[0].value,p=h.target[1].value,y=h.target[2].value,w=h.target[3].value,S=h.target[4].files[0];if(!a)try{const m=await bN(St,y,w);await jN(m.user),i(!0);const f=TS(kS,d),g=SS(f,S);g.on("state_changed",()=>{},_=>{e(!0)},()=>{IS(g.snapshot.ref).then(async _=>{await BN(m.user,{displayName:d,photoURL:_}),await pu(ke(ce,"users",m.user.uid),{uid:m.user.uid,displayName:d,email:y,photoURL:_,myname:p}),await pu(ke(ce,"userChats",m.user.uid),{}),setTimeout(()=>{const k=St.currentUser;k&&!k.emailVerified&&WN(k).catch(R=>{alert("as a result of failed to verify your email your account bas been deleted")})},1*60*1e3)})})}catch{e(!0)}};return E.useEffect(()=>{(async()=>{const d=St.currentUser;if(d){const p=await os(ke(ce,"users",d.uid));if(p.exists()){const{emailVerified:y}=p.data();y&&n("/")}}})()},[n]),v.jsx("div",{className:"register-container",children:v.jsxs("div",{className:"register-wrapper",children:[v.jsx("img",{className:"colLAB-logo",src:"src/images/ColLAB__1_-removebg-preview.png"}),v.jsx("span",{className:"register-caption",children:"collaborate today!"}),v.jsx("span",{className:"register-title",children:"Register"}),v.jsxs("form",{className:"register-form",onSubmit:c,children:[v.jsx("input",{type:"text",placeholder:"Username",name:"displayName",onKeyDown:u,onChange:h=>o(h.target.value),value:s}),a&&v.jsx("span",{children:"Username already exists."}),v.jsx("input",{type:"text",placeholder:"Name"}),v.jsx("input",{type:"email",placeholder:"Email"}),v.jsx("input",{type:"Password",placeholder:"password"}),v.jsx("input",{style:{display:"none"},type:"file",id:"file"}),v.jsx("label",{className:"profile-pic-button",htmlFor:"file",children:v.jsxs("div",{className:"profile-pic-container",children:[v.jsx("img",{className:"profile-pic-icon",src:"src/images/add.png"}),v.jsx("span",{className:"profile-pic-caption",children:"Add an avatar"})]})}),v.jsx("button",{className:"register-button",children:"Register"}),t&&v.jsx("span",{className:"error-msg",children:"*Something went wrong"}),r&&v.jsx("span",{children:"A verification email has been sent to your email address. Please verify your email before logging in."})]}),v.jsxs("p",{children:["Already have an account? ",v.jsx(BS,{to:"/login",children:" LOGIN"})]})]})})};function RM(){const{currentUser:t}=E.useContext(On),e=({children:n})=>t?n:v.jsx(dM,{to:"/login"});return v.jsx(wM,{children:v.jsx(pM,{children:v.jsxs(mi,{path:"/",children:[v.jsx(mi,{index:!0,element:v.jsx(e,{children:v.jsx(kM,{})})}),v.jsx(mi,{path:"login",element:v.jsx(CM,{})}),v.jsx(mi,{path:"register",element:v.jsx(NM,{})}),v.jsx(mi,{path:"post",element:v.jsx(km,{})})]})})})}kh.createRoot(document.getElementById("root")).render(v.jsx(SO,{children:v.jsx(TO,{children:v.jsx(bv.StrictMode,{children:v.jsx(RM,{})})})})); diff --git a/colLAB-FIN/dist/index.html b/colLAB-FIN/dist/index.html index 73f597c..139ed64 100644 --- a/colLAB-FIN/dist/index.html +++ b/colLAB-FIN/dist/index.html @@ -3,9 +3,12 @@ - React App - - + ColLAB - Collaborate Now! + + + + +
diff --git a/colLAB-FIN/dist/style.css b/colLAB-FIN/dist/style.css new file mode 100644 index 0000000..5998ab4 --- /dev/null +++ b/colLAB-FIN/dist/style.css @@ -0,0 +1,546 @@ +body { + background-color: #075e54; + padding-top: 100px; +} + +.login-container { + display: flex; + align-items: center; + vertical-align: middle; + height: 500px; + justify-content: center; +} +.login-container .login-wrapper { + display: flex; + flex-direction: column; + background-color: lightgray; + align-items: center; + padding: 20px 60px; + gap: 10px; + border-radius: 10px; +} +.login-container .login-wrapper .colLAB-logo { + width: 120px; +} +.login-container .login-wrapper .login-caption { + font-family: Roboto, Arial; + font-weight: bold; + font-style: italic; + margin-top: -30px; + margin-bottom: 10px; +} +.login-container .login-wrapper .login-title { + font-family: Roboto, Arial; + font-size: 30px; + font-weight: bold; + margin-bottom: 15px; + color: #075e54; +} +.login-container .login-wrapper .login-form { + display: flex; + flex-direction: column; + gap: 15px; + align-items: center; +} +.login-container .login-wrapper .login-form input { + background-color: transparent; + border: none; + border-bottom: 3px solid #075e54; + width: 250px; + height: 35px; +} +.login-container .login-wrapper .login-form input::placeholder { + color: black; + text-align: center; + opacity: 0.7; +} +.login-container .login-wrapper .login-form .login-button { + border-radius: 5px; + background-color: #075e54; + color: white; + font-size: 22px; + font-family: Roboto, Arial; + font-weight: bold; + width: 120px; +} +.login-container .login-wrapper .login-form .error-msg { + color: blue; +} + +.register-container { + display: flex; + align-items: center; + vertical-align: middle; + height: 550px; + justify-content: center; +} +.register-container .register-wrapper { + display: flex; + flex-direction: column; + background-color: lightgray; + align-items: center; + padding: 20px 60px; + gap: 10px; + border-radius: 10px; +} +.register-container .register-wrapper .colLAB-logo { + width: 120px; +} +.register-container .register-wrapper .register-caption { + font-family: Roboto, Arial; + font-weight: bold; + font-style: italic; + margin-top: -30px; + margin-bottom: 10px; +} +.register-container .register-wrapper .register-title { + font-family: Roboto, Arial; + font-size: 30px; + font-weight: bold; + margin-bottom: 15px; + color: #075e54; +} +.register-container .register-wrapper .register-form { + display: flex; + flex-direction: column; + gap: 15px; + align-items: center; +} +.register-container .register-wrapper .register-form input { + background-color: transparent; + border: none; + border-bottom: 3px solid #075e54; + width: 250px; + height: 35px; +} +.register-container .register-wrapper .register-form input::placeholder { + color: black; + text-align: center; + opacity: 0.7; +} +.register-container .register-wrapper .register-form .profile-pic-button:hover { + cursor: pointer; +} +.register-container .register-wrapper .register-form .profile-pic-container { + display: flex; + flex-direction: row; + align-items: center; +} +.register-container .register-wrapper .register-form .profile-pic-container .profile-pic-icon { + width: 50px; + border-radius: 80px; + margin-right: 10px; +} +.register-container .register-wrapper .register-form .profile-pic-container .profile-pic-caption:hover { + text-decoration: underline; +} +.register-container .register-wrapper .register-form .profile-pic-icon { + width: 100px; +} +.register-container .register-wrapper .register-form .register-button { + border-radius: 5px; + border: none; + background-color: #075e54; + color: white; + font-size: 22px; + font-family: Roboto, Arial; + font-weight: bold; + width: 120px; +} +.register-container .register-wrapper .error-msg { + color: red; +} + +.top-navigation-bar { + display: flex; + flex-direction: row; + justify-content: space-between; + height: 80px; + background-color: white; + align-items: center; + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 100; +} +.top-navigation-bar .left-top-navigation-bar { + display: flex; + align-items: center; + justify-self: flex-start; + width: 222px; +} +.top-navigation-bar .collab-logo { + width: 70px; + margin-left: 15px; +} +.top-navigation-bar .greeting-text { + font-family: Roboto, Arial, sans-serif; + font-weight: bold; + font-size: 22px; + padding-left: 15px; + white-space: nowrap; + color: #128c7e; +} +.top-navigation-bar .center-top-navigation-bar { + justify-self: center; + white-space: nowrap; + align-self: center; +} +.top-navigation-bar .center-top-navigation-bar .navigation-bar-button { + border: none; + background-color: transparent; + margin-left: 15px; + margin-right: 15px; + font-size: 22px; +} +.top-navigation-bar .center-top-navigation-bar .navigation-bar-button:hover { + background-color: #075e54; + opacity: 0.7; + color: white; + border-radius: 5px; + font-weight: bold; +} +.top-navigation-bar .logout-button { + border: none; + background-color: transparent; + color: red; + margin-right: 10px; + margin-left: 100px; +} +.top-navigation-bar .logout-button:hover { + background-color: red; + color: white; + font-weight: bold; + border-radius: 5px; +} + +/** + @mixin mobile { + @media screen and (max-width: 480px) { + @content; + } + } + @mixin tablet { + @media screen and (max-width: 768px) { + @content; + } + } + @mixin laptop { + @media screen and (max-width: 1200px) { + @content; + } + } + + .formContainer { + background-color: #a7bcff; + height: 100vh; + display: flex; + align-items: center; + justify-content: center; + + .formWrapper { + background-color: white; + padding: 20px 60px; + border-radius: 10px; + display: flex; + flex-direction: column; + gap: 10px; + align-items: center; + + .logo { + color: #5d5b8d; + font-weight: bold; + font-size: 24px; + + } + + .title { + color: #5d5b8d; + font-size: 12px; + } + + form { + display: flex; + flex-direction: column; + gap: 15px; + + input { + padding: 15px; + border: none; + width: 250px; + border-bottom: 1px solid #a7bcff; + &::placeholder { + color: rgb(175, 175, 175); + } + } + + button { + background-color: #7b96ec; + color: white; + padding: 10px; + font-weight: bold; + border: none; + cursor: pointer; + } + + label { + display: flex; + align-items: center; + gap: 10px; + color: #8da4f1; + font-size: 12px; + cursor: pointer; + + img { + width: 32px; + } + } + } + p { + color: #5d5b8d; + font-size: 12px; + margin-top: 10px; + } + } + } + + .home { + background-color: #a7bcff; + height: 100vh; + display: flex; + align-items: center; + justify-content: center; + + .container { + border: 1px solid white; + border-radius: 10px; + width: 65%; + height: 80%; + display: flex; + overflow: hidden; + @include tablet { + width: 90%; + } + + .sidebar { + flex: 1; + background-color: #3e3c61; + position: relative; + + .navbar { + display: flex; + align-items: center; + background-color: #2f2d52; + height: 50px; + padding: 10px; + justify-content: space-between; + color: #ddddf7; + + .logo { + font-weight: bold; + @include tablet { + display: none; + } + } + + .user { + display: flex; + gap: 10px; + + img { + background-color: #ddddf7; + height: 24px; + width: 24px; + border-radius: 50%; + object-fit: cover; + } + + button { + background-color: #5d5b8d; + color: #ddddf7; + font-size: 10px; + border: none; + cursor: pointer; + @include tablet { + position: absolute; + bottom: 10px; + } + } + } + } + .search { + border-bottom: 1px solid gray; + + .searchForm { + padding: 10px; + + input { + background-color: transparent; + border: none; + color: white; + outline: none; + + &::placeholder { + color: lightgray; + } + } + } + } + + .userChat { + padding: 10px; + display: flex; + align-items: center; + gap: 10px; + color: white; + cursor: pointer; + + &:hover { + background-color: #2f2d52; + } + + img { + width: 50px; + height: 50px; + border-radius: 50%; + object-fit: cover; + } + + .userChatInfo { + span { + font-size: 18px; + font-weight: 500; + } + p { + font-size: 14px; + color: lightgray; + } + } + } + } + .chat { + flex: 2; + + .chatInfo { + height: 50px; + background-color: #5d5b8d; + display: flex; + align-items: center; + justify-content: space-between; + padding: 10px; + color: lightgray; + } + + .chatIcons { + display: flex; + gap: 10px; + + img { + height: 24px; + cursor: pointer; + } + } + + .messages { + background-color: #ddddf7; + padding: 10px; + height: calc(100% - 160px); + overflow: scroll; + + .message { + display: flex; + gap: 20px; + margin-bottom: 20px; + + .messageInfo { + display: flex; + flex-direction: column; + color: gray; + font-weight: 300; + + img { + width: 40px; + height: 40px; + border-radius: 50%; + object-fit: cover; + } + } + .messageContent { + max-width: 80%; + display: flex; + flex-direction: column; + gap: 10px; + + p { + background-color: white; + padding: 10px 20px; + border-radius: 0px 10px 10px 10px; + max-width: max-content; + } + + img { + width: 50%; + } + } + + &.owner { + flex-direction: row-reverse; + + .messageContent { + align-items: flex-end; + p { + background-color: #8da4f1; + color: white; + border-radius: 10px 0px 10px 10px; + } + } + } + } + } + + .input { + height: 50px; + background-color: white; + padding: 10px; + display: flex; + align-items: center; + justify-content: space-between; + + input { + width: 100%; + border: none; + outline: none; + color: #2f2d52; + font-size: 18px; + + &::placeholder { + color: lightgray; + } + } + + .send { + display: flex; + align-items: center; + gap: 10px; + + img { + height: 24px; + cursor: pointer; + } + + button { + border: none; + padding: 10px 15px; + color: white; + background-color: #8da4f1; + cursor: pointer; + } + } + } + } + } + } + */ + +/*# sourceMappingURL=style.css.map */ diff --git a/colLAB-FIN/dist/style.css.map b/colLAB-FIN/dist/style.css.map new file mode 100644 index 0000000..ce6a86d --- /dev/null +++ b/colLAB-FIN/dist/style.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../src/style.scss"],"names":[],"mappings":"AAoBA;EACE;EACA;;;AAWF;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAMF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAIF;EACE;;;AAiBV;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAMJ;EACE;;AAIF;EACE;EACA;EACA;;AAEA;EACI;EACA;EACA;;AAIF;EACE;;AAaJ;EACE;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAMN;EACE;;;AAaN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA,OAtPa;;AAyPf;EACE;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;;AAQN;EACE;EACA;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;;;AAiaJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","file":"style.css"} \ No newline at end of file diff --git a/colLAB-FIN/index.html b/colLAB-FIN/index.html index 0c1950e..4cb1121 100644 --- a/colLAB-FIN/index.html +++ b/colLAB-FIN/index.html @@ -3,9 +3,10 @@ - React App + ColLAB - Collaborate Now! + - +
diff --git a/colLAB-FIN/package.json b/colLAB-FIN/package.json index 22c6482..28eb3fd 100644 --- a/colLAB-FIN/package.json +++ b/colLAB-FIN/package.json @@ -6,7 +6,7 @@ "scripts": { "dev": "vite", "start": "vite dev", - "build": "vite build", + "build": " sass src/style.scss public/style.css && vite build", "lint": "eslint src --ext js,jsx --report-unused-disable-directives --max-warnings 0", "preview": "vite preview" }, diff --git a/colLAB-FIN/public/ColLAB.png b/colLAB-FIN/public/ColLAB.png new file mode 100644 index 0000000000000000000000000000000000000000..0cac015a0a25d45451937e25b5bf44cfb104066f GIT binary patch literal 99493 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 Y*BzKEdHb(z5TBR4^f#%$5+>jOAMHjVzyJUM literal 0 HcmV?d00001 diff --git a/colLAB-FIN/public/style.css b/colLAB-FIN/public/style.css new file mode 100644 index 0000000..5998ab4 --- /dev/null +++ b/colLAB-FIN/public/style.css @@ -0,0 +1,546 @@ +body { + background-color: #075e54; + padding-top: 100px; +} + +.login-container { + display: flex; + align-items: center; + vertical-align: middle; + height: 500px; + justify-content: center; +} +.login-container .login-wrapper { + display: flex; + flex-direction: column; + background-color: lightgray; + align-items: center; + padding: 20px 60px; + gap: 10px; + border-radius: 10px; +} +.login-container .login-wrapper .colLAB-logo { + width: 120px; +} +.login-container .login-wrapper .login-caption { + font-family: Roboto, Arial; + font-weight: bold; + font-style: italic; + margin-top: -30px; + margin-bottom: 10px; +} +.login-container .login-wrapper .login-title { + font-family: Roboto, Arial; + font-size: 30px; + font-weight: bold; + margin-bottom: 15px; + color: #075e54; +} +.login-container .login-wrapper .login-form { + display: flex; + flex-direction: column; + gap: 15px; + align-items: center; +} +.login-container .login-wrapper .login-form input { + background-color: transparent; + border: none; + border-bottom: 3px solid #075e54; + width: 250px; + height: 35px; +} +.login-container .login-wrapper .login-form input::placeholder { + color: black; + text-align: center; + opacity: 0.7; +} +.login-container .login-wrapper .login-form .login-button { + border-radius: 5px; + background-color: #075e54; + color: white; + font-size: 22px; + font-family: Roboto, Arial; + font-weight: bold; + width: 120px; +} +.login-container .login-wrapper .login-form .error-msg { + color: blue; +} + +.register-container { + display: flex; + align-items: center; + vertical-align: middle; + height: 550px; + justify-content: center; +} +.register-container .register-wrapper { + display: flex; + flex-direction: column; + background-color: lightgray; + align-items: center; + padding: 20px 60px; + gap: 10px; + border-radius: 10px; +} +.register-container .register-wrapper .colLAB-logo { + width: 120px; +} +.register-container .register-wrapper .register-caption { + font-family: Roboto, Arial; + font-weight: bold; + font-style: italic; + margin-top: -30px; + margin-bottom: 10px; +} +.register-container .register-wrapper .register-title { + font-family: Roboto, Arial; + font-size: 30px; + font-weight: bold; + margin-bottom: 15px; + color: #075e54; +} +.register-container .register-wrapper .register-form { + display: flex; + flex-direction: column; + gap: 15px; + align-items: center; +} +.register-container .register-wrapper .register-form input { + background-color: transparent; + border: none; + border-bottom: 3px solid #075e54; + width: 250px; + height: 35px; +} +.register-container .register-wrapper .register-form input::placeholder { + color: black; + text-align: center; + opacity: 0.7; +} +.register-container .register-wrapper .register-form .profile-pic-button:hover { + cursor: pointer; +} +.register-container .register-wrapper .register-form .profile-pic-container { + display: flex; + flex-direction: row; + align-items: center; +} +.register-container .register-wrapper .register-form .profile-pic-container .profile-pic-icon { + width: 50px; + border-radius: 80px; + margin-right: 10px; +} +.register-container .register-wrapper .register-form .profile-pic-container .profile-pic-caption:hover { + text-decoration: underline; +} +.register-container .register-wrapper .register-form .profile-pic-icon { + width: 100px; +} +.register-container .register-wrapper .register-form .register-button { + border-radius: 5px; + border: none; + background-color: #075e54; + color: white; + font-size: 22px; + font-family: Roboto, Arial; + font-weight: bold; + width: 120px; +} +.register-container .register-wrapper .error-msg { + color: red; +} + +.top-navigation-bar { + display: flex; + flex-direction: row; + justify-content: space-between; + height: 80px; + background-color: white; + align-items: center; + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 100; +} +.top-navigation-bar .left-top-navigation-bar { + display: flex; + align-items: center; + justify-self: flex-start; + width: 222px; +} +.top-navigation-bar .collab-logo { + width: 70px; + margin-left: 15px; +} +.top-navigation-bar .greeting-text { + font-family: Roboto, Arial, sans-serif; + font-weight: bold; + font-size: 22px; + padding-left: 15px; + white-space: nowrap; + color: #128c7e; +} +.top-navigation-bar .center-top-navigation-bar { + justify-self: center; + white-space: nowrap; + align-self: center; +} +.top-navigation-bar .center-top-navigation-bar .navigation-bar-button { + border: none; + background-color: transparent; + margin-left: 15px; + margin-right: 15px; + font-size: 22px; +} +.top-navigation-bar .center-top-navigation-bar .navigation-bar-button:hover { + background-color: #075e54; + opacity: 0.7; + color: white; + border-radius: 5px; + font-weight: bold; +} +.top-navigation-bar .logout-button { + border: none; + background-color: transparent; + color: red; + margin-right: 10px; + margin-left: 100px; +} +.top-navigation-bar .logout-button:hover { + background-color: red; + color: white; + font-weight: bold; + border-radius: 5px; +} + +/** + @mixin mobile { + @media screen and (max-width: 480px) { + @content; + } + } + @mixin tablet { + @media screen and (max-width: 768px) { + @content; + } + } + @mixin laptop { + @media screen and (max-width: 1200px) { + @content; + } + } + + .formContainer { + background-color: #a7bcff; + height: 100vh; + display: flex; + align-items: center; + justify-content: center; + + .formWrapper { + background-color: white; + padding: 20px 60px; + border-radius: 10px; + display: flex; + flex-direction: column; + gap: 10px; + align-items: center; + + .logo { + color: #5d5b8d; + font-weight: bold; + font-size: 24px; + + } + + .title { + color: #5d5b8d; + font-size: 12px; + } + + form { + display: flex; + flex-direction: column; + gap: 15px; + + input { + padding: 15px; + border: none; + width: 250px; + border-bottom: 1px solid #a7bcff; + &::placeholder { + color: rgb(175, 175, 175); + } + } + + button { + background-color: #7b96ec; + color: white; + padding: 10px; + font-weight: bold; + border: none; + cursor: pointer; + } + + label { + display: flex; + align-items: center; + gap: 10px; + color: #8da4f1; + font-size: 12px; + cursor: pointer; + + img { + width: 32px; + } + } + } + p { + color: #5d5b8d; + font-size: 12px; + margin-top: 10px; + } + } + } + + .home { + background-color: #a7bcff; + height: 100vh; + display: flex; + align-items: center; + justify-content: center; + + .container { + border: 1px solid white; + border-radius: 10px; + width: 65%; + height: 80%; + display: flex; + overflow: hidden; + @include tablet { + width: 90%; + } + + .sidebar { + flex: 1; + background-color: #3e3c61; + position: relative; + + .navbar { + display: flex; + align-items: center; + background-color: #2f2d52; + height: 50px; + padding: 10px; + justify-content: space-between; + color: #ddddf7; + + .logo { + font-weight: bold; + @include tablet { + display: none; + } + } + + .user { + display: flex; + gap: 10px; + + img { + background-color: #ddddf7; + height: 24px; + width: 24px; + border-radius: 50%; + object-fit: cover; + } + + button { + background-color: #5d5b8d; + color: #ddddf7; + font-size: 10px; + border: none; + cursor: pointer; + @include tablet { + position: absolute; + bottom: 10px; + } + } + } + } + .search { + border-bottom: 1px solid gray; + + .searchForm { + padding: 10px; + + input { + background-color: transparent; + border: none; + color: white; + outline: none; + + &::placeholder { + color: lightgray; + } + } + } + } + + .userChat { + padding: 10px; + display: flex; + align-items: center; + gap: 10px; + color: white; + cursor: pointer; + + &:hover { + background-color: #2f2d52; + } + + img { + width: 50px; + height: 50px; + border-radius: 50%; + object-fit: cover; + } + + .userChatInfo { + span { + font-size: 18px; + font-weight: 500; + } + p { + font-size: 14px; + color: lightgray; + } + } + } + } + .chat { + flex: 2; + + .chatInfo { + height: 50px; + background-color: #5d5b8d; + display: flex; + align-items: center; + justify-content: space-between; + padding: 10px; + color: lightgray; + } + + .chatIcons { + display: flex; + gap: 10px; + + img { + height: 24px; + cursor: pointer; + } + } + + .messages { + background-color: #ddddf7; + padding: 10px; + height: calc(100% - 160px); + overflow: scroll; + + .message { + display: flex; + gap: 20px; + margin-bottom: 20px; + + .messageInfo { + display: flex; + flex-direction: column; + color: gray; + font-weight: 300; + + img { + width: 40px; + height: 40px; + border-radius: 50%; + object-fit: cover; + } + } + .messageContent { + max-width: 80%; + display: flex; + flex-direction: column; + gap: 10px; + + p { + background-color: white; + padding: 10px 20px; + border-radius: 0px 10px 10px 10px; + max-width: max-content; + } + + img { + width: 50%; + } + } + + &.owner { + flex-direction: row-reverse; + + .messageContent { + align-items: flex-end; + p { + background-color: #8da4f1; + color: white; + border-radius: 10px 0px 10px 10px; + } + } + } + } + } + + .input { + height: 50px; + background-color: white; + padding: 10px; + display: flex; + align-items: center; + justify-content: space-between; + + input { + width: 100%; + border: none; + outline: none; + color: #2f2d52; + font-size: 18px; + + &::placeholder { + color: lightgray; + } + } + + .send { + display: flex; + align-items: center; + gap: 10px; + + img { + height: 24px; + cursor: pointer; + } + + button { + border: none; + padding: 10px 15px; + color: white; + background-color: #8da4f1; + cursor: pointer; + } + } + } + } + } + } + */ + +/*# sourceMappingURL=style.css.map */ diff --git a/colLAB-FIN/public/style.css.map b/colLAB-FIN/public/style.css.map new file mode 100644 index 0000000..ce6a86d --- /dev/null +++ b/colLAB-FIN/public/style.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../src/style.scss"],"names":[],"mappings":"AAoBA;EACE;EACA;;;AAWF;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAMF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAIF;EACE;;;AAiBV;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAMJ;EACE;;AAIF;EACE;EACA;EACA;;AAEA;EACI;EACA;EACA;;AAIF;EACE;;AAaJ;EACE;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAMN;EACE;;;AAaN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA,OAtPa;;AAyPf;EACE;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;;AAQN;EACE;EACA;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;;;AAiaJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","file":"style.css"} \ No newline at end of file diff --git a/colLAB-FIN/src/App.jsx b/colLAB-FIN/src/App.jsx index 1b45268..4f757c2 100644 --- a/colLAB-FIN/src/App.jsx +++ b/colLAB-FIN/src/App.jsx @@ -2,7 +2,8 @@ import { Home } from "./pages/Home"; import { Login } from "./pages/Login"; import { Register } from "./pages/Register"; import { BrowserRouter as Router,Route,Routes, Navigate,Link } from "react-router-dom"; -import "./style.scss" +//import "../public/style.css"; +import "../src/pages/PostPages/postcss.css" import { useContext, useState } from "react"; import { AuthContext } from "./context/AuthContext"; import Posts from "./pages/Posts"; diff --git a/colLAB-FIN/src/components/Chat.jsx b/colLAB-FIN/src/components/Chat.jsx index f3de419..fe83c78 100644 --- a/colLAB-FIN/src/components/Chat.jsx +++ b/colLAB-FIN/src/components/Chat.jsx @@ -8,6 +8,7 @@ import { ChatContext } from '../context/ChatContext' import Posts from '../pages/Posts' import { ShowBio } from './ShowBio' //import { AuthContext } from '../context/AuthContext' + const Chat = () => { const {data} = useContext(ChatContext); @@ -24,21 +25,40 @@ const Chat = () => { }; return (
+ + {/* TOP HALF */}
- {data.user?.displayName} - {data.showInput && } -
- {/* +
+ + {data.user?.displayName} +
+ + {data.showInput && + } + {/*
+ - */} -
+ +
*/}
+ + {/* BOTTOM HALF */} + {data.showInput && } + {showPosts && } - {showBioPopup &&
- - + + {showBioPopup && + +
+ + + + + + +
}
diff --git a/colLAB-FIN/src/components/Chats.jsx b/colLAB-FIN/src/components/Chats.jsx index 21cd054..5f2131a 100644 --- a/colLAB-FIN/src/components/Chats.jsx +++ b/colLAB-FIN/src/components/Chats.jsx @@ -40,11 +40,11 @@ return ( const { text } = lastMessage || {}; return ( -
handleSelect(userInfo)}> - -
- {displayName} -

{text}

+
handleSelect(userInfo)}> + +
+ {displayName} +

{text}

); diff --git a/colLAB-FIN/src/components/InputMessages.jsx b/colLAB-FIN/src/components/InputMessages.jsx index 38ffc5f..8375b21 100644 --- a/colLAB-FIN/src/components/InputMessages.jsx +++ b/colLAB-FIN/src/components/InputMessages.jsx @@ -73,16 +73,22 @@ const InputMessages = () => { }; return ( -
- setText(e.target.value)} value={text}/> -
- - setImage(e.target.files[0]) }/> - - +
+ + setText(e.target.value)} value={text}/> + +
+ {/* */} + + setImage(e.target.files[0]) }/> + + + +
+
) diff --git a/colLAB-FIN/src/components/Message.jsx b/colLAB-FIN/src/components/Message.jsx index 9cd4380..68144a5 100644 --- a/colLAB-FIN/src/components/Message.jsx +++ b/colLAB-FIN/src/components/Message.jsx @@ -1,6 +1,8 @@ import React, { useContext,useEffect,useRef } from 'react' import { AuthContext } from '../context/AuthContext' import { ChatContext } from '../context/ChatContext' + + const Message = ({message}) => { const {currentUser} = useContext(AuthContext); const {data} = useContext(ChatContext); @@ -31,19 +33,23 @@ const Message = ({message}) => { return ( -
+ + +
- {getTimeString()}
-

{message.text}

- {message.image && } - +

{message.text}

+ {message.image && + }
+ + ) } diff --git a/colLAB-FIN/src/components/Navbar.jsx b/colLAB-FIN/src/components/Navbar.jsx index 6be6e19..ac6db00 100644 --- a/colLAB-FIN/src/components/Navbar.jsx +++ b/colLAB-FIN/src/components/Navbar.jsx @@ -6,27 +6,28 @@ const Navbar = () => { const { currentUser } = useContext(AuthContext); - const handleSignOut = () => { - auth - .signOut() - .then(() => { - // Handle sign out success - }) - .catch((error) => { - // Handle sign out error - console.log(error); - }); - }; + // const handleSignOut = () => { + // auth + // .signOut() + // .then(() => { + // // Handle sign out success + // }) + // .catch((error) => { + // // Handle sign out error + // console.log(error); + // }); + // }; return (
- CHAT + CHATS + {currentUser && ( -
- - {currentUser.displayName} - +
+ @{currentUser.displayName} + + {/* */}
)} diff --git a/colLAB-FIN/src/components/Search.jsx b/colLAB-FIN/src/components/Search.jsx index 3801c22..53148c0 100644 --- a/colLAB-FIN/src/components/Search.jsx +++ b/colLAB-FIN/src/components/Search.jsx @@ -3,6 +3,8 @@ import {db} from "../firebase" import { collection, doc, getDoc, getDocs, query, serverTimestamp, setDoc, updateDoc, where } from 'firebase/firestore'; import {AuthContext} from "../context/AuthContext" import { ChatContext } from '../context/ChatContext'; + + const Search = () => { const [username,setUsername] = useState(""); const [user,setUser] = useState(null); @@ -79,17 +81,21 @@ const Search = () => { return (
-
- + setUsername(e.target.value)} value={username} />
+ {err && Not found} - { user &&
- -
+ + { user && +
+ +
{user.displayName}
} diff --git a/colLAB-FIN/src/components/ShowBio.jsx b/colLAB-FIN/src/components/ShowBio.jsx index 84d544b..69905a0 100644 --- a/colLAB-FIN/src/components/ShowBio.jsx +++ b/colLAB-FIN/src/components/ShowBio.jsx @@ -1,35 +1,63 @@ -import React, { useEffect, useState } from "react"; -import { doc, getDoc } from "firebase/firestore"; -import { db } from "../firebase"; +import React, { useEffect, useState } from 'react'; +import { doc, getDoc } from 'firebase/firestore'; +import { db } from '../firebase'; export const ShowBio = ({ user }) => { - const [bio, setBio] = useState(""); - const [courseOfStudy, setCourseOfStudy] = useState(""); - const [skills, setSkills] = useState(""); + const [eduLevel, setEduLevel] = useState(''); + const [courseOfStudy, setCourseOfStudy] = useState(''); + const [skills, setSkills] = useState(''); + const [school, setSchool] = useState(''); + const [email, setEmail] = useState(''); + const [photo, setPhoto] = useState(''); + const [name, setName] = useState(''); + const [userName, setUserName] = useState(''); + useEffect(() => { const fetchBio = async () => { try { - const docRef = doc(db, "bio", user); + const docRef = doc(db, 'bio', user); const docSnapshot = await getDoc(docRef); + const userRef = doc(db, 'users', user); + const userSnapshot = await getDoc(userRef); + if (docSnapshot.exists()) { - const bioData = docSnapshot.data().content; + const eduData = docSnapshot.data().eduLevel; const courseOfStudyData = docSnapshot.data().courseOfStudy; const skillsData = docSnapshot.data().skills; + const schoolName = docSnapshot.data().school; - setBio(bioData); + + setEduLevel(eduData); setCourseOfStudy(courseOfStudyData); setSkills(skillsData); + setSchool(schoolName); //console.log(user); + } else { - setBio("No bio available"); - setCourseOfStudy("No course details available"); - setSkills("No skills were updated"); + setEduLevel('No bio available'); + setCourseOfStudy('No course details available'); + setSkills('No were skills updated'); + setSchool("No school name updated") } + + if(userSnapshot.exists()){ + const emailId = userSnapshot.data().email; + const photoURL = userSnapshot.data().photoURL; + const displayName = userSnapshot.data().displayName; + const Name = userSnapshot.data().myname; + + setEmail(emailId); + setPhoto(photoURL); + setUserName(displayName); + setName(Name); + + } + } catch (error) { - console.error("Error fetching bio:", error); + console.error('Error fetching bio:', error); } }; @@ -37,33 +65,46 @@ export const ShowBio = ({ user }) => { }, [user]); return ( +
-
-
- Bio: -
-
{bio}

-
- Course of Study: -
-
- {courseOfStudy} -
{" "} -
-
- Skills: -
-
{skills}
+
User Name: {userName}
+
Name: {name}
+
Email: {email}

+
Education Level: {eduLevel}
+
Course of Study: {courseOfStudy}
+
Skills: {skills}
+
School: {school}
+ +
); + }; + + + + /*import React, { useEffect, useState } from 'react'; import { doc, getDoc } from 'firebase/firestore'; import { db } from '../firebase'; export const ShowBio = ({ user }) => { const [bio, setBio] = useState(''); + const [courseOfStudy, setCourseOfStudy] = useState(''); + const [skills, setSkills] = useState(''); + const [email, setEmail] = useState(''); + const [photo, setPhoto] = useState(''); + const [name, setName] = useState(''); useEffect(() => { const fetchBio = async () => { @@ -71,13 +112,29 @@ export const ShowBio = ({ user }) => { const docRef = doc(db, 'bio', user); const docSnapshot = await getDoc(docRef); - if (docSnapshot.exists()) { + const userRef = doc(db, 'users', user); + const userSnapshot = await getDoc(userRef); + + if (docSnapshot.exists() && userSnapshot.exists()) { const bioData = docSnapshot.data().content; + const courseOfStudyData = docSnapshot.data().courseOfStudy; + const skillsData = docSnapshot.data().skills; + const emailId = userSnapshot.data().email; + const photoURL = userSnapshot.data().photoURL; + const displayName = userSnapshot.data().displayName; + + setBio(bioData); - console.log(user); + setCourseOfStudy(courseOfStudyData); + setSkills(skillsData); + setEmail(emailId); + setPhoto(photoURL); + setName(displayName); } else { - setBio('No bio available'); + setBio('No Education Level available'); + setCourseOfStudy('No course details available'); + setSkills('No were skills updated'); } } catch (error) { console.error('Error fetching bio:', error); @@ -87,6 +144,25 @@ export const ShowBio = ({ user }) => { fetchBio(); }, [user]); - return
{bio}
; + return ( +
+
+ Name: {name}
+ Email: {email}
+
+
Bio: {bio}
+
Course of Study: {courseOfStudy}
+
Skills: {skills}
+
+ ); }; -*/ +*/ \ No newline at end of file diff --git a/colLAB-FIN/src/components/Sidebar.jsx b/colLAB-FIN/src/components/Sidebar.jsx index ab674e2..fcb81bd 100644 --- a/colLAB-FIN/src/components/Sidebar.jsx +++ b/colLAB-FIN/src/components/Sidebar.jsx @@ -1,14 +1,14 @@ import React from 'react' -import Navbar from "../components/Navbar" -import Search from "../components/Search" -import Chats from "../components/Chats" +import Navbar from "./Navbar" +import Search from "./Search" +import Chats from "./Chats" const Sidebar = () => { return (
- - - + {/*CHATS Wording */} + {/*Search bar for chats*/} + {/*CHATS*/}
) diff --git a/colLAB-FIN/src/images/ColLAB.png b/colLAB-FIN/src/images/ColLAB.png new file mode 100644 index 0000000000000000000000000000000000000000..0cac015a0a25d45451937e25b5bf44cfb104066f GIT binary patch literal 99493 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 Y*BzKEdHb(z5TBR4^f#%$5+>jOAMHjVzyJUM literal 0 HcmV?d00001 diff --git a/colLAB-FIN/src/pages/Home.jsx b/colLAB-FIN/src/pages/Home.jsx index 8a02b68..a1dc9c2 100644 --- a/colLAB-FIN/src/pages/Home.jsx +++ b/colLAB-FIN/src/pages/Home.jsx @@ -1,9 +1,13 @@ -import React, { useState } from 'react'; +import React, { useState , useContext} from 'react'; import Sidebar from '../components/Sidebar'; import Chat from '../components/Chat'; import Posts from './Posts'; import CreatePost from './PostPages/CreatePost'; import Bio from './PostPages/Bio'; +import Navbar from '../components/Navbar'; +import { auth } from '../firebase'; +import { AuthContext } from '../context/AuthContext'; + export const Home = () => { const [showPosts, setShowPosts] = useState(true); @@ -36,38 +40,72 @@ export const Home = () => { setShowBio(false); }; + const handleSignOut = () => { + auth + .signOut() + .then(() => { + // Handle sign out success + }) + .catch((error) => { + // Handle sign out error + console.log(error); + }); + }; + + const { currentUser } = useContext(AuthContext); + + + + + + + return (
-
- {!showPosts && !showBio && } - {!showPosts && !showBio && } - {showPosts ? ( - showCreate ? ( - - ) : ( - - ) - ) : null } - {showBio && } {/* Display the Bio page when showBio state is true */} +
+
+ {/* */} + +
Hello, {currentUser.displayName}!
+
+ +
-
- {isPostsPage && ( - )} {isPostsPage && !showCreate && ( - )} -
+
+ + + +
+ + +
+ {!showPosts && !showBio && } + {!showPosts && !showBio && } + {showPosts ? ( + showCreate ? ( + + ) : ( + + ) + ) : null } + {showBio && } {/* Display the Bio page when showBio state is true */} +
); diff --git a/colLAB-FIN/src/pages/Login.jsx b/colLAB-FIN/src/pages/Login.jsx index 44a8555..866b122 100644 --- a/colLAB-FIN/src/pages/Login.jsx +++ b/colLAB-FIN/src/pages/Login.jsx @@ -36,18 +36,19 @@ export const Login = () => { }; return ( -
-
- CHAT - Login -
- - - - {err && Something went wrong} - -
-

You dont have an account ? Register

+
+
+ + collaborate today! + Log In +
+ + + + {err && *Something went wrong} + +
+

Don't have an account? Register

) diff --git a/colLAB-FIN/src/pages/PostPages/Bio.jsx b/colLAB-FIN/src/pages/PostPages/Bio.jsx index 1e69b50..f44e033 100644 --- a/colLAB-FIN/src/pages/PostPages/Bio.jsx +++ b/colLAB-FIN/src/pages/PostPages/Bio.jsx @@ -1,99 +1,144 @@ -import React, { useState, useEffect } from 'react'; -import { doc, setDoc, getDoc } from 'firebase/firestore'; -import { auth, db } from '../../firebase'; -const Bio = () => { - const [bioContent, setBioContent] = useState(''); - const [courseOfStudy, setCourseOfStudy] = useState(''); - const [skills, setSkills] = useState(''); + + import React, { useState, useEffect } from 'react'; + import { doc, setDoc, getDoc } from 'firebase/firestore'; + import { auth, db } from '../../firebase'; + const Bio = () => { - const id = auth .currentUser.uid; - useEffect(() => { - const getBioContent = async () => { - const docRef = doc(db, 'bio', id); // Replace "bio" with your collection name - const docSnap = await getDoc(docRef); - if (docSnap.exists()) { - setBioContent(docSnap.data().content); + const [eduLevel, setEduLevel] = useState(undefined); + const [courseOfStudy, setCourseOfStudy] = useState(undefined); + const [skills, setSkills] = useState(undefined); + const [school, setSchool] = useState(undefined); + const [email, setEmail] = useState(undefined); + const [photo, setPhoto] = useState(undefined); + const [userName, setUserName] = useState(undefined); + const [name, setName] = useState(undefined); + + + const id = auth.currentUser.uid; + useEffect(() => { + const getBioContent = async () => { + const docRef = doc(db, 'bio', id); // Replace "bio" with your collection name + const docSnap = await getDoc(docRef); + + const userRef = doc(db, 'users', id); + const userSnap = await getDoc(userRef); + + if (docSnap.exists()) { + setEduLevel(docSnap.data().eduLevel); setCourseOfStudy(docSnap.data().courseOfStudy); setSkills(docSnap.data().skills); + setSchool(docSnap.data().school); } else { - setBioContent(''); - setCourseOfStudy(''); - setSkills(''); + setEduLevel(undefined); + setCourseOfStudy(undefined); + setSkills(undefined); + setSchool(undefined); + } + + if (userSnap.exists()) { + setEmail(userSnap.data().email); + setPhoto(userSnap.data().photoURL); + setUserName(userSnap.data().displayName); + setName(userSnap.data().myname); + } else { + setEmail(undefined); + setUserName(undefined); + setName(undefined); + setPhoto(undefined); } - }; - - getBioContent(); - }, [id]); - const saveBioContent = async () => { - const docRef = doc(db, 'bio', id); // Replace "bio" with your collection name - await setDoc(docRef, { content: bioContent, courseOfStudy, skills}, { merge: true }); - }; + }; + + getBioContent(); + }, [id]); + + const saveBioContent = async () => { + const docRef = doc(db, 'bio', id); + try { + await setDoc(docRef, { eduLevel, courseOfStudy, skills, school }, { merge: true }); + window.alert('Bio saved successfully!'); + } catch (error) { + console.error('Error saving bio:', error); + window.alert('Failed to save bio. Please try again later.'); + } + }; + + return ( +
+
+ +
+

{name}

+

@{userName}

+

{email}

- return ( -
- - setCourseOfStudy(e.target.value)} - placeholder="Course of Study" - /> - setSkills(e.target.value)} - placeholder="Skills" - /> - +
- ); -}; - -export default Bio; - +
+

Bio:

+
+
+ +
+ Education Level: + setEduLevel(e.target.value)} + placeholder="Education Level:" + />
+ +
+ Course of Study: + setCourseOfStudy(e.target.value)} + placeholder="Course of Study:" + /> +
+
+ School: + setSchool(e.target.value)} + placeholder="School:" + /> +
+
+ + + + -/*import React, { useState, useEffect } from 'react'; -import { doc, setDoc, getDoc } from 'firebase/firestore'; -import { auth, db } from '../../firebase'; -const Bio = () => { - const [bioContent, setBioContent] = useState(''); - const id = auth .currentUser.uid; - useEffect(() => { - const getBioContent = async () => { - const docRef = doc(db, 'bio', id); // Replace "bio" with your collection name - const docSnap = await getDoc(docRef); - if (docSnap.exists()) { - setBioContent(docSnap.data().content); - } else { - setBioContent(''); - } - }; - - getBioContent(); - }, [id]); +
+
+ +
+ - const saveBioContent = async () => { - const docRef = doc(db, 'bio', id); // Replace "bio" with your collection name - await setDoc(docRef, { content: bioContent }, { merge: true }); - }; - return ( -
- -
- ); -}; - -export default Bio; */ + + +
+ ); + }; + + export default Bio; + + + + \ No newline at end of file diff --git a/colLAB-FIN/src/pages/PostPages/CreatePost.jsx b/colLAB-FIN/src/pages/PostPages/CreatePost.jsx index 758207e..0db8d17 100644 --- a/colLAB-FIN/src/pages/PostPages/CreatePost.jsx +++ b/colLAB-FIN/src/pages/PostPages/CreatePost.jsx @@ -1,93 +1,101 @@ -import React, { useEffect, useState } from "react"; -import { addDoc, collection } from "firebase/firestore"; -import { auth, db } from "../../firebase"; -import { useNavigate } from "react-router-dom"; +import React, { useEffect, useState } from 'react' +import {addDoc,collection} from 'firebase/firestore' +import { auth,db } from '../../firebase' +import { useNavigate } from 'react-router-dom' import "./postcss.css"; -const CreatePost = ({ onPostSuccess }) => { - const [title, setTitle] = useState(""); - const [postContent, setPostContent] = useState(""); - const [skills, setSkills] = useState(""); - const [contact, setContact] = useState(""); - - const navigate = useNavigate(); - useEffect(() => { - if (!auth.currentUser) { - navigate("/login"); +const CreatePost = ( {onPostSuccess}) => { + + const [title,setTitle] = useState(""); + const[postContent,setPostContent]=useState(""); + const[skills,setSkills]=useState(""); + //const[contact,setContact]=useState(""); + + const navigate=useNavigate(); + useEffect(()=>{ + if(!auth.currentUser){ + navigate("/login"); } - }, [navigate]); - - const postsCollectionRef = collection(db, "posts"); - - const submitPost = async () => { - if (title === "" || postContent === "") { - alert("Fill up the fields"); - } else { - try { - await addDoc(postsCollectionRef, { - title: title, - postContent: postContent, - skills: skills, - contact: auth.currentUser.displayName, - author: { - name: auth.currentUser.displayName, - id: auth.currentUser.uid, - }, - }); - - //navigate("/"); - onPostSuccess(); - } catch (error) { - console.log(error); - } + },[navigate]); + + const postsCollectionRef=collection(db,"posts"); + + const submitPost=async() => { + if(title ==='' || postContent ===''){ + alert('Fill up the fields'); + } else{ + try { + await addDoc(postsCollectionRef,{ + title:title, + postContent: postContent, + skills:skills, + // contact:contact, + contact:auth.currentUser.displayName, + + author :{ + name:auth.currentUser.displayName, + id:auth.currentUser.uid, + + } + }) + + //navigate("/"); + onPostSuccess(); + + } catch(error){ + console.log(error); + } } - }; + } + return ( -
+
-

Create a Post

-
- - setTitle(e.target.value)} - /> -
-
- - -
-
- - - {/* - setContact(e.target.value)} /> */} -
- +

Create a Project Post

+ +
+ +
{/* left container */} +
+ + setTitle(e.target.value)} /> +
+ +
+ + +
+ + +
+ +
{/* right container */} +
+ + +
+ + {/*
+ + setContact(e.target.value)}/> + +
*/} + +
+ +
+
+ +
+
- ); -}; + + + +
+ + ) +} -export default CreatePost; +export default CreatePost; \ No newline at end of file diff --git a/colLAB-FIN/src/pages/PostPages/Searchbar.jsx b/colLAB-FIN/src/pages/PostPages/Searchbar.jsx index b2e5ff3..41f3a76 100644 --- a/colLAB-FIN/src/pages/PostPages/Searchbar.jsx +++ b/colLAB-FIN/src/pages/PostPages/Searchbar.jsx @@ -16,10 +16,14 @@ const SearchBar = ({onSearch}) =>{ ; return( -
+ - + onChange={handleInputChange} placeholder="find projects..." className="searchbar-bar me-2"/> +
); diff --git a/colLAB-FIN/src/pages/PostPages/postcss.css b/colLAB-FIN/src/pages/PostPages/postcss.css index 30b54ae..ae8cd8a 100644 --- a/colLAB-FIN/src/pages/PostPages/postcss.css +++ b/colLAB-FIN/src/pages/PostPages/postcss.css @@ -1,6 +1,1033 @@ +/* CHAT PAGE */ +/* SIDEBAR */ + +.sidebar { + flex:300px; + display: flex; + flex-direction: column; + +} + + /* NAVBAR */ +.navbar { + display: flex; + justify-content: space-between; + flex-direction: row; + background-color: #128c7e; +} + +.chats-header { + font-weight:800; + color: aliceblue; + font-size: 20px; + margin-left:10px; +} + +.chat-user-details { + display: flex; + flex-direction: row; + align-items: center; + padding:5px; + margin-right:5px; + border-radius: 10px; + background-color: white; +} + +.chat-user-username { + font-weight: bold; + color: #000000; + +} + +.chat-user-pic { + width: 30px; + margin-left: 5px; +} + + /* SEARCH */ +.search { + display: flex; + flex-direction: column; +} + +.chat-searchbar { + background-color: #0f3530; + border:solid darkslategray 2px; + color:lightgray; + width: 100%; +} + +.chat-searchbar:focus { + outline: none; +} + +.chat-searchbar::placeholder { + color:lightgray; + opacity : 0.5; +} + +.searched-user { + display: flex; + flex-direction: row; + background-color: rgba(110, 234, 234, 0.7); + cursor:pointer; + transition: 0.3; + align-items: center; +} + +.searched-user:hover { + background-color: rgba(110, 234, 234, 1) +} + +.searched-user-username { + font-size: 20px; + font-weight: 600; +} + +.searched-user-pic { + border-color: black; + width:50px; + height:50px; + object-fit: fill; + border-radius: 100%; + margin-right: 5px; + +} + + /* CHATS */ + +.chats { + display: flex; + flex-direction: column; + height: 80vh; + background-color: #426f69; +} + +.users-chat-container { + display: flex; + flex-direction: row; + background-color: #ffffff; + border-radius: 20px; + margin-bottom: 5px; + margin-top:5px; + transition: 0.3; +} + +.users-chat-container:hover { + cursor: pointer; + background: #30e7d1; +} +.chat-container-profile-pic { + width: 50px; + height:50px; + object-fit: fill; + border-radius: 100%; +} + +.chat-container-user-details { + display: flex; + flex-direction: column; + justify-content: center; + + margin-left:5px; +} + +.chat-container-username { + font-size: 18px; + font-weight: 500; + color: black; + +} + +.last-message { + color: gray; + margin:0px; +} + +/* SIDEBAR (END) */ + +/* CHAT */ + +.chat { + flex:1200px; + display: flex; + flex-direction: column; + +} + +.chatInfo { + display: flex; + flex-direction: row; + align-items: center; + background-color: #075e54; + justify-content: space-between; + height:80px; +} + +.chat-pfp { + width:60px; + height:60px; + object-fit: fill; + border-radius: 100%; + margin-left: 20px; + margin-right:5px; +} + +.chat-name { + font-size: 30px; + font-weight: 500; + color:white; + margin-left:10px; +} + +.show-bio-btn { + margin-right:30px; + height:35px; + border:none; + border-radius: 10px; + background-color: rgba(245, 245, 245,0.7); + transition: 0.3; +} + +.show-bio-btn:hover { + background-color: rgba(245, 245, 245,1); +} + +.bio-popup { + position:absolute; + display: flex; + flex-direction: column; + align-items: center; + top:50; + margin-top:80px; + background-color: white; + border-radius: 30px; + padding:20px; + transition: 0.3; +} + +.bio-popup-close-btn { + width:40%; + background-color: rgba(255, 0, 0,0.7); + color: white; + font-weight: 500; + border: none; + border-radius: 20px; + +} + +.bio-popup-close-btn:hover { + background-color: rgba(255, 0, 0,1); + +} + + + /* MESSAGES */ + + .messages { + background-color:#128c7e; + padding:10px; + height: 545px; + overflow-y: scroll; + + .message { + display: flex; + gap: 20px; + margin-bottom: 20px; + + .messageInfo { + display: flex; + flex-direction: column; + color: lightgray; + font-weight: 300; + font-size: smaller; + + .message-image { + width: 40px; + height: 40px; + border-radius: 50%; + object-fit: cover; + } + } + + .messageContent { + max-width: 80%; + display: flex; + flex-direction: column; + gap: 10px; + + .user-received-message { + background-color: pink; + padding: 10px 20px; + border-radius: 10px 10px 0px 10px; + max-width: max-content; + font-weight:500; + } + + .message-image { + width: 200px; + } + } + + &.owner { + flex-direction: row-reverse; + + .messageContent { + align-items: flex-end; + p { + background-color: #128c7e;; + color: white; + border-radius: 10px 10px 10px 10px; + } + } + } + } + } + + +/* OVERALL CHAT */ + +.chatpage-container { + display: flex; + flex-direction: row; + justify-content: center; +} + +.text-message-container { + display: flex; + flex-direction: row; + justify-content: space-between; + height:50px; + border-color: gray; + border-width: 10px; + background-color: #075e54; + + +} + +.text-message-box { + width:85%; + background-color: #426f69; + margin-right: 10px; + border-radius: 20px; + border: none; + padding-left: 10px; + margin-left: 10px; + margin-right:10px; + margin-top:5px; + margin-bottom: 5px; + color:white; + font-weight: 500; +} + +.text-message-box::placeholder { + color: rgba(255, 255, 255,0.7); +} + +.right-message-box { + width:140px; + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; +} + +.insert-pic-btn { + cursor: pointer; + width:50px; + height:50px; + display: flex; + align-items: center; + justify-content: center; + margin-right: 10px; + +} + +.picture-icon { + width: 25px; + height:25px; + object-fit: contain; + + +} + +.send-text-button { + margin-left: 5px; + background-color: rgba(11, 46, 42, 0.6); + border:none; + border-radius: 20px; + width:100%; + height:70%; + transition: 0.3; + color:whitesmoke; + margin-right:10px; +} + +.send-text-button:hover { + background-color: rgba(11, 46, 42, 1); +} + +/* CHAT PAGE (END) */ + + + + + +/* CREATE POST (START) */ + +.createPost-container { + display:flex; + justify-content: center; + align-items: center; + padding-top: 20px; + /* background-color: lightgray; */ + /* height:100vh; */ + overflow: hidden; +} + +.postForm { + background-color: rgba(18, 140, 126,0.8); + border-radius: 30px; + height:500px; + width:1000px; +} + +.createPost-heading { + color: white; + font-weight: bold; + font-size: 40px; + text-align: center; + margin-bottom:40px; + margin-top:20px; + + } + + .createPost-split-container { + display: flex; + flex-direction: row; + justify-content: center; + gap: 100px; + + .split-container { + display: flex; + flex-direction: column; + + + .form-control { + background-color: rgba(7, 94, 84, 0.3); + width:400px; + color: white + + } + + .form-control::placeholder { + color:rgba(255, 255, 255,0.6); + + } + + + .form-label { + font-size:22px; + color:white; + font-weight: bold; + + } + + } + } + + + .publish-container { + display: flex; + align-items: center; + justify-content: center; + margin-top: 20px; + } + + .publish-button { + font-family: Roboto, Arial; + font-weight: bold; + font-size: 30px; + text-align: center; + width:250px; + height:60px; + border-radius: 10px; + background-color: rgba(7, 94, 84,0.6); + color: white; + transition:0.3; + + } + + .publish-button:hover { + background-color: rgba(7, 94, 84,1); + } + + + +/* CREATE POST (END) */ body { + background-color: white; + padding-top: 60px; +} + +/* LOGIN PAGE (START) */ + +.login-container { + display: flex; + align-items: center; + vertical-align: middle; + height: 500px; + justify-content: center; +} +.login-container .login-wrapper { + display: flex; + flex-direction: column; + background-color: lightgray; + align-items: center; + padding: 20px 60px; + gap: 10px; + border-radius: 10px; +} +.login-container .login-wrapper .colLAB-logo { + width: 120px; +} +.login-container .login-wrapper .login-caption { + font-family: Roboto, Arial; + font-weight: bold; + font-style: italic; + margin-top: -30px; + margin-bottom: 10px; +} +.login-container .login-wrapper .login-title { + font-family: Roboto, Arial; + font-size: 30px; + font-weight: bold; + margin-bottom: 15px; + color: #075e54; +} +.login-container .login-wrapper .login-form { + display: flex; + flex-direction: column; + gap: 15px; + align-items: center; +} +.login-container .login-wrapper .login-form input { + background-color: transparent; + border: none; + border-bottom: 1px solid #075e54; + width: 250px; + height: 35px; +} +.login-container .login-wrapper .login-form input::placeholder { + color: gray; + text-align: center; + opacity: 0.6; +} +.login-container .login-wrapper .login-form .login-button { + border-radius: 5px; + background-color: #075e54; + color: white; + font-size: 22px; + font-family: Roboto, Arial; + font-weight: bold; + width: 120px; + border:none; + transition: 0.3s; + opacity:0.8; +} + +.login-container .login-wrapper .login-form .login-button:hover { + opacity: 1; +} + +.login-container .login-wrapper .login-form .error-msg { + color: red; +} + +/* LOGIN PAGE (END) */ + +/* REGISTER PAGE (START) */ + +.register-container { + display: flex; + align-items: center; + vertical-align: middle; + height: 550px; + justify-content: center; +} +.register-container .register-wrapper { + display: flex; + flex-direction: column; + background-color: lightgray; + align-items: center; + padding: 20px 60px; + gap: 10px; + border-radius: 10px; +} +.register-container .register-wrapper .colLAB-logo { + width: 120px; +} +.register-container .register-wrapper .register-caption { + font-family: Roboto, Arial; + font-weight: bold; + font-style: italic; + margin-top: -30px; + margin-bottom: 10px; +} +.register-container .register-wrapper .register-title { + font-family: Roboto, Arial; + font-size: 30px; + font-weight: bold; + margin-bottom: 15px; + color: #075e54; +} +.register-container .register-wrapper .register-form { + display: flex; + flex-direction: column; + gap: 15px; + align-items: center; +} +.register-container .register-wrapper .register-form input { + background-color: transparent; + border: none; + border-bottom: 1px solid #075e54; + width: 250px; + height: 35px; +} +.register-container .register-wrapper .register-form input::placeholder { + color: gray; + text-align: center; + opacity: 0.6; +} +.register-container .register-wrapper .register-form .profile-pic-button:hover { + cursor: pointer; +} +.register-container .register-wrapper .register-form .profile-pic-container { + display: flex; + flex-direction: row; + align-items: center; +} +.register-container .register-wrapper .register-form .profile-pic-container .profile-pic-icon { + width: 50px; + border-radius: 80px; + margin-right: 10px; +} +.register-container .register-wrapper .register-form .profile-pic-container .profile-pic-caption:hover { + text-decoration: underline; +} +.register-container .register-wrapper .register-form .profile-pic-icon { + width: 100px; +} +.register-container .register-wrapper .register-form .register-button { + border-radius: 5px; + background-color: #075e54; + color: white; + font-size: 22px; + font-family: Roboto, Arial; + font-weight: bold; + width: 120px; + border:none; + transition: 0.3s; + opacity:0.8; +} + +.register-container .register-wrapper .register-form .register-button:hover { + opacity: 1; +} + +.register-container .register-wrapper .error-msg { + color: red; +} + +/* REGISTER PAGE (END) */ + +/* HOME PAGE (START) */ + +.top-navigation-bar { + display: flex; + flex-direction: row; + justify-content: space-between; + height: 60px; + background-color: white; + align-items: center; + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 100; + border-radius: 2px; +} + +/* LOGO + GREETING */ +.top-navigation-bar .left-top-navigation-bar { + display: flex; + align-items: center; + justify-self: flex-start; + width: 222px; + margin-left:10px; +} + +.top-navigation-bar .collab-logo { + width: 70px; + margin-left: 15px; +} +.top-navigation-bar .greeting-text { + font-family: Roboto, Arial, sans-serif; + font-weight: bold; + font-size: 22px; + padding-left: 15px; + white-space: nowrap; + color: #128c7e; +} + +/* NAVIGATION BUTTONS */ +.top-navigation-bar .center-top-navigation-bar { + justify-self: center; + white-space: nowrap; + align-self: center; +} +.top-navigation-bar .center-top-navigation-bar .navigation-bar-button { + border: none; + background-color: transparent; + margin-left: 15px; + margin-right: 15px; + font-size: 22px; + transition:0.3s; +} +.top-navigation-bar .center-top-navigation-bar .navigation-bar-button:hover { + background-color: #075e54; + opacity: 0.7; + color: white; + border-radius: 5px; + font-weight: bold; +} +.top-navigation-bar .logout-button { + border: none; + background-color: transparent; + color: red; + margin-right: 10px; + margin-left: 100px; + transition: 0.3s; +} +.top-navigation-bar .logout-button:hover { + background-color: red; + color: white; + font-weight: bold; + border-radius: 5px; +} + +/* HOME PAGE (END) */ + + +/* PROFILE PAGE (START) */ + +.profile-page-container { + display: flex; + flex-direction: column; + gap:0px; + align-items: center; + padding-top: 20px; + /* background-color: lightgray; */ + height:100vh; +} + + +.profile-page-container .profile-container { + display: flex; + background-color: #128c7e; + border-radius: 30px; + width:1000px; +} + +.profile-page-container .profile-container .profile-pic { + width:200px; + height:200px; + object-fit:cover; + border-radius: 50%; + border:black 10px; + margin-right: 50px; + +} + +.profile-page-container .profile-container .profile-details { + display: flex; + gap: 3px; + flex-direction: column; +} + +.profile-page-container .profile-container .profile-details .profile-name { + font-size: 30px; + font-weight: bold; + margin-bottom: 0px; + margin-top: 5px; + color:white; + +} + +.profile-page-container .profile-container .profile-details .profile-username { + font-size: 20px; + margin-bottom:0px; + color:white; +} + +.profile-page-container .profile-container .profile-details .profile-email { + font-size: 20px; + margin-bottom:0px; + color:white; +} + +.profile-page-container .bio-container { + background-color: #128c7e; + margin-top:30px; + border-radius: 30px; + width:1000px; + +} + +.profile-page-container .bio-container .bio { + font-size: 25px; + font-weight: bold; + margin-left:50px; + margin-bottom: 2px; + margin-top: 10px; + display: block; + color: #ffffff; +} + +.profile-page-container .bio-container .profile-bio-container { + display:flex; + flex-direction: row; + background-color: #128c7e; + justify-content:center; + gap:80px; + +} + +.profile-page-container .bio-container .profile-bio-container .skills-container { + margin-top: 15px; + margin-bottom: 15px; +} + +.profile-page-container .bio-container .profile-bio-container .bio-school { + display: flex; + flex-direction: column; + gap:10px; + margin-top: 30px; + margin-bottom: 30px; + align-items: center; + justify-content: center; +} + +.profile-page-container .bio-container .profile-bio-container .bio-school .input-school { + background-color: white; + width:200px; + +} + +.profile-page-container .bio-container .profile-bio-container .bio-school .input-school::placeholder { + color: black; + +} + +.input-filler { + color:white; + margin-right:10px; + text-align: left; + font-weight: bold; +} + +.profile-page-container .bio-container .button-div { + display: flex; + align-items: center; + justify-content: center; + margin-top: 10px; + margin-bottom: 10px; +} + +.profile-page-container .bio-container .save-button { + border-radius: 5px; + background-color: #075e54; + color: white; + font-size: 22px; + font-family: Roboto, Arial; + font-weight: bold; + width: 120px; + border:none; + transition: 0.3s; + opacity:0.8; +} +.profile-page-container .bio-container .save-button:hover { + opacity:1; +} + +/* PROFILE PAGE (END) */ + + +/* POSTS PAGE [HOME] (START) */ + +.homepage { + background-color:lightgray; + width:100%; +} + +.homepage-design { + background-image: linear-gradient( + 140deg, + hsl(0deg 0% 100%) 0%, + hsl(173deg 41% 75%) 1%, + hsl(173deg 37% 54%) 25%, + hsl(170deg 40% 35%) 70%, + hsl(167deg 48% 18%) 100% +); + width: 100%; + margin:0; + padding:0; + height:200px; +} + +.homepage-design .homepage-caption { + font-family: Arial, Helvetica, sans-serif; + font-size: 30px; + font-weight:700; + font-style: italic; + opacity:0.85; + margin-left: 50px; + padding-top:40px; + +} + +.searchbar-bar{ + color:#075e54; + width:500px; + display: flex; + align-items: center; + justify-content: center; + border-radius:20px; + padding:10px; + font-size:18px; + font-weight: 500; + font-style: italic; + background-color: rgba(255,255,255,0.9); + border:none; + transition: 00.3s; + box-shadow: 0 4px 8px 0 rgba(255, 255, 255, 0.2), 0 6px 20px 0 rgba(255, 255, 255, 0.19); +} + +.searchbar-bar:focus { + outline:none; + background-color: rgba(255,255,255,1); + width:540px; + +} + +.searchbar-bar:hover { + cursor:text; +} + +.searchbar-bar::placeholder { + color:gray; + font-style: italic; + font-size: 18px; + opacity:0.8; + font-weight: 400; + +} + +.search-button { + border:none; + background: rgba(255,255,255,0.8); + border-radius: 50%; + width:50px; + height:50px; +} + + +.post-search { + display: flex; + align-items: center; + justify-content: center; +} + + +/* POSTS CONTAINER (START) */ + +.homepage-posts-container { + display: flex; + flex-direction: column; + justify-content: center; + padding-left: 50px; + padding-right:50px; + padding-top: 20px; +} + +.card { + background-color:#128c7e; + border-radius: 15px; + position:static; + +} + +.card-body { + color:whitesmoke; + padding-left: 25px; + position:relative; +} + +.card-title { + font-size: 30px; + color:white +} + +.card-text { + color:white; +} + + + +.delete-button { + position: absolute; + width:100px; + font-size: 15px; + text-align: center; + border-radius: 30px; + left:1210px; + top:15px; + border:none; + background-color: rgba(255,0,0,0.6); + transition: 0.3; + color:white; +} + +.delete-button:hover { + background-color: rgba(255,0,0,1); + width:105px; + font-size:18px; +} + +.readmore-btn { + border:none; + background-color: transparent; + color:blue; + transition:0.5s; +} + +.created-by { + margin-right: 5px; +} + +.badge { + background-color: #0f3530; + color:#ffffff; + font-weight: bold; +} + + + +/* POST CONTAINER (END) */ + +/* body { margin: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', @@ -13,14 +1040,8 @@ body { font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', monospace; } - /* .search-bar { - display: flex; - align-items: center; - margin-bottom: 20px; - }*/ - - .search-input { - padding: 10px; + +.search-input { font-size: 16px; border: 1px solid #ccc; border-radius: 4px; @@ -29,7 +1050,6 @@ body { } .search-button { - padding: 10px 20px; font-size: 16px; background-color: #007bff; color: #fff; @@ -61,17 +1081,20 @@ body { width: 100%; max-width: 600px; } - + */ + + /* .card { width: 100%; margin-bottom: 20px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); } + .card-body { - padding: 20px; + width: 100%; } - + .card-title { font-size: 24px; font-weight: bold; @@ -106,7 +1129,10 @@ body { .text-dark { color: #343a40 !important; } -.createPost { +*/ + /* + + .createPost { display: flex; flex-direction: column; align-items: center; @@ -183,8 +1209,8 @@ body { } } } - -.homepage { +*/ +/* .homepage { flex: 2; display:flex; flex-direction: column; @@ -192,7 +1218,8 @@ body { justify-content:start; overflow-y:scroll; overflow-x: hidden; -} +} */ +/* .page-scroll{ } .search-bar { @@ -201,7 +1228,4 @@ body { background-color: #fff; z-index: 1; margin-bottom: 20px; -} - - - +}*/ \ No newline at end of file diff --git a/colLAB-FIN/src/pages/Posts.jsx b/colLAB-FIN/src/pages/Posts.jsx index a870993..d800a54 100644 --- a/colLAB-FIN/src/pages/Posts.jsx +++ b/colLAB-FIN/src/pages/Posts.jsx @@ -5,6 +5,7 @@ import { auth, db } from "../firebase"; import SearchBar from "./PostPages/Searchbar"; import Fuse from "fuse.js"; import "./PostPages/postcss.css"; + const Posts = ({ isAuth, handleShowPosts }) => { const [postLists, setPostLists] = useState([]); const [loading, setLoading] = useState(false); @@ -99,80 +100,90 @@ const Posts = ({ isAuth, handleShowPosts }) => { } return ( <> +
+
+

Start Collaborating TODAY!

+
+ +
+
+ {/* */} -
-
- -
-
+ + +
{filteredPosts.length === 0 ? ( -

No posts

+

No post found.

) : ( filteredPosts.map((post) => { const content = isPostExpanded(post.id) ? post.postContent - : post.postContent.slice(0, 300) + "..."; + : post.postContent.slice(0, 300); const shouldShowButton = post.postContent.length > 300; return ( -
+
- {isAuth && + {isAuth && auth.currentUser && post.author.id === auth.currentUser.uid && ( -
+ -
+ )} +
{post.title}

- {content} + Description: {content} {shouldShowButton && ( )}

{post.skills && (
-
Skills Required:
-

{post.skills}

+
Skills Required: {post.skills}
)} - - {post.author.name} + + Created By: {post.author.name && ( handleSelect(post.contact)} + className="badge rounded-pill" + onClick={() => handleSelect(post.author.name)} style={{ cursor: "pointer" }} > - {post.contact} + {post.author.name} )}
+ +
); }) )}
-
+ + +
); @@ -180,6 +191,24 @@ const Posts = ({ isAuth, handleShowPosts }) => { export default Posts; + + + + + + + + + + + + + + + + + + /*import React from 'react' import { useEffect,useState } from 'react'; import { getDocs,collection,deleteDoc,doc } from 'firebase/firestore'; @@ -311,6 +340,7 @@ const Home = ({isAuth}) => { */ + /*return (
{postLists.length ===0 ?

No posts

: postLists.map((post)=>{ @@ -321,8 +351,8 @@ const Home = ({isAuth}) => { {/* {isAuth && post.author.id ===auth.currentUser.uid &&
-
} */ //} {isAuth && auth.currentUser && post.author.id === auth.currentUser.uid && ( -/*
+
} *///} {isAuth && auth.currentUser && post.author.id === auth.currentUser.uid && ( + /*
) }
{post.title}
@@ -334,4 +364,4 @@ const Home = ({isAuth}) => { ) }) }
-)*/ +)*/ \ No newline at end of file diff --git a/colLAB-FIN/src/pages/Register.jsx b/colLAB-FIN/src/pages/Register.jsx index 5a74695..58924a1 100644 --- a/colLAB-FIN/src/pages/Register.jsx +++ b/colLAB-FIN/src/pages/Register.jsx @@ -13,6 +13,7 @@ export const Register = () => { const navigate = useNavigate(); const [verification, setVerification] = useState(false); const [username,setUsername] = useState(""); + const [myName,setMyName] = useState(""); const [nameExists,setNameExists] = useState(false) const handleKey = async () =>{ @@ -41,9 +42,10 @@ export const Register = () => { e.preventDefault(); const displayName = e.target[0].value; - const email = e.target[1].value; - const password = e.target[2].value; - const file = e.target[3].files[0]; + const myname = e.target[1].value; + const email = e.target[2].value; + const password = e.target[3].value; + const file = e.target[4].files[0]; const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; if(nameExists){ return @@ -75,6 +77,7 @@ export const Register = () => { displayName, email, photoURL: downloadURL, + myname, }); await setDoc(doc(db,"userChats",res.user.uid),{}); @@ -116,24 +119,31 @@ export const Register = () => { return ( -
-
- CHAT - Register -
- +
+ + collaborate today! + Register + + setUsername(e.target.value)} value={username} /> - {nameExists && Name already exists} + {nameExists && Username already exists.} + - + -