diff --git a/Mystical-fantaies.html b/Mystical-fantaies.html index cecbd1bc..0d6a5eec 100644 --- a/Mystical-fantaies.html +++ b/Mystical-fantaies.html @@ -140,6 +140,64 @@ +
+
+ +
+ +
+ + + + + + + @@ -620,7 +2172,7 @@

Personalized Reading Experience

Genre

-

+

Explore Different Genres

@@ -634,7 +2186,7 @@

Classic Literature

-

+

The category of classic literature contains literature that is worthy of being read through the ages. Classic literature is timeless and well-written. Sophocles,Charles Dickens, Jane Austen and Virgil are all writers whose works are considered classical literature. @@ -649,9 +2201,11 @@

Classic Literature

02

Romance

-

- "A romance is understood to be 'love stories,' which are primarily focused on the relationship between the main characters of the story. The biggest defining characteristic of the romance genre is that a happy ending is always guaranteed, perhaps living 'happily ever after.'" -

+

+ A romance is understood to be 'love stories,' which are primarily focused on the relationship between + the main characters of the story. The biggest defining characteristic of the romance genre is that a + happy ending is always guaranteed, perhaps living 'happily ever after. +

@@ -751,11 +2305,10 @@

Self Help

-
  • -

    9

    +

    09

    Historical Fiction

    @@ -766,7 +2319,7 @@

    Historical Fiction

    -
  • +
  • @@ -776,13 +2329,15 @@

    Historical Fiction

    Poetry

    - Distilling emotions into rhythmic language, they inspire reflection, evoke vivid imagery, and offer solace. - From ancient epics to modern verses, they celebrate the power of words and the timeless beauty of human expression. + Distilling emotions into rhythmic language, they inspire reflection, evoke vivid imagery, and offer + solace. + From ancient epics to modern verses, they celebrate the power of words and the timeless beauty of + human expression.

  • - +
  • @@ -791,14 +2346,14 @@

    Poetry

    Philosophy

    - Delve into life's fundamental questions, exploring existence, ethics, + Delve into life's fundamental questions, exploring existence, ethics, and knowledge, they provoke deep thought, challenge assumptions, and offer diverse perspectives, fostering critical thinking and a deeper understanding of the human condition.

  • - +
  • @@ -815,15 +2370,16 @@

    Adventure Fiction

  • +
  • 13

    -

    Children's Fiction

    +

    Non-Fiction

    - Welcome to the magical world of Children's Fiction! Here, young readers can embark on enchanting adventures, meet unforgettable characters, and explore whimsical worlds that spark the imagination and inspire a lifelong love of reading. Dive into a new story today and let the adventures begin! + Dive into the mysteries and secrets of the world surrounding us, and gain a deeper knowledge and history behind the wisdom of our correspondants and predecessors, through non-fiction.

    @@ -834,10 +2390,10 @@

    Children's Fiction

    14

    -

    Young Adult Fiction

    +

    Comedy

    - Step into the captivating world of Young Adult Fiction! This genre is crafted for teens and young adults, offering stories that resonate with their experiences, aspirations, and challenges. From thrilling adventures to heart-wrenching romances, these books provide a bridge between childhood and adulthood, inspiring readers to explore new perspectives and discover themselves. + Are you feeling blue and want a good laugh? Well then, Comedy is the right genre for you! Grab a cup of coffee, lean back and dive into a world of humour, smiles and all sun!

    @@ -848,568 +2404,559 @@

    Young Adult Fiction

    15

    -

    Dystopian Fiction

    +

    Detective Fiction

    - Dive into the gripping and thought-provoking world of Dystopian Fiction! This genre explores imagined futures where society faces dire challenges, often reflecting on current issues and posing profound questions about humanity, governance, and survival. These stories captivate readers with their intense plots, complex characters, and speculative settings. + Engage in exhillerating and challenging obstacles, unusual plot twists, and purposed setbacks to reach your end-goal with secret agents. Put your investigative and observative skills to the test, in the land of Detective Fiction.

  • -

    16

    - -

    Documentary

    - +

    Fairy Tales

    - Discover the world of documentaries, where real-life stories and events come to life through factual reporting and storytelling. This genre provides in-depth insights into various subjects, from historical events and cultural topics to scientific discoveries and social issues. Documentaries captivate viewers with their compelling narratives, authentic footage, and interviews, offering a powerful way to educate, inform, and inspire. + A fairy tale is a whimsical story set in a magical world where heroes overcome obstacles and evil is vanquished. The essence of fairy tales is their promise of a happy ending, with characters finding their "happily ever after."

    -
  • -

    17

    - -

    Contemporary Fiction

    - +

    Mythology

    - Dive into a genre that reflects the pulse of modern life, where current issues and everyday experiences come alive through realistic storytelling. These narratives explore the complexities of human relationships, societal challenges, and personal growth, providing readers with a deep connection to the present world. With relatable characters and authentic settings, contemporary fiction offers a powerful lens through which to understand and navigate the intricacies of today's society. + Mythology encompasses the rich tapestry of stories and legends that have been passed down through generations. These tales often feature gods, heroes, and mythical creatures, exploring themes of creation, morality, and the human condition.

    -
  • -
  • -
    - -

    18

    - -

    Action

    - -

    - Immerse yourself in the adrenaline-fueled world of Action! This genre is characterized by high stakes, fast-paced plots, and intense sequences of physical activity. Action stories often feature heroic protagonists, thrilling chases, explosive confrontations, and daring rescues. Whether set in contemporary times, historical periods, or futuristic landscapes, these tales captivate readers with their relentless momentum and heart-pounding excitement. -

    - -
    -
  • - -
  • -
    -

    19

    -

    Mystery

    -

    - Mystery revolves around solving a puzzle or crime, often featuring detectives, investigators, or amateur sleuths. The plot typically involves uncovering clues, interrogating suspects, and piecing together evidence to reveal the truth behind a suspenseful and enigmatic scenario. -

    -
    -
  • -
  • -
    -

    20

    -

    Drama

    -

    - Drama delves into realistic characters, settings, and situations, focusing on emotional and relational development. These stories often tackle complex themes, exploring the human condition and personal conflicts, while emphasizing authenticity and emotional resonance. -

    -
    -
  • - -
  • -
    -

    21

    -

    Satire

    -

    - Delve into a genre that uses sharp wit, humor, and irony to expose and critique societal flaws, institutions, and human behavior. Through clever and often exaggerated storytelling, satire challenges conventions and provokes thought, offering readers a unique perspective on the absurdities and injustices of the world. -

    -
    -
  • -
  • -
    -

    22

    -

    Spirituality and Religion

    -

    - Explore a genre that delves into the profound aspects of human existence, beliefs, and the divine. These works encompass a wide range of traditions, teachings, and practices, offering insights into various faiths, spiritual journeys, and the search for meaning. -

    -
    -
  • - - - - - - - - - - - -
    -
    - -

    Literary Realms

    - -

    - Literary Realms we've covered - -

    - -
    - -
  • - - -

    02.  Thrilling Adventures

    -

    Dive into heart-pounding tales and gripping narratives that will keep you on the edge of your seat.

    -
    -
    - → -
    -
    -
    - - +
  • + + +
  • +
    + +

    20

    + +

    Dystopian

    + +

    + Dystopian fiction explores grim and often nightmarish futures where society is characterized by oppression, deprivation, and despair. These stories challenge readers to reflect on current social and political issues by presenting exaggerated consequences of modern-day problems. +

    + +
  • - -
  • - - -

    03.  Mindful Living

    -

    Discover the secrets to a fulfilling life with our collection of insightful and empowering self-help - books.

    -
    -
    - → -
    -
    -
    - - + +
  • - -
  • - - -

    04.  Mystical Fantasies

    -

    Embark on fantastical journeys to magical realms with our captivating fantasy fiction picks.

    -
    -
    - → -
    -
    -
    - - + +
  • - -
  • - - -

    05.  Historical Chronicles

    -

    Travel back in time and explore the rich tapestry of history through our curated historical fiction - selection.

    -
    -
    - → -
    -
    -
    - - + +
  • - -
  • - - -

    06.  Science Fiction Wonders

    -

    Ignite your imagination with mind-bending concepts and futuristic worlds in our science fiction.

    -
    -
    - → -
    -
    -
    - - -
  • - -
  • - - -

    07.  Laugh Out Loud Comedy

    -

    Find joy and laughter in our comedy section, featuring witty and humorous tales that will brighten - your day.

    -
    -
    - → -
    -
    -
    - - + +
  • - -
  • - - -

    08.  Intriguing Mysteries

    -

    Unravel gripping mysteries and suspenseful plots that will keep you guessing until the last page.

    -
    -
    - → -
    -
    -
    - - -
  • - -
  • - - -

    09.  Inspiring Biographies

    -

    Gain insights into the lives of remarkable individuals through our collection of inspiring biographies - and memoirs.

    -
    -
    - → -
    -
    -
    +
  • - -
    - - + +
    - -

    - +

    Book Exchange Hub

    -



    -

    - +

    Connect with fellow readers in our Book Exchange Hub. Sell your old books at half price and give your favorite reads a new home. Fill out the form below to get started!

    - +
    -
    -
    - - - - - - - - -
    - - -
    - - - - + + + + + + + + + +
    + +
    - - + +
    - + - - -
    + + if (yourPrice === "" || isNaN(parseFloat(yourPrice)) || parseFloat(yourPrice) < 1) { + Swal.fire({ + icon: "error", + title: "Oops...", + text: "Please enter a valid selling price greater than or equal to 1.", + customClass: { + popup: "swal-popup", + title: "swal-title", + content: "swal-content", + confirmButton: "swal-confirm-button", + }, + }); + return; + } + + // Show success message + Swal.fire({ + icon: "success", + title: "Success!", + text: "Your book details have been submitted.", + customClass: { + popup: "swal-popup", + title: "swal-title", + content: "swal-content", + confirmButton: "swal-confirm-button", + }, + }).then((result) => { + if (result.isConfirmed || result.isDismissed) { + resetForm(); // Reset form after successful submission + } + }); + } + + // Function to reset form fields + function resetForm() { + document.getElementById("bookTitle").value = ""; + document.getElementById("bookAuthor").value = ""; + document.getElementById("yourPrice").value = ""; + document.getElementById("currency").value = "INR"; // Reset currency select to default + document.getElementById("bookTitle-error").textContent = ""; + document.getElementById("bookAuthor-error").textContent = ""; + document.getElementById("yourPrice-error").textContent = ""; + document.getElementById("connectReaderBtn").disabled = true; // Disable submit button after reset + } + + // Event listener for the submit button + document.getElementById("connectReaderBtn").addEventListener("click", submitForm); + +
    - - - - -
    -
    - -

    Pricing

    - -

    - Pricing based on their version - -

    - -
    +
    + School Image +
    +

    Schools

    +

    Support children's education by donating books to nearby schools for students of all ages.

    + - +
    +
    +
    + Organization Image +
    +

    Organizations

    +

    Help NGOs and other organizations by donating books to support their educational programs.

    + +
    +
    + + -
  • -
    + -

    Hidden Treasures - Vintage Editions

    - 25% Off -
      + -
    • -

      Dive into the past with vintage editions or books over 5 years old, available - for exchange at 25% of their original cost.

      -
    • + +
      +
      +

      Rate Us

      +

      Tell us about your experience!

      +
      + +
      + + + + + + + + + + +
      + + + +
      + +
      +
      +
      + +
      + +
      + +
      + +
      + +
  • + + + + - + + + +
    -

    Contact

    +

    Contact Us

    - Write me anything + Have a Question ?

    -
    -
    -
    +
    + + +
    +
    Get in touch
    +


    + - - + +
    0/100
    - +
    0/250
    +
    -
      + + +
      • -

        Address:

        -
        12, Nayabad
        Kolkata, India 700054
        +

        + + Address : +


        +
        + 12, Nayabad
        + Kolkata, India 700054 +
      • -

        Phone:

        +

        + + Phone : +


        +91 9124421980
      • -

        Email:

        +
        support@swapreads.com
    +
    + @@ -1420,125 +2967,214 @@

    Testimonials

    -

    Know what our customers say

    +

    Know what our customers say

    + + + +
    +
    +
    +
    + +
    + + +
    + +
    +

    Sonal K

    +
    + +
    + + + + + +
    +
    +
    +
    + SwapReads has completely transformed my reading experience! Not only have I discovered new books I never + would have picked up otherwise, but I've also connected with fellow book lovers who share my passion. It's + like having a personalized library with endless possibilities. Highly recommend! +
    +
    +
    +
    + +
    +
    +
    +
    + +
    + + +
    + +
    +

    Prem Sampath

    +
    -
    -
    -
    -
    -
    +
    + + + + + +
    +
    +
    +
    + SwapReads has transformed my reading habits. Beyond swapping books, it's about fostering a community of + passionate readers. I've made friends, broadened my literary horizons, and unearthed hidden gems. Thank you, +
    +
    +
    + + +
    +
    +
    +
    -
    +
    -
    - +
    + +
    +

    Aron Loes

    -

    B.Sharmila

    -
    -
    - - - - - +
    + + + + + +
    -
    +
    + SwapReads is a bookworm's paradise! With its user-friendly interface, welcoming community, and vast variety + of books for swapping, I've embarked on countless new literary adventures. It's like an ever-active book + club where I've connected with fellow literature lovers. I'm completely hooked! +
    +
    +
    + + +
    +
    +
    +
    - SwapReads has completely transformed my reading experience! Not only have I discovered new books I never - would have picked up otherwise, but I've also connected with fellow book lovers who share my passion. It's - like having a personalized library with endless possibilities. Highly recommend!
    +
    -
    -
    -
    -
    -
    - +
    + +
    +

    B.Sharmila

    +
    + +
    + + + + +
    -

    Prem Sampath

    -
    -
    - - - - -
    -
    - SwapReads has transformed my reading habits. Beyond swapping books, it's about fostering a community of - passionate readers. I've made friends, broadened my literary horizons, and unearthed hidden gems. Thank you, - SwapReads!
    +
    + SwapReads revolutionized my reading life! I've decluttered my shelf, discovered hidden gems, and connected + with a passionate community. Thank you, SwapReads, for stealing my heart! +
    -
    -
    -
    -
    - +
    + + +
    +
    +
    +
    + +
    + + +
    + +
    +

    Jane Doe

    +
    + +
    + + + + +
    -

    Aron Loes

    -
    -
    - - - - -
    -
    - SwapReads is a bookworm's paradise! With its user-friendly interface, welcoming community, and vast variety - of books for swapping, I've embarked on countless new literary adventures. It's like an ever-active book - club where I've connected with fellow literature lovers. I'm completely hooked!
    +
    + I love SwapReads! It's a fantastic way to keep my reading list dynamic and engaging. The platform is + easy to use, and the community is incredibly supportive and passionate about books. SwapReads has + definitely enriched my reading experience. +
    -
    -
    -
    -
    - +
    + + +
    +
    +
    +
    + +
    + + +
    + +
    +

    Maya Verma

    +
    + +
    + + + + +
    -

    Sonal K

    -
    -
    - - - - -
    -
    - SwapReads revolutionized my reading life! I've decluttered my shelf, discovered hidden gems, and connected - with a passionate community. Thank you, SwapReads, for stealing my heart!
    +
    + SwapReads has completely changed the way I read and discover books. The swapping system is seamless, + and I've found so many new favorites. Plus, the community is amazing – it's like having a book club at + my fingertips! +
    -
    -
    -
    -
    -
    - + +
    - +

    Some Frequently Asked Questions

    -
    -
    +
    +
    -

    How does SwapReads work ?

    +

    How does SwapReads work?

    @@ -1549,8 +3185,8 @@

    How does SwapReads work ?

    -
    -
    +
    +

    How does SwapReads contribute to sustainability?

    @@ -1563,7 +3199,7 @@

    How does SwapReads contribute to sustainability?

    -
    +

    How do I join the SwapReads community?

    @@ -1574,9 +3210,9 @@

    How do I join the SwapReads community?

    -
    +
    -

    How do I ensure the safety and security of my personal information on SwapReads

    +

    How do I ensure the safety and security of my personal information on SwapReads?

    @@ -1584,195 +3220,495 @@

    How do I ensure the safety and security of my personal information on SwapRe our servers.

    +
    +
    +

    How do I swap books with other users on SwapReads?

    + +
    +
    +

    To swap books, simply list the books you are willing to exchange on your profile. Browse available titles from other users, and if you find a book you like, initiate a swap request. Once the other user accepts your request, you can arrange the details of the exchange.

    +
    +
    +
    +
    +

    How can I get personalized book recommendations on SwapReads?

    + +
    +
    +

    To receive personalized book recommendations, ensure your reading preferences and genres are up to date in your profile settings. Our recommendation system uses this information to suggest books that match your interests. The more you interact with the platform, such as by listing your favorite books and writing reviews, the better the recommendations will be.

    +
    + +

    + + +
    +
    Visitor
    +
    +
    + + + + + + - -
    +
    +
    + +
    + + - -

    SwapReads.com is the ultimate destination for book lovers - seeking to swap and + +

    +
    +

    SwapReads.com is the ultimate destination for book + lovers + seeking to swap and + + discover new literary gems. + Connect with fellow enthusiasts, exchange your favorite reads, and embark on exciting new adventures in + the + world of literature—all on one convenient platform. Join us and dive into a universe of endless + possibilities! +

    +
    - discover new literary gems. - Connect with fellow enthusiasts, exchange your favorite reads, and embark on exciting new adventures in the - world of literature—all on one convenient platform. Join us and dive into a universe of endless - possibilities! -

    - +
    +
    + +
    +
    + +
    +
    + +
    -

    -
    +
    @@ -629,32 +871,28 @@

    Join us by creating an account or log in if you already have an account.

    Quick Links

    - - - +
    -
    - - - -
    + +
    +
    +
    +
    + + + -
    + + + diff --git a/assets/html/ngo.html b/assets/html/ngo.html index 8d661b38..9d099fd0 100644 --- a/assets/html/ngo.html +++ b/assets/html/ngo.html @@ -1,102 +1,142 @@ - - - - Donate Books to organizations + + + + Donate Books to Organizations - - + +
    -

    Donate Books to Organization

    -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - -
    -
    -
    - Thank you for your contribution! We will contact you for further details. +

    Donate Books to Organization

    +
    +
    + + +
    +
    + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + +
    +
    +
    + Thank you for your contribution! We will contact you for further + details. +
    - + diff --git a/assets/html/school.html b/assets/html/school.html index 91564d0b..ed4f9ae1 100644 --- a/assets/html/school.html +++ b/assets/html/school.html @@ -1,104 +1,142 @@ - - - + + + Donate Books to School - - + +
    -

    Donate Books to School

    -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - -
    -
    -
    - Thank you for your contribution! We will contact you for further details. +

    Donate Books to School

    +
    +
    + + +
    +
    + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + +
    +
    +
    + Thank you for your contribution! We will contact you for further + details. +
    - + diff --git a/assets/images/be.jpeg b/assets/images/be.jpeg new file mode 100644 index 00000000..7b8e9b97 Binary files /dev/null and b/assets/images/be.jpeg differ diff --git a/assets/images/cl.jpg b/assets/images/cl.jpg new file mode 100644 index 00000000..43eaac31 Binary files /dev/null and b/assets/images/cl.jpg differ diff --git a/assets/images/ctc1.png b/assets/images/ctc1.png new file mode 100644 index 00000000..78748857 Binary files /dev/null and b/assets/images/ctc1.png differ diff --git a/assets/images/ctc2.png b/assets/images/ctc2.png new file mode 100644 index 00000000..b0453328 Binary files /dev/null and b/assets/images/ctc2.png differ diff --git a/assets/images/ctc3.png b/assets/images/ctc3.png new file mode 100644 index 00000000..39d560ed Binary files /dev/null and b/assets/images/ctc3.png differ diff --git a/assets/images/ctc4.png b/assets/images/ctc4.png new file mode 100644 index 00000000..2cba5411 Binary files /dev/null and b/assets/images/ctc4.png differ diff --git a/assets/images/ctc5.png b/assets/images/ctc5.png new file mode 100644 index 00000000..11d8c9cd Binary files /dev/null and b/assets/images/ctc5.png differ diff --git a/assets/images/em.jpeg b/assets/images/em.jpeg new file mode 100644 index 00000000..6a5a4328 Binary files /dev/null and b/assets/images/em.jpeg differ diff --git a/assets/images/ja.jpeg b/assets/images/ja.jpeg new file mode 100644 index 00000000..aa434585 Binary files /dev/null and b/assets/images/ja.jpeg differ diff --git a/assets/images/jo.jpeg b/assets/images/jo.jpeg new file mode 100644 index 00000000..7cd4bd7d Binary files /dev/null and b/assets/images/jo.jpeg differ diff --git a/assets/images/ma.jpg b/assets/images/ma.jpg new file mode 100644 index 00000000..3438cd6c Binary files /dev/null and b/assets/images/ma.jpg differ diff --git a/assets/images/nes.jpeg b/assets/images/nes.jpeg new file mode 100644 index 00000000..5bc1617d Binary files /dev/null and b/assets/images/nes.jpeg differ diff --git a/assets/images/re.jpg b/assets/images/re.jpg new file mode 100644 index 00000000..34a1f6b8 Binary files /dev/null and b/assets/images/re.jpg differ diff --git a/assets/js/rate.js b/assets/js/rate.js index d76e03c0..30b25b20 100644 --- a/assets/js/rate.js +++ b/assets/js/rate.js @@ -1,42 +1,59 @@ -document.getElementById("submit-btn").addEventListener("click", function(event) { - event.preventDefault(); // Prevent default form submission +document.addEventListener("DOMContentLoaded", function() { + const toastMessage = document.getElementById("toastMessage"); - let selectedEmoji = document.querySelector('input[name="rate"]:checked'); - let feedback = document.getElementById("feedback").value.trim(); - - if (selectedEmoji && feedback !== "") { - // Logic for submitting feedback (you can add AJAX request here if needed) + document.getElementById("submit-btn").addEventListener("click", function(event) { + event.preventDefault(); // Prevent default form submission - // Show toast message - let toastMessage = document.getElementById("toastMessage"); - toastMessage.textContent = "Feedback submitted successfully :)"; - toastMessage.style.display = "block"; + let selectedEmoji = document.querySelector('input[name="rate"]:checked'); + let feedback = document.getElementById("feedback").value.trim(); + + if (selectedEmoji && feedback !== "") { + // Show success toast message + toastMessage.textContent = "Feedback submitted successfully :)"; + toastMessage.style.backgroundColor = "green"; // Green color for success + toastMessage.style.color = "white"; + toastMessage.style.padding = "10px"; + toastMessage.style.borderRadius = "5px"; + toastMessage.style.position = "fixed"; + toastMessage.style.bottom = "20px"; + toastMessage.style.right = "20px"; + toastMessage.style.zIndex = "1000"; + toastMessage.style.display = "block"; - // Hide toast message after 3 seconds (adjust as needed) - setTimeout(function() { - toastMessage.style.display = "none"; - }, 3000); + // Hide toast message after 3 seconds (adjust as needed) + setTimeout(function() { + toastMessage.style.display = "none"; + }, 3000); - // Reset form fields - document.getElementById("feedback").value = ""; - let starInputs = document.querySelectorAll('input[name="rate"]'); - starInputs.forEach(input => { - input.checked = false; - }); - } else { - let toastMessage = document.getElementById("toastMessage"); - toastMessage.textContent = "Select Emoji and give Feedback :("; - toastMessage.style.display = "block"; + // Reset form fields + document.getElementById("feedback").value = ""; + let starInputs = document.querySelectorAll('input[name="rate"]'); + starInputs.forEach(input => { + input.checked = false; + }); + } else { + // Show failure toast message + toastMessage.textContent = "Select Emoji and give Feedback :("; + toastMessage.style.backgroundColor = "red"; // Red color for failure + toastMessage.style.color = "white"; + toastMessage.style.padding = "10px"; + toastMessage.style.borderRadius = "5px"; + toastMessage.style.position = "fixed"; + toastMessage.style.bottom = "20px"; + toastMessage.style.right = "20px"; + toastMessage.style.zIndex = "1000"; + toastMessage.style.display = "block"; - // Hide toast message after 3 seconds (adjust as needed) - setTimeout(function() { - toastMessage.style.display = "none"; - }, 3000); - document.getElementById("feedback").value = ""; - let starInputs = document.querySelectorAll('input[name="rate"]'); - starInputs.forEach(input => { - input.checked = false; - }); - - } + // Hide toast message after 3 seconds (adjust as needed) + setTimeout(function() { + toastMessage.style.display = "none"; + }, 3000); + + document.getElementById("feedback").value = ""; + let starInputs = document.querySelectorAll('input[name="rate"]'); + starInputs.forEach(input => { + input.checked = false; + }); + } + }); }); diff --git a/assets/js/signinGoogle.js b/assets/js/signinGoogle.js index ef2520d1..4f04dac1 100644 --- a/assets/js/signinGoogle.js +++ b/assets/js/signinGoogle.js @@ -1,14 +1,5 @@ import { initializeApp } from "https://www.gstatic.com/firebasejs/10.12.1/firebase-app.js"; -import { getAuth, GoogleAuthProvider, signInWithPopup } from "https://www.gstatic.com/firebasejs/10.12.1/firebase-auth.js"; - -// const firebaseConfig = { -// apiKey: 'AIzaSyCu2WXknNce_49J5BLuR1DyHm319hu6dWc', -// authDomain: 'login-13127.firebaseapp.com', -// projectId: 'login-13127', -// storageBucket: 'login-13127.appspot.com', -// messagingSenderId: '151656578300', -// appId: '1:151656578300:web:c67208ab6ec437c844ab79' -// }; +import { getAuth, GoogleAuthProvider, FacebookAuthProvider, signInWithPopup } from "https://www.gstatic.com/firebasejs/10.12.1/firebase-auth.js"; const firebaseConfig = { apiKey: "AIzaSyAIDh842xGC_NZj6pMcB9THjNQ1DyUVnZU", @@ -21,59 +12,63 @@ const firebaseConfig = { const app = initializeApp(firebaseConfig); const auth = getAuth(app); -auth.languageCode = 'en' -const provider = new GoogleAuthProvider(); - -const google_login = document.getElementById("google-sign-in") -google_login.addEventListener("click", function () { +auth.languageCode = 'en'; - signInWithPopup(auth, provider) +const googleProvider = new GoogleAuthProvider(); +const facebookProvider = new FacebookAuthProvider(); +const googleLogin = document.getElementById("google-sign-in"); +googleLogin.addEventListener("click", function () { + signInWithPopup(auth, googleProvider) .then((result) => { - const credential = GoogleAuthProvider.credentialFromResult(result); const user = result.user; - //console.log(user); - sessionStorage.setItem('user-info',JSON.stringify({ //set user details in session storage - username:user.displayName - })) - - // window.location.href="./index.html"; - alert(user.email + " Login successfully!!!"); - - // document.querySelector('#logout').style.display = 'block'; - // alert("success"); - }).catch((error) => { - - const errorCode = error.code; + sessionStorage.setItem('user-info', JSON.stringify({ username: user.displayName })); + alert(user.email + " logged in successfully!"); + }) + .catch((error) => { const errorMessage = error.message; alert(errorMessage); }); +}); -}) - - -const google_signup = document.getElementById("google-signup") -google_signup.addEventListener("click", function () { - - signInWithPopup(auth, provider) - +const googleSignup = document.getElementById("google-signup"); +googleSignup.addEventListener("click", function () { + signInWithPopup(auth, googleProvider) .then((result) => { - const credential = GoogleAuthProvider.credentialFromResult(result); const user = result.user; console.log(user); - - //window.location.href="./index.html"; - alert(user.email + " Login successfully!!!"); - - }).catch((error) => { - - const errorCode = error.code; + alert(user.email + " signed up successfully!"); + }) + .catch((error) => { const errorMessage = error.message; + alert(errorMessage); }); +}); -}) - - - - +const facebookLogin = document.getElementById("facebook-sign-in"); +facebookLogin.addEventListener("click", function () { + signInWithPopup(auth, facebookProvider) + .then((result) => { + const user = result.user; + sessionStorage.setItem('user-info', JSON.stringify({ username: user.displayName })); + alert(user.email + " logged in successfully!"); + }) + .catch((error) => { + const errorMessage = error.message; + alert(errorMessage); + }); +}); +const facebookSignup = document.getElementById("facebook-signup"); +facebookSignup.addEventListener("click", function () { + signInWithPopup(auth, facebookProvider) + .then((result) => { + const user = result.user; + console.log(user); + alert(user.email + " signed up successfully!"); + }) + .catch((error) => { + const errorMessage = error.message; + alert(errorMessage); + }); +}); diff --git a/biographies.html b/biographies.html index 9cf4a105..55567479 100644 --- a/biographies.html +++ b/biographies.html @@ -325,26 +325,26 @@
  • @@ -518,7 +518,7 @@

    -

    "Fall in love on every page"

    +

    "Discover Extraordinary Lives"

    @@ -531,7 +531,7 @@

    "Fall in love on every page"

    -

    "Heartfelt tales of happiness and"

    +

    "Be Inspired by True Legends"

    @@ -542,7 +542,7 @@

    "Heartfelt tales of happiness and"

  • -

    "Enriching stories to warm your heart"

    +

    "Unlock Your Potential with Real Stories"

    diff --git a/chat.css b/chat.css index 2ce71c1f..6bcc71f6 100644 --- a/chat.css +++ b/chat.css @@ -1,79 +1,153 @@ /* Basic Styles */ body { - background: #ffb2a8; - margin: 0; font-family: Arial, sans-serif; + +} + +.mainbox { + /* margin-top: 45rem; */ + margin: 250px auto; + width: 800px; + background-color: white; + border-radius: 20px; + overflow: hidden; display: flex; flex-direction: column; - min-height: 100vh; - padding-top: 70px; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); } -/* Main Container */ #chat-container { - max-width: 90%; - margin: 80px auto 20px auto; /* Margin for top (avoiding fixed header) and bottom */ - padding: 20px; - border: 1px solid #ccc; - border-radius: 10px; - box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); - background: white; - flex: 1; - overflow: hidden; - margin-top: 40vh; - background-color: var(--white); + display: flex; + flex-direction: column; + height: 100%; } -/* User Input and Message Input */ #user-input, #message-input { display: flex; - justify-content: space-between; align-items: center; - margin-bottom: 10px; - width: 100%; /* Ensure full width usage */ - box-sizing: border-box; + padding: 15px; + background-color: #f5f5f5; } -#user-input input, #message-input input { - width: 80%; - padding: 10px; - border: 1px solid #ccc; - border-radius: 5px; - box-sizing: border-box; + +#username, #message { + flex-grow: 1; + border: none; + border-radius: 20px; + padding: 10px 15px; + font-size: 14px; + outline: none; } -#user-input button, #message-input button { - width: 15%; - padding: 10px; - background-color: rgb(117, 48, 48); + +#start-chat, #send-message, #gift-button { + background-color: #ff9b9b; color: white; border: none; - border-radius: 5px; + border-radius: 20px; + padding: 10px 15px; + margin-left: 10px; cursor: pointer; - box-sizing: border-box; + font-size: 14px; +} + +#chat-box { + flex-grow: 1; + display: flex; + flex-direction: column; } -/* Messages Display */ #messages { - border: 1px solid #ccc; - border-radius: 5px; - padding: 10px; - max-height: 300px; + flex-grow: 1; overflow-y: auto; - margin-bottom: 10px; - background:var(--white) + padding: 15px; + border: none; } + .message { - margin-bottom: 5px; - padding: 5px; - border-bottom: 1px solid #eee; + margin-bottom: 15px; + max-width: 80%; + padding: 10px 15px; + border-radius: 18px; } + +.message:nth-child(odd) { + background-color: #fae5e5; + border-radius: 18px 18px 0 18px; + align-self: flex-end; +} + +.message:nth-child(even) { + background-color: #f5f5f5; + border-radius: 18px 18px 18px 0; + align-self: flex-start; +} + .username { font-weight: bold; + margin-bottom: 5px; } + .timestamp { font-size: 0.8em; color: #888; + margin-top: 5px; } +#gift-button img { + width: 20px; + height: 20px; +} + +#backbutton { + background-color: #ff9b9b; + color: white; + border: none; + border-radius: 20px; + padding: 5px 10px; + margin-right: 10px; + cursor: pointer; + font-size: 12px; + text-decoration: none; +} + +#backbutton a { + color: white; + text-decoration: none; +} + +/* +.dropdown-menu { + display: none; + position: absolute; + background-color: white; + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); + padding: 10px; + border-radius: 5px; + z-index: 1000; +} + +.dropdown-menu.active { + display: block; +} + +.navbar-item { + position: relative; +} + +.dropdown-menu-list { + list-style-type: none; + padding: 0; + margin: 0; +} + +.dropdown-menu-item { + margin-top: 5px; +} + +.dropdown-menu-item a { + color: black; + text-decoration: none; +} */ + /* Header */ .navbar { display: flex; @@ -128,7 +202,7 @@ a { } /* Back Button */ -#backbutton { +/* #backbutton { display: flex; justify-content: center; align-items: center; @@ -139,7 +213,7 @@ a { border: none; border-radius: 5px; cursor: pointer; -} +} */ /* Footer */ footer { @@ -148,8 +222,8 @@ footer { align-items: flex-start; background-color: #ff9b9b; font-family: sans-serif; - padding: 20px 0; - margin-top: 300px; + padding: 20px 0; + margin-top: -200px; flex-wrap: wrap; } diff --git a/chat.html b/chat.html index b5bb0a23..56de9350 100644 --- a/chat.html +++ b/chat.html @@ -352,7 +352,7 @@
    @@ -437,26 +437,26 @@
  • @@ -470,6 +470,23 @@

    XYZ
    Book Lover

    document.getElementById("profile-avatar").src = `./assets/images/${savedAvatar}`; } }); +document.addEventListener('DOMContentLoaded', function () { + const moreLink = document.getElementById('more-link'); + const dropdownMenu = document.getElementById('dropdown-menu'); + + moreLink.addEventListener('click', function (event) { + event.preventDefault(); + dropdownMenu.classList.toggle('active'); + }); + + // Optional: Close dropdown when clicking outside + document.addEventListener('click', function (event) { + if (!moreLink.contains(event.target) && !dropdownMenu.contains(event.target)) { + dropdownMenu.classList.remove('active'); + } + }); +}); + function menuToggle() { @@ -580,6 +597,7 @@

    XYZ
    Book Lover

    +
    @@ -598,6 +616,7 @@

    XYZ
    Book Lover

    +
    diff --git a/chat.js b/chat.js index da6a2240..e9188a98 100644 --- a/chat.js +++ b/chat.js @@ -4,13 +4,13 @@ import { getFirestore, collection, addDoc, query, onSnapshot, orderBy } from "ht // Your Firebase configuration const firebaseConfig = { - apiKey: "AIzaSyDSuptEc82X5GVX3ykWA-j9L-zYQvNwEaI", - authDomain: "swap-reads-92a6e.firebaseapp.com", - projectId: "swap-reads-92a6e", - storageBucket: "swap-reads-92a6e.appspot.com", - messagingSenderId: "962202354873", - appId: "1:962202354873:web:af96b3c7692e885ca6c768", - measurementId: "G-3R8PM76438" + apiKey: "YOUR_API_KEY", + authDomain: "YOUR_AUTH_DOMAIN", + projectId: "YOUR_PROJECT_ID", + storageBucket: "YOUR_STORAGE_BUCKET", + messagingSenderId: "YOUR_MESSAGING_SENDER_ID", + appId: "YOUR_APP_ID", + measurementId: "YOUR_MEASUREMENT_ID" }; // Initialize Firebase and Firestore @@ -70,7 +70,7 @@ async function sendMessage() { messageText: messageText, timestamp: timestamp }); - messageInput.value = ''; + messageInput.value = ''; // Clear the input field after sending } catch (error) { console.error("Error adding message: ", error); } @@ -93,7 +93,11 @@ function loadMessages() { function displayMessage({ username, messageText, timestamp }) { const messageDiv = document.createElement('div'); messageDiv.className = 'message'; - messageDiv.innerHTML = `${username}: ${messageText} (${new Date(timestamp).toLocaleString()})`; + messageDiv.innerHTML = ` + ${username}: + ${messageText} + (${new Date(timestamp).toLocaleString()}) + `; messagesDiv.appendChild(messageDiv); messagesDiv.scrollTop = messagesDiv.scrollHeight; // Auto-scroll to the latest message } @@ -128,4 +132,3 @@ document.addEventListener('click', (event) => { } }); - diff --git a/costefficient.html b/costefficient.html index 5ede02e5..2468464b 100644 --- a/costefficient.html +++ b/costefficient.html @@ -3,6 +3,7 @@ + Cost Efficient - SwapReads @@ -346,6 +347,53 @@ text-align: center; /* Center align the text */ } + .menu { + display: none; + position: absolute; + top: 80px; + right: 0; + background-color: white; + box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.1); + border-radius: 8px; + width: 200px; + z-index: 1000; + margin-right:10px; + } + + .menu.active { + display: block; + } + + .menu h3 { + padding: 10px; + text-align: center; + } + + .menu ul { + list-style: none; + padding: 10px 0; + } + + .menu ul li { + padding: 10px; + display: flex; + align-items: center; + } + + .menu ul li img { + width: 20px; + height: 20px; + margin-right: 10px; + } + .profile img { + width: 50px; + height: 50px; + border-radius: 50%; + object-fit: cover; + border: 2px solid #fff; + box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.1); + } + .accept-cookies, .reject-cookies { width: 260px; /* Decrease the button width */ @@ -605,6 +653,7 @@ } .chapter-card{ width: 30vw; + height: 400px; } .genre{ margin-top: 200px; @@ -795,6 +844,64 @@
    +
    +
    + +
    + +
    + + + + diff --git a/environmental-impact.html b/environmental-impact.html index cf0cb8d0..b1dea13c 100644 --- a/environmental-impact.html +++ b/environmental-impact.html @@ -3,6 +3,7 @@ + Environmental Impact - SwapReads @@ -378,6 +379,53 @@ color: #A30F17; } + .menu { + display: none; + position: absolute; + top: 80px; + right: 0; + background-color: white; + box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.1); + border-radius: 8px; + width: 200px; + z-index: 1000; + margin-right:10px; + } + + .menu.active { + display: block; + } + + .menu h3 { + padding: 10px; + text-align: center; + } + + .menu ul { + list-style: none; + padding: 10px 0; + } + + .menu ul li { + padding: 10px; + display: flex; + align-items: center; + } + + .menu ul li img { + width: 20px; + height: 20px; + margin-right: 10px; + } + .profile img { + width: 50px; + height: 50px; + border-radius: 50%; + object-fit: cover; + border: 2px solid #fff; + box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.1); + } + #learn-more-link, #show-less-link { color: #A30F17; @@ -605,6 +653,7 @@ } .chapter-card{ width: 30vw; + height: 400px; } .genre{ margin-top: 200px; @@ -795,6 +844,64 @@
    +
    +
    + +
    + +
    + + + + diff --git a/historical-chronicals.html b/historical-chronicals.html index 2fd4354e..ccd248cd 100644 --- a/historical-chronicals.html +++ b/historical-chronicals.html @@ -58,6 +58,54 @@ + @@ -140,6 +188,64 @@
    +
    +
    + +
    + +
    + + + +
    +
    +
    +
  • +

    + + Address : +


    +
    + 12, Nayabad
    + Kolkata, India 700054 +
    +
  • +
  • +

    + + Phone : +


    + +91 9124421980 +
  • +
  • +
    + support@swapreads.com +
  • +
    +
    +
    + + + + + + @@ -3149,20 +3455,20 @@

    Quick Links

    @@ -3195,31 +3501,37 @@

    Quick Links

    } } + - -
    - + + + +
    +
    - - + + + +
    - - +
    + - + \ No newline at end of file diff --git a/intriguing-mysteries.html b/intriguing-mysteries.html index 28d4d396..b296c0d3 100644 --- a/intriguing-mysteries.html +++ b/intriguing-mysteries.html @@ -59,6 +59,55 @@ + @@ -141,6 +190,64 @@
    +
    +
    + +
    + +
    + + + +
  • -

    "Enriching stories to warm your heart"

    +

    "Unlock the Mysteries"

    diff --git a/lol.html b/lol.html index 49a2bff9..fde7f408 100644 --- a/lol.html +++ b/lol.html @@ -58,6 +58,54 @@ + @@ -140,6 +188,64 @@
  • +
    +
    + +
    + +
    + + + +
    +
    +
    + +
    + +
    + + + +
  • -

    "Enriching stories to warm your heart"

    +

    "Journey to Self-Discovery"

    diff --git a/package-lock.json b/package-lock.json index ff78a9f9..59e64d36 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "body-parser": "^1.20.2", "cors": "^2.8.5", "dotenv": "^16.4.5", - "firebase": "^10.12.2", + "firebase": "^10.12.4", "mongoose": "^8.3.5", "nodemailer": "^6.9.14", "nodemon": "^3.1.1", @@ -36,19 +36,22 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "license": "MIT", "engines": { "node": ">=14" } }, "node_modules/@firebase/analytics": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.10.4.tgz", - "integrity": "sha512-OJEl/8Oye/k+vJ1zV/1L6eGpc1XzAj+WG2TPznJ7PszL7sOFLBXkL9IjHfOCGDGpXeO3btozy/cYUqv4zgNeHg==", + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.10.6.tgz", + "integrity": "sha512-sB59EwcAvLt0fINGfMWmcRKcdUiYhE4AJNdDXSCSDo4D/ZXFRmb6qwX9YesKHXFB59XTLT03mAjqQcDrdym9qA==", + "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.7", - "@firebase/installations": "0.6.7", + "@firebase/component": "0.6.8", + "@firebase/installations": "0.6.8", "@firebase/logger": "0.4.2", - "@firebase/util": "1.9.6", + "@firebase/util": "1.9.7", + "safevalues": "0.6.0", "tslib": "^2.1.0" }, "peerDependencies": { @@ -56,14 +59,15 @@ } }, "node_modules/@firebase/analytics-compat": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.2.10.tgz", - "integrity": "sha512-ia68RcLQLLMFWrM10JfmFod7eJGwqr4/uyrtzHpTDnxGX/6gNCBTOuxdAbyWIqXI5XmcMQdz9hDijGKOHgDfPw==", + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.2.12.tgz", + "integrity": "sha512-rXWnOAdEHbvBPLNjFLu3U0yDZVIAi+C0DL+RkUEOirfSqAeQaKzBCATeBw6+K7FVpEnknhm4tZrvVUVtJjShMw==", + "license": "Apache-2.0", "dependencies": { - "@firebase/analytics": "0.10.4", + "@firebase/analytics": "0.10.6", "@firebase/analytics-types": "0.8.2", - "@firebase/component": "0.6.7", - "@firebase/util": "1.9.6", + "@firebase/component": "0.6.8", + "@firebase/util": "1.9.7", "tslib": "^2.1.0" }, "peerDependencies": { @@ -73,28 +77,32 @@ "node_modules/@firebase/analytics-types": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.8.2.tgz", - "integrity": "sha512-EnzNNLh+9/sJsimsA/FGqzakmrAUKLeJvjRHlg8df1f97NLUlFidk9600y0ZgWOp3CAxn6Hjtk+08tixlUOWyw==" + "integrity": "sha512-EnzNNLh+9/sJsimsA/FGqzakmrAUKLeJvjRHlg8df1f97NLUlFidk9600y0ZgWOp3CAxn6Hjtk+08tixlUOWyw==", + "license": "Apache-2.0" }, "node_modules/@firebase/app": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.10.5.tgz", - "integrity": "sha512-iY/fNot+hWPk9sTX8aHMqlcX9ynRvpGkskWAdUZ2eQQdLo8d1hSFYcYNwPv0Q/frGMasw8udKWMcFOEpC9fG8g==", + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.10.7.tgz", + "integrity": "sha512-7OCd53B+wnk/onbMLn/vM10pDjw97zzWUD8m3swtLYKJIrL+gDZ7HZ4xcbBLw7OB8ikzu8k1ORNjRe2itgAy4g==", + "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.7", + "@firebase/component": "0.6.8", "@firebase/logger": "0.4.2", - "@firebase/util": "1.9.6", + "@firebase/util": "1.9.7", "idb": "7.1.1", "tslib": "^2.1.0" } }, "node_modules/@firebase/app-check": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.8.4.tgz", - "integrity": "sha512-2tjRDaxcM5G7BEpytiDcIl+NovV99q8yEqRMKDbn4J4i/XjjuThuB4S+4PkmTnZiCbdLXQiBhkVxNlUDcfog5Q==", + "version": "0.8.6", + "resolved": "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.8.6.tgz", + "integrity": "sha512-uSzl0/SDw54hwuORWHDtldb9kK/QEVZOcoPn2mlIjMrJOLDug/6kcqnIN3IHzwmPyf23Epg0AGBktvG2FugW4w==", + "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.7", + "@firebase/component": "0.6.8", "@firebase/logger": "0.4.2", - "@firebase/util": "1.9.6", + "@firebase/util": "1.9.7", + "safevalues": "0.6.0", "tslib": "^2.1.0" }, "peerDependencies": { @@ -102,15 +110,16 @@ } }, "node_modules/@firebase/app-check-compat": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.3.11.tgz", - "integrity": "sha512-t01zaH3RJpKEey0nGduz3Is+uSz7Sj4U5nwOV6lWb+86s5xtxpIvBJzu/lKxJfYyfZ29eJwpdjEgT1/lm4iQyA==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.3.13.tgz", + "integrity": "sha512-1sbS5Apq7dLys1KYdNQsmZLFIjJoFP9Mv4bzIcdXuTkWQjr3X2qAvwiTslC6prVAUMiTV0eM9eicdQIXVsiSRw==", + "license": "Apache-2.0", "dependencies": { - "@firebase/app-check": "0.8.4", + "@firebase/app-check": "0.8.6", "@firebase/app-check-types": "0.5.2", - "@firebase/component": "0.6.7", + "@firebase/component": "0.6.8", "@firebase/logger": "0.4.2", - "@firebase/util": "1.9.6", + "@firebase/util": "1.9.7", "tslib": "^2.1.0" }, "peerDependencies": { @@ -120,38 +129,43 @@ "node_modules/@firebase/app-check-interop-types": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.3.2.tgz", - "integrity": "sha512-LMs47Vinv2HBMZi49C09dJxp0QT5LwDzFaVGf/+ITHe3BlIhUiLNttkATSXplc89A2lAaeTqjgqVkiRfUGyQiQ==" + "integrity": "sha512-LMs47Vinv2HBMZi49C09dJxp0QT5LwDzFaVGf/+ITHe3BlIhUiLNttkATSXplc89A2lAaeTqjgqVkiRfUGyQiQ==", + "license": "Apache-2.0" }, "node_modules/@firebase/app-check-types": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/@firebase/app-check-types/-/app-check-types-0.5.2.tgz", - "integrity": "sha512-FSOEzTzL5bLUbD2co3Zut46iyPWML6xc4x+78TeaXMSuJap5QObfb+rVvZJtla3asN4RwU7elaQaduP+HFizDA==" + "integrity": "sha512-FSOEzTzL5bLUbD2co3Zut46iyPWML6xc4x+78TeaXMSuJap5QObfb+rVvZJtla3asN4RwU7elaQaduP+HFizDA==", + "license": "Apache-2.0" }, "node_modules/@firebase/app-compat": { - "version": "0.2.35", - "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.2.35.tgz", - "integrity": "sha512-vgay/WRjeH0r97/Q6L6df2CMx7oyNFDsE5yPQ9oR1G+zx2eT0s8vNNh0WlKqQxUEWaOLRnXhQ8gy7uu0cBgTRg==", + "version": "0.2.37", + "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.2.37.tgz", + "integrity": "sha512-yiQLYT9LYQHuJGu/msuBLFtdWWTJ3Pz04E9gSeWykSB+8s0XXJJqfqQlghH7CcQ3KnJZR+Wuc3zSMcY3a+dn6Q==", + "license": "Apache-2.0", "dependencies": { - "@firebase/app": "0.10.5", - "@firebase/component": "0.6.7", + "@firebase/app": "0.10.7", + "@firebase/component": "0.6.8", "@firebase/logger": "0.4.2", - "@firebase/util": "1.9.6", + "@firebase/util": "1.9.7", "tslib": "^2.1.0" } }, "node_modules/@firebase/app-types": { "version": "0.9.2", "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.9.2.tgz", - "integrity": "sha512-oMEZ1TDlBz479lmABwWsWjzHwheQKiAgnuKxE0pz0IXCVx7/rtlkx1fQ6GfgK24WCrxDKMplZrT50Kh04iMbXQ==" + "integrity": "sha512-oMEZ1TDlBz479lmABwWsWjzHwheQKiAgnuKxE0pz0IXCVx7/rtlkx1fQ6GfgK24WCrxDKMplZrT50Kh04iMbXQ==", + "license": "Apache-2.0" }, "node_modules/@firebase/auth": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-1.7.4.tgz", - "integrity": "sha512-d2Fw17s5QesojwebrA903el20Li9/YGgkoOGJjagM4I1qAT36APa/FcZ+OX86KxbYKCtQKTMqraU8pxG7C2JWA==", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-1.7.5.tgz", + "integrity": "sha512-DMFR1OA/f1/voeuFbSORg9AP36pMgOoSb/DRgiDalLmIJsDTlQNMCu+givjMP4s/XL85+tBk2MerYnK/AscJjw==", + "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.7", + "@firebase/component": "0.6.8", "@firebase/logger": "0.4.2", - "@firebase/util": "1.9.6", + "@firebase/util": "1.9.7", "tslib": "^2.1.0", "undici": "5.28.4" }, @@ -166,14 +180,15 @@ } }, "node_modules/@firebase/auth-compat": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.5.9.tgz", - "integrity": "sha512-RX8Zh/3zz2CsVbmYfgHkfUm4fAEPCl+KHVIImNygV5jTGDF6oKOhBIpf4Yigclyu8ESQKZ4elyN0MBYm9/7zGw==", + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.5.10.tgz", + "integrity": "sha512-epDhgNIXmhl9DPuTW9Ec5NDJJKMFIdXBXiQI9O0xNHveow/ETtBCY86srzF7iCacqsd30CcpLwwXlhk8Y19Olg==", + "license": "Apache-2.0", "dependencies": { - "@firebase/auth": "1.7.4", + "@firebase/auth": "1.7.5", "@firebase/auth-types": "0.12.2", - "@firebase/component": "0.6.7", - "@firebase/util": "1.9.6", + "@firebase/component": "0.6.8", + "@firebase/util": "1.9.7", "tslib": "^2.1.0", "undici": "5.28.4" }, @@ -184,71 +199,78 @@ "node_modules/@firebase/auth-interop-types": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.2.3.tgz", - "integrity": "sha512-Fc9wuJGgxoxQeavybiuwgyi+0rssr76b+nHpj+eGhXFYAdudMWyfBHvFL/I5fEHniUM/UQdFzi9VXJK2iZF7FQ==" + "integrity": "sha512-Fc9wuJGgxoxQeavybiuwgyi+0rssr76b+nHpj+eGhXFYAdudMWyfBHvFL/I5fEHniUM/UQdFzi9VXJK2iZF7FQ==", + "license": "Apache-2.0" }, "node_modules/@firebase/auth-types": { "version": "0.12.2", "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.12.2.tgz", "integrity": "sha512-qsEBaRMoGvHO10unlDJhaKSuPn4pyoTtlQuP1ghZfzB6rNQPuhp/N/DcFZxm9i4v0SogjCbf9reWupwIvfmH6w==", + "license": "Apache-2.0", "peerDependencies": { "@firebase/app-types": "0.x", "@firebase/util": "1.x" } }, "node_modules/@firebase/component": { - "version": "0.6.7", - "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.7.tgz", - "integrity": "sha512-baH1AA5zxfaz4O8w0vDwETByrKTQqB5CDjRls79Sa4eAGAoERw4Tnung7XbMl3jbJ4B/dmmtsMrdki0KikwDYA==", + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.8.tgz", + "integrity": "sha512-LcNvxGLLGjBwB0dJUsBGCej2fqAepWyBubs4jt1Tiuns7QLbXHuyObZ4aMeBjZjWx4m8g1LoVI9QFpSaq/k4/g==", + "license": "Apache-2.0", "dependencies": { - "@firebase/util": "1.9.6", + "@firebase/util": "1.9.7", "tslib": "^2.1.0" } }, "node_modules/@firebase/database": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@firebase/database/-/database-1.0.5.tgz", - "integrity": "sha512-cAfwBqMQuW6HbhwI3Cb/gDqZg7aR0OmaJ85WUxlnoYW2Tm4eR0hFl5FEijI3/gYPUiUcUPQvTkGV222VkT7KPw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-1.0.6.tgz", + "integrity": "sha512-nrexUEG/fpVlHtWKkyfhTC3834kZ1WS7voNyqbBsBCqHXQOvznN5Z0L3nxBqdXSJyltNAf4ndFlQqm5gZiEczQ==", + "license": "Apache-2.0", "dependencies": { "@firebase/app-check-interop-types": "0.3.2", "@firebase/auth-interop-types": "0.2.3", - "@firebase/component": "0.6.7", + "@firebase/component": "0.6.8", "@firebase/logger": "0.4.2", - "@firebase/util": "1.9.6", + "@firebase/util": "1.9.7", "faye-websocket": "0.11.4", "tslib": "^2.1.0" } }, "node_modules/@firebase/database-compat": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-1.0.5.tgz", - "integrity": "sha512-NDSMaDjQ+TZEMDMmzJwlTL05kh1+0Y84C+kVMaOmNOzRGRM7VHi29I6YUhCetXH+/b1Wh4ZZRyp1CuWkd8s6hg==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-1.0.6.tgz", + "integrity": "sha512-1OGA0sLY47mkXjhICCrUTXEYFnSSXoiXWm1SHsN62b+Lzs5aKA3aWTjTUmYIoK93kDAMPkYpulSv8jcbH4Hwew==", + "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.7", - "@firebase/database": "1.0.5", - "@firebase/database-types": "1.0.3", + "@firebase/component": "0.6.8", + "@firebase/database": "1.0.6", + "@firebase/database-types": "1.0.4", "@firebase/logger": "0.4.2", - "@firebase/util": "1.9.6", + "@firebase/util": "1.9.7", "tslib": "^2.1.0" } }, "node_modules/@firebase/database-types": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-1.0.3.tgz", - "integrity": "sha512-39V/Riv2R3O/aUjYKh0xypj7NTNXNAK1bcgY5Kx+hdQPRS/aPTS8/5c0CGFYKgVuFbYlnlnhrCTYsh2uNhGwzA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-1.0.4.tgz", + "integrity": "sha512-mz9ZzbH6euFXbcBo+enuJ36I5dR5w+enJHHjy9Y5ThCdKUseqfDjW3vCp1YxE9zygFCSjJJ/z1cQ+zodvUcwPQ==", + "license": "Apache-2.0", "dependencies": { "@firebase/app-types": "0.9.2", - "@firebase/util": "1.9.6" + "@firebase/util": "1.9.7" } }, "node_modules/@firebase/firestore": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-4.6.3.tgz", - "integrity": "sha512-d/+N2iUsiJ/Dc7fApdpdmmTXzwuTCromsdA1lKwYfZtMIOd1fI881NSLwK2wV4I38wkLnvfKJUV6WpU1f3/ONg==", + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-4.6.4.tgz", + "integrity": "sha512-vk2MoH5HxYEhiNg1l+yBXq1Fkhue/11bFg4HdlTv6BJHcTnnAj2a+/afPpatcW4MOdYA3Tv+d5nGzWbbOC1SHw==", + "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.7", + "@firebase/component": "0.6.8", "@firebase/logger": "0.4.2", - "@firebase/util": "1.9.6", - "@firebase/webchannel-wrapper": "1.0.0", + "@firebase/util": "1.9.7", + "@firebase/webchannel-wrapper": "1.0.1", "@grpc/grpc-js": "~1.9.0", "@grpc/proto-loader": "^0.7.8", "tslib": "^2.1.0", @@ -262,14 +284,15 @@ } }, "node_modules/@firebase/firestore-compat": { - "version": "0.3.32", - "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.3.32.tgz", - "integrity": "sha512-at71mwK7a/mUXH0OgyY0+gUzedm/EUydDFYSFsBoO8DYowZ23Mgd6P4Rzq/Ll3zI/3xJN7LGe7Qp4iE/V/3Arg==", + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.3.33.tgz", + "integrity": "sha512-i42a2l31N95CwYEB7zmfK0FS1mrO6pwOLwxavCrwu1BCFrVVVQhUheTPIda/iGguK/2Nog0RaIR1bo7QkZEz3g==", + "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.7", - "@firebase/firestore": "4.6.3", + "@firebase/component": "0.6.8", + "@firebase/firestore": "4.6.4", "@firebase/firestore-types": "3.0.2", - "@firebase/util": "1.9.6", + "@firebase/util": "1.9.7", "tslib": "^2.1.0" }, "peerDependencies": { @@ -280,21 +303,23 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-3.0.2.tgz", "integrity": "sha512-wp1A+t5rI2Qc/2q7r2ZpjUXkRVPtGMd6zCLsiWurjsQpqPgFin3AhNibKcIzoF2rnToNa/XYtyWXuifjOOwDgg==", + "license": "Apache-2.0", "peerDependencies": { "@firebase/app-types": "0.x", "@firebase/util": "1.x" } }, "node_modules/@firebase/functions": { - "version": "0.11.5", - "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.11.5.tgz", - "integrity": "sha512-qrHJ+l62mZiU5UZiVi84t/iLXZlhRuSvBQsa2qvNLgPsEWR7wdpWhRmVdB7AU8ndkSHJjGlMICqrVnz47sgU7Q==", + "version": "0.11.6", + "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.11.6.tgz", + "integrity": "sha512-GPfIBPtpwQvsC7SQbgaUjLTdja0CsNwMoKSgrzA1FGGRk4NX6qO7VQU6XCwBiAFWbpbQex6QWkSMsCzLx1uibQ==", + "license": "Apache-2.0", "dependencies": { "@firebase/app-check-interop-types": "0.3.2", "@firebase/auth-interop-types": "0.2.3", - "@firebase/component": "0.6.7", + "@firebase/component": "0.6.8", "@firebase/messaging-interop-types": "0.2.2", - "@firebase/util": "1.9.6", + "@firebase/util": "1.9.7", "tslib": "^2.1.0", "undici": "5.28.4" }, @@ -303,14 +328,15 @@ } }, "node_modules/@firebase/functions-compat": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.3.11.tgz", - "integrity": "sha512-Qn+ts/M6Lj2/6i1cp5V5TRR+Hi9kyXyHbo+w9GguINJ87zxrCe6ulx3TI5AGQkoQa8YFHUhT3DMGmLFiJjWTSQ==", + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.3.12.tgz", + "integrity": "sha512-r3XUb5VlITWpML46JymfJPkK6I9j4SNlO7qWIXUc0TUmkv0oAfVoiIt1F83/NuMZXaGr4YWA/794nVSy4GV8tw==", + "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.7", - "@firebase/functions": "0.11.5", + "@firebase/component": "0.6.8", + "@firebase/functions": "0.11.6", "@firebase/functions-types": "0.6.2", - "@firebase/util": "1.9.6", + "@firebase/util": "1.9.7", "tslib": "^2.1.0" }, "peerDependencies": { @@ -320,15 +346,17 @@ "node_modules/@firebase/functions-types": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.6.2.tgz", - "integrity": "sha512-0KiJ9lZ28nS2iJJvimpY4nNccV21rkQyor5Iheu/nq8aKXJqtJdeSlZDspjPSBBiHRzo7/GMUttegnsEITqR+w==" + "integrity": "sha512-0KiJ9lZ28nS2iJJvimpY4nNccV21rkQyor5Iheu/nq8aKXJqtJdeSlZDspjPSBBiHRzo7/GMUttegnsEITqR+w==", + "license": "Apache-2.0" }, "node_modules/@firebase/installations": { - "version": "0.6.7", - "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.6.7.tgz", - "integrity": "sha512-i6iGoXRu5mX4rTsiMSSKrgh9pSEzD4hwBEzRh5kEhOTr8xN/wvQcCPZDSMVYKwM2XyCPBLVq0JzjyerwL0Rihg==", + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.6.8.tgz", + "integrity": "sha512-57V374qdb2+wT5v7+ntpLXBjZkO6WRgmAUbVkRfFTM/4t980p0FesbqTAcOIiM8U866UeuuuF8lYH70D3jM/jQ==", + "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.7", - "@firebase/util": "1.9.6", + "@firebase/component": "0.6.8", + "@firebase/util": "1.9.7", "idb": "7.1.1", "tslib": "^2.1.0" }, @@ -337,14 +365,15 @@ } }, "node_modules/@firebase/installations-compat": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@firebase/installations-compat/-/installations-compat-0.2.7.tgz", - "integrity": "sha512-RPcbD+3nqHbnhVjIOpWK2H5qzZ8pAAAScceiWph0VNTqpKyPQ5tDcp4V5fS0ELpfgsHYvroMLDKfeHxpfvm8cw==", + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@firebase/installations-compat/-/installations-compat-0.2.8.tgz", + "integrity": "sha512-pI2q8JFHB7yIq/szmhzGSWXtOvtzl6tCUmyykv5C8vvfOVJUH6mP4M4iwjbK8S1JotKd/K70+JWyYlxgQ0Kpyw==", + "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.7", - "@firebase/installations": "0.6.7", + "@firebase/component": "0.6.8", + "@firebase/installations": "0.6.8", "@firebase/installations-types": "0.5.2", - "@firebase/util": "1.9.6", + "@firebase/util": "1.9.7", "tslib": "^2.1.0" }, "peerDependencies": { @@ -355,6 +384,7 @@ "version": "0.5.2", "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.5.2.tgz", "integrity": "sha512-que84TqGRZJpJKHBlF2pkvc1YcXrtEDOVGiDjovP/a3s6W4nlbohGXEsBJo0JCeeg/UG9A+DEZVDUV9GpklUzA==", + "license": "Apache-2.0", "peerDependencies": { "@firebase/app-types": "0.x" } @@ -363,19 +393,21 @@ "version": "0.4.2", "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.2.tgz", "integrity": "sha512-Q1VuA5M1Gjqrwom6I6NUU4lQXdo9IAQieXlujeHZWvRt1b7qQ0KwBaNAjgxG27jgF9/mUwsNmO8ptBCGVYhB0A==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" } }, "node_modules/@firebase/messaging": { - "version": "0.12.9", - "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.12.9.tgz", - "integrity": "sha512-IH+JJmzbFGZXV3+TDyKdqqKPVfKRqBBg2BfYYOy7cm7J+SwV+uJMe8EnDKYeQLEQhtpwciPfJ3qQXJs2lbxDTw==", + "version": "0.12.10", + "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.12.10.tgz", + "integrity": "sha512-fGbxJPKpl2DIKNJGhbk4mYPcM+qE2gl91r6xPoiol/mN88F5Ym6UeRdMVZah+pijh9WxM55alTYwXuW40r1Y2Q==", + "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.7", - "@firebase/installations": "0.6.7", + "@firebase/component": "0.6.8", + "@firebase/installations": "0.6.8", "@firebase/messaging-interop-types": "0.2.2", - "@firebase/util": "1.9.6", + "@firebase/util": "1.9.7", "idb": "7.1.1", "tslib": "^2.1.0" }, @@ -384,13 +416,14 @@ } }, "node_modules/@firebase/messaging-compat": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@firebase/messaging-compat/-/messaging-compat-0.2.9.tgz", - "integrity": "sha512-5jN6wyhwPgBH02zOtmmoOeyfsmoD7ty48D1m0vVPsFg55RqN2Z3Q9gkZ5GmPklFPjTPLcxB1ObcHOZvThTkm7g==", + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@firebase/messaging-compat/-/messaging-compat-0.2.10.tgz", + "integrity": "sha512-FXQm7rcowkDm8kFLduHV35IRYCRo+Ng0PIp/t1+EBuEbyplaKkGjZ932pE+owf/XR+G/60ku2QRBptRGLXZydg==", + "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.7", - "@firebase/messaging": "0.12.9", - "@firebase/util": "1.9.6", + "@firebase/component": "0.6.8", + "@firebase/messaging": "0.12.10", + "@firebase/util": "1.9.7", "tslib": "^2.1.0" }, "peerDependencies": { @@ -400,17 +433,19 @@ "node_modules/@firebase/messaging-interop-types": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/@firebase/messaging-interop-types/-/messaging-interop-types-0.2.2.tgz", - "integrity": "sha512-l68HXbuD2PPzDUOFb3aG+nZj5KA3INcPwlocwLZOzPp9rFM9yeuI9YLl6DQfguTX5eAGxO0doTR+rDLDvQb5tA==" + "integrity": "sha512-l68HXbuD2PPzDUOFb3aG+nZj5KA3INcPwlocwLZOzPp9rFM9yeuI9YLl6DQfguTX5eAGxO0doTR+rDLDvQb5tA==", + "license": "Apache-2.0" }, "node_modules/@firebase/performance": { - "version": "0.6.7", - "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.6.7.tgz", - "integrity": "sha512-d+Q4ltjdJZqjzcdms5i0UC9KLYX7vKGcygZ+7zHA/Xk+bAbMD2CPU0nWTnlNFWifZWIcXZ/2mAMvaGMW3lypUA==", + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.6.8.tgz", + "integrity": "sha512-F+alziiIZ6Yn8FG47mxwljq+4XkgkT2uJIFRlkyViUQRLzrogaUJW6u/+6ZrePXnouKlKIwzqos3PVJraPEcCA==", + "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.7", - "@firebase/installations": "0.6.7", + "@firebase/component": "0.6.8", + "@firebase/installations": "0.6.8", "@firebase/logger": "0.4.2", - "@firebase/util": "1.9.6", + "@firebase/util": "1.9.7", "tslib": "^2.1.0" }, "peerDependencies": { @@ -418,15 +453,16 @@ } }, "node_modules/@firebase/performance-compat": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@firebase/performance-compat/-/performance-compat-0.2.7.tgz", - "integrity": "sha512-cb8ge/5iTstxfIGW+iiY+7l3FtN8gobNh9JSQNZgLC9xmcfBYWEs8IeEWMI6S8T+At0oHc3lv+b2kpRMUWr8zQ==", + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@firebase/performance-compat/-/performance-compat-0.2.8.tgz", + "integrity": "sha512-o7TFClRVJd3VIBoY7KZQqtCeW0PC6v9uBzM6Lfw3Nc9D7hM6OonqecYvh7NwJ6R14k+xM27frLS4BcCvFHKw2A==", + "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.7", + "@firebase/component": "0.6.8", "@firebase/logger": "0.4.2", - "@firebase/performance": "0.6.7", + "@firebase/performance": "0.6.8", "@firebase/performance-types": "0.2.2", - "@firebase/util": "1.9.6", + "@firebase/util": "1.9.7", "tslib": "^2.1.0" }, "peerDependencies": { @@ -436,17 +472,19 @@ "node_modules/@firebase/performance-types": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.2.2.tgz", - "integrity": "sha512-gVq0/lAClVH5STrIdKnHnCo2UcPLjJlDUoEB/tB4KM+hAeHUxWKnpT0nemUPvxZ5nbdY/pybeyMe8Cs29gEcHA==" + "integrity": "sha512-gVq0/lAClVH5STrIdKnHnCo2UcPLjJlDUoEB/tB4KM+hAeHUxWKnpT0nemUPvxZ5nbdY/pybeyMe8Cs29gEcHA==", + "license": "Apache-2.0" }, "node_modules/@firebase/remote-config": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.4.7.tgz", - "integrity": "sha512-5oPNrPFLsbsjpq0lUEIXoDF2eJK7vAbyXe/DEuZQxnwJlfR7aQbtUlEkRgQWcicXpyDmAmDLo7q7lDbCYa6CpA==", + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.4.8.tgz", + "integrity": "sha512-AMLqe6wfIRnjc6FkCWOSUjhc1fSTEf8o+cv1NolFvbiJ/tU+TqN4pI7pT+MIKQzNiq5fxLehkOx+xtAQBxPJKQ==", + "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.7", - "@firebase/installations": "0.6.7", + "@firebase/component": "0.6.8", + "@firebase/installations": "0.6.8", "@firebase/logger": "0.4.2", - "@firebase/util": "1.9.6", + "@firebase/util": "1.9.7", "tslib": "^2.1.0" }, "peerDependencies": { @@ -454,15 +492,16 @@ } }, "node_modules/@firebase/remote-config-compat": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.2.7.tgz", - "integrity": "sha512-Fq0oneQ4SluLnfr5/HfzRS1TZf1ANj1rWbCCW3+oC98An3nE+sCdp+FSuHsEVNwgMg4Tkwx9Oom2lkKeU+Vn+w==", + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.2.8.tgz", + "integrity": "sha512-UxSFOp6dzFj2AHB8Bq/BYtbq5iFyizKx4Rd6WxAdaKYM8cnPMeK+l2v+Oogtjae+AeyHRI+MfL2acsfVe5cd2A==", + "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.7", + "@firebase/component": "0.6.8", "@firebase/logger": "0.4.2", - "@firebase/remote-config": "0.4.7", + "@firebase/remote-config": "0.4.8", "@firebase/remote-config-types": "0.3.2", - "@firebase/util": "1.9.6", + "@firebase/util": "1.9.7", "tslib": "^2.1.0" }, "peerDependencies": { @@ -472,15 +511,17 @@ "node_modules/@firebase/remote-config-types": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.3.2.tgz", - "integrity": "sha512-0BC4+Ud7y2aPTyhXJTMTFfrGGLqdYXrUB9sJVAB8NiqJswDTc4/2qrE/yfUbnQJhbSi6ZaTTBKyG3n1nplssaA==" + "integrity": "sha512-0BC4+Ud7y2aPTyhXJTMTFfrGGLqdYXrUB9sJVAB8NiqJswDTc4/2qrE/yfUbnQJhbSi6ZaTTBKyG3n1nplssaA==", + "license": "Apache-2.0" }, "node_modules/@firebase/storage": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.12.5.tgz", - "integrity": "sha512-nGWBOGFNr10j0LA4NJ3/Yh3us/lb0Q1xSIKZ38N6FcS+vY54nqJ7k3zE3PENregHC8+8txRow++A568G3v8hOA==", + "version": "0.12.6", + "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.12.6.tgz", + "integrity": "sha512-Zgb9WuehJxzhj7pGXUvkAEaH+3HvLjD9xSZ9nepuXf5f8378xME7oGJtREr/RnepdDA5YW0XIxe0QQBNHpe1nw==", + "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.7", - "@firebase/util": "1.9.6", + "@firebase/component": "0.6.8", + "@firebase/util": "1.9.7", "tslib": "^2.1.0", "undici": "5.28.4" }, @@ -489,14 +530,15 @@ } }, "node_modules/@firebase/storage-compat": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@firebase/storage-compat/-/storage-compat-0.3.8.tgz", - "integrity": "sha512-qDfY9kMb6Ch2hZb40sBjDQ8YPxbjGOxuT+gU1Z0iIVSSpSX0f4YpGJCypUXiA0T11n6InCXB+T/Dknh2yxVTkg==", + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@firebase/storage-compat/-/storage-compat-0.3.9.tgz", + "integrity": "sha512-WWgAp5bTW961oIsCc9+98m4MIVKpEqztAlIngfHfwO/x3DYoBPRl/awMRG3CAXyVxG+7B7oHC5IsnqM+vTwx2A==", + "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.7", - "@firebase/storage": "0.12.5", + "@firebase/component": "0.6.8", + "@firebase/storage": "0.12.6", "@firebase/storage-types": "0.8.2", - "@firebase/util": "1.9.6", + "@firebase/util": "1.9.7", "tslib": "^2.1.0" }, "peerDependencies": { @@ -507,28 +549,31 @@ "version": "0.8.2", "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.8.2.tgz", "integrity": "sha512-0vWu99rdey0g53lA7IShoA2Lol1jfnPovzLDUBuon65K7uKG9G+L5uO05brD9pMw+l4HRFw23ah3GwTGpEav6g==", + "license": "Apache-2.0", "peerDependencies": { "@firebase/app-types": "0.x", "@firebase/util": "1.x" } }, "node_modules/@firebase/util": { - "version": "1.9.6", - "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.6.tgz", - "integrity": "sha512-IBr1MZbp4d5MjBCXL3TW1dK/PDXX4yOGbiwRNh1oAbE/+ci5Uuvy9KIrsFYY80as1I0iOaD5oOMA9Q8j4TJWcw==", + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.7.tgz", + "integrity": "sha512-fBVNH/8bRbYjqlbIhZ+lBtdAAS4WqZumx03K06/u7fJSpz1TGjEMm1ImvKD47w+xaFKIP2ori6z8BrbakRfjJA==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" } }, "node_modules/@firebase/vertexai-preview": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@firebase/vertexai-preview/-/vertexai-preview-0.0.2.tgz", - "integrity": "sha512-NOOL63kFQRq45ioi5P+hlqj/4LNmvn1URhGjQdvyV54c1Irvoq26aW861PRRLjrSMIeNeiLtCLD5pe+ediepAg==", + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@firebase/vertexai-preview/-/vertexai-preview-0.0.3.tgz", + "integrity": "sha512-KVtUWLp+ScgiwkDKAvNkVucAyhLVQp6C6lhnVEuIg4mWhWcS3oerjAeVhZT4uNofKwWxRsOaB2Yec7DMTXlQPQ==", + "license": "Apache-2.0", "dependencies": { "@firebase/app-check-interop-types": "0.3.2", - "@firebase/component": "0.6.7", + "@firebase/component": "0.6.8", "@firebase/logger": "0.4.2", - "@firebase/util": "1.9.6", + "@firebase/util": "1.9.7", "tslib": "^2.1.0" }, "engines": { @@ -540,14 +585,16 @@ } }, "node_modules/@firebase/webchannel-wrapper": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-1.0.0.tgz", - "integrity": "sha512-zuWxyfXNbsKbm96HhXzainONPFqRcoZblQ++e9cAIGUuHfl2cFSBzW01jtesqWG/lqaUyX3H8O1y9oWboGNQBA==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-1.0.1.tgz", + "integrity": "sha512-jmEnr/pk0yVkA7mIlHNnxCi+wWzOFUg0WyIotgkKAb2u1J7fAeDBcVNSTjTihbAYNusCLQdW5s9IJ5qwnEufcQ==", + "license": "Apache-2.0" }, "node_modules/@grpc/grpc-js": { "version": "1.9.15", "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.15.tgz", "integrity": "sha512-nqE7Hc0AzI+euzUwDAy0aY5hCp10r734gMGRdU+qOPX0XSceI2ULrcXB5U2xSc5VkWwalCj4M7GzCAygZl2KoQ==", + "license": "Apache-2.0", "dependencies": { "@grpc/proto-loader": "^0.7.8", "@types/node": ">=12.12.47" @@ -560,6 +607,7 @@ "version": "0.7.13", "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.13.tgz", "integrity": "sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==", + "license": "Apache-2.0", "dependencies": { "lodash.camelcase": "^4.3.0", "long": "^5.0.0", @@ -584,27 +632,32 @@ "node_modules/@protobufjs/aspromise": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/base64": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/codegen": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/eventemitter": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/fetch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "license": "BSD-3-Clause", "dependencies": { "@protobufjs/aspromise": "^1.1.1", "@protobufjs/inquire": "^1.1.0" @@ -613,34 +666,40 @@ "node_modules/@protobufjs/float": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/inquire": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/path": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/pool": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/utf8": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", + "license": "BSD-3-Clause" }, "node_modules/@types/node": { - "version": "20.14.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz", - "integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==", + "version": "22.0.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.0.2.tgz", + "integrity": "sha512-yPL6DyFwY5PiMVEwymNeqUTKsDczQBJ/5T7W/46RwLU/VH+AA8aT5TZkvBviLKLbbm0hlfftEkGrNzfRk/fofQ==", + "license": "MIT", "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.11.1" } }, "node_modules/@types/webidl-conversions": { @@ -673,6 +732,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", "engines": { "node": ">=8" } @@ -681,6 +741,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -830,6 +891,7 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -843,6 +905,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -853,7 +916,8 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" }, "node_modules/concat-map": { "version": "0.0.1", @@ -967,7 +1031,8 @@ "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" }, "node_modules/encodeurl": { "version": "1.0.2", @@ -1001,6 +1066,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "license": "MIT", "engines": { "node": ">=6" } @@ -1067,6 +1133,7 @@ "version": "0.11.4", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "license": "Apache-2.0", "dependencies": { "websocket-driver": ">=0.5.1" }, @@ -1104,37 +1171,38 @@ } }, "node_modules/firebase": { - "version": "10.12.2", - "resolved": "https://registry.npmjs.org/firebase/-/firebase-10.12.2.tgz", - "integrity": "sha512-ZxEdtSvP1I9su1yf32D8TIdgxtPgxwr6z3jYAR1TXS/t+fVfpoPc/N1/N2bxOco9mNjUoc+od34v5Fn4GeKs6Q==", - "dependencies": { - "@firebase/analytics": "0.10.4", - "@firebase/analytics-compat": "0.2.10", - "@firebase/app": "0.10.5", - "@firebase/app-check": "0.8.4", - "@firebase/app-check-compat": "0.3.11", - "@firebase/app-compat": "0.2.35", + "version": "10.12.4", + "resolved": "https://registry.npmjs.org/firebase/-/firebase-10.12.4.tgz", + "integrity": "sha512-SQz49NMpwG4MLTPZ9C8jBp7IyS2haTvsIvjclgu+v/jvzNtjZoxIcoF6A13EIfBHmJ5eiuVlvttxElOf7LnJew==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/analytics": "0.10.6", + "@firebase/analytics-compat": "0.2.12", + "@firebase/app": "0.10.7", + "@firebase/app-check": "0.8.6", + "@firebase/app-check-compat": "0.3.13", + "@firebase/app-compat": "0.2.37", "@firebase/app-types": "0.9.2", - "@firebase/auth": "1.7.4", - "@firebase/auth-compat": "0.5.9", - "@firebase/database": "1.0.5", - "@firebase/database-compat": "1.0.5", - "@firebase/firestore": "4.6.3", - "@firebase/firestore-compat": "0.3.32", - "@firebase/functions": "0.11.5", - "@firebase/functions-compat": "0.3.11", - "@firebase/installations": "0.6.7", - "@firebase/installations-compat": "0.2.7", - "@firebase/messaging": "0.12.9", - "@firebase/messaging-compat": "0.2.9", - "@firebase/performance": "0.6.7", - "@firebase/performance-compat": "0.2.7", - "@firebase/remote-config": "0.4.7", - "@firebase/remote-config-compat": "0.2.7", - "@firebase/storage": "0.12.5", - "@firebase/storage-compat": "0.3.8", - "@firebase/util": "1.9.6", - "@firebase/vertexai-preview": "0.0.2" + "@firebase/auth": "1.7.5", + "@firebase/auth-compat": "0.5.10", + "@firebase/database": "1.0.6", + "@firebase/database-compat": "1.0.6", + "@firebase/firestore": "4.6.4", + "@firebase/firestore-compat": "0.3.33", + "@firebase/functions": "0.11.6", + "@firebase/functions-compat": "0.3.12", + "@firebase/installations": "0.6.8", + "@firebase/installations-compat": "0.2.8", + "@firebase/messaging": "0.12.10", + "@firebase/messaging-compat": "0.2.10", + "@firebase/performance": "0.6.8", + "@firebase/performance-compat": "0.2.8", + "@firebase/remote-config": "0.4.8", + "@firebase/remote-config-compat": "0.2.8", + "@firebase/storage": "0.12.6", + "@firebase/storage-compat": "0.3.9", + "@firebase/util": "1.9.7", + "@firebase/vertexai-preview": "0.0.3" } }, "node_modules/forwarded": { @@ -1180,6 +1248,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -1294,7 +1363,8 @@ "node_modules/http-parser-js": { "version": "0.5.8", "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "license": "MIT" }, "node_modules/iconv-lite": { "version": "0.4.24", @@ -1310,7 +1380,8 @@ "node_modules/idb": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", - "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==" + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", + "license": "ISC" }, "node_modules/ignore-by-default": { "version": "1.0.1", @@ -1354,6 +1425,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", "engines": { "node": ">=8" } @@ -1388,12 +1460,14 @@ "node_modules/lodash.camelcase": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "license": "MIT" }, "node_modules/long": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", - "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==", + "license": "Apache-2.0" }, "node_modules/media-typer": { "version": "0.3.0", @@ -1722,6 +1796,7 @@ "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.3.2.tgz", "integrity": "sha512-RXyHaACeqXeqAKGLDl68rQKbmObRsTIn4TYVUUug1KfS47YWCo5MacGITEryugIgZqORCvJWEk4l449POg5Txg==", "hasInstallScript": true, + "license": "BSD-3-Clause", "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", @@ -1818,6 +1893,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -1846,6 +1922,12 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "node_modules/safevalues": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/safevalues/-/safevalues-0.6.0.tgz", + "integrity": "sha512-MZ7DcTOcIoPXN36/UONVE9BT0pmwlCr9WcS7Pj/q4FxOwr33FkWC0CUWj/THQXYWxf/F7urbhaHaOeFPSqGqHA==", + "license": "Apache-2.0" + }, "node_modules/semver": { "version": "7.6.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", @@ -1976,6 +2058,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -1989,6 +2072,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -2048,7 +2132,8 @@ "node_modules/tslib": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" }, "node_modules/type-is": { "version": "1.6.18", @@ -2071,6 +2156,7 @@ "version": "5.28.4", "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", + "license": "MIT", "dependencies": { "@fastify/busboy": "^2.0.0" }, @@ -2079,9 +2165,10 @@ } }, "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + "version": "6.11.1", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.11.1.tgz", + "integrity": "sha512-mIDEX2ek50x0OlRgxryxsenE5XaQD4on5U2inY7RApK3SOJpofyw7uW2AyfMKkhAxXIceo2DeWGVGwyvng1GNQ==", + "license": "MIT" }, "node_modules/unpipe": { "version": "1.0.0", @@ -2128,6 +2215,7 @@ "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "license": "Apache-2.0", "dependencies": { "http-parser-js": ">=0.5.1", "safe-buffer": ">=5.1.0", @@ -2141,6 +2229,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "license": "Apache-2.0", "engines": { "node": ">=0.8.0" } @@ -2161,6 +2250,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -2177,6 +2267,7 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", "engines": { "node": ">=10" } @@ -2185,6 +2276,7 @@ "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -2202,6 +2294,7 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", "engines": { "node": ">=12" } diff --git a/package.json b/package.json index 9f7de721..aa18faa8 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "body-parser": "^1.20.2", "cors": "^2.8.5", "dotenv": "^16.4.5", - "firebase": "^10.12.2", + "firebase": "^10.12.4", "mongoose": "^8.3.5", "nodemailer": "^6.9.14", "nodemon": "^3.1.1", diff --git a/privacynotice.html b/privacynotice.html index 3f6c01d5..31dd0a1e 100644 --- a/privacynotice.html +++ b/privacynotice.html @@ -227,127 +227,116 @@ right: 12px; top: 10px; } - -
    - -
    - -
    -
    -
    - - -       
    -
    +
    diff --git a/profile.html b/profile.html index f05857fb..2c6ff2bf 100644 --- a/profile.html +++ b/profile.html @@ -19,14 +19,14 @@ padding: 0; box-sizing: border-box; font-family: Arial, sans-serif; - height: 100vh; /* Ensure body takes full height of the viewport */ - overflow: hidden; /* Prevent scrolling on the body */ + height: 100vh; + overflow: hidden; } .profile-container { display: flex; - height: 100vh; /* Ensure it takes the full height of the viewport */ - overflow-y:scroll; + height: 100vh; + overflow-y: scroll; } .profile-sidebar { @@ -35,14 +35,14 @@ background: #f57d7d; border-right: 1px solid #ddd; box-sizing: border-box; - overflow-y: auto; /* Allow scrolling if content overflows */ + overflow-y: auto; } .profile-main { flex: 1; padding: 20px; box-sizing: border-box; - overflow-y: auto; /* Allow scrolling if content overflows */ + overflow-y: auto; } .profile-last-login { @@ -141,6 +141,21 @@ margin-bottom: 20px; text-align: center; } + + .clear-item-btn, .clear-wishlist-btn { + background: #f44336; + color: white; + border: none; + padding: 5px 10px; + cursor: pointer; + border-radius: 5px; + margin-left: 10px; + transition: background 0.3s; + } + + .clear-item-btn:hover, .clear-wishlist-btn:hover { + background: #d32f2f; + } @@ -176,11 +191,12 @@

    Order History

    Wishlist

    -
      -
    • Product 1
    • -
    • Product 2
    • -
    • Product 3
    • +
        +
      • Product 1
      • +
      • Product 2
      • +
      • Product 3
      +

    Saved Addresses

    @@ -236,109 +252,129 @@

    Notifications

    } if (lastLoginTime) { const loginTimeElement = document.getElementById("last-login-time"); - loginTimeElement.textContent = `Last login: ${new Date(lastLoginTime).toLocaleString()}`; - loginTimeElement.style.opacity = 1; // Ensure it's visible after animation + loginTimeElement.textContent = `Last login: ${lastLoginTime}`; + loginTimeElement.style.opacity = 1; + } + + // Update Profile Completion + updateProfileCompletion(); + + // Set personalized greeting + setPersonalizedGreeting(); + + // Load activities + loadActivities(); + + // Load notifications + loadNotifications(); + }); + + function setPersonalizedGreeting() { + const now = new Date(); + const hours = now.getHours(); + let greeting = "Hello"; + + if (hours < 12) { + greeting = "Good morning"; + } else if (hours < 18) { + greeting = "Good afternoon"; } else { - // Set last login time if not already set - setLastLoginTime(); + greeting = "Good evening"; } - // Calculate profile completion percentage - calculateProfileCompletion(); + const profileName = document.querySelector(".profile-name").textContent; + document.getElementById("greeting").textContent = `${greeting}, ${profileName}!`; + } + + function updateProfileCompletion() { + const requiredFields = ["profileName", "profileEmail", "profilePhone"]; + let filledFields = 0; + + requiredFields.forEach(field => { + if (localStorage.getItem(field)) { + filledFields++; + } + }); + + const completionPercentage = Math.round((filledFields / requiredFields.length) * 100); + document.getElementById("completion-percentage").textContent = `${completionPercentage}%`; + document.getElementById("progress-bar").style.width = `${completionPercentage}%`; + } - // Add personalized greeting - addPersonalizedGreeting(); + function editProfile() { + // Redirect to the profile editing page + window.location.href = "edit_profile.html"; + } - // Dynamically add recent activities + function loadActivities() { const activities = [ - "Logged in", - "Viewed product 'Product 1'", - "Added 'Product 2' to wishlist", - "Checked out order #1234" + "You viewed Product 1", + "You added Product 2 to your cart", + "You made a purchase of Product 3" ]; + const activityList = document.getElementById("activity-list"); activities.forEach((activity, index) => { const li = document.createElement("li"); li.textContent = activity; - if (index < 2) { + if (index < 3) { li.classList.add("visible"); } activityList.appendChild(li); }); + } - // Dynamically add notifications + function toggleActivities() { + const activityListItems = document.querySelectorAll(".activity-list li"); + const readMoreBtn = document.getElementById("read-more"); + + activityListItems.forEach(item => { + item.classList.toggle("visible"); + }); + + if (readMoreBtn.textContent === "Read More") { + readMoreBtn.textContent = "Show Less"; + } else { + readMoreBtn.textContent = "Read More"; + } + } + + function loadNotifications() { const notifications = [ - "Your order #5678 has been shipped", - "New product 'Product 4' added to wishlist", - "Price drop alert on 'Product 3'" + "Your order #1234 has been shipped", + "Your order #5678 is out for delivery", + "Your order #91011 has been delivered" ]; + const notificationList = document.getElementById("notification-list"); notifications.forEach(notification => { const li = document.createElement("li"); li.textContent = notification; notificationList.appendChild(li); }); - }); - - function editProfile() { - window.location.href = "./assets/html/profileedit.html"; } - // Set last login time when the user logs in (first visit) - function setLastLoginTime() { - const now = new Date().toISOString(); - localStorage.setItem("lastLoginTime", now); - const loginTimeElement = document.getElementById("last-login-time"); - loginTimeElement.textContent = `Last login: ${new Date(now).toLocaleString()}`; - loginTimeElement.style.opacity = 1; // Ensure it's visible after animation + function clearWishlist() { + const wishlist = document.getElementById("wishlist"); + wishlist.innerHTML = ""; // Clear all items from the wishlist + // Optionally, you can also clear the wishlist from localStorage if needed + // localStorage.removeItem("wishlistItems"); } - function calculateProfileCompletion() { - let completedFields = 0; - const totalFields = 3; // Assuming name, email, and phone are the fields - - if (localStorage.getItem("profileName")) completedFields++; - if (localStorage.getItem("profileEmail")) completedFields++; - if (localStorage.getItem("profilePhone")) completedFields++; - - const completionPercentage = Math.round((completedFields / totalFields) * 100); - document.getElementById("completion-percentage").textContent = `${completionPercentage}%`; - document.getElementById("progress-bar").style.width = `${completionPercentage}%`; + function clearWishlistItem(button) { + const item = button.parentElement; // Get the parent list item + item.remove(); // Remove the item from the list + // Optionally, you can also update the wishlist in localStorage if needed + // updateWishlistInLocalStorage(); } - function addPersonalizedGreeting() { - const now = new Date(); - const hour = now.getHours(); - let greeting = "Hello"; - - if (hour < 12) { - greeting = "Good morning"; - } else if (hour < 18) { - greeting = "Good afternoon"; - } else { - greeting = "Good evening"; - } - - const name = localStorage.getItem("profileName") || "User"; - document.getElementById("greeting").textContent = `${greeting}, ${name}!`; - } - - function toggleActivities() { - const activityList = document.getElementById("activity-list"); - const readMore = document.getElementById("read-more"); - const activities = activityList.querySelectorAll("li"); - - activities.forEach((activity, index) => { - if (index >= 2) { - activity.classList.toggle("visible"); - } + // Example function to update the wishlist in localStorage (if you're using localStorage) + function updateWishlistInLocalStorage() { + const wishlistItems = []; + document.querySelectorAll(".wishlist li").forEach(item => { + wishlistItems.push(item.textContent.trim()); }); - - if (readMore.textContent === "Read More") { - readMore.textContent = "Show Less"; - } else { - readMore.textContent = "Read More"; - } + localStorage.setItem("wishlistItems", JSON.stringify(wishlistItems)); } diff --git a/romantic-esc.html b/romantic-esc.html index ca4079a5..2e50ef7b 100644 --- a/romantic-esc.html +++ b/romantic-esc.html @@ -59,6 +59,54 @@ +
  • +
    +
    + +
    + +
    + + + +
    +
    +
    + +
    + +
    + + + +
    +
    +
    + +
    + +
    + + + +