diff --git a/.changeset/config.json b/.changeset/config.json index d5614f1353..71bcd4b786 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -4,8 +4,8 @@ "commit": false, "fixed": [], "linked": [], - "access": "restricted", + "access": "public", "baseBranch": "main", "updateInternalDependencies": "patch", - "ignore": ["@formbricks/formbricks-com"] + "ignore": ["@formbricks/formbricks-com", "@formbricks/demo"] } diff --git a/.github/workflows/cron-weeklySummary.yml b/.github/workflows/cron-weeklySummary.yml index 5647844061..7ccc078ff4 100644 --- a/.github/workflows/cron-weeklySummary.yml +++ b/.github/workflows/cron-weeklySummary.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - name: cURL request - if: ${{ env.APP_URL && env.CRON_SECRET }} + if: ${{ secrets.APP_URL && secrets.CRON_SECRET }} run: | curl ${{ secrets.APP_URL }}/api/cron/weekly_summary \ -X POST \ diff --git a/.github/workflows/release-on-dockerhub.yml b/.github/workflows/release-on-dockerhub.yml new file mode 100644 index 0000000000..6e7980532d --- /dev/null +++ b/.github/workflows/release-on-dockerhub.yml @@ -0,0 +1,40 @@ +name: Release Formbricks Image on Dockerhub + +on: + push: + tags: + - "v*" + +jobs: + release-image-on-dockerhub: + name: Release + runs-on: ubuntu-latest + steps: + - name: Checkout Repo + uses: actions/checkout@v2 + + - name: Log in to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Get Release Tag + id: extract_release_tag + run: | + TAG=${{ github.ref }} + TAG=${TAG#refs/tags/v} + echo "RELEASE_TAG=$TAG" >> $GITHUB_ENV + + - name: Build and push Docker image + uses: docker/build-push-action@v4 + with: + context: . + file: ./apps/web/Dockerfile + push: true + tags: | + ${{ secrets.DOCKER_USERNAME }}/formbricks:${{ env.RELEASE_TAG }} + ${{ secrets.DOCKER_USERNAME }}/formbricks:latest diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index fe91bcf742..2123b5b45d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -24,7 +24,7 @@ jobs: node-version: 18.x - name: Install pnpm - uses: pnpm/action-setup@v2.2.2 + uses: pnpm/action-setup@v2.2.4 - name: Install Dependencies run: pnpm install --config.platform=linux --config.architecture=x64 diff --git a/apps/demo/package.json b/apps/demo/package.json index db8d589327..b68a551a24 100644 --- a/apps/demo/package.json +++ b/apps/demo/package.json @@ -13,7 +13,7 @@ "dependencies": { "@formbricks/js": "workspace:*", "@heroicons/react": "^2.0.18", - "next": "13.4.8", + "next": "13.4.9", "react": "18.2.0", "react-dom": "18.2.0" }, diff --git a/apps/formbricks-com/package.json b/apps/formbricks-com/package.json index 39c811cde2..e6b6a09047 100644 --- a/apps/formbricks-com/package.json +++ b/apps/formbricks-com/package.json @@ -21,12 +21,12 @@ "@mapbox/rehype-prism": "^0.8.0", "@mdx-js/loader": "^2.3.0", "@mdx-js/react": "^2.3.0", - "@next/mdx": "^13.4.8", + "@next/mdx": "^13.4.9", "@paralleldrive/cuid2": "^2.2.1", "clsx": "^1.2.1", "lottie-web": "^5.12.2", - "next": "13.4.8", - "next-plausible": "^3.8.0", + "next": "13.4.9", + "next-plausible": "^3.9.1", "next-sitemap": "^4.1.8", "prism-react-renderer": "^2.0.6", "prismjs": "^1.29.0", @@ -35,7 +35,7 @@ "react-icons": "^4.10.1", "react-responsive-embed": "^2.1.0", "remark-gfm": "^3.0.1", - "sharp": "^0.32.1" + "sharp": "^0.32.2" }, "devDependencies": { "@formbricks/tsconfig": "workspace:*", diff --git a/apps/formbricks-com/pages/blog/peer-tweet-typeform-open-source.png b/apps/formbricks-com/pages/blog/peer-tweet-typeform-open-source.png new file mode 100644 index 0000000000..0d40efba27 Binary files /dev/null and b/apps/formbricks-com/pages/blog/peer-tweet-typeform-open-source.png differ diff --git a/apps/formbricks-com/pages/blog/v1-and-how-we-got-here/email-results-PMF-cal.png b/apps/formbricks-com/pages/blog/v1-and-how-we-got-here/email-results-PMF-cal.png new file mode 100644 index 0000000000..7e43606b3d Binary files /dev/null and b/apps/formbricks-com/pages/blog/v1-and-how-we-got-here/email-results-PMF-cal.png differ diff --git a/apps/formbricks-com/pages/blog/v1-and-how-we-got-here/index.mdx b/apps/formbricks-com/pages/blog/v1-and-how-we-got-here/index.mdx new file mode 100644 index 0000000000..865561a44d --- /dev/null +++ b/apps/formbricks-com/pages/blog/v1-and-how-we-got-here/index.mdx @@ -0,0 +1,171 @@ +import Image from "next/image"; +import LayoutMdx from "@/components/shared/LayoutMdx"; +import { Callout } from "@/components/shared/Callout"; + +import TweetPeer from "./peer-tweet-typeform-open-source.png"; +import SnoopForms from "./snoopforms-open-source-typeform-alternative.png"; +import TwitterResult from "./twitter-results-PMF-cal.png"; +import EmailResult from "./email-results-PMF-cal.png"; +import TitleImage from "../github-accelerator-experience/formbricks-sponsored-by-github-accelerator-2023.webp"; +import PMFDashboard from "./pmf-survey-dashboard.png"; +import MattiJojo from "./matti-jojo.jpg"; + +export const meta = { + title: "Formbricks v1 - How we got here đŸ€ž", + description: + "A lot has happened since Matti and I had a chat about open-source surveys in May last year. The release of Formbricks v1.0 is a perfect opportunity to look back on how it all started.", + date: "2023-07-14", +}; + +_A lot has happened since Matti and I had a chat about open-source surveys in May last year. The release of Formbricks v1.0 is a perfect opportunity to look back on how it all started._ + +Funnily enough, it started with a tweet: + +Peer tweets about the best open-source Typeform alternative + +When I read this tweet, I was sitting in a WeWork in Mexico City, feeling a bit guilty for being such a clichĂ© digital nomad. Sipping on my decaffeinated matcha with lactose-free goat milk, I slid into Matti's DMs. I knew he had built an open-source survey tool a few months ago and suggested he comment on the tweet. We started chatting. + +Both Matti and I had been freelancing for several months. While the money was good, we missed working on a project of our own. We met a couple of years ago while working on our startups. I had an app and wanted to be GDPR compliant; Matti offered to help out. We've stayed in contact ever since, giving feedback on projects and ideas. + +So we chatted about the opportunity of building a commercial open-source alternative to Typeform. After reading up on the advantages - and challenges - of open-source, we decided to build a side project together: **[snoopForms: The Open-Source Typeform Alternative](https://snoopforms.com/)** 🩝 + +SnoopForms was the OS Typeform alternative with a twist + +### **snoopForms and why OS Typeform isn’t a good business** + +We shipped a first version of the product and the landing page and shared it on ProductHunt and HackerNews. It stirred up quite some interest—1.5k people signed up over a few weeks. During the launch, we sold 10 early bird deals for $179 each. We got excited! Is it really that easy? + +Well no, it is not. Apart from the Early Birds (đŸ€) we attracted a looooooooot of people who liked Typeform, but didn’t want to pay the high price tag. Generally, it's not the best idea to build a product with high competition (100s of survey tools) for a price-sensitive target group. Even data privacy isn’t a good selling point when Jotform offers self-hosting and Typeform is an EU-based company (GDPR). We’ve written **[in-depth](https://formbricks.com/blog/open-source-qualtrics-beats-typeform)** about why we eventually decided to shift our focus away from open-source Typeform. + +Nonetheless, we were hooked on open-source surveys; we just hadn't found the right application yet. + +### **snoopForms → Formbricks, a detour, and going full-time** + +We decided to wrap up our freelance gigs and go in full-time, to find the right angle quicker. We built a MVP for _Building Bricks for Forms and Surveys_, but while the idea made sense, we struggled to build an easy, opionated solution which can be used for several use cases. To help engineers build form and survey applications faster, it needed to pack form creation, form analytics, graphs, data handling, data storage, analysis, integrations, and ways to act on the insights for a variety of use cases đŸ€· There's a reason why successful dev tools focus on one of these aspects and do them well. So we kept looking
 + +### **Data Processing vs. Experience Management** + +We had talked to and surveyed a lot of people. Zooming out, we saw that there are two applications for forms: data processing and experience management. + +**Data processing** is essentially getting information out of a human brain into a digital system. The focus here lies on high integrability with (legacy) systems, versatility, and a great developer experience. Libraries like React Hook Forms or the more productized form.io fall into this category. While there certainly is a need here, it was a less inspiring field for us, especially after reading how [tedious](https://medium.com/@jgee/what-i-learned-in-two-years-of-moving-government-forms-online-1edc4c2aa089) it can be to bring [legacy](https://medium.com/san-francisco-digital-services/how-to-make-a-form-d1d1b67d95d7) form systems up to speed. + +**Experience Management** on the other hand is a lot more exciting! Helping teams build better products, services, and organizations is a mission both Matti and I could get behind ❀ + + + Experience Management, in a nutshell, is enabling teams to gather, analyze, and act on qualitative data + collected from their users, customers, and employees. + + +We researched what was out there and talked to more founders. Initially, we wanted to build a solution for a problem we had ourselves: Gathering qualitative insights along the user journey of early adopters. It’s common sense to never launch without analytics, but why does everyone launch without a system to gather qualitative user insights continuously? Mostly, because there's no easy, cheap and quick way to do it (yet). + +### **The Product-Market Fit Survey Tool** + +Following Paul Graham's advice to start with a **[narrow but deep hole](http://paulgraham.com/startupideas.html)**, we narrowed it down to one specific problem every founder has: Measuring Product-Market Fit. Many know the **[article](https://review.firstround.com/how-superhuman-built-an-engine-to-find-product-market-fit)** on how Superhuman built an engine to measure and optimize PMF. However, to run it correctly within your product, you do have to do quite some custom coding. So we decided to offer a solution which works out of the box. + +Peer tweets about the best open-source Typeform alternative +_We built a custom dashboard just to visualize the PMF survey results_ + +We shipped an MVP, launched it, and picked up the conversations with the founders who had tried to measure PMF +before. We quickly learned this: + +- Our MVP was scoped so rigidly that we had to do quite some custom coding ourselves to get it implemented. Setting it up and maintaining it stood in no relation to the value it provided because
 +- The PMF survey is for teams that "kinda" have PMF, not for teams which are just starting out. You need a few hundred recurring users in your app to be able to reach statistical significance and run the survey every 3 months without asking anyone twice. For teams who don’t have that, talking to users 1:1 will remain the best way to go. +- Founders were reluctant to add another tool just for one survey and purpose. + +After the rather disappointing launch of the PMF survey tool, we hit a low. The excitement about the initial snoopForm traction had passed. Since November, we had been working full-time for four months iterating on different products in the forms and survey space, and it didn’t feel like we made much progress. But that wasn’t really true. + +### **"The essence of strategy is choosing what not to do.”** + +It was quite a journey since Matti wrote the first line of code in July last year. Even though it didn’t _feel_ like much progress, we had learned a lot. Most importantly, we knew what **not** to build. + +With snoopForms, we learned that there is a latent need for an open-source standalone survey tool, with a Typeform-like feature set: It’s a great opportunity to build a community and **not** a great business opportunity. The PMF survey tool taught us about the needs of early-stage teams and that surveys are **not** the best solution to their problems. However, they do need some form to gather qualitative feedback and a smooth way to work with it 😏 + +We took everything we knew and wrote a Masterplan. And then we sat down coded. + +### **Open-source in-product surveys** + +March and the first half of April flew by as we hacked together the MVP of what Formbricks is today: A tool which enables teams to target specific segments of their user base with versatile micro-surveys. Matti solved some tricky technical challenges around the Formbricks Widget and shipped the backend. ChatGPT and I warmed up with next.js and built frontend. Seeing the product come together was fun and felt like progress - exactly what we needed! + +GitHub sponsors Formbricks to join their open-source accelerator program + +A welcomed motivator came in the form of an email from GitHub: We we were chosen to take part in the first-ever batch of the GitHub Open-Source Accelerator! It was a really fun programme and we learned a lot! You can read about our experience [here.](https://formbricks.com/blog/github-accelerator-experience) + +### **On the right track 🚆** + +Once we were ready to share our MVP with the world, we knew we were on the right track! The feedback was really good and usage picked up right from the start. One morning we woke up to our analytics dashboard showing thousands of survey displays with 500+ responses in the past couple of hours! This is when we knew we’re onto something 🚀 + +A couple of weeks later, Peer from [Cal.com](http://Cal.com) came back to northern Germany to visit his family and friends. We hung out in the co-working space, where he did his first steps as an entrepreneur. As we were chatting about how to separate opinion from experience, Peer decided to shoot an email with a survey to the 12k most active users of Cal.com. A few days before, he asked his Twitter following the PMF question: + +SnoopForms was the OS Typeform alternative with a twist + +We wanted to compare how the publicly asked survey (Twitter) compared to a survey among the community of users. The results were eye-opening: + +SnoopForms was the OS Typeform alternative with a twist +_Anything above 40% is considered PMF, 60% is đŸ”„đŸ”„đŸ”„_ + +For us, this was not only a good test for our system but it was a great example that Experience Management does not only happen within apps, but on several touch points right from the start. If we want to offer a solution which can comprehensively measure and evaluate experiences, it cannot be confined to in-product surveys for too long. + +### **Typeform sneaking back in?** + +Given our early traction with snoopForms, it’s not a big surprise that community requests for a Typeform-like standalone survey popped up more and more. Since we had all the pieces in place, we shipped standalone surveys in a day. However, it’s not our focus right now, so we hand over most of the feature requests to the community. And the community ships! Just in the past couple of weeks, we got: + +- **Prefill Data in Link Surveys** by Piyush - [Docs](https://formbricks.com/docs/link-surveys/data-prefilling) +- **Identify Users Link identification** by Zorig - [Docs](https://formbricks.com/docs/link-surveys/user-identification) +- **Close Survey on Date** by Piyush +- **Close Survey after x Responses** by Pradumn +- **Redirect on Link Survey Completion** by Dhruwang +- **Embed Link Survey via iframe** by Ankur +- **Set Custom ‘Survey Closed’ Message** by Pradumn +- **Randomize Answer Options** by Shubdeep + +We absolutely love the idea of being the platform for a community-developed standalone survey experience! It’s a win-win: The community gets a free, self-hostable standalone survey product and we get a growing upper funnel for our Experience Management solution đŸ€ž + +### **It’s coming together đŸ”„** + +Looking back at the amount of value Formbricks can deliver after not even 5 months fills us with excitement. Matti and I have been hacking it together for the most part but we wouldn’t be anywhere nearly as close without the support of our community and friends - thank you! + +And we’re only getting started: We were able to hire two engineers from our community of contributors to build up more shipping velocity. We also started working with Kristian who runs our [open-source Design repo](https://github.com/formbricks/design) more closely and are super excited about what we’re cooking up. We’ll make sure Formbricks stays easy-to-use, accessible and simply beautiful as it grows more powerful! We can't tell you how excited we are about what's coming 😁 + +If you’re curious to learn about all the things you can do with Formbricks today, we’ve written and keep updating a list of Best Practices incl. survey templates in our [Docs](https://formbricks.com/docs/best-practices/cancel-subscription). + +### Sounds good? **Build with us!** + +- **Eager to contribute?** [Join our Discord](https://formbricks.com/discord) and say Hi! We’re more than happy to find the perfect issue for your level of experience 🙌 😊 + +- **Got an experience to measure?** Open-source is the way to go. [Let’s have a chat đŸ€™](https://cal.com/johannes/15) + +SnoopForms was the OS Typeform alternative with a twist + +### All the best! + +Johannes & Matti + +export default ({ children }) => {children}; diff --git a/apps/formbricks-com/pages/blog/v1-and-how-we-got-here/matti-jojo.jpg b/apps/formbricks-com/pages/blog/v1-and-how-we-got-here/matti-jojo.jpg new file mode 100644 index 0000000000..b25759afae Binary files /dev/null and b/apps/formbricks-com/pages/blog/v1-and-how-we-got-here/matti-jojo.jpg differ diff --git a/apps/formbricks-com/pages/blog/v1-and-how-we-got-here/peer-tweet-typeform-open-source.png b/apps/formbricks-com/pages/blog/v1-and-how-we-got-here/peer-tweet-typeform-open-source.png new file mode 100644 index 0000000000..0d40efba27 Binary files /dev/null and b/apps/formbricks-com/pages/blog/v1-and-how-we-got-here/peer-tweet-typeform-open-source.png differ diff --git a/apps/formbricks-com/pages/blog/v1-and-how-we-got-here/pmf-survey-dashboard.png b/apps/formbricks-com/pages/blog/v1-and-how-we-got-here/pmf-survey-dashboard.png new file mode 100644 index 0000000000..b5afb344ab Binary files /dev/null and b/apps/formbricks-com/pages/blog/v1-and-how-we-got-here/pmf-survey-dashboard.png differ diff --git a/apps/formbricks-com/pages/blog/v1-and-how-we-got-here/snoopforms-open-source-typeform-alternative.png b/apps/formbricks-com/pages/blog/v1-and-how-we-got-here/snoopforms-open-source-typeform-alternative.png new file mode 100644 index 0000000000..b91b6a9878 Binary files /dev/null and b/apps/formbricks-com/pages/blog/v1-and-how-we-got-here/snoopforms-open-source-typeform-alternative.png differ diff --git a/apps/formbricks-com/pages/blog/v1-and-how-we-got-here/survey-display-peak.png b/apps/formbricks-com/pages/blog/v1-and-how-we-got-here/survey-display-peak.png new file mode 100644 index 0000000000..8459dbac0e Binary files /dev/null and b/apps/formbricks-com/pages/blog/v1-and-how-we-got-here/survey-display-peak.png differ diff --git a/apps/formbricks-com/pages/blog/v1-and-how-we-got-here/surveyjs-free-opensource-form-survey-tool-software-to-make-surveys-2023.png b/apps/formbricks-com/pages/blog/v1-and-how-we-got-here/surveyjs-free-opensource-form-survey-tool-software-to-make-surveys-2023.png new file mode 100644 index 0000000000..ae4d8d99aa Binary files /dev/null and b/apps/formbricks-com/pages/blog/v1-and-how-we-got-here/surveyjs-free-opensource-form-survey-tool-software-to-make-surveys-2023.png differ diff --git a/apps/formbricks-com/pages/blog/v1-and-how-we-got-here/twitter-results-PMF-cal.png b/apps/formbricks-com/pages/blog/v1-and-how-we-got-here/twitter-results-PMF-cal.png new file mode 100644 index 0000000000..0f723ed0b5 Binary files /dev/null and b/apps/formbricks-com/pages/blog/v1-and-how-we-got-here/twitter-results-PMF-cal.png differ diff --git a/apps/formbricks-com/pages/docs/getting-started/nextjs-app/index.mdx b/apps/formbricks-com/pages/docs/getting-started/nextjs-app/index.mdx index 07ad76518a..1d3e849cb5 100644 --- a/apps/formbricks-com/pages/docs/getting-started/nextjs-app/index.mdx +++ b/apps/formbricks-com/pages/docs/getting-started/nextjs-app/index.mdx @@ -36,22 +36,24 @@ pnpm add @formbricks/js ## Integrating with Next.js 13 App Directory -The Next.js 13 app directory requires us to initialize Formbricks differently than the pages directory. Specifically, the app directory server-side renders components by default, and the formbricks-js library is a client-side library. To make these work together, create a `formbricks.js` file (or formbricks.ts if you are using Typescript) and set up the FormbricksProvider with the 'use client' directive: +The Next.js 13 app directory requires us to initialize Formbricks differently than the pages directory. Specifically, the app directory server-side renders components by default, and the formbricks-js library is a client-side library. To make these work together, create a `formbricks.tsx` file (or `formbricks.js` if you don't use Typescript) and set up the FormbricksProvider with the 'use client' directive: ```tsx -// app/formbricks.js +// app/formbricks.tsx "use client"; import formbricks from "@formbricks/js"; +import { usePathname, useSearchParams } from "next/navigation"; +import { useEffect } from "react"; if (typeof window !== "undefined") { formbricks.init({ - environmentId: "your-environment-id", - apiHost: "your-api-host", // e.g. https://app.formbricks.com + environmentId: "clj66eqzu00m5qu0g8leglrns", + apiHost: "https://app.formbricks.com", // e.g. https://app.formbricks.com debug: true, // remove when in production }); } -export default function Providers({ Component, pageProps }: AppProps) { +export default function FormbricksProvider() { const pathname = usePathname(); const searchParams = useSearchParams(); @@ -63,21 +65,17 @@ export default function Providers({ Component, pageProps }: AppProps) { } ``` -Once we do this, we can then import the `provider.js` file in our `app/layout.js` file, and wrap our app in the Formbricks provider. +Once we do this, we can then import the `formbricks.tsx` file in our `app/layout.tsx` file, and wrap our app in the Formbricks provider. ```tsx -// app/layout.js -import Providers from "./formbricks"; +// app/layout.tsx +import FormbricksProvider from "./formbricks"; +import "./globals.css"; -export const metadata = { - title: "Create Next App", - description: "Generated by create next app", -}; - -export default function RootLayout({ children }) { +export default function RootLayout({ children }: { children: React.ReactNode }) { return ( - + {children} ); diff --git a/apps/formbricks-com/pages/docs/self-hosting/deployment/index.mdx b/apps/formbricks-com/pages/docs/self-hosting/deployment/index.mdx index 103336e9c1..9dbd8a00a1 100644 --- a/apps/formbricks-com/pages/docs/self-hosting/deployment/index.mdx +++ b/apps/formbricks-com/pages/docs/self-hosting/deployment/index.mdx @@ -8,68 +8,151 @@ export const meta = { "Utilize Docker-Compose for easy deployment on your machine. Clone the repo, configure settings, and build the image to access the app on localhost.", }; - - Formbricks is not yet stable. Please reach out to us when you deploy Formbricks in production: - hola@formbricks.com - +At Formbricks, we understand that different users have different needs, and we strive to cater to a wide variety of situations. This is why we provide two ways of running our application using Docker: -## Deploy with Docker-Compose +1. **Fast Setup with a Pre-built Docker Image:** This method is designed for those who want to quickly set up and start using Formbricks without getting into the technicalities of Docker or the build process. When you choose this method, you're using an image that we've already built for you. The pre-built image is ready-to-run, and it only requires minimal configuration on your part. This approach is perfect for getting a functional instance of Formbricks up and running with minimal hassle. It's as easy as downloading the Docker image and firing up the container. -The easiest way to deploy Formbricks on your own machine is using Docker. This requires Docker and the docker compose plugin on your system to work. +2. **Manual Setup by Building the Docker Image from Source:** This approach provides the flexibility to configure every aspect of your Formbricks instance, including environment variables that need to be set at build time. While we don't recommend changing the source code of Formbricks, this method allows you to set your own configuration that might be necessary for specific deployment needs. Keep in mind that this method requires a more in-depth understanding of Docker and the build process. However, the trade-off is the additional control and flexibility you gain, making it worth considering if you're a more advanced user or have very specific configuration needs. -Clone the repository: +Please note that regardless of the method you choose, Formbricks is designed to be easy-to-use and flexible. So choose the method that best fits your comfort level and requirements, and start leveraging the power of Formbricks today! -```bash -git clone https://github.com/formbricks/formbricks.git && cd formbricks -``` +--- -Create a `.env` file based on `.env.docker` and change all fields according to your setup. This file comes with a basic setup and Formbricks works without making any changes to the file. To enable email sending functionality you need to configure the SMTP settings in the `.env` file. If you configured your email credentials, you can also comment the following lines to enable email verification (`# NEXT_PUBLIC_EMAIL_VERIFICATION_DISABLED=1`) and password reset (`# NEXT_PUBLIC_PASSWORD_RESET_DISABLED=1`) +## Requirements -Copy the `.env.docker` file to `.env` and edit it with an editor of your choice if needed. +Ensure `docker` & `docker compose` are installed on your server/system. Both are typically included with Docker utilities, like Docker Desktop and Rancher Desktop. -```bash -cp .env.docker .env -``` +**Note**: `docker compose` without the hyphen is now the primary method of using docker-compose, according to the Docker documentation. -Note: The environment variables are used at build time. When you change environment variables later, you need to rebuild the image with `docker compose build` for the changes to take effect. +## (Most users) Running the pre-built Docker Image -Finally start the docker compose process to build and spin up the Formbricks container as well as the PostgreSQL database. +This is suitable for those who are testing Formbricks or running it with minimal to no modifications. For this we use the [public Docker image](https://hub.docker.com/r/formbricks/formbricks) and a simple docker-compose file. -```bash -docker compose up -d -# (use docker-compose if you are on an older docker version) -``` +1. **Create a New Directory for Formbricks** -You can now access the app on [http://localhost:3000](http://localhost:3000). You will be automatically redirected to the login. To use your local installation of Formbricks, create a new account. + Open a terminal and create a new directory for Formbricks, then navigate into this new directory: -## Stop the containers + ```bash + mkdir formbricks-quickstart && cd formbricks-quickstart + ``` -To stop the containers, run: +2. **Download the Docker-Compose File** -```bash -docker compose down -``` + Download the docker-compose file directly from the Formbricks repository: -## Update Formbricks + ```bash + curl -o docker-compose.yml https://raw.githubusercontent.com/formbricks/formbricks/main/docker/docker-compose.yml + ``` -To update Formbricks, pull the latest changes from the repository: +3. **Generate NextAuth Secret** -```bash -git pull -``` + Next, you need to generate a NextAuth secret. This will be used for session signing and encryption. The `sed` command below generates a random string using `openssl`, then replaces the `NEXTAUTH_SECRET:` placeholder in the `docker-compose.yml` file with this generated secret: -and rebuild the image: + ```bash + sed -i "/NEXTAUTH_SECRET:$/s/NEXTAUTH_SECRET:.\*/NEXTAUTH_SECRET: $(openssl rand -base64 32)/" docker-compose.yml + ``` -```bash -docker compose build -``` +4. **Start the Docker Setup** -Then you can stop and restart the containers again: + You're now ready to start the Formbricks Docker setup. The following command will start Formbricks together with a postgreSQL database using Docker Compose: -```bash -docker compose down -docker compose up -d -``` + ```bash + docker compose up -d + ``` + + The `-d` flag will run the containers in detached mode, meaning they'll run in the background. + +5. **Visit Formbricks in Your Browser** + + After starting the Docker setup, visit http://localhost:3000 in your browser to interact with the Formbricks application. The first time you access this page, you'll be greeted by a setup wizard. Follow the prompts to define your first user and get started. + +## Updating Formbricks + +1. Stop the Formbricks stack + + ```bash + docker compose down + ``` + +2. Pull the latest changes + + ```bash + docker compose pull + ``` + +3. Update env vars as necessary. +4. Re-start the Formbricks stack + + ```bash + docker compose up -d + ``` + +## (Advanced users) Build and Run Formbricks + +1. Clone the repository: + + ```bash + git clone https://github.com/formbricks/formbricks.git && cd formbricks + ``` + + Create a `.env` file based on `.env.docker` and change all fields according to your setup. This file comes with a basic setup and Formbricks works without making any changes to the file. To enable email sending functionality you need to configure the SMTP settings in the `.env` file. If you configured your email credentials, you can also comment the following lines to enable email verification (`# NEXT_PUBLIC_EMAIL_VERIFICATION_DISABLED=1`) and password reset (`# NEXT_PUBLIC_PASSWORD_RESET_DISABLED=1`) + +2. Copy the `.env.docker` file to `.env` and edit it with an editor of your choice if needed. + + ```bash + cp .env.docker .env + ``` + + Note: The environment variables are used at build time. When you change environment variables later, you need to rebuild the image with `docker compose build` for the changes to take effect. + +3. Finally start the docker compose process to build and spin up the Formbricks container as well as the PostgreSQL database. + + ```bash + docker compose up -d + # (use docker-compose if you are on an older docker version) + ``` + + You can now access the app on [http://localhost:3000](http://localhost:3000). You will be automatically redirected to the login. To use your local installation of Formbricks, create a new account. + +Certainly, here is the reformatted version for Formbricks environment variables. + +### Important Run-time Variables + +These variables must also be provided at runtime. + +| Variable | Description | Required | Default | +| ---------------------- | --------------------------------------------------------------------------------------- | -------- | ----------------------------------------------------------------------- | +| NEXT_PUBLIC_WEBAPP_URL | Base URL of the site. | required | `http://localhost:3000` | +| DATABASE_URL | Database URL with credentials. | required | `postgresql://postgres:postgres@postgres:5432/formbricks?schema=public` | +| NEXTAUTH_SECRET | Secret for NextAuth, used for session signing and encryption. | required | (Generated by the user) | +| NEXTAUTH_URL | Location of the auth server. By default, this is the Formbricks docker instance itself. | required | `http://localhost:3000` | + +### Build-time Variables + +These variables must be provided at the time of the docker build and can be provided by updating the `.env` file. + +| Variable | Description | Required | Default | +| --------------------------------------- | -------------------------------------------------------------------------------------------- | --------------------------------------------- | ----------------------- | +| NEXT_PUBLIC_WEBAPP_URL | Base URL injected into static files. | required | `http://localhost:3000` | +| PRISMA_GENERATE_DATAPROXY | Enables a dedicated connection pool for Prisma using Prisma Data Proxy. Uncomment to enable. | optional | | +| NEXT_PUBLIC_EMAIL_VERIFICATION_DISABLED | Disables email verification if set to `1`. | optional | | +| NEXT_PUBLIC_PASSWORD_RESET_DISABLED | Disables password reset functionality if set to `1`. | optional | | +| NEXT_PUBLIC_SIGNUP_DISABLED | Disables the ability for new users to create an account if set to `1`. | optional | | +| NEXT_PUBLIC_INVITE_DISABLED | Disables the ability for invited users to create an account if set to `1`. | optional | | +| NEXT_PUBLIC_PRIVACY_URL | URL for privacy policy. | optional | | +| NEXT_PUBLIC_TERMS_URL | URL for terms of service. | optional | | +| NEXT_PUBLIC_IMPRINT_URL | URL for imprint. | optional | | +| SENTRY_IGNORE_API_RESOLUTION_ERROR | Disables Sentry warning if set to `1`. | optional | | +| NEXT_PUBLIC_SENTRY_DSN | DSN for Sentry error tracking. | optional | | +| NEXT_PUBLIC_GITHUB_AUTH_ENABLED | Enables GitHub login if set to `1`. | optional | | +| GITHUB_ID | Client ID for GitHub. | optional (required if GitHub auth is enabled) | | +| GITHUB_SECRET | Secret for GitHub. | optional (required if GitHub auth is enabled) | | +| NEXT_PUBLIC_GOOGLE_AUTH_ENABLED | Enables Google login if set to `1`. | optional | | +| GOOGLE_CLIENT_ID | Client ID for Google. | optional (required if Google auth is enabled) | | +| GOOGLE_CLIENT_SECRET | Secret for Google. | optional (required if Google auth is enabled) | | +| CRON_SECRET | Secret for running cron jobs. | optional | | + +Please refer to the [Formbricks Instructions](https://github.com/formbricks/formbricks) for more details on generating these variables. ## Debugging diff --git a/apps/web/Dockerfile b/apps/web/Dockerfile index 7ad416e217..b22ebe0016 100644 --- a/apps/web/Dockerfile +++ b/apps/web/Dockerfile @@ -5,7 +5,7 @@ WORKDIR /app COPY . . # Copy .env file because Docker don't follow symlinks -COPY .env /app/apps/web/ +COPY .env.docker /app/apps/web/.env RUN pnpm install @@ -34,4 +34,11 @@ COPY --from=installer --chown=nextjs:nodejs /app/apps/web/public ./apps/web/publ COPY --from=installer --chown=nextjs:nodejs /app/packages/database/schema.prisma ./packages/database/schema.prisma COPY --from=installer --chown=nextjs:nodejs /app/packages/database/migrations ./packages/database/migrations -CMD pnpm dlx prisma migrate deploy && node apps/web/server.js \ No newline at end of file +ENV NEXTAUTH_SECRET=$NEXTAUTH_SECRET + +CMD if [ "$NEXTAUTH_SECRET" != "RANDOM_STRING" ]; then \ + pnpm dlx prisma migrate deploy && node apps/web/server.js; \ + else \ + echo "ERROR: Please set a value for NEXTAUTH_SECRET in .env.docker!"; \ + exit 1; \ + fi diff --git a/apps/web/app/FormbricksClient.tsx b/apps/web/app/FormbricksClient.tsx index a05e8a2f87..50a77d4414 100644 --- a/apps/web/app/FormbricksClient.tsx +++ b/apps/web/app/FormbricksClient.tsx @@ -22,8 +22,8 @@ export default function FormbricksClient({ session }) { }); formbricks.setUserId(session.user.id); formbricks.setEmail(session.user.email); - if (session.user.plan) { - formbricks.setAttribute("Plan", session.user.plan); + if (session.user.teams?.length > 0) { + formbricks.setAttribute("Plan", session.user.teams[0].plan); } } }, [session]); diff --git a/apps/web/app/api/auth/[...nextauth]/authOptions.ts b/apps/web/app/api/auth/[...nextauth]/authOptions.ts index c1a5b29eb1..660b169d8a 100644 --- a/apps/web/app/api/auth/[...nextauth]/authOptions.ts +++ b/apps/web/app/api/auth/[...nextauth]/authOptions.ts @@ -141,6 +141,7 @@ export const authOptions: NextAuthOptions = { memberships: { select: { teamId: true, + role: true, team: { select: { plan: true, @@ -156,15 +157,17 @@ export const authOptions: NextAuthOptions = { return token; } + const teams = existingUser.memberships.map((membership) => ({ + id: membership.teamId, + role: membership.role, + plan: membership.team.plan, + })); + const additionalAttributs = { id: existingUser.id, createdAt: existingUser.createdAt, onboardingCompleted: existingUser.onboardingCompleted, - teamId: existingUser.memberships.length > 0 ? existingUser.memberships[0].teamId : undefined, - plan: - existingUser.memberships.length > 0 && existingUser.memberships[0].team - ? existingUser.memberships[0].team.plan - : undefined, + teams, name: existingUser.name, }; @@ -181,9 +184,7 @@ export const authOptions: NextAuthOptions = { // @ts-ignore session.user.onboardingCompleted = token?.onboardingCompleted; // @ts-ignore - session.user.teamId = token?.teamId; - // @ts-ignore - session.user.plan = token?.plan; + session.user.teams = token?.teams; session.user.name = token.name || ""; return session; diff --git a/apps/web/app/api/cron/weekly_summary/email.ts b/apps/web/app/api/cron/weekly_summary/email.ts index 5e42a6083a..0e1609653c 100644 --- a/apps/web/app/api/cron/weekly_summary/email.ts +++ b/apps/web/app/api/cron/weekly_summary/email.ts @@ -100,7 +100,7 @@ const notificationLiveSurveys = (surveys: Survey[], environmentId: string) => {
+ }/responses?utm_source=weekly&utm_medium=email&utm_content=ViewResponsesCTA" style="color:#1e293b;">

${survey.name}

+ }/responses?utm_source=weekly&utm_medium=email&utm_content=ViewResponsesCTA"> ${getButtonLabel(survey.responsesCount)} ` : "" @@ -153,8 +153,9 @@ const createSurveyFields = (surveryResponses: SurveyResponse[]) => { const notificationFooter = () => { return `

All the best,

-

The Formbricks Team

-

This is a Beta feature. If you experience any issues, please let us know by replying to this email 🙏

+

The Formbricks Team đŸ€

+

This is a Beta feature. If you experience any issues, please let us know by replying to this email 🙏

+

The Formbricks Team đŸ€

`; }; @@ -164,7 +165,7 @@ const createReminderNotificationBody = (notificationData: NotificationResponse,

Don’t let a week pass without learning about your users:

- Setup a new survey + Setup a new survey

Need help finding the right survey for your product? Pick a 15-minute slot in our CEOs calendar or reply to this email :)

diff --git a/apps/web/app/api/cron/weekly_summary/route.ts b/apps/web/app/api/cron/weekly_summary/route.ts index 0fce4f448f..79eaad5b27 100644 --- a/apps/web/app/api/cron/weekly_summary/route.ts +++ b/apps/web/app/api/cron/weekly_summary/route.ts @@ -35,7 +35,7 @@ export async function POST(): Promise { const notificationResponse = getNotificationResponse(product.environments[0], product.name); // if there were no responses in the last 7 days, send a different email - if (notificationResponse.insights.totalCompletedResponses == 0) { + if (notificationResponse.insights.numLiveSurvey == 0) { for (const teamMember of teamMembersWithNotificationEnabled) { emailSendingPromises.push( sendNoLiveSurveyNotificationEmail(teamMember.user.email, notificationResponse) diff --git a/apps/web/app/environments/[environmentId]/PosthogIdentify.tsx b/apps/web/app/environments/[environmentId]/PosthogIdentify.tsx index 99171d629d..b022fb4056 100644 --- a/apps/web/app/environments/[environmentId]/PosthogIdentify.tsx +++ b/apps/web/app/environments/[environmentId]/PosthogIdentify.tsx @@ -12,8 +12,8 @@ export default function PosthogIdentify({ session }: { session: Session }) { useEffect(() => { if (posthogEnabled && session.user && posthog) { posthog.identify(session.user.id); - if (session.user.teamId) { - posthog?.group("team", session.user.teamId); + if (session.user.teams?.length > 0) { + posthog?.group("team", session.user.teams[0].id); } } }, [session, posthog]); diff --git a/apps/web/app/environments/[environmentId]/ResponseFilterContext.tsx b/apps/web/app/environments/[environmentId]/ResponseFilterContext.tsx new file mode 100644 index 0000000000..37e01ca447 --- /dev/null +++ b/apps/web/app/environments/[environmentId]/ResponseFilterContext.tsx @@ -0,0 +1,98 @@ +"use client"; + +import { + QuestionOption, + QuestionOptions, +} from "@/app/environments/[environmentId]/surveys/[surveyId]/QuestionsComboBox"; +import { QuestionFilterOptions } from "@/app/environments/[environmentId]/surveys/[surveyId]/ResponseFilter"; +import { getTodayDate } from "@/lib/surveys/surveys"; +import { createContext, useContext, useState } from "react"; + +interface FilterValue { + questionType: Partial; + filterType: { + filterValue: string | undefined; + filterComboBoxValue: string | string[] | undefined; + }; +} + +export interface SelectedFilterValue { + filter: FilterValue[]; + onlyComplete: boolean; +} + +interface SelectedFilterOptions { + questionOptions: QuestionOptions[]; + questionFilterOptions: QuestionFilterOptions[]; +} + +export interface DateRange { + from: Date | undefined; + to?: Date | undefined; +} + +interface FilterDateContextProps { + selectedFilter: SelectedFilterValue; + setSelectedFilter: React.Dispatch>; + selectedOptions: SelectedFilterOptions; + setSelectedOptions: React.Dispatch>; + dateRange: DateRange; + setDateRange: React.Dispatch>; + resetState: () => void; +} + +const ResponseFilterContext = createContext(undefined); + +function ResponseFilterProvider({ children }: { children: React.ReactNode }) { + // state holds the filter selected value + const [selectedFilter, setSelectedFilter] = useState({ + filter: [], + onlyComplete: false, + }); + // state holds all the options of the responses fetched + const [selectedOptions, setSelectedOptions] = useState({ + questionFilterOptions: [], + questionOptions: [], + }); + + const [dateRange, setDateRange] = useState({ + from: undefined, + to: getTodayDate(), + }); + + const resetState = () => { + setDateRange({ + from: undefined, + to: getTodayDate(), + }); + setSelectedFilter({ + filter: [], + onlyComplete: false, + }); + }; + + return ( + + {children} + + ); +} + +function useResponseFilter() { + const context = useContext(ResponseFilterContext); + if (context === undefined) { + throw new Error("useFilterDate must be used within a FilterDateProvider"); + } + return context; +} + +export { ResponseFilterContext, ResponseFilterProvider, useResponseFilter }; diff --git a/apps/web/app/environments/[environmentId]/actions.ts b/apps/web/app/environments/[environmentId]/actions.ts index 5485ecbf08..47fac4238a 100644 --- a/apps/web/app/environments/[environmentId]/actions.ts +++ b/apps/web/app/environments/[environmentId]/actions.ts @@ -2,6 +2,8 @@ import { prisma } from "@formbricks/database"; import { Team } from "@prisma/client"; +import { QuestionType } from "@formbricks/types/questions"; +import { createId } from "@paralleldrive/cuid2"; export async function createTeam(teamName: string, ownerUserId: string): Promise { const newTeam = await prisma.team.create({ @@ -65,6 +67,95 @@ export async function createTeam(teamName: string, ownerUserId: string): Promise description: "Gets fired when a new session is created", type: "automatic", }, + { + name: "Exit Intent (Desktop)", + description: "A user on Desktop leaves the website with the cursor.", + type: "automatic", + }, + { + name: "50% Scroll", + description: "A user scrolled 50% of the current page", + type: "automatic", + }, + ], + }, + attributeClasses: { + create: [ + { + name: "userId", + description: "The internal ID of the person", + type: "automatic", + }, + { + name: "email", + description: "The email of the person", + type: "automatic", + }, + ], + }, + }, + ], + }, + }, + { + name: "Demo Product", + environments: { + create: [ + { + type: "production", + eventClasses: { + create: [ + { + name: "New Session", + description: "Gets fired when a new session is created", + type: "automatic", + }, + { + name: "Exit Intent (Desktop)", + description: "A user on Desktop leaves the website with the cursor.", + type: "automatic", + }, + { + name: "50% Scroll", + description: "A user scrolled 50% of the current page", + type: "automatic", + }, + ], + }, + attributeClasses: { + create: [ + { + name: "userId", + description: "The internal ID of the person", + type: "automatic", + }, + { + name: "email", + description: "The email of the person", + type: "automatic", + }, + ], + }, + }, + { + type: "development", + eventClasses: { + create: [ + { + name: "New Session", + description: "Gets fired when a new session is created", + type: "automatic", + }, + { + name: "Exit Intent (Desktop)", + description: "A user on Desktop leaves the website with the cursor.", + type: "automatic", + }, + { + name: "50% Scroll", + description: "A user scrolled 50% of the current page", + type: "automatic", + }, ], }, attributeClasses: { @@ -90,8 +181,1194 @@ export async function createTeam(teamName: string, ownerUserId: string): Promise }, include: { memberships: true, + products: { + include: { + environments: true, + }, + }, }, }); + // call addDemoData with new team's id + await addDemoData(newTeam.id); + return newTeam; } + +export async function addDemoData(teamId: string): Promise { + // find the team + const team = await prisma.team.findUnique({ + where: { + id: teamId, + }, + include: { + products: { + include: { + environments: true, + }, + }, + }, + }); + + if (team === null) { + throw new Error(`No team found with ID ${teamId}`); + } + + // find the product + const product = team.products.find((product) => product.name === "Demo Product"); + + if (!product) { + throw new Error(`No product named 'My Product' found in team ${teamId}`); + } + + const prodEnvironment = product.environments.find((environment) => environment.type === "production"); + // add attributes to each environment of the product + // dont add dev environment + + const updatedEnvironment = await prisma.environment.update({ + where: { id: prodEnvironment?.id }, + data: { + eventClasses: { + create: [ + { + name: "Created New Event", + description: "Person created a new event", + type: "code", + }, + { + name: "Updated Availability", + description: "Person updated their availability", + type: "code", + }, + { + name: "Received Booking Request", + description: "Person received a booking request", + type: "code", + }, + { + name: "Invited Team Member", + description: "Person invited a team member", + type: "noCode", + noCodeConfig: { type: "innerHtml", innerHtml: { value: "Add Team Member" } }, + }, + { + name: "Created New Workflow", + description: "Person setup a new workflow", + type: "noCode", + noCodeConfig: { type: "innerHtml", innerHtml: { value: "Create Workflow" } }, + }, + { + name: "Viewed Insight", + description: "Person viewed the insights dashboard", + type: "noCode", + noCodeConfig: { type: "pageUrl", pageUrl: { rule: "contains", value: "insights" } }, + }, + ], + }, + attributeClasses: { + create: [ + { + name: "Name", + description: "Full Name of the Person", + type: "code", + }, + { + name: "Role", + description: "Current role of the person", + type: "code", + }, + { + name: "Company", + description: "The company they work at", + type: "code", + }, + { + name: "Experience", + description: "Level of experience of the person", + type: "code", + }, + { + name: "Usage Frequency", + description: "Frequency of product usage", + type: "automatic", + }, + { + name: "Company Size", + description: "Company size", + type: "code", + }, + { + name: "Product Satisfaction Score", + description: "Level of product satisfaction of the person", + type: "automatic", + }, + { + name: "Recommendation Likelihood", + description: "Likehood of recommending the product", + type: "automatic", + }, + ], + }, + }, + include: { + attributeClasses: true, // include attributeClasses + eventClasses: true, // include eventClasses + }, + }); + + // check if updatedEnvironment exists and it has attributeClasses + if (!updatedEnvironment || !updatedEnvironment.attributeClasses) { + throw new Error("Attribute classes could not be created"); + } + + // CREATING DEMO DATA + // Create 20 People with Attributes + const people: any[] = []; + const attributeClasses = updatedEnvironment.attributeClasses; + + const names = [ + "Wei Zhu", + "Akiko Yamada", + "Elena Petrova", + "Sophia Johnson", + "Jorge Sanchez", + "Fatima Al Zahra", + "Ravi Kumar", + "Maria Silva", + "Amahle Dlamini", + "Antonio GarcĂ­a", + "Leon MĂŒller", + "Chloe Lefevre", + "Alessia Rossi", + "Eva Svendsen", + "Sara Eriksson", + "Liam O'Brien", + "Anastasia Sokolova", + "Yara van der Heijden", + "Zeynep GĂŒndoğan", + "Gabriella MĂ©szĂĄros", + ]; + + const companies = [ + "Google", + "Apple", + "Microsoft", + "Amazon", + "Facebook", + "Tesla", + "Netflix", + "Oracle", + "Adobe", + "IBM", + "McDonald's", + "Coca-Cola", + "Pepsi", + "Samsung", + "Intel", + "Nvidia", + "Visa", + "MasterCard", + "Paypal", + "Spotify", + ]; + + // A function to generate attribute values based on attribute class name, person's name, and company information + function generateAttributeValue( + attributeClassName: string, + name: string, + company: string, + domain: string, + i: number + ): string { + switch (attributeClassName) { + case "userId": + return `CYO${Math.floor(Math.random() * 999)}`; // Company size from 0 to 5000 employees + case "email": + return `${name.split(" ")[0].toLowerCase()}@${domain}`; + case "Name": + return name; + case "Role": + const roles = ["Manager", "Employee", "Developer", "Designer", "Product Manager", "Marketing"]; + return roles[i % roles.length]; // This ensures even distribution of roles among the people + case "Experience": + return `${Math.floor(Math.random() * 11)} years`; // Experience from 0 to 10 years + case "Usage Frequency": + const frequencies = ["Daily", "Weekly", "Monthly", "Yearly"]; + return frequencies[i % frequencies.length]; // This ensures even distribution of frequencies among the people + case "Company Size": + return `${Math.floor(Math.random() * 5001)} employees`; // Company size from 0 to 5000 employees + case "Product Satisfaction Score": + return `${Math.floor(Math.random() * 101)}`; // Satisfaction score from 0 to 100 + case "Recommendation Likelihood": + return `${Math.floor(Math.random() * 11)}`; // Likelihood from 0 to 10 + case "Company": + return company; + default: + return "Unknown"; + } + } + + for (let i = 0; i < 20; i++) { + const attributes = attributeClasses.map((attributeClass) => { + let value = generateAttributeValue( + attributeClass.name, + names[i], + companies[i], + `${companies[i].toLowerCase().split(" ").join("")}.com`, + i + ); + return { + attributeClass: { connect: { id: attributeClass.id } }, + value: value, + }; + }); + + const person = await prisma.person.create({ + data: { + environment: { connect: { id: product.environments[0].id } }, + attributes: { create: attributes }, + }, + }); + people.push(person); + + const session = await prisma.session.create({ + data: { + person: { connect: { id: person.id } }, + }, + }); + + const eventClasses = updatedEnvironment.eventClasses; + + for (let eventClass of eventClasses) { + // create a random number of events for each event class + const eventCount = Math.floor(Math.random() * 5) + 1; + for (let j = 0; j < eventCount; j++) { + await prisma.event.create({ + data: { + eventClass: { connect: { id: eventClass.id } }, + session: { connect: { id: session.id } }, + }, + }); + } + } + } + + // Create Surveys with Display and Responses + + // Surveys + const PMFSurvey = { + name: "Product Market Fit", + type: "web", + status: "inProgress", + questions: [ + { + id: "survey-cta", + html: "We would love to understand your user experience better. Sharing your insight helps a lot!", + type: QuestionType.CTA, + logic: [{ condition: "skipped", destination: "end" }], + headline: "You are one of our power users! Do you have 5 minutes?", + required: false, + buttonLabel: "Happy to help!", + buttonExternal: false, + dismissButtonLabel: "No, thanks.", + }, + { + id: "disappointment-score", + type: QuestionType.MultipleChoiceSingle, + headline: "How disappointed would you be if you could no longer use CalendYo?", + subheader: "Please select one of the following options:", + required: true, + choices: [ + { + id: createId(), + label: "Not at all disappointed", + }, + { + id: createId(), + label: "Somewhat disappointed", + }, + { + id: createId(), + label: "Very disappointed", + }, + ], + }, + { + id: "roles", + type: QuestionType.MultipleChoiceSingle, + headline: "What is your role?", + subheader: "Please select one of the following options:", + required: true, + choices: [ + { + id: createId(), + label: "Founder", + }, + { + id: createId(), + label: "Executive", + }, + { + id: createId(), + label: "Product Manager", + }, + { + id: createId(), + label: "Product Owner", + }, + { + id: createId(), + label: "Software Engineer", + }, + ], + }, + { + id: "who-benefits-most", + type: QuestionType.OpenText, + headline: "What type of people do you think would most benefit from CalendYo?", + required: true, + }, + { + id: "main-benefit", + type: QuestionType.OpenText, + headline: "What is the main benefit your receive from CalendYo?", + required: true, + }, + { + id: "improve-demo", + type: QuestionType.OpenText, + headline: "How can we improve CalendYo for you?", + subheader: "Please be as specific as possible.", + required: true, + }, + ], + }; + + const PMFResponses = [ + { + roles: "Software Engineer", + "survey-cta": "clicked", + "improve-demo": "Integration with more third-party apps would be great", + "main-benefit": "Allows for seamless coordination between different time zones", + "who-benefits-most": "Freelancers who work with international clients", + "disappointment-score": "Very disappointed", + }, + { + roles: "Founder", + "survey-cta": "clicked", + "improve-demo": "I'd love to see an offline mode", + "main-benefit": "Streamlines the appointment scheduling process saving us hours each week", + "who-benefits-most": "Startup founders who juggle a lot of meetings", + "disappointment-score": "Very disappointed", + }, + { + roles: "Product Manager", + "survey-cta": "clicked", + "improve-demo": "User interface could be more intuitive", + "main-benefit": "Allows for easy scheduling and rescheduling of team meetings", + "who-benefits-most": "Project managers with large teams", + "disappointment-score": "Somewhat disappointed", + }, + { + roles: "Product Owner", + "survey-cta": "clicked", + "improve-demo": "An option to add more personalized messages would be great", + "main-benefit": "Allows clients to schedule meetings according to their convenience", + "who-benefits-most": "Consultants who manage multiple clients", + "disappointment-score": "Very disappointed", + }, + { + roles: "Software Engineer", + "survey-cta": "clicked", + "improve-demo": "The mobile app could use some improvements", + "main-benefit": "Takes care of scheduling so I can focus more on coding", + "who-benefits-most": "Developers in a distributed team", + "disappointment-score": "Somewhat disappointed", + }, + { + roles: "Executive", + "survey-cta": "clicked", + "improve-demo": "A group scheduling feature would be nice", + "main-benefit": "Simplifies managing my busy schedule", + "who-benefits-most": "Executives with back-to-back meetings", + "disappointment-score": "Very disappointed", + }, + { + roles: "Product Manager", + "survey-cta": "clicked", + "improve-demo": "Maybe a lighter theme for the UI?", + "main-benefit": "A unified view of all my appointments in one place", + "who-benefits-most": "Professionals who have to manage multiple projects", + "disappointment-score": "Not at all disappointed", + }, + { + roles: "Product Owner", + "survey-cta": "clicked", + "improve-demo": "Add options for non-business hours scheduling for flexible work", + "main-benefit": "Easily coordinating meetings across different departments", + "who-benefits-most": "Teams working in shifts", + "disappointment-score": "Very disappointed", + }, + { + roles: "Software Engineer", + "survey-cta": "clicked", + "improve-demo": "In-app notifications for upcoming meetings would be beneficial", + "main-benefit": "Eases cross-team collaborations for product development", + "who-benefits-most": "Developers in a cross-functional team setup", + "disappointment-score": "Somewhat disappointed", + }, + { + roles: "Founder", + "survey-cta": "clicked", + "improve-demo": "Option for booking slots for different services would be helpful", + "main-benefit": "Helps organize client calls without back-and-forth emails", + "who-benefits-most": "Service-based business owners", + "disappointment-score": "Very disappointed", + }, + { + roles: "Executive", + "survey-cta": "clicked", + "improve-demo": "More customization options for calendar integration", + "main-benefit": "Synchronizes all my appointments in one place", + "who-benefits-most": "Professionals juggling between different calendars", + "disappointment-score": "Very disappointed", + }, + { + roles: "Product Manager", + "survey-cta": "clicked", + "improve-demo": "Capability to export calendar would be a great addition", + "main-benefit": "Simplifies planning and tracking of meetings", + "who-benefits-most": "Project managers handling multiple schedules", + "disappointment-score": "Somewhat disappointed", + }, + { + roles: "Product Owner", + "survey-cta": "clicked", + "improve-demo": "Better handling of time zone differences would be appreciated", + "main-benefit": "Ensures smooth coordination for product development", + "who-benefits-most": "Product owners in a global setup", + "disappointment-score": "Very disappointed", + }, + { + roles: "Software Engineer", + "survey-cta": "clicked", + "improve-demo": "Better error handling and alerts when conflicts occur", + "main-benefit": "Facilitates efficient scheduling of scrum meetings", + "who-benefits-most": "Developers in an agile team", + "disappointment-score": "Somewhat disappointed", + }, + { + roles: "Founder", + "survey-cta": "clicked", + "improve-demo": "Adding video call links directly would be a good addition", + "main-benefit": "Saves time in coordinating for meetings, especially investor pitches", + "who-benefits-most": "Startups looking for investments", + "disappointment-score": "Very disappointed", + }, + { + roles: "Executive", + "survey-cta": "clicked", + "improve-demo": "More control over look and feel for customer facing scheduling page", + "main-benefit": "Enhances productivity by removing manual coordination", + "who-benefits-most": "Business leaders frequently interacting with stakeholders", + "disappointment-score": "Very disappointed", + }, + { + roles: "Product Manager", + "survey-cta": "clicked", + "improve-demo": "Better analytics for usage and peak scheduling hours", + "main-benefit": "Easily track and manage all team meetings", + "who-benefits-most": "Managers overseeing multiple projects", + "disappointment-score": "Somewhat disappointed", + }, + { + roles: "Product Owner", + "survey-cta": "clicked", + "improve-demo": "Add reminders for upcoming scheduled meetings", + "main-benefit": "Facilitates effective planning and scheduling of product reviews", + "who-benefits-most": "Product owners overseeing product development lifecycle", + "disappointment-score": "Very disappointed", + }, + { + roles: "Software Engineer", + "survey-cta": "clicked", + "improve-demo": "Add integrations with more project management tools", + "main-benefit": "Helps me to align with my team and stakeholders on meeting schedules", + "who-benefits-most": "Developers in larger teams who need to synchronize their work schedules", + "disappointment-score": "Somewhat disappointed", + }, + { + roles: "Executive", + "survey-cta": "clicked", + "improve-demo": "Add a feature for automated meeting minutes and follow-up task assignments", + "main-benefit": "Helps me streamline the scheduling process with different teams and stakeholders", + "who-benefits-most": "Leaders and managers who need to effectively manage their time", + "disappointment-score": "Very disappointed", + }, + ]; + + const OnboardingSurvey = { + name: "Onboarding Survey", + type: "web", + status: "inProgress", + questions: [ + { + id: "intention", + type: QuestionType.MultipleChoiceSingle, + headline: "What are you here for?", + required: true, + choices: [ + { + id: createId(), + label: "Schedule calls with clients", + }, + { + id: createId(), + label: "Offer self-serve appointments", + }, + { + id: createId(), + label: "Organize my team internally", + }, + { + id: createId(), + label: "Build scheduling into my tool", + }, + { + id: createId(), + label: "Organize group meetings", + }, + ], + }, + { + id: "company-size", + type: QuestionType.MultipleChoiceSingle, + headline: "What's your company size?", + subheader: "Please select one of the following options:", + required: true, + choices: [ + { + id: createId(), + label: "only me", + }, + { + id: createId(), + label: "1-5 employees", + }, + { + id: createId(), + label: "6-10 employees", + }, + { + id: createId(), + label: "11-100 employees", + }, + { + id: createId(), + label: "over 100 employees", + }, + ], + }, + { + id: "first-contact", + type: QuestionType.MultipleChoiceSingle, + headline: "How did you hear about us first?", + subheader: "Please select one of the following options:", + required: true, + choices: [ + { + id: createId(), + label: "Recommendation", + }, + { + id: createId(), + label: "Social Media", + }, + { + id: createId(), + label: "Ads", + }, + { + id: createId(), + label: "Google Search", + }, + { + id: createId(), + label: "In a Podcast", + }, + ], + }, + ], + }; + + const OnboardingResponses = [ + { + intention: "Schedule calls with clients", + "company-size": "only me", + "first-contact": "Google Search", + }, + { + intention: "Offer self-serve appointments", + "company-size": "1-5 employees", + "first-contact": "Social Media", + }, + { + intention: "Organize my team internally", + "company-size": "6-10 employees", + "first-contact": "Recommendation", + }, + { + intention: "Build scheduling into my tool", + "company-size": "only me", + "first-contact": "Ads", + }, + { + intention: "Organize group meetings", + "company-size": "11-100 employees", + "first-contact": "In a Podcast", + }, + { + intention: "Schedule calls with clients", + "company-size": "over 100 employees", + "first-contact": "Recommendation", + }, + { + intention: "Offer self-serve appointments", + "company-size": "1-5 employees", + "first-contact": "Social Media", + }, + { + intention: "Organize my team internally", + "company-size": "only me", + "first-contact": "Social Media", + }, + { + intention: "Build scheduling into my tool", + "company-size": "6-10 employees", + "first-contact": "Social Media", + }, + { + intention: "Schedule calls with clients", + "company-size": "1-5 employees", + "first-contact": "Recommendation", + }, + { + intention: "Schedule calls with clients", + "company-size": "11-100 employees", + "first-contact": "Social Media", + }, + { + intention: "Offer self-serve appointments", + "company-size": "over 100 employees", + "first-contact": "Google Search", + }, + { + intention: "Organize my team internally", + "company-size": "only me", + "first-contact": "Recommendation", + }, + { + intention: "Offer self-serve appointments", + "company-size": "1-5 employees", + "first-contact": "Ads", + }, + { + intention: "Schedule calls with clients", + "company-size": "6-10 employees", + "first-contact": "Recommendation", + }, + { + intention: "Schedule calls with clients", + "company-size": "11-100 employees", + "first-contact": "Social Media", + }, + { + intention: "Offer self-serve appointments", + "company-size": "over 100 employees", + "first-contact": "Google Search", + }, + { + intention: "Organize my team internally", + "company-size": "only me", + "first-contact": "Recommendation", + }, + { + intention: "Offer self-serve appointments", + "company-size": "1-5 employees", + "first-contact": "Ads", + }, + { + intention: "Schedule calls with clients", + "company-size": "6-10 employees", + "first-contact": "Recommendation", + }, + ]; + + const ChurnSurvey = { + name: "Churn Survey", + type: "link", + status: "inProgress", + questions: [ + { + id: "churn-reason", + type: QuestionType.MultipleChoiceSingle, + logic: [ + { value: "Difficult to use", condition: "equals", destination: "easier-to-use" }, + { value: "It's too expensive", condition: "equals", destination: "30-off" }, + { + value: "I am missing features", + condition: "equals", + destination: "missing-features", + }, + { + value: "Poor customer service", + condition: "equals", + destination: "poor-service", + }, + { value: "I just didn't need it anymore", condition: "equals", destination: "end" }, + ], + choices: [ + { id: createId(), label: "Difficult to use" }, + { id: createId(), label: "It's too expensive" }, + { id: createId(), label: "I am missing features" }, + { id: createId(), label: "Poor customer service" }, + { id: createId(), label: "I just didn't need it anymore" }, + ], + headline: "Why did you cancel your subscription?", + required: true, + subheader: "We're sorry to see you leave. Help us do better:", + }, + { + id: "reason-easier-use", + type: QuestionType.OpenText, + logic: [{ condition: "submitted", destination: "end" }], + headline: "What would have made {{productName}} easier to use?", + required: true, + subheader: "", + buttonLabel: "Send", + }, + { + id: "30-off", + html: '

We\'d love to keep you as a customer. Happy to offer a 30% discount for the next year.

', + type: QuestionType.CTA, + logic: [{ condition: "clicked", destination: "end" }], + headline: "Get 30% off for the next year!", + required: true, + buttonUrl: "https://formbricks.com", + buttonLabel: "Get 30% off", + buttonExternal: true, + dismissButtonLabel: "Skip", + }, + { + id: "missing-features", + type: QuestionType.OpenText, + + logic: [{ condition: "submitted", destination: "end" }], + headline: "What features are you missing?", + required: true, + subheader: "", + }, + { + id: "poor-service", + html: '

We aim to provide the best possible customer service. Please email our CEO and she will personally handle your issue.

', + type: QuestionType.CTA, + logic: [{ condition: "clicked", destination: "end" }], + headline: "So sorry to hear 😔 Talk to our CEO directly!", + required: true, + buttonUrl: "mailto:ceo@company.com", + buttonLabel: "Send email to CEO", + buttonExternal: true, + dismissButtonLabel: "Skip", + }, + ], + }; + + const ChurnResponses = [ + { + "churn-reason": "Difficult to use", + "reason-easier-use": "Better onboarding would help, I was confused with time zone settings", + }, + { + "churn-reason": "Difficult to use", + "reason-easier-use": + "The UI could be more intuitive. I often struggled with setting up the available time slots", + }, + { + "churn-reason": "Difficult to use", + "reason-easier-use": "Please make the instructions clearer on how to integrate with my Google Calendar", + }, + { + "churn-reason": "It's too expensive", + "30-off": "clicked", + }, + { + "churn-reason": "It's too expensive", + "30-off": "clicked", + }, + { + "churn-reason": "It's too expensive", + "30-off": "clicked", + }, + { + "churn-reason": "I am missing features", + "missing-features": "I would love to see more customization options for the meeting invitation emails", + }, + { + "churn-reason": "I am missing features", + "missing-features": "Integration with Microsoft Teams would be very helpful for my workflow", + }, + { + "churn-reason": "I am missing features", + "missing-features": "I need more advanced reporting features to better understand my meeting patterns", + }, + { + "churn-reason": "Poor customer service", + "poor-service": "clicked", + }, + { + "churn-reason": "Poor customer service", + "poor-service": "clicked", + }, + { + "churn-reason": "Poor customer service", + "poor-service": "clicked", + }, + { + "churn-reason": "I just didn't need it anymore", + }, + { + "churn-reason": "I just didn't need it anymore", + }, + { + "churn-reason": "I just didn't need it anymore", + }, + { + "churn-reason": "I am missing features", + "missing-features": "It would be great if the tool could automatically exclude my lunch hours", + }, + { + "churn-reason": "I am missing features", + "missing-features": "More filtering options in the dashboard would make the tool more usable", + }, + { + "churn-reason": "Difficult to use", + "reason-easier-use": + "A simpler user interface would be much appreciated. The current one is a bit cluttered", + }, + { + "churn-reason": "It's too expensive", + "30-off": "clicked", + }, + { + "churn-reason": "Poor customer service", + "poor-service": "clicked", + }, + ]; + + const EASSurvey = { + name: "Earned Advocacy Score (EAS)", + type: "web", + status: "completed", + questions: [ + { + id: "actively-recommended", + type: QuestionType.MultipleChoiceSingle, + logic: [{ value: "No", condition: "equals", destination: "duz2qp8eftix9wty1l221x1h" }], + shuffleOption: "none", + choices: [ + { id: createId(), label: "Yes" }, + { id: createId(), label: "No" }, + ], + headline: "Have you actively recommended {{productName}} to others?", + required: true, + subheader: "", + }, + { + id: "reason-recommended", + type: QuestionType.OpenText, + logic: [{ condition: "submitted", destination: "yhfew1j3ng6luy7t7qynwj79" }], + headline: "Great to hear! Why did you recommend us?", + required: true, + placeholder: "Type your answer here...", + }, + { + id: "reason-not-recommended", + type: QuestionType.OpenText, + headline: "So sad. Why not?", + required: true, + placeholder: "Type your answer here...", + }, + { + id: "actively-discouraged", + type: QuestionType.MultipleChoiceSingle, + logic: [{ value: "No", condition: "equals", destination: "end" }], + shuffleOption: "none", + choices: [ + { id: createId(), label: "Yes" }, + { id: createId(), label: "No" }, + ], + headline: "Have you actively discouraged others from choosing {{productName}}?", + required: true, + subheader: "", + }, + { + id: "reason-discouraged", + type: QuestionType.OpenText, + headline: "What made you discourage them?", + required: true, + placeholder: "Type your answer here...", + }, + ], + }; + + const EASResponses = [ + { + "actively-recommended": "Yes", + "reason-recommended": + "The time zone feature is a game-changer. No more time conversions for international meetings!", + "actively-discouraged": "No", + }, + { + "actively-recommended": "Yes", + "reason-recommended": "The Google Calendar integration saves me so much time!", + "actively-discouraged": "No", + }, + { + "actively-recommended": "Yes", + "reason-recommended": "I love how easy it is to set available time slots. Makes scheduling a breeze!", + "actively-discouraged": "No", + }, + { + "actively-recommended": "Yes", + "reason-recommended": "The user interface is intuitive and easy to use. A big plus in my book.", + "actively-discouraged": "No", + }, + { + "actively-recommended": "No", + "reason-not-recommended": "I've had some issues with the meeting links not working properly.", + "actively-discouraged": "Yes", + "reason-discouraged": "The meeting link issues can cause quite a bit of confusion and delays.", + }, + { + "actively-recommended": "No", + "reason-not-recommended": "I find the pricing a bit too steep for the features offered.", + "actively-discouraged": "No", + }, + { + "actively-recommended": "No", + "reason-not-recommended": "The lack of integration with Microsoft Teams is a big drawback for me.", + "actively-discouraged": "No", + }, + { + "actively-recommended": "Yes", + "reason-recommended": "Being able to customize meeting invitations is a great feature.", + "actively-discouraged": "No", + }, + { + "actively-recommended": "Yes", + "reason-recommended": "The customer service has been exceptional. Prompt responses and helpful advice.", + "actively-discouraged": "No", + }, + { + "actively-recommended": "No", + "reason-not-recommended": "I often have trouble with the time zone settings. They're a bit confusing.", + "actively-discouraged": "No", + }, + { + "actively-recommended": "No", + "reason-not-recommended": "The UI could be cleaner. It feels a bit cluttered at times.", + "actively-discouraged": "Yes", + "reason-discouraged": "The UI can be off-putting for some users.", + }, + { + "actively-recommended": "Yes", + "reason-recommended": "I find the reporting features very insightful for managing my schedule.", + "actively-discouraged": "No", + }, + { + "actively-recommended": "Yes", + "reason-recommended": "Being able to exclude my lunch hours automatically is a neat feature!", + "actively-discouraged": "No", + }, + { + "actively-recommended": "Yes", + "reason-recommended": "The filtering options in the dashboard are excellent for managing my bookings.", + "actively-discouraged": "No", + }, + { + "actively-recommended": "No", + "reason-not-recommended": "I've had a couple of instances where my meetings were double booked.", + "actively-discouraged": "Yes", + "reason-discouraged": "Double bookings can be quite embarrassing and unprofessional.", + }, + { + "actively-recommended": "Yes", + "reason-recommended": "The tool is always improving and adding new features. Keeps me coming back!", + "actively-discouraged": "No", + }, + { + "actively-recommended": "No", + "reason-not-recommended": "I've had some issues with my meeting notifications not going out.", + "actively-discouraged": "Yes", + "reason-discouraged": "It's important for a scheduling tool to send out reliable notifications.", + }, + { + "actively-recommended": "Yes", + "reason-recommended": "The ability to set buffer times between meetings is a lifesaver!", + "actively-discouraged": "No", + }, + { + "actively-recommended": "Yes", + "reason-recommended": + "It's so convenient to share my scheduling link and let others pick a time that works for them.", + "actively-discouraged": "No", + }, + { + "actively-recommended": "No", + "reason-not-recommended": "I find the time slot setup a bit cumbersome.", + "actively-discouraged": "No", + }, + ]; + + const InterviewPromptSurvey = { + name: "Interview Prompt", + type: "web", + status: "paused", + questions: [ + { + id: "interview-prompt", + type: QuestionType.CTA, + headline: "Do you have 15 min to talk to us? 🙏", + html: "You're one of our power users. We would love to interview you briefly!", + buttonLabel: "Book slot", + buttonUrl: "https://cal.com/johannes", + buttonExternal: true, + required: false, + }, + ], + }; + + const InterviewPromptResponses = [ + { + "interview-prompt": "clicked", + }, + { + "interview-prompt": "skipped", + }, + { + "interview-prompt": "clicked", + }, + { + "interview-prompt": "skipped", + }, + { + "interview-prompt": "clicked", + }, + { + "interview-prompt": "skipped", + }, + { + "interview-prompt": "clicked", + }, + { + "interview-prompt": "skipped", + }, + { + "interview-prompt": "clicked", + }, + { + "interview-prompt": "skipped", + }, + { + "interview-prompt": "skipped", + }, + { + "interview-prompt": "skipped", + }, + { + "interview-prompt": "skipped", + }, + { + "interview-prompt": "skipped", + }, + { + "interview-prompt": "skipped", + }, + { + "interview-prompt": "skipped", + }, + ]; + + // Define possible user agents + const userAgents = [ + { os: "Windows", browser: "Chrome" }, + { os: "MacOS", browser: "Safari" }, + { os: "Linux", browser: "Firefox" }, + { os: "Windows", browser: "Edge" }, + { os: "iOS", browser: "Safari" }, + { os: "Android", browser: "Chrome" }, + { os: "MacOS", browser: "Chrome" }, + { os: "Windows", browser: "Firefox" }, + ]; + + // Create a function that generates responses and displays + const generateResponsesAndDisplays = (people, detailedResponses, userAgents) => { + const responses: any = []; + const displays: any = []; + + people.forEach((person, index) => { + // Each person has a 70% chance to respond to the survey + if (Math.random() < 0.7) { + responses.push({ + finished: true, + data: detailedResponses[index % detailedResponses.length], + meta: { userAgent: userAgents[Math.floor(Math.random() * userAgents.length)] }, + person: { connect: { id: person.id } }, + }); + displays.push({ + person: { connect: { id: person.id } }, + status: "responded", + }); + } else { + // If the person does not respond, they get a 'notResponded' status + displays.push({ + person: { connect: { id: person.id } }, + status: "seen", + }); + } + }); + + return { responses, displays }; + }; + + // Create a function that creates a survey + const createSurvey = async (survey, responses, displays) => { + return await prisma.survey.create({ + data: { + ...survey, + environment: { connect: { id: product.environments[0].id } }, + questions: survey.questions as any, + responses: { create: responses }, + displays: { create: displays }, + }, + }); + }; + + // Generate responses and displays for surveys + const PMFResults = generateResponsesAndDisplays(people, PMFResponses, userAgents); + const OnboardingResults = generateResponsesAndDisplays(people, OnboardingResponses, userAgents); + const ChurnResults = generateResponsesAndDisplays(people, ChurnResponses, userAgents); + const EASResults = generateResponsesAndDisplays(people, EASResponses, userAgents); + const InterviewPromptResults = generateResponsesAndDisplays(people, InterviewPromptResponses, userAgents); + + // Create the surveys + await createSurvey(PMFSurvey, PMFResults.responses, PMFResults.displays); + await createSurvey(OnboardingSurvey, OnboardingResults.responses, OnboardingResults.displays); + await createSurvey(ChurnSurvey, ChurnResults.responses, ChurnResults.displays); + await createSurvey(EASSurvey, EASResults.responses, EASResults.displays); + await createSurvey( + InterviewPromptSurvey, + InterviewPromptResults.responses, + InterviewPromptResults.displays + ); +} diff --git a/apps/web/app/environments/[environmentId]/events/page.tsx b/apps/web/app/environments/[environmentId]/events/page.tsx index 12fc588025..7296cf345b 100644 --- a/apps/web/app/environments/[environmentId]/events/page.tsx +++ b/apps/web/app/environments/[environmentId]/events/page.tsx @@ -1,6 +1,11 @@ import EventClassesList from "./EventClassesList"; import EventsAttributesTabs from "@/components/events_attributes/EventsAttributesTabs"; import ContentWrapper from "@/components/shared/ContentWrapper"; +import { Metadata } from "next"; + +export const metadata: Metadata = { + title: "Actions & Attributes", +}; export default function EventsPage({ params }) { return ( diff --git a/apps/web/app/environments/[environmentId]/integrations/layout.tsx b/apps/web/app/environments/[environmentId]/integrations/layout.tsx index bc5e075801..c5753813f4 100644 --- a/apps/web/app/environments/[environmentId]/integrations/layout.tsx +++ b/apps/web/app/environments/[environmentId]/integrations/layout.tsx @@ -1,4 +1,9 @@ import ContentWrapper from "@/components/shared/ContentWrapper"; +import { Metadata } from "next"; + +export const metadata: Metadata = { + title: "Integrations", +}; export default function IntegrationsLayout({ children }) { return ( diff --git a/apps/web/app/environments/[environmentId]/layout.tsx b/apps/web/app/environments/[environmentId]/layout.tsx index 5b6b36d636..5fad307eb2 100644 --- a/apps/web/app/environments/[environmentId]/layout.tsx +++ b/apps/web/app/environments/[environmentId]/layout.tsx @@ -6,6 +6,7 @@ import { authOptions } from "@/app/api/auth/[...nextauth]/authOptions"; import PosthogIdentify from "./PosthogIdentify"; import FormbricksClient from "../../FormbricksClient"; import { PosthogClientWrapper } from "../../PosthogClientWrapper"; +import { ResponseFilterProvider } from "@/app/environments/[environmentId]/ResponseFilterContext"; import { hasUserEnvironmentAccess } from "@/lib/api/apiHelper"; export default async function EnvironmentLayout({ children, params }) { @@ -20,16 +21,18 @@ export default async function EnvironmentLayout({ children, params }) { return ( <> - - - - - -
- {children} -
-
- + + + + + + +
+ {children} +
+
+ + ); } diff --git a/apps/web/app/environments/[environmentId]/people/[personId]/ResponsesFeed.tsx b/apps/web/app/environments/[environmentId]/people/[personId]/ResponsesFeed.tsx index cda098a90f..4f66e086f4 100644 --- a/apps/web/app/environments/[environmentId]/people/[personId]/ResponsesFeed.tsx +++ b/apps/web/app/environments/[environmentId]/people/[personId]/ResponsesFeed.tsx @@ -38,7 +38,7 @@ export default function ResponseFeed({ person, sortByDate, environmentId }) {
+ href={`/environments/${environmentId}/surveys/${response.survey.id}/summary`}> {response.survey.name} {people.length === 0 ? ( - + ) : (
diff --git a/apps/web/app/environments/[environmentId]/settings/billing/PricingTable.tsx b/apps/web/app/environments/[environmentId]/settings/billing/PricingTable.tsx index 6e62ae9e5e..2476601d49 100644 --- a/apps/web/app/environments/[environmentId]/settings/billing/PricingTable.tsx +++ b/apps/web/app/environments/[environmentId]/settings/billing/PricingTable.tsx @@ -73,9 +73,9 @@ export default function PricingTable({ environmentId, session }: PricingTablePro
-

Free

- {session.user?.plan === "free" && } -

+

Free

+ {team.plan === "free" && } +

Always free. Giving back to the community.

    @@ -91,7 +91,7 @@ export default function PricingTable({ environmentId, session }: PricingTablePro

    Always free

    - {session.user?.plan === "free" ? ( + {team.plan === "free" ? ( @@ -109,8 +109,8 @@ export default function PricingTable({ environmentId, session }: PricingTablePro
    -

    Pro

    - {session.user?.plan === "pro" && } +

    Pro

    + {team.plan === "pro" && }

    All features included. Unlimited usage.

    @@ -129,12 +129,12 @@ export default function PricingTable({ environmentId, session }: PricingTablePro / month

    - {session.user?.plan === "pro" ? ( + {team.plan === "pro" ? ( ) : ( diff --git a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/summary/LinkSurveyModal.tsx b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/LinkSurveyModal.tsx similarity index 100% rename from apps/web/app/environments/[environmentId]/surveys/[surveyId]/summary/LinkSurveyModal.tsx rename to apps/web/app/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/LinkSurveyModal.tsx diff --git a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/summary/MultipleChoiceSummary.tsx b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/MultipleChoiceSummary.tsx similarity index 98% rename from apps/web/app/environments/[environmentId]/surveys/[surveyId]/summary/MultipleChoiceSummary.tsx rename to apps/web/app/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/MultipleChoiceSummary.tsx index a2e77d1d7c..19d0fbe92a 100644 --- a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/summary/MultipleChoiceSummary.tsx +++ b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/MultipleChoiceSummary.tsx @@ -54,8 +54,7 @@ export default function MultipleChoiceSummary({ } function findEmail(person) { - const emailAttribute = person.attributes.email; - return emailAttribute ? emailAttribute.value : null; + return person.attributes?.email || null; } const addOtherChoice = (response, value) => { diff --git a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/summary/NPSSummary.tsx b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/NPSSummary.tsx similarity index 100% rename from apps/web/app/environments/[environmentId]/surveys/[surveyId]/summary/NPSSummary.tsx rename to apps/web/app/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/NPSSummary.tsx diff --git a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/summary/OpenTextSummary.tsx b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/OpenTextSummary.tsx similarity index 96% rename from apps/web/app/environments/[environmentId]/surveys/[surveyId]/summary/OpenTextSummary.tsx rename to apps/web/app/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/OpenTextSummary.tsx index c7951741bb..f012ca859d 100644 --- a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/summary/OpenTextSummary.tsx +++ b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/OpenTextSummary.tsx @@ -12,8 +12,7 @@ interface OpenTextSummaryProps { } function findEmail(person) { - const emailAttribute = person.attributes.email; - return emailAttribute ? emailAttribute.value : null; + return person.attributes?.email || null; } export default function OpenTextSummary({ questionSummary, environmentId }: OpenTextSummaryProps) { diff --git a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/summary/RatingSummary.tsx b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/RatingSummary.tsx similarity index 100% rename from apps/web/app/environments/[environmentId]/surveys/[surveyId]/summary/RatingSummary.tsx rename to apps/web/app/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/RatingSummary.tsx diff --git a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/summary/StatusDropdown.tsx b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/StatusDropdown.tsx similarity index 100% rename from apps/web/app/environments/[environmentId]/surveys/[surveyId]/summary/StatusDropdown.tsx rename to apps/web/app/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/StatusDropdown.tsx diff --git a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/summary/SuccessMessage.tsx b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/SuccessMessage.tsx similarity index 89% rename from apps/web/app/environments/[environmentId]/surveys/[surveyId]/summary/SuccessMessage.tsx rename to apps/web/app/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/SuccessMessage.tsx index dcd3248055..948cd0f7b7 100644 --- a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/summary/SuccessMessage.tsx +++ b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/SuccessMessage.tsx @@ -36,6 +36,10 @@ export default function SuccessMessage({ environmentId, survey }: SummaryMetadat if (survey.type === "link") { setShowLinkModal(true); } + // Remove success param from url + const url = new URL(window.location.href); + url.searchParams.delete("success"); + window.history.replaceState({}, "", url.toString()); } } }, [environment, searchParams, survey]); diff --git a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/summary/SummaryList.tsx b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/SummaryList.tsx similarity index 89% rename from apps/web/app/environments/[environmentId]/surveys/[surveyId]/summary/SummaryList.tsx rename to apps/web/app/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/SummaryList.tsx index 506be41d44..9dcc67a20b 100644 --- a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/summary/SummaryList.tsx +++ b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/SummaryList.tsx @@ -1,34 +1,31 @@ -import { getAnalysisData } from "@/app/environments/[environmentId]/surveys/[surveyId]/summary/data"; +import ConsentSummary from "@/app/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/ConsentSummary"; import EmptySpaceFiller from "@/components/shared/EmptySpaceFiller"; import { QuestionType, type CTAQuestion, + type ConsentQuestion, type MultipleChoiceMultiQuestion, type MultipleChoiceSingleQuestion, type NPSQuestion, type OpenTextQuestion, type RatingQuestion, - type ConsentQuestion, } from "@formbricks/types/questions"; import type { QuestionSummary } from "@formbricks/types/responses"; -import { TSurveyQuestion } from "@formbricks/types/v1/surveys"; -import { Session } from "next-auth"; +import { TResponse } from "@formbricks/types/v1/responses"; +import { TSurvey, TSurveyQuestion } from "@formbricks/types/v1/surveys"; import CTASummary from "./CTASummary"; import MultipleChoiceSummary from "./MultipleChoiceSummary"; import NPSSummary from "./NPSSummary"; import OpenTextSummary from "./OpenTextSummary"; import RatingSummary from "./RatingSummary"; -import ConsentSummary from "@/app/environments/[environmentId]/surveys/[surveyId]/summary/ConsentSummary"; interface SummaryListProps { environmentId: string; - surveyId: string; - session: Session; + survey: TSurvey; + responses: TResponse[]; } -export default async function SummaryList({ environmentId, surveyId, session }: SummaryListProps) { - const { survey, responses } = await getAnalysisData(session, surveyId, environmentId); - +export default function SummaryList({ environmentId, survey, responses }: SummaryListProps) { const getSummaryData = (): QuestionSummary[] => survey.questions.map((question) => { const questionResponses = responses diff --git a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/summary/SummaryMetadata.tsx b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/SummaryMetadata.tsx similarity index 65% rename from apps/web/app/environments/[environmentId]/surveys/[surveyId]/summary/SummaryMetadata.tsx rename to apps/web/app/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/SummaryMetadata.tsx index 261783c9e7..9141f86ced 100644 --- a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/summary/SummaryMetadata.tsx +++ b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/SummaryMetadata.tsx @@ -1,28 +1,15 @@ -import LinkSurveyShareButton from "@/app/environments/[environmentId]/surveys/[surveyId]/summary/LinkModalButton"; -import StatusDropdown from "@/app/environments/[environmentId]/surveys/[surveyId]/summary/StatusDropdown"; -import SuccessMessage from "@/app/environments/[environmentId]/surveys/[surveyId]/summary/SuccessMessage"; -import { IS_FORMBRICKS_CLOUD, RESPONSES_LIMIT_FREE } from "@formbricks/lib/constants"; -import { getSurveyResponses } from "@formbricks/lib/services/response"; -import { getSurvey } from "@formbricks/lib/services/survey"; import { timeSinceConditionally } from "@formbricks/lib/time"; -import { Button, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@formbricks/ui"; -import { PencilSquareIcon, QuestionMarkCircleIcon } from "@heroicons/react/24/solid"; -import { Session } from "next-auth"; +import { TResponse } from "@formbricks/types/v1/responses"; +import { TSurveyWithAnalytics } from "@formbricks/types/v1/surveys"; +import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@formbricks/ui"; +import { QuestionMarkCircleIcon } from "@heroicons/react/24/solid"; interface SummaryMetadataProps { - session: Session; - surveyId: string; - environmentId: string; + responses: TResponse[]; + survey: TSurveyWithAnalytics; } -export default async function SummaryMetadata({ session, surveyId, environmentId }: SummaryMetadataProps) { - const survey = await getSurvey(surveyId); - if (!survey) throw new Error(`Survey not found: ${surveyId}`); - const allResponses = await getSurveyResponses(surveyId); - const limitReached = - IS_FORMBRICKS_CLOUD && session?.user.plan === "free" && allResponses.length >= RESPONSES_LIMIT_FREE; - const responses = limitReached ? allResponses.slice(0, RESPONSES_LIMIT_FREE) : allResponses; - +export default function SummaryMetadata({ responses, survey }: SummaryMetadataProps) { const completionRate = !responses ? 0 : (responses.filter((r) => r.finished).length / responses.length) * 100; @@ -95,22 +82,9 @@ export default async function SummaryMetadata({ session, surveyId, environmentId
    Last updated: {timeSinceConditionally(survey.updatedAt.toISOString())}
    -
    - {survey.type === "link" && } - - - -
    - ); } diff --git a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/SummaryPage.tsx b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/SummaryPage.tsx new file mode 100644 index 0000000000..eb14498f08 --- /dev/null +++ b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/SummaryPage.tsx @@ -0,0 +1,52 @@ +"use client"; +import CustomFilter from "@/app/environments/[environmentId]/surveys/[surveyId]/CustomFilter"; +import SummaryHeader from "@/app/environments/[environmentId]/surveys/[surveyId]/SummaryHeader"; +import SurveyResultsTabs from "@/app/environments/[environmentId]/surveys/[surveyId]/(analysis)/SurveyResultsTabs"; +import SummaryList from "@/app/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/SummaryList"; +import SummaryMetadata from "@/app/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/SummaryMetadata"; +import ContentWrapper from "@/components/shared/ContentWrapper"; +import { useResponseFilter } from "@/app/environments/[environmentId]/ResponseFilterContext"; +import { getFilterResponses } from "@/lib/surveys/surveys"; +import { TResponse } from "@formbricks/types/v1/responses"; +import { TSurveyWithAnalytics } from "@formbricks/types/v1/surveys"; +import { useSearchParams } from "next/navigation"; +import { useEffect, useMemo } from "react"; + +interface SummaryPageProps { + environmentId: string; + survey: TSurveyWithAnalytics; + surveyId: string; + responses: TResponse[]; +} + +const SummaryPage = ({ environmentId, survey, surveyId, responses }: SummaryPageProps) => { + const { selectedFilter, dateRange, resetState } = useResponseFilter(); + const searchParams = useSearchParams(); + + useEffect(() => { + if (!searchParams?.get("referer")) { + resetState(); + } + }, [searchParams]); + // get the filtered array when the selected filter value changes + const filterResponses: TResponse[] = useMemo(() => { + return getFilterResponses(responses, selectedFilter, survey, dateRange); + }, [selectedFilter, responses, survey, dateRange]); + + return ( + + + + + + + + ); +}; + +export default SummaryPage; diff --git a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/page.tsx b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/page.tsx new file mode 100644 index 0000000000..8815358fe7 --- /dev/null +++ b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/page.tsx @@ -0,0 +1,28 @@ +export const revalidate = REVALIDATION_INTERVAL; + +import { authOptions } from "@/app/api/auth/[...nextauth]/authOptions"; +import { getAnalysisData } from "@/app/environments/[environmentId]/surveys/[surveyId]/(analysis)/data"; +import { getServerSession } from "next-auth"; +import ResponsesLimitReachedBanner from "../ResponsesLimitReachedBanner"; +import SummaryPage from "./SummaryPage"; +import { REVALIDATION_INTERVAL } from "@formbricks/lib/constants"; + +export default async function Page({ params }) { + const session = await getServerSession(authOptions); + if (!session) { + throw new Error("Unauthorized"); + } + const { responses, survey } = await getAnalysisData(params.surveyId, params.environmentId); + + return ( + <> + + + + ); +} diff --git a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/CustomFilter.tsx b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/CustomFilter.tsx new file mode 100644 index 0000000000..0055095620 --- /dev/null +++ b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/CustomFilter.tsx @@ -0,0 +1,415 @@ +"use client"; + +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, + Calendar, +} from "@formbricks/ui"; +import { format, subDays, differenceInDays } from "date-fns"; +import { useEffect, useMemo, useState, useCallback, useRef } from "react"; +import { ChevronDown, ChevronUp, DownloadIcon } from "lucide-react"; +import { + generateQuestionsAndAttributes, + generateQuestionAndFilterOptions, + getTodayDate, +} from "@/lib/surveys/surveys"; +import toast from "react-hot-toast"; +import { getTodaysDateFormatted } from "@formbricks/lib/time"; +import { convertToCSV } from "@/lib/csvConversion"; +import useClickOutside from "@formbricks/lib/useClickOutside"; +import { TResponse } from "@formbricks/types/v1/responses"; +import { TSurvey } from "@formbricks/types/v1/surveys"; +import { createId } from "@paralleldrive/cuid2"; +import ResponseFilter from "./ResponseFilter"; +import { DateRange, useResponseFilter } from "@/app/environments/[environmentId]/ResponseFilterContext"; +import { useTagsForEnvironment } from "@/lib/tags/tags"; + +enum DateSelected { + FROM = "from", + TO = "to", +} + +enum FilterDownload { + ALL = "all", + FILTER = "filter", +} + +enum FilterDropDownLabels { + ALL_TIME = "All time", + LAST_7_DAYS = "Last 7 days", + LAST_30_DAYS = "Last 30 days", + CUSTOM_RANGE = "Custom range...", +} + +interface CustomFilterProps { + environmentId: string; + survey: TSurvey; + responses: TResponse[]; + totalResponses: TResponse[]; +} + +const getDifferenceOfDays = (from, to) => { + const days = differenceInDays(to, from); + if (days === 7) { + return FilterDropDownLabels.LAST_7_DAYS; + } else if (days === 30) { + return FilterDropDownLabels.LAST_30_DAYS; + } else { + return FilterDropDownLabels.CUSTOM_RANGE; + } +}; + +const CustomFilter = ({ environmentId, responses, survey, totalResponses }: CustomFilterProps) => { + const { setSelectedOptions, dateRange, setDateRange } = useResponseFilter(); + const [filterRange, setFilterRange] = useState( + dateRange.from && dateRange.to + ? getDifferenceOfDays(dateRange.from, dateRange.to) + : FilterDropDownLabels.ALL_TIME + ); + const [selectingDate, setSelectingDate] = useState(DateSelected.FROM); + const [isDatePickerOpen, setIsDatePickerOpen] = useState(false); + const [isFilterDropDownOpen, setIsFilterDropDownOpen] = useState(false); + const [isDownloadDropDownOpen, setIsDownloadDropDownOpen] = useState(false); + const [hoveredRange, setHoveredRange] = useState(null); + const { data: environmentTags } = useTagsForEnvironment(environmentId); + + // when the page loads we get total responses and iterate over the responses and questions, tags and attributes to create the filter options + useEffect(() => { + const { questionFilterOptions, questionOptions } = generateQuestionAndFilterOptions( + survey, + totalResponses, + environmentTags + ); + setSelectedOptions({ questionFilterOptions, questionOptions }); + }, [totalResponses, survey, setSelectedOptions, environmentTags]); + + const datePickerRef = useRef(null); + + const getMatchQandA = (responses: any, survey: any) => { + if (survey && responses) { + // Create a mapping of question IDs to their headlines + const questionIdToHeadline = {}; + survey.questions.forEach((question) => { + questionIdToHeadline[question.id] = question.headline; + }); + + // Replace question IDs with question headlines in response data + const updatedResponses = responses.map((response) => { + const updatedResponse: Array<{ + id: string; + question: string; + answer: string; + type: string; + scale?: "number" | "star" | "smiley"; + range?: number; + }> = []; // Specify the type of updatedData + // iterate over survey questions and build the updated response + for (const question of survey.questions) { + const answer = response.data[question.id]; + if (answer) { + updatedResponse.push({ + id: createId(), + question: question.headline, + type: question.type, + scale: question.scale, + range: question.range, + answer: answer as string, + }); + } + } + return { ...response, responses: updatedResponse }; + }); + + const updatedResponsesWithTags = updatedResponses.map((response) => ({ + ...response, + tags: response.tags?.map((tag) => tag), + })); + + return updatedResponsesWithTags; + } + return []; + }; + + const csvFileName = useMemo(() => { + if (survey) { + const formattedDateString = getTodaysDateFormatted("_"); + return `${survey.name.split(" ").join("_")}_responses_${formattedDateString}`.toLocaleLowerCase(); + } + + return "my_survey_responses"; + }, [survey]); + + const downloadResponses = useCallback( + async (filter: FilterDownload) => { + const downloadResponse = filter === FilterDownload.ALL ? totalResponses : responses; + const { attributeMap, questionNames } = generateQuestionsAndAttributes(survey, downloadResponse); + const matchQandA = getMatchQandA(downloadResponse, survey); + const csvData = matchQandA.map((response) => { + const csvResponse = { + "Response ID": response.id, + Timestamp: response.createdAt, + Finished: response.finished, + "Survey ID": response.surveyId, + "Formbricks User ID": response.person?.id ?? "", + }; + + // Map each question name to its corresponding answer + questionNames.forEach((questionName: string) => { + const matchingQuestion = response.responses.find((question) => question.question === questionName); + let transformedAnswer = ""; + if (matchingQuestion) { + const answer = matchingQuestion.answer; + if (Array.isArray(answer)) { + transformedAnswer = answer.join("; "); + } else { + transformedAnswer = answer; + } + } + csvResponse[questionName] = matchingQuestion ? transformedAnswer : ""; + }); + + return csvResponse; + }); + + // Add attribute columns to the CSV + + Object.keys(attributeMap).forEach((attributeName) => { + const attributeValues = attributeMap[attributeName]; + Object.keys(attributeValues).forEach((personId) => { + const value = attributeValues[personId]; + const matchingResponse = csvData.find((response) => response["Formbricks User ID"] === personId); + if (matchingResponse) { + matchingResponse[attributeName] = value; + } + }); + }); + + // Fields which will be used as column headers in the CSV + const fields = [ + "Response ID", + "Timestamp", + "Finished", + "Survey ID", + "Formbricks User ID", + ...Object.keys(attributeMap), + ...questionNames, + ]; + + let response; + + try { + response = await convertToCSV({ + json: csvData, + fields, + fileName: csvFileName, + }); + } catch (err) { + toast.error("Error downloading CSV"); + return; + } + + const blob = new Blob([response.csvResponse], { type: "text/csv;charset=utf-8;" }); + const downloadUrl = URL.createObjectURL(blob); + + const link = document.createElement("a"); + link.href = downloadUrl; + + link.download = `${csvFileName}.csv`; + + document.body.appendChild(link); + link.click(); + + document.body.removeChild(link); + + URL.revokeObjectURL(downloadUrl); + }, + [csvFileName, responses, totalResponses, survey] + ); + + const handleDateHoveredChange = (date: Date) => { + if (selectingDate === DateSelected.FROM) { + const startOfRange = new Date(date); + startOfRange.setHours(0, 0, 0, 0); // Set to the start of the selected day + + // Check if the selected date is after the current 'to' date + if (startOfRange > dateRange?.to!) { + return; + } else { + setHoveredRange({ from: startOfRange, to: dateRange.to }); + } + } else { + const endOfRange = new Date(date); + endOfRange.setHours(23, 59, 59, 999); // Set to the end of the selected day + + // Check if the selected date is before the current 'from' date + if (endOfRange < dateRange?.from!) { + return; + } else { + setHoveredRange({ from: dateRange.from, to: endOfRange }); + } + } + }; + + const handleDateChange = (date: Date) => { + if (selectingDate === DateSelected.FROM) { + const startOfRange = new Date(date); + startOfRange.setHours(0, 0, 0, 0); // Set to the start of the selected day + + // Check if the selected date is after the current 'to' date + if (startOfRange > dateRange?.to!) { + const nextDay = new Date(startOfRange); + nextDay.setDate(nextDay.getDate() + 1); + nextDay.setHours(23, 59, 59, 999); + setDateRange({ from: startOfRange, to: nextDay }); + } else { + setDateRange((prevData) => ({ from: startOfRange, to: prevData.to })); + } + setSelectingDate(DateSelected.TO); + } else { + const endOfRange = new Date(date); + endOfRange.setHours(23, 59, 59, 999); // Set to the end of the selected day + + // Check if the selected date is before the current 'from' date + if (endOfRange < dateRange?.from!) { + const previousDay = new Date(endOfRange); + previousDay.setDate(previousDay.getDate() - 1); + previousDay.setHours(0, 0, 0, 0); // Set to the start of the selected day + setDateRange({ from: previousDay, to: endOfRange }); + } else { + setDateRange((prevData) => ({ from: prevData?.from, to: endOfRange })); + } + setIsDatePickerOpen(false); + setSelectingDate(DateSelected.FROM); + } + }; + + const handleDatePickerClose = () => { + setIsDatePickerOpen(false); + setSelectingDate(DateSelected.FROM); + }; + + useClickOutside(datePickerRef, () => handleDatePickerClose()); + + return ( + <> +
    +
    + + { + value && handleDatePickerClose(); + setIsFilterDropDownOpen(value); + }}> + +
    + + {filterRange === FilterDropDownLabels.CUSTOM_RANGE + ? `${dateRange?.from ? format(dateRange?.from, "dd LLL") : "Select first date"} - ${ + dateRange?.to ? format(dateRange.to, "dd LLL") : "Select last date" + }` + : filterRange} + + {isFilterDropDownOpen ? ( + + ) : ( + + )} +
    +
    + + { + setFilterRange(FilterDropDownLabels.ALL_TIME); + setDateRange({ from: undefined, to: getTodayDate() }); + }}> +

    All time

    +
    + { + setFilterRange(FilterDropDownLabels.LAST_7_DAYS); + setDateRange({ from: subDays(new Date(), 7), to: getTodayDate() }); + }}> +

    Last 7 days

    +
    + { + setFilterRange(FilterDropDownLabels.LAST_30_DAYS); + setDateRange({ from: subDays(new Date(), 30), to: getTodayDate() }); + }}> +

    Last 30 days

    +
    + { + setIsDatePickerOpen(true); + setFilterRange(FilterDropDownLabels.CUSTOM_RANGE); + setSelectingDate(DateSelected.FROM); + }}> +

    Custom range...

    +
    +
    +
    + { + value && handleDatePickerClose(); + setIsDownloadDropDownOpen(value); + }}> + +
    +
    + Download + {isDownloadDropDownOpen ? ( + + ) : ( + + )} +
    + +
    +
    + + { + downloadResponses(FilterDownload.ALL); + }}> +

    All responses (CSV)

    +
    + { + downloadResponses(FilterDownload.FILTER); + }}> +

    Current selection (CSV)

    +
    +
    +
    +
    + {isDatePickerOpen && ( +
    + handleDateChange(date)} + onDayMouseEnter={handleDateHoveredChange} + onDayMouseLeave={() => setHoveredRange(null)} + classNames={{ + day_today: "hover:bg-slate-200 bg-white", + }} + /> +
    + )} +
    + + ); +}; + +export default CustomFilter; diff --git a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/QuestionFilterComboBox.tsx b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/QuestionFilterComboBox.tsx new file mode 100644 index 0000000000..8c10ec1fce --- /dev/null +++ b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/QuestionFilterComboBox.tsx @@ -0,0 +1,170 @@ +"use client"; + +import * as React from "react"; +import { + Command, + CommandGroup, + CommandItem, + CommandEmpty, + DropdownMenu, + DropdownMenuTrigger, + DropdownMenuItem, + DropdownMenuContent, +} from "@formbricks/ui"; +import useClickOutside from "@formbricks/lib/useClickOutside"; +import { ChevronDown, ChevronUp, X } from "lucide-react"; +import { QuestionType } from "@formbricks/types/questions"; +import { isArray } from "lodash"; +import clsx from "clsx"; + +type QuestionFilterComboBoxProps = { + filterOptions: string[] | undefined; + filterComboBoxOptions: string[] | undefined; + filterValue: string | undefined; + filterComboBoxValue: string | string[] | undefined; + onChangeFilterValue: (o: string) => void; + onChangeFilterComboBoxValue: (o: string | string[]) => void; + type: QuestionType | "Attributes" | "Tags" | undefined; + handleRemoveMultiSelect: (value: string[]) => void; + disabled?: boolean; +}; + +const QuestionFilterComboBox = ({ + filterComboBoxOptions, + filterComboBoxValue, + filterOptions, + filterValue, + onChangeFilterComboBoxValue, + onChangeFilterValue, + type, + handleRemoveMultiSelect, + disabled = false, +}: QuestionFilterComboBoxProps) => { + const [open, setOpen] = React.useState(false); + const [openFilterValue, setOpenFilterValue] = React.useState(false); + const commandRef = React.useRef(null); + useClickOutside(commandRef, () => setOpen(false)); + + // multiple when question type is multi selection + const isMultiple = type === QuestionType.MultipleChoiceMulti || type === QuestionType.MultipleChoiceSingle; + + // when question type is multi selection so we remove the option from the options which has been already selected + const options = isMultiple + ? filterComboBoxOptions?.filter((o) => !filterComboBoxValue?.includes(o)) + : filterComboBoxOptions; + + // disable the combo box for selection of value when question type is nps or rating and selected value is submitted or skipped + const isDisabledComboBox = + (type === QuestionType.NPS || type === QuestionType.Rating) && + (filterValue === "Submitted" || filterValue === "Skipped"); + + return ( +
    + {filterOptions && filterOptions?.length <= 1 ? ( +
    +

    {filterValue}

    +
    + ) : ( + { + value && setOpen(false); + setOpenFilterValue(value); + }}> + +
    + {!filterValue ? ( +

    Select...

    + ) : ( +

    {filterValue}

    + )} + {filterOptions && filterOptions.length > 1 && ( + <> + {openFilterValue ? ( + + ) : ( + + )} + + )} +
    +
    + + {filterOptions?.map((o, index) => ( + onChangeFilterValue(o)}> + {o} + + ))} + +
    + )} + +
    !disabled && !isDisabledComboBox && filterValue && setOpen(true)} + className={clsx( + "group flex items-center justify-between rounded-md rounded-l-none bg-white px-3 py-2 text-sm", + disabled || isDisabledComboBox || !filterValue ? "opacity-50" : "cursor-pointer" + )}> + {filterComboBoxValue && filterComboBoxValue?.length > 0 ? ( + !isMultiple ? ( +

    {filterComboBoxValue}

    + ) : ( +
    + {typeof filterComboBoxValue !== "string" && + filterComboBoxValue?.map((o) => ( + + ))} +
    + ) + ) : ( +

    Select...

    + )} +
    + {open ? ( + + ) : ( + + )} +
    +
    +
    + {open && ( +
    + No result found. + + {options?.map((o) => ( + { + !isMultiple + ? onChangeFilterComboBoxValue(o) + : onChangeFilterComboBoxValue( + isArray(filterComboBoxValue) ? [...filterComboBoxValue, o] : [o] + ); + !isMultiple && setOpen(false); + }} + className="cursor-pointer"> + {o} + + ))} + +
    + )} +
    +
    +
    + ); +}; + +export default QuestionFilterComboBox; diff --git a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/QuestionsComboBox.tsx b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/QuestionsComboBox.tsx new file mode 100644 index 0000000000..91735b52e1 --- /dev/null +++ b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/QuestionsComboBox.tsx @@ -0,0 +1,160 @@ +"use client"; + +import * as React from "react"; +import { + Command, + CommandGroup, + CommandItem, + CommandInput, + CommandEmpty, + NetPromoterScoreIcon, +} from "@formbricks/ui"; +import useClickOutside from "@formbricks/lib/useClickOutside"; +import { ChevronDown, ChevronUp } from "lucide-react"; +import { QuestionType } from "@formbricks/types/questions"; +import { + StarIcon, + HashtagIcon, + TagIcon, + CursorArrowRippleIcon, + QuestionMarkCircleIcon, + ListBulletIcon, + QueueListIcon, + CheckIcon, +} from "@heroicons/react/24/solid"; +import clsx from "clsx"; + +export enum OptionsType { + QUESTIONS = "Questions", + TAGS = "Tags", + ATTRIBUTES = "Attributes", +} + +export type QuestionOption = { + label: string; + questionType?: QuestionType; + type: OptionsType; + id: string; +}; +export type QuestionOptions = { + header: OptionsType; + option: QuestionOption[]; +}; + +interface QuestionComboBoxProps { + options: QuestionOptions[]; + selected: Partial; + onChangeValue: (option: QuestionOption) => void; +} + +const SelectedCommandItem = ({ label, questionType, type }: Partial) => { + const getIconType = () => { + if (type === OptionsType.QUESTIONS) { + switch (questionType) { + case QuestionType.Rating: + return ; + case QuestionType.CTA: + return ; + case QuestionType.OpenText: + return ; + case QuestionType.MultipleChoiceMulti: + return ; + case QuestionType.MultipleChoiceSingle: + return ; + case QuestionType.NPS: + return ; + case QuestionType.Consent: + return ; + } + } + if (type === OptionsType.ATTRIBUTES) { + return ; + } + if (type === OptionsType.TAGS) { + return ; + } + }; + + const getColor = () => { + if (type === OptionsType.ATTRIBUTES) { + return "bg-indigo-500"; + } else if (type === OptionsType.QUESTIONS) { + return "bg-brand-dark"; + } else { + return "bg-amber-500"; + } + }; + return ( +
    + {getIconType()} +

    {label}

    +
    + ); +}; + +const QuestionsComboBox = ({ options, selected, onChangeValue }: QuestionComboBoxProps) => { + const [open, setOpen] = React.useState(false); + const commandRef = React.useRef(null); + const [inputValue, setInputValue] = React.useState(""); + useClickOutside(commandRef, () => setOpen(false)); + + return ( + +
    setOpen(true)} + className="group flex cursor-pointer items-center justify-between rounded-md bg-white px-3 py-2 text-sm"> + {!open && selected.hasOwnProperty("label") && ( + + )} + {(open || !selected.hasOwnProperty("label")) && ( + + )} +
    + {open ? ( + + ) : ( + + )} +
    +
    +
    + {open && ( +
    + No result found. + {options?.map((data) => ( + <> + {data?.option.length > 0 && ( + {data.header}

    }> + {data?.option?.map((o, i) => ( + { + setInputValue(""); + onChangeValue(o); + setOpen(false); + }} + className="cursor-pointer"> + + + ))} +
    + )} + + ))} +
    + )} +
    +
    + ); +}; + +export default QuestionsComboBox; diff --git a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/ResponseFilter.tsx b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/ResponseFilter.tsx new file mode 100644 index 0000000000..06ff787c95 --- /dev/null +++ b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/ResponseFilter.tsx @@ -0,0 +1,225 @@ +"use client"; + +import { QuestionType } from "@formbricks/types/questions"; +import QuestionsComboBox, { QuestionOption, OptionsType } from "./QuestionsComboBox"; +import { useState, useEffect } from "react"; +import { Popover, PopoverTrigger, PopoverContent, Button, Checkbox } from "@formbricks/ui"; +import { ChevronDown, ChevronUp, Plus } from "lucide-react"; +import { TrashIcon } from "@heroicons/react/24/solid"; +import QuestionFilterComboBox from "@/app/environments/[environmentId]/surveys/[surveyId]/QuestionFilterComboBox"; +import { useResponseFilter } from "@/app/environments/[environmentId]/ResponseFilterContext"; +import clsx from "clsx"; + +export type QuestionFilterOptions = { + type: QuestionType | "Attributes" | "Tags"; + filterOptions: string[]; + filterComboBoxOptions: string[]; + id: string; +}; + +const ResponseFilter = () => { + const [isOpen, setIsOpen] = useState(false); + const { selectedFilter, setSelectedFilter, selectedOptions } = useResponseFilter(); + + const handleOnChangeQuestionComboBoxValue = (value: QuestionOption, index: number) => { + if (selectedFilter.filter[index].questionType) { + // Create a new array and copy existing values from SelectedFilter + selectedFilter.filter[index] = { + questionType: value, + filterType: { + filterComboBoxValue: undefined, + filterValue: selectedOptions.questionFilterOptions.find( + (q) => q.type === value.type || q.type === value.questionType + )?.filterOptions[0], + }, + }; + setSelectedFilter({ filter: [...selectedFilter.filter], onlyComplete: selectedFilter.onlyComplete }); + } else { + // Update the existing value at the specified index + selectedFilter.filter[index].questionType = value; + selectedFilter.filter[index].filterType = { + filterComboBoxValue: undefined, + filterValue: selectedOptions.questionFilterOptions.find( + (q) => q.type === value.type || q.type === value.questionType + )?.filterOptions[0], + }; + setSelectedFilter({ ...selectedFilter }); + } + }; + + // remove the added filter if nothing is selected when filter is closed + useEffect(() => { + if (!isOpen) { + clearItem(); + } + }, [isOpen]); + + const handleAddNewFilter = () => { + setSelectedFilter({ + ...selectedFilter, + filter: [ + ...selectedFilter.filter, + { + questionType: {}, + filterType: { filterComboBoxValue: undefined, filterValue: undefined }, + }, + ], + }); + }; + + const handleClearAllFilters = () => { + setSelectedFilter({ ...selectedFilter, filter: [] }); + }; + + const handleDeleteFilter = (index: number) => { + selectedFilter.filter.splice(index, 1); + setSelectedFilter({ ...selectedFilter }); + }; + + // when filter is opened and added a filter without selecting any option clear out that value + const clearItem = () => { + setSelectedFilter({ + filter: [...selectedFilter.filter.filter((s) => s.questionType.hasOwnProperty("label"))], + onlyComplete: selectedFilter.onlyComplete, + }); + }; + + const handleOnChangeFilterComboBoxValue = (o: string | string[], index: number) => { + selectedFilter.filter[index] = { + ...selectedFilter.filter[index], + filterType: { + filterComboBoxValue: o, + filterValue: selectedFilter.filter[index].filterType.filterValue, + }, + }; + setSelectedFilter({ ...selectedFilter }); + }; + const handleOnChangeFilterValue = (o: string, index: number) => { + selectedFilter.filter[index] = { + ...selectedFilter.filter[index], + filterType: { filterComboBoxValue: undefined, filterValue: o }, + }; + setSelectedFilter({ ...selectedFilter }); + }; + const handleRemoveMultiSelect = (value: string[], index) => { + selectedFilter.filter[index] = { + ...selectedFilter.filter[index], + filterType: { + filterComboBoxValue: value, + filterValue: selectedFilter.filter[index].filterType.filterValue, + }, + }; + setSelectedFilter({ ...selectedFilter }); + }; + + const handleCheckOnlyComplete = (checked: boolean) => { + setSelectedFilter({ ...selectedFilter, onlyComplete: checked }); + }; + + // remove the filter which has already been selected + const questionComboBoxOptions = selectedOptions.questionOptions.map((q) => { + return { + ...q, + option: q.option.filter((o) => !selectedFilter.filter.some((f) => f?.questionType?.id === o?.id)), + }; + }); + + return ( + + + Filter {selectedFilter.filter.length > 0 && `(${selectedFilter.filter.length})`} +
    + {isOpen ? ( + + ) : ( + + )} +
    +
    + +
    +

    Show all responses that match

    +

    Show all responses where...

    +
    + + { + typeof checked === "boolean" && handleCheckOnlyComplete(checked); + }} + /> +
    +
    + {selectedFilter.filter?.map((s, i) => ( + <> +
    +
    + handleOnChangeQuestionComboBoxValue(value, i)} + /> + q.type === s.questionType.type || q.type === s.questionType.questionType + )?.filterOptions + } + filterComboBoxOptions={ + selectedOptions.questionFilterOptions.find( + (q) => + (q.type === s.questionType.questionType || q.type === s.questionType.type) && + q.id === s.questionType.id + )?.filterComboBoxOptions + } + filterValue={selectedFilter.filter[i].filterType.filterValue} + filterComboBoxValue={selectedFilter.filter[i].filterType.filterComboBoxValue} + type={ + s?.questionType?.type === OptionsType.QUESTIONS + ? s?.questionType?.questionType + : s?.questionType?.type + } + handleRemoveMultiSelect={(value) => handleRemoveMultiSelect(value, i)} + onChangeFilterComboBoxValue={(value) => handleOnChangeFilterComboBoxValue(value, i)} + onChangeFilterValue={(value) => handleOnChangeFilterValue(value, i)} + disabled={!s?.questionType?.label} + /> +
    +
    +

    Delete

    + handleDeleteFilter(i)} + /> +
    +
    + {i !== selectedFilter.filter.length - 1 && ( +
    +

    And

    +
    +
    + )} + + ))} +
    + + +
    +
    +
    + ); +}; + +export default ResponseFilter; diff --git a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/SummaryHeader.tsx b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/SummaryHeader.tsx new file mode 100644 index 0000000000..174050afa1 --- /dev/null +++ b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/SummaryHeader.tsx @@ -0,0 +1,213 @@ +"use client"; + +import { useEnvironment } from "@/lib/environments/environments"; +import { useProduct } from "@/lib/products/products"; +import { TSurvey } from "@formbricks/types/v1/surveys"; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, + Button, + DropdownMenu, + DropdownMenuContent, + DropdownMenuPortal, + DropdownMenuRadioGroup, + DropdownMenuRadioItem, + DropdownMenuSeparator, + DropdownMenuSub, + DropdownMenuSubContent, + DropdownMenuSubTrigger, + DropdownMenuTrigger, + ErrorComponent, +} from "@formbricks/ui"; +import { + CheckCircleIcon, + PauseCircleIcon, + PlayCircleIcon, + PencilSquareIcon, + EllipsisHorizontalIcon, +} from "@heroicons/react/24/solid"; +import SurveyStatusIndicator from "@/components/shared/SurveyStatusIndicator"; +import { useSurveyMutation } from "@/lib/surveys/mutateSurveys"; +import toast from "react-hot-toast"; +import { useRouter } from "next/navigation"; +import SuccessMessage from "@/app/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/SuccessMessage"; +import LinkSurveyShareButton from "@/app/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/LinkModalButton"; +import LoadingSpinner from "@/components/shared/LoadingSpinner"; + +interface SummaryHeaderProps { + surveyId: string; + environmentId: string; + survey: TSurvey; +} +const SummaryHeader = ({ surveyId, environmentId, survey }: SummaryHeaderProps) => { + const router = useRouter(); + const { product, isLoadingProduct, isErrorProduct } = useProduct(environmentId); + const { environment, isLoadingEnvironment, isErrorEnvironment } = useEnvironment(environmentId); + const { triggerSurveyMutate } = useSurveyMutation(environmentId, surveyId); + + if (isLoadingProduct || isLoadingEnvironment) { + return ; + } + + if (isErrorProduct || isErrorEnvironment) { + return ; + } + return ( +
    +
    +

    {survey.name}

    + {product.name} +
    +
    + {survey.type === "link" && } + {(environment?.widgetSetupCompleted || survey.type === "link") && survey?.status !== "draft" ? ( + + ) : null} + +
    +
    + + + + + + {survey.type === "link" && ( + <> + + + + )} + {(environment?.widgetSetupCompleted || survey.type === "link") && survey?.status !== "draft" ? ( + <> + + +
    + + + {survey.status === "inProgress" && "In-progress"} + {survey.status === "paused" && "Paused"} + {survey.status === "completed" && "Completed"} + {survey.status === "archived" && "Archived"} + +
    +
    + + + { + triggerSurveyMutate({ status: value }) + .then(() => { + toast.success( + value === "inProgress" + ? "Survey live" + : value === "paused" + ? "Survey paused" + : value === "completed" + ? "Survey completed" + : "" + ); + router.refresh(); + }) + .catch((error) => { + toast.error(`Error: ${error.message}`); + }); + }}> + + In-progress + + + + Paused + + + + Completed + + + + +
    + + + ) : null} + +
    +
    +
    + +
    + ); +}; + +export default SummaryHeader; diff --git a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/SurveyResultsTabs.tsx b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/SurveyResultsTabs.tsx deleted file mode 100644 index b07b3eecce..0000000000 --- a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/SurveyResultsTabs.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import SecondNavbar from "@/components/environments/SecondNavBar"; -import { PresentationChartLineIcon, InboxStackIcon } from "@heroicons/react/24/solid"; - -interface SurveyResultsTabProps { - activeId: string; - environmentId: string; - surveyId: string; -} - -export default function SurveyResultsTab({ activeId, environmentId, surveyId }: SurveyResultsTabProps) { - const tabs = [ - { - id: "summary", - label: "Summary", - icon: , - href: `/environments/${environmentId}/surveys/${surveyId}/summary`, - }, - { - id: "responses", - label: "Responses", - icon: , - href: `/environments/${environmentId}/surveys/${surveyId}/responses`, - }, - ]; - - return ; -} diff --git a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/edit/MultipleChoiceMultiForm.tsx b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/edit/MultipleChoiceMultiForm.tsx index 660c3812ea..d9b583ae5e 100644 --- a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/edit/MultipleChoiceMultiForm.tsx +++ b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/edit/MultipleChoiceMultiForm.tsx @@ -36,17 +36,17 @@ export default function MultipleChoiceMultiForm({ const shuffleOptionsTypes = { none: { id: "none", - label: "None (Keep choices in current order)", + label: "Keep current order", show: true, }, all: { id: "all", - label: "All (Randomize all choices)", + label: "Randomize all", show: question.choices.filter((c) => c.id === "other").length === 0, }, exceptLast: { id: "exceptLast", - label: "Except Last (Keep last choice and randomize other choices)", + label: "Randomize all except last option", show: true, }, }; @@ -191,12 +191,14 @@ export default function MultipleChoiceMultiForm({ onClick={() => deleteChoice(choiceIdx)} /> )} - {choice.id !== "other" && ( - addChoice(choiceIdx)} - /> - )} +
    + {choice.id !== "other" && ( + addChoice(choiceIdx)} + /> + )} +
))}
@@ -207,15 +209,13 @@ export default function MultipleChoiceMultiForm({ )}
-

Ordering

- { updateQuestion(questionIdx, { shuffleOption: e }); }}> - + diff --git a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/edit/RecontactOptionsCard.tsx b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/edit/RecontactOptionsCard.tsx index fe99b2b83e..4e36fdf96f 100644 --- a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/edit/RecontactOptionsCard.tsx +++ b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/edit/RecontactOptionsCard.tsx @@ -106,7 +106,7 @@ export default function RecontactOptionsCard({
{localSurvey.type === "link" && (
- +
)}
diff --git a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/edit/SurveyMenuBar.tsx b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/edit/SurveyMenuBar.tsx index da27cb1e2a..9741196160 100644 --- a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/edit/SurveyMenuBar.tsx +++ b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/edit/SurveyMenuBar.tsx @@ -138,7 +138,7 @@ export default function SurveyMenuBar({ className="w-72 border-white hover:border-slate-200 " />
- {localSurvey?.responseRate && ( + {!!localSurvey?.responseRate && (
This survey received responses. To keep the data consistent, make changes with caution. diff --git a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/edit/WhenToSendCard.tsx b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/edit/WhenToSendCard.tsx index 43a5384a07..cef9064324 100644 --- a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/edit/WhenToSendCard.tsx +++ b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/edit/WhenToSendCard.tsx @@ -100,10 +100,6 @@ export default function WhenToSendCard({ environmentId, localSurvey, setLocalSur return
Error
; } - /* if (localSurvey.type === "link") { - return null; - } */ - return ( <> {localSurvey.type === "link" && (
- +
)}
diff --git a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/edit/WhoToSendCard.tsx b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/edit/WhoToSendCard.tsx index 201e60a181..7e5083315d 100644 --- a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/edit/WhoToSendCard.tsx +++ b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/edit/WhoToSendCard.tsx @@ -85,7 +85,11 @@ export default function WhoToSendCard({ environmentId, localSurvey, setLocalSurv <> { + if (localSurvey.type !== "link") { + setOpen(openState); + } + }} className="w-full rounded-lg border border-slate-300 bg-white"> {localSurvey.type === "link" && (
- +
)}
diff --git a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/responses/ResponseTimeline.tsx b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/responses/ResponseTimeline.tsx deleted file mode 100644 index 51251578a0..0000000000 --- a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/responses/ResponseTimeline.tsx +++ /dev/null @@ -1,202 +0,0 @@ -"use client"; - -import EmptySpaceFiller from "@/components/shared/EmptySpaceFiller"; -import { convertToCSV } from "@/lib/csvConversion"; -import { generateQuestionsAndAttributes } from "@/lib/surveys/surveys"; -import { getTodaysDateFormatted } from "@formbricks/lib/time"; -import { TResponse } from "@formbricks/types/v1/responses"; -import { TSurvey } from "@formbricks/types/v1/surveys"; -import { Button } from "@formbricks/ui"; -import { ArrowDownTrayIcon } from "@heroicons/react/24/outline"; -import { createId } from "@paralleldrive/cuid2"; -import { useCallback, useMemo, useState } from "react"; -import { toast } from "react-hot-toast"; -import SingleResponse from "./SingleResponse"; - -interface ResponseTimelineProps { - environmentId: string; - surveyId: string; - responses: TResponse[]; - survey: TSurvey; -} - -export default function ResponseTimeline({ - environmentId, - surveyId, - responses, - survey, -}: ResponseTimelineProps) { - const { attributeMap, questionNames } = generateQuestionsAndAttributes(survey, responses); - const [isDownloadCSVLoading, setIsDownloadCSVLoading] = useState(false); - - const matchQandA = useMemo(() => { - if (survey && responses) { - // Create a mapping of question IDs to their headlines - const questionIdToHeadline = {}; - survey.questions.forEach((question) => { - questionIdToHeadline[question.id] = question.headline; - }); - - // Replace question IDs with question headlines in response data - const updatedResponses = responses.map((response) => { - const updatedResponse: Array<{ - id: string; - question: string; - answer: string; - type: string; - scale?: "number" | "star" | "smiley"; - range?: number; - }> = []; // Specify the type of updatedData - // iterate over survey questions and build the updated response - for (const question of survey.questions) { - const answer = response.data[question.id]; - if (answer) { - updatedResponse.push({ - id: createId(), - question: question.headline, - type: question.type, - scale: question.scale, - range: question.range, - answer: answer as string, - }); - } - } - return { ...response, responses: updatedResponse }; - }); - - const updatedResponsesWithTags = updatedResponses.map((response) => ({ - ...response, - tags: response.tags?.map((tag) => tag), - })); - - return updatedResponsesWithTags; - } - return []; - }, [survey, responses]); - - const csvFileName = useMemo(() => { - if (survey) { - const formattedDateString = getTodaysDateFormatted("_"); - return `${survey.name.split(" ").join("_")}_responses_${formattedDateString}`.toLocaleLowerCase(); - } - - return "my_survey_responses"; - }, [survey]); - - const downloadResponses = useCallback(async () => { - const csvData = matchQandA.map((response) => { - const csvResponse = { - "Response ID": response.id, - Timestamp: response.createdAt, - Finished: response.finished, - "Survey ID": response.surveyId, - "Formbricks User ID": response.person?.id ?? "", - }; - - // Map each question name to its corresponding answer - questionNames.forEach((questionName: string) => { - const matchingQuestion = response.responses.find((question) => question.question === questionName); - let transformedAnswer = ""; - if (matchingQuestion) { - const answer = matchingQuestion.answer; - if (Array.isArray(answer)) { - transformedAnswer = answer.join("; "); - } else { - transformedAnswer = answer; - } - } - csvResponse[questionName] = matchingQuestion ? transformedAnswer : ""; - }); - - return csvResponse; - }); - - // Add attribute columns to the CSV - - Object.keys(attributeMap).forEach((attributeName) => { - const attributeValues = attributeMap[attributeName]; - Object.keys(attributeValues).forEach((personId) => { - const value = attributeValues[personId]; - const matchingResponse = csvData.find((response) => response["Formbricks User ID"] === personId); - if (matchingResponse) { - matchingResponse[attributeName] = value; - } - }); - }); - - // Fields which will be used as column headers in the CSV - const fields = [ - "Response ID", - "Timestamp", - "Finished", - "Survey ID", - "Formbricks User ID", - ...Object.keys(attributeMap), - ...questionNames, - ]; - - setIsDownloadCSVLoading(true); - - let response; - - try { - response = await convertToCSV({ - json: csvData, - fields, - fileName: csvFileName, - }); - } catch (err) { - toast.error("Error downloading CSV"); - setIsDownloadCSVLoading(false); - return; - } - - setIsDownloadCSVLoading(false); - - const blob = new Blob([response.csvResponse], { type: "text/csv;charset=utf-8;" }); - const downloadUrl = URL.createObjectURL(blob); - - const link = document.createElement("a"); - link.href = downloadUrl; - - link.download = `${csvFileName}.csv`; - - document.body.appendChild(link); - link.click(); - - document.body.removeChild(link); - - URL.revokeObjectURL(downloadUrl); - }, [attributeMap, csvFileName, matchQandA, questionNames]); - - return ( -
- {responses.length === 0 ? ( - - ) : ( -
- - {matchQandA.map((updatedResponse) => { - return ( - - ); - })} -
- )} -
- ); -} diff --git a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/responses/page.tsx b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/responses/page.tsx deleted file mode 100644 index 92ba2ac871..0000000000 --- a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/responses/page.tsx +++ /dev/null @@ -1,39 +0,0 @@ -export const revalidate = 0; - -import ContentWrapper from "@/components/shared/ContentWrapper"; -import SurveyResultsTabs from "../SurveyResultsTabs"; -import ResponseTimeline from "./ResponseTimeline"; -import ResponsesLimitReachedBanner from "../ResponsesLimitReachedBanner"; -import { getServerSession } from "next-auth"; -import { authOptions } from "@/app/api/auth/[...nextauth]/authOptions"; -import { getAnalysisData } from "@/app/environments/[environmentId]/surveys/[surveyId]/summary/data"; - -export default async function ResponsesPage({ params }) { - const session = await getServerSession(authOptions); - if (!session) { - throw new Error("Unauthorized"); - } - const { responses, survey } = await getAnalysisData(session, params.surveyId, params.environmentId); - return ( - <> - - - - - - - ); -} diff --git a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/summary/page.tsx b/apps/web/app/environments/[environmentId]/surveys/[surveyId]/summary/page.tsx deleted file mode 100644 index cf607c463c..0000000000 --- a/apps/web/app/environments/[environmentId]/surveys/[surveyId]/summary/page.tsx +++ /dev/null @@ -1,31 +0,0 @@ -export const revalidate = 0; - -import { authOptions } from "@/app/api/auth/[...nextauth]/authOptions"; -import ContentWrapper from "@/components/shared/ContentWrapper"; -import { getServerSession } from "next-auth"; -import ResponsesLimitReachedBanner from "../ResponsesLimitReachedBanner"; -import SurveyResultsTabs from "../SurveyResultsTabs"; -import SummaryList from "./SummaryList"; -import SummaryMetadata from "./SummaryMetadata"; - -export default async function SummaryPage({ params }) { - const session = await getServerSession(authOptions); - if (!session) { - throw new Error("Unauthorized"); - } - - return ( - <> - - - - - - - - ); -} diff --git a/apps/web/app/environments/[environmentId]/surveys/page.tsx b/apps/web/app/environments/[environmentId]/surveys/page.tsx index 0b319c2346..52d76c2780 100644 --- a/apps/web/app/environments/[environmentId]/surveys/page.tsx +++ b/apps/web/app/environments/[environmentId]/surveys/page.tsx @@ -1,8 +1,13 @@ import ContentWrapper from "@/components/shared/ContentWrapper"; import WidgetStatusIndicator from "@/components/shared/WidgetStatusIndicator"; import SurveysList from "./SurveyList"; +import { Metadata } from "next"; import { getProductByEnvironmentId } from "@formbricks/lib/services/product"; +export const metadata: Metadata = { + title: "Your Surveys", +}; + export default async function SurveysPage({ params }) { const environmentId = params.environmentId; const product = await getProductByEnvironmentId(environmentId); diff --git a/apps/web/app/globals.css b/apps/web/app/globals.css index e324d44536..1782cb7ee3 100644 --- a/apps/web/app/globals.css +++ b/apps/web/app/globals.css @@ -34,3 +34,18 @@ input:focus { --tw-ring-shadow: 0 0 #000 !important; box-shadow: none; } + +@layer utilities { + @variants responsive { + /* Hide scrollbar for Chrome, Safari and Opera */ + .no-scrollbar::-webkit-scrollbar { + display: none; + } + + /* Hide scrollbar for IE, Edge and Firefox */ + .no-scrollbar { + -ms-overflow-style: none; /* IE and Edge */ + scrollbar-width: none; /* Firefox */ + } + } +} diff --git a/apps/web/app/layout.tsx b/apps/web/app/layout.tsx index 25c04dfbb9..883da12beb 100644 --- a/apps/web/app/layout.tsx +++ b/apps/web/app/layout.tsx @@ -1,7 +1,11 @@ import "./globals.css"; +import { Metadata } from "next"; -export const metadata = { - title: "Formbricks", +export const metadata: Metadata = { + title: { + template: "%s | Formbricks", + default: "Formbricks", + }, description: "Open-Source In-Product Survey Platform", }; diff --git a/apps/web/components/preview/MultipleChoiceSingleQuestion.tsx b/apps/web/components/preview/MultipleChoiceSingleQuestion.tsx index 438126532a..22cc1771dc 100644 --- a/apps/web/components/preview/MultipleChoiceSingleQuestion.tsx +++ b/apps/web/components/preview/MultipleChoiceSingleQuestion.tsx @@ -108,23 +108,23 @@ export default function MultipleChoiceSingleQuestion({ selectedChoice === choice.label ? "z-10 border-slate-400 bg-slate-50" : "border-gray-200", "relative mb-2 flex cursor-pointer flex-col rounded-md border p-4 hover:bg-slate-50 focus:outline-none" )}> - - { - setSelectedChoice(choice.id); - }} - checked={selectedChoice === choice.id} - style={{ borderColor: brandColor, color: brandColor }} - required={question.required && idx === 0} - /> - - {choice.label} + + + setSelectedChoice(choice.id)} + checked={selectedChoice === choice.id} + style={{ borderColor: brandColor, color: brandColor }} + required={question.required && idx === 0} + /> + + {choice.label} + {choice.id === "other" && selectedChoice === "other" && ( = ({ type, environmentId, noWidgetRequired }) => { +const EmptySpaceFiller: React.FC = ({ + type, + environmentId, + noWidgetRequired, + emptyMessage, +}) => { const { environment, isErrorEnvironment, isLoadingEnvironment } = useEnvironment(environmentId); if (isLoadingEnvironment) return ; @@ -34,7 +40,7 @@ const EmptySpaceFiller: React.FC = ({ type, environmentId )} - {(environment.widgetSetupCompleted || noWidgetRequired) && + {((environment.widgetSetupCompleted || noWidgetRequired) && emptyMessage) || "Your data will appear here as soon as you receive your first response âČ"}
diff --git a/apps/web/components/team/CreateTeamModal.tsx b/apps/web/components/team/CreateTeamModal.tsx index 4411f903a3..0565481f90 100644 --- a/apps/web/components/team/CreateTeamModal.tsx +++ b/apps/web/components/team/CreateTeamModal.tsx @@ -55,7 +55,11 @@ export default function CreateTeamModal({ open, setOpen }: CreateTeamModalProps)
- +
diff --git a/apps/web/lib/api/apiHelper.ts b/apps/web/lib/api/apiHelper.ts index 6bfefe35ff..1e4e22f52c 100644 --- a/apps/web/lib/api/apiHelper.ts +++ b/apps/web/lib/api/apiHelper.ts @@ -84,7 +84,7 @@ export const getPlan = async (req, res) => { return apiKeyData?.environment.product.team.plan || "free"; } else { const user = await getSessionUser(req, res); - return user ? user.plan : "free"; + return user && user.teams?.length > 0 ? user.teams[0].plan : "free"; } }; diff --git a/apps/web/lib/email-template.ts b/apps/web/lib/email-template.ts index e625a9baaa..e3e3bae902 100644 --- a/apps/web/lib/email-template.ts +++ b/apps/web/lib/email-template.ts @@ -71,16 +71,18 @@ export const withEmailTemplate = (content: string) => } .button { - background: #00c4b8; + margin-top:12px; + background: #0f172a; border-radius: 8px; text-decoration: none !important; color: #fff !important; - font-weight: 600; + font-weight: 500; padding: 10px 30px; display: inline-block; + font-size: 0.9em; } .button:hover { - background: #00e6ca; + background: #334155; } .footer { diff --git a/apps/web/lib/email.ts b/apps/web/lib/email.ts index 822d5f2e3b..bc80e33f38 100644 --- a/apps/web/lib/email.ts +++ b/apps/web/lib/email.ts @@ -130,31 +130,36 @@ export const sendResponseFinishedEmail = async ( ? `${personEmail} just completed your ${survey.name} survey ✅` : `A response for ${survey.name} was completed ✅`, replyTo: personEmail || env.MAIL_FROM, - html: withEmailTemplate(`

Survey completed

Someone just completed your survey "${survey.name}"
+ html: withEmailTemplate(`

Hey 👋

Someone just completed your survey ${ + survey.name + }

${getQuestionResponseMapping(survey, response) .map( (question) => - question.answer && `

${question.question}

${question.answer}

` + question.answer && + `
+

${question.question}

+

${question.answer}

+
` ) .join("")} -
+ + View all responses
-

Did you know? 💡

+

Start a conversation 💡

${ personEmail - ? "

You can reply to this email to start a conversation with this user.

" + ? "

Hit 'Reply' or reach out manually: ${personEmail}

" : "

If you set the email address as an attribute in in-app surveys, you can reply directly to the respondent.

" }
- - View response `), }); }; diff --git a/apps/web/lib/surveys/surveys.ts b/apps/web/lib/surveys/surveys.ts index e023771b54..c79de58be3 100644 --- a/apps/web/lib/surveys/surveys.ts +++ b/apps/web/lib/surveys/surveys.ts @@ -2,6 +2,16 @@ import useSWR from "swr"; import { fetcher } from "@formbricks/lib/fetcher"; import { TSurvey } from "@formbricks/types/v1/surveys"; import { TResponse } from "@formbricks/types/v1/responses"; +import { + OptionsType, + QuestionOptions, +} from "@/app/environments/[environmentId]/surveys/[surveyId]/QuestionsComboBox"; +import { QuestionFilterOptions } from "@/app/environments/[environmentId]/surveys/[surveyId]/ResponseFilter"; +import { QuestionType } from "@formbricks/types/questions"; +import { TTag } from "@formbricks/types/v1/tags"; +import { DateRange, SelectedFilterValue } from "@/app/environments/[environmentId]/ResponseFilterContext"; +import { isArray } from "lodash"; +import { isWithinInterval } from "date-fns"; export const useSurveys = (environmentId: string) => { const { data, error, mutate, isLoading } = useSWR(`/api/v1/environments/${environmentId}/surveys`, fetcher); @@ -164,3 +174,418 @@ export const generateQuestionsAndAttributes = (survey: TSurvey, responses: TResp attributeMap, }; }; + +const conditionOptions = { + openText: ["is"], + multipleChoiceSingle: ["Includes either"], + multipleChoiceMulti: ["Includes all", "Includes either"], + nps: ["Is equal to", "Is less than", "Is more than", "Submitted", "Skipped"], + rating: ["Is equal to", "Is less than", "Is more than", "Submitted", "Skipped"], + cta: ["is"], + tags: ["is"], + userAttributes: ["Equals", "Not equals"], + consent: ["is"], +}; +const filterOptions = { + openText: ["Filled out", "Skipped"], + rating: ["1", "2", "3", "4", "5"], + nps: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10"], + cta: ["Clicked", "Dismissed"], + tags: ["Applied", "Not applied"], + consent: ["Accepted", "Dismissed"], +}; + +// creating an object for the attributes in key value format when key is string and value is an string array +const getPersonAttributes = (responses: TResponse[]): { [key: string]: any[] } | null => { + let attributes: { [key: string]: any[] } = {}; + + responses.forEach((obj) => { + const personAttributes = obj.personAttributes; + + if (personAttributes && Object.keys(personAttributes).length > 0) { + for (const [key, value] of Object.entries(personAttributes)) { + if (attributes.hasOwnProperty(key)) { + if (!attributes[key].includes(value)) { + attributes[key].push(value); + } + } else { + attributes[key] = [value]; + } + } + } + }); + + if (Object.keys(attributes).length > 0) { + return attributes; + } else { + return null; + } +}; + +// creating the options for the filtering to be selected there are three types questions, attributes and tags +export const generateQuestionAndFilterOptions = ( + survey: TSurvey, + responses: TResponse[], + environmentTags: TTag[] | undefined +): { + questionOptions: QuestionOptions[]; + questionFilterOptions: QuestionFilterOptions[]; +} => { + let questionOptions: any = []; + let questionFilterOptions: any = []; + + let questionsOptions: any = []; + + survey.questions.forEach((q) => { + if (Object.keys(conditionOptions).includes(q.type)) { + questionsOptions.push({ + label: q.headline, + questionType: q.type, + type: OptionsType.QUESTIONS, + id: q.id, + }); + } + }); + questionOptions = [...questionOptions, { header: OptionsType.QUESTIONS, option: questionsOptions }]; + survey.questions.forEach((q) => { + if (Object.keys(conditionOptions).includes(q.type)) { + if (q.type === QuestionType.MultipleChoiceMulti || q.type === QuestionType.MultipleChoiceSingle) { + questionFilterOptions.push({ + type: q.type, + filterOptions: conditionOptions[q.type], + filterComboBoxOptions: q?.choices ? q?.choices?.map((c) => c?.label) : [""], + id: q.id, + }); + } else { + questionFilterOptions.push({ + type: q.type, + filterOptions: conditionOptions[q.type], + filterComboBoxOptions: filterOptions[q.type], + id: q.id, + }); + } + } + }); + + const tagsOptions = environmentTags?.map((t) => { + return { label: t.name, type: OptionsType.TAGS, id: t.id }; + }); + if (tagsOptions && tagsOptions?.length > 0) { + questionOptions = [...questionOptions, { header: OptionsType.TAGS, option: tagsOptions }]; + environmentTags?.forEach((t) => { + questionFilterOptions.push({ + type: "Tags", + filterOptions: conditionOptions.tags, + filterComboBoxOptions: filterOptions.tags, + id: t.id, + }); + }); + } + + const attributes = getPersonAttributes(responses); + if (attributes) { + questionOptions = [ + ...questionOptions, + { + header: OptionsType.ATTRIBUTES, + option: Object.keys(attributes).map((a) => { + return { label: a, type: OptionsType.ATTRIBUTES, id: a }; + }), + }, + ]; + Object.keys(attributes).forEach((a) => { + questionFilterOptions.push({ + type: "Attributes", + filterOptions: conditionOptions.userAttributes, + filterComboBoxOptions: attributes[a], + id: a, + }); + }); + } + + return { questionOptions: [...questionOptions], questionFilterOptions: [...questionFilterOptions] }; +}; + +// get the filtered responses +export const getFilterResponses = ( + responses: TResponse[], + selectedFilter: SelectedFilterValue, + survey: TSurvey, + dateRange: DateRange +) => { + // added the question on the response object to filter out the responses which has been selected + let toBeFilterResponses = responses.map((r) => { + return { + ...r, + questions: survey.questions.map((q) => { + if (q.id in r.data) { + return q; + } + }), + }; + }); + + // filtering the responses according to the value selected + selectedFilter.filter.forEach((filter) => { + if (filter.questionType?.type === "Questions") { + switch (filter.questionType?.questionType) { + case QuestionType.Consent: + toBeFilterResponses = toBeFilterResponses.filter((response) => { + const questionID = response.questions.find( + (q) => q?.type === QuestionType.Consent && q?.id === filter?.questionType?.id + )?.id; + if (filter?.filterType?.filterComboBoxValue) { + if (questionID) { + const responseValue = response.data[questionID]; + if (filter?.filterType?.filterComboBoxValue === "Accepted") { + return responseValue === "accepted"; + } + if (filter?.filterType?.filterComboBoxValue === "Dismissed") { + return responseValue === "dismissed"; + } + return true; + } + return false; + } + return true; + }); + break; + case QuestionType.OpenText: + toBeFilterResponses = toBeFilterResponses.filter((response) => { + const questionID = response.questions.find( + (q) => q?.type === QuestionType.OpenText && q?.id === filter?.questionType?.id + )?.id; + if (filter?.filterType?.filterComboBoxValue) { + if (questionID) { + const responseValue = response.data[questionID]; + if (filter?.filterType?.filterComboBoxValue === "Filled out") { + return typeof responseValue === "string" && responseValue.trim() !== "" ? true : false; + } + if (filter?.filterType?.filterComboBoxValue === "Skipped") { + return typeof responseValue === "string" && responseValue.trim() === "" ? true : false; + } + return true; + } + return false; + } + return true; + }); + break; + case QuestionType.CTA: + toBeFilterResponses = toBeFilterResponses.filter((response) => { + const questionID = response.questions.find( + (q) => q?.type === QuestionType.CTA && q?.id === filter?.questionType?.id + )?.id; + if (filter?.filterType?.filterComboBoxValue) { + if (questionID) { + const responseValue = response.data[questionID]; + if (filter?.filterType?.filterComboBoxValue === "Clicked") { + return responseValue === "clicked"; + } + if (filter?.filterType?.filterComboBoxValue === "Dismissed") { + return responseValue === "dismissed"; + } + return true; + } + return false; + } + return true; + }); + break; + case QuestionType.MultipleChoiceMulti: + toBeFilterResponses = toBeFilterResponses.filter((response) => { + const question = response.questions.find( + (q) => q?.type === QuestionType.MultipleChoiceMulti && q?.id === filter?.questionType?.id + ); + if (filter?.filterType?.filterComboBoxValue) { + if (question) { + const responseValue = response.data[question.id]; + const filterValue = filter?.filterType?.filterComboBoxValue; + if (isArray(responseValue) && isArray(filterValue) && filterValue.length > 0) { + //@ts-ignore + const updatedResponseValue = question?.choices + ? //@ts-ignore + matchAndUpdateArray([...question?.choices], [...responseValue]) + : responseValue; + if (filter?.filterType?.filterValue === "Includes all") { + return filterValue.every((item) => updatedResponseValue.includes(item)); + } + if (filter?.filterType?.filterValue === "Includes either") { + return filterValue.some((item) => updatedResponseValue.includes(item)); + } + } + return true; + } + return false; + } + return true; + }); + break; + case QuestionType.MultipleChoiceSingle: + toBeFilterResponses = toBeFilterResponses.filter((response) => { + const questionID = response.questions.find( + (q) => q?.type === QuestionType.MultipleChoiceSingle && q?.id === filter?.questionType?.id + )?.id; + if (filter?.filterType?.filterComboBoxValue) { + if (questionID) { + const responseValue = response.data[questionID]; + const filterValue = filter?.filterType?.filterComboBoxValue; + if ( + filter?.filterType?.filterValue === "Includes either" && + isArray(filterValue) && + filterValue.length > 0 && + typeof responseValue === "string" + ) { + return filterValue.includes(responseValue); + } + return true; + } + return false; + } + return true; + }); + break; + case QuestionType.NPS: + toBeFilterResponses = toBeFilterResponses.filter((response) => { + const questionID = response.questions.find( + (q) => q?.type === QuestionType.NPS && q?.id === filter?.questionType?.id + )?.id; + const responseValue = questionID ? response.data[questionID] : undefined; + const filterValue = + filter?.filterType?.filterComboBoxValue && + typeof filter?.filterType?.filterComboBoxValue === "string" && + parseInt(filter?.filterType?.filterComboBoxValue); + if (filter?.filterType?.filterValue === "Submitted") { + return responseValue ? true : false; + } + if (filter?.filterType?.filterValue === "Skipped") { + return responseValue === "dismissed"; + } + if (!questionID && typeof filterValue === "number") { + return false; + } + if (questionID && typeof responseValue === "number" && typeof filterValue === "number") { + if (filter?.filterType?.filterValue === "Is equal to") { + return responseValue === filterValue; + } + if (filter?.filterType?.filterValue === "Is more than") { + return responseValue > filterValue; + } + if (filter?.filterType?.filterValue === "Is less than") { + return responseValue < filterValue; + } + } + return true; + }); + break; + case QuestionType.Rating: + toBeFilterResponses = toBeFilterResponses.filter((response) => { + const questionID = response.questions.find( + (q) => q?.type === QuestionType.Rating && q?.id === filter?.questionType?.id + )?.id; + const responseValue = questionID ? response.data[questionID] : undefined; + const filterValue = + filter?.filterType?.filterComboBoxValue && + typeof filter?.filterType?.filterComboBoxValue === "string" && + parseInt(filter?.filterType?.filterComboBoxValue); + if (filter?.filterType?.filterValue === "Submitted") { + return responseValue ? true : false; + } + if (filter?.filterType?.filterValue === "Skipped") { + return responseValue === "dismissed"; + } + if (!questionID && typeof filterValue === "number") { + return false; + } + if (questionID && typeof responseValue === "number" && typeof filterValue === "number") { + if (filter?.filterType?.filterValue === "Is equal to") { + return responseValue === filterValue; + } + if (filter?.filterType?.filterValue === "Is more than") { + return responseValue > filterValue; + } + if (filter?.filterType?.filterValue === "Is less than") { + return responseValue < filterValue; + } + } + return true; + }); + break; + } + } + if (filter.questionType?.type === "Tags") { + toBeFilterResponses = toBeFilterResponses.filter((response) => { + const tagNames = response.tags.map((tag) => tag.name); + if (filter?.filterType?.filterComboBoxValue) { + if (filter?.filterType?.filterComboBoxValue === "Applied") { + if (filter?.questionType?.label) return tagNames.includes(filter.questionType.label); + } + if (filter?.filterType?.filterComboBoxValue === "Not applied") { + if (filter?.questionType?.label) return !tagNames.includes(filter?.questionType?.label); + } + } + return true; + }); + } + if (filter.questionType?.type === "Attributes") { + toBeFilterResponses = toBeFilterResponses.filter((response) => { + if (filter?.questionType?.label && filter?.filterType?.filterComboBoxValue) { + const attributes = + response.personAttributes && Object.keys(response.personAttributes).length > 0 + ? response.personAttributes + : null; + if (attributes && attributes.hasOwnProperty(filter?.questionType?.label)) { + if (filter?.filterType?.filterValue === "Equals") { + return attributes[filter?.questionType?.label] === filter?.filterType?.filterComboBoxValue; + } + if (filter?.filterType?.filterValue === "Not equals") { + return attributes[filter?.questionType?.label] !== filter?.filterType?.filterComboBoxValue; + } + } else { + return false; + } + } + return true; + }); + } + }); + + // filtering for the responses which is completed + toBeFilterResponses = toBeFilterResponses.filter((r) => (selectedFilter.onlyComplete ? r.finished : true)); + + // filtering the data according to the dates + if (dateRange?.from !== undefined && dateRange?.to !== undefined) { + // @ts-ignore + toBeFilterResponses = toBeFilterResponses.filter((r) => + isWithinInterval(r.createdAt, { start: dateRange.from!, end: dateRange.to! }) + ); + } + + return toBeFilterResponses; +}; + +// get the today date with full hours +export const getTodayDate = (): Date => { + const date = new Date(); + date.setHours(23, 59, 59, 999); + return date; +}; + +// function update the response value of question multiChoiceSelect +function matchAndUpdateArray(choices: any, responseValue: string[]) { + const choicesArray = choices.map((obj) => obj.label); + + responseValue.forEach((element, index) => { + // Check if the element is present in the choices + if (choicesArray.includes(element)) { + return; // No changes needed, move to the next iteration + } + + // Check if the choices has 'Other' + if (choicesArray.includes("Other") && !choicesArray.includes(element)) { + responseValue[index] = "Other"; // Update the element to 'Other' + } + }); + + return responseValue; +} diff --git a/apps/web/package.json b/apps/web/package.json index 99033fc076..d5084f0343 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -27,14 +27,14 @@ "@radix-ui/react-dropdown-menu": "^2.0.5", "@t3-oss/env-nextjs": "^0.6.0", "bcryptjs": "^2.4.3", - "eslint-config-next": "^13.4.8", - "jsonwebtoken": "^9.0.0", + "eslint-config-next": "^13.4.9", + "jsonwebtoken": "^9.0.1", "lodash": "^4.17.21", - "lucide-react": "^0.258.0", - "next": "13.4.8", + "lucide-react": "^0.260.0", + "next": "13.4.9", "next-auth": "^4.22.1", "nodemailer": "^6.9.3", - "posthog-js": "^1.68.5", + "posthog-js": "^1.71.0", "prismjs": "^1.29.0", "react": "18.2.0", "react-beautiful-dnd": "^13.1.1", diff --git a/apps/web/pages/api/v1/environments/[environmentId]/product/index.ts b/apps/web/pages/api/v1/environments/[environmentId]/product/index.ts index c998abb660..d261973c77 100644 --- a/apps/web/pages/api/v1/environments/[environmentId]/product/index.ts +++ b/apps/web/pages/api/v1/environments/[environmentId]/product/index.ts @@ -123,23 +123,36 @@ export default async function handle(req: NextApiRequest, res: NextApiResponse) // DELETE else if (req.method === "DELETE") { + // get teamId from product + const environment = await prisma.environment.findUnique({ + where: { id: environmentId }, + select: { + product: { + select: { + id: true, + teamId: true, + }, + }, + }, + }); + if (!environment) { + res.status(404).json({ error: "Environment not found" }); + return; + } + const teamId = environment?.product.teamId; + const membership = await prisma.membership.findUnique({ where: { userId_teamId: { userId: currentUser.id, - teamId: currentUser.teamId, + teamId: teamId, }, }, }); if (membership?.role !== "admin" && membership?.role !== "owner") { return res.status(403).json({ message: "You are not allowed to delete products." }); } - const environment = await prisma.environment.findUnique({ - where: { id: environmentId }, - select: { - productId: true, - }, - }); + const productId = environment?.product.id; if (environment === null) { return res.status(404).json({ message: "This environment doesn't exist" }); @@ -147,7 +160,7 @@ export default async function handle(req: NextApiRequest, res: NextApiResponse) // Delete the product with const prismaRes = await prisma.product.delete({ - where: { id: environment.productId }, + where: { id: productId }, }); return res.json(prismaRes); diff --git a/apps/web/pages/api/v1/environments/[environmentId]/team/index.ts b/apps/web/pages/api/v1/environments/[environmentId]/team/index.ts index b81f0b65a4..3af4f870b7 100644 --- a/apps/web/pages/api/v1/environments/[environmentId]/team/index.ts +++ b/apps/web/pages/api/v1/environments/[environmentId]/team/index.ts @@ -38,6 +38,7 @@ export default async function handle(req: NextApiRequest, res: NextApiResponse) id: true, name: true, stripeCustomerId: true, + plan: true, }, }); diff --git a/docker/README.md b/docker/README.md new file mode 100644 index 0000000000..fa0c5047ec --- /dev/null +++ b/docker/README.md @@ -0,0 +1,45 @@ +# Formbricks Quickstart Using Docker + +Follow the instructions below to quickly get Formbricks running on your system with Docker. This guide is designed for most users who want a straightforward setup process. + +1. **Create a New Directory for Formbricks** + + Open a terminal and create a new directory for Formbricks, then navigate into this new directory: + + \```bash + mkdir formbricks-quickstart && cd formbricks-quickstart + \``` + +2. **Download the Docker-Compose File** + + Download the docker-compose file directly from the Formbricks repository: + + \```bash + curl -o docker-compose.yml https://raw.githubusercontent.com/formbricks/formbricks/docker/main/docker-compose.yml + \``` + +3. **Generate NextAuth Secret** + + Next, you need to generate a NextAuth secret. This will be used for session signing and encryption. The `sed` command below generates a random string using `openssl`, then replaces the `NEXTAUTH_SECRET:` placeholder in the `docker-compose.yml` file with this generated secret: + + \```bash + sed -i "/NEXTAUTH_SECRET:$/s/NEXTAUTH_SECRET:.\*/NEXTAUTH_SECRET: $(openssl rand -base64 32)/" docker-compose.yml + \``` + +4. **Start the Docker Setup** + + You're now ready to start the Formbricks Docker setup. The following command will start Formbricks together with a postgreSQL database using Docker Compose: + + \```bash + docker compose up -d + \``` + + The `-d` flag will run the containers in detached mode, meaning they'll run in the background. + +5. **Visit Formbricks in Your Browser** + + After starting the Docker setup, visit http://localhost:3000 in your browser to interact with the Formbricks application. The first time you access this page, you'll be greeted by a setup wizard. Follow the prompts to define your first user and get started. + +Enjoy using Formbricks! + +Note: For detailed documentation of local setup, take a look at our [self hosting docs](https://formbricks.com/docs/self-hosting/deployment) diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml new file mode 100644 index 0000000000..ed857e22bd --- /dev/null +++ b/docker/docker-compose.yml @@ -0,0 +1,45 @@ +version: "3.3" +x-environment: &environment + environment: + ######################################################################## + # ------------ MANDATORY (CHANGE ACCORDING TO YOUR SETUP) ------------# + ######################################################################## + + # PostgreSQL DB for Formbricks to connect to + DATABASE_URL: "postgresql://postgres:postgres@postgres:5432/formbricks?schema=public" + + # Uncomment to enable a dedicated connection pool for Prisma using Prisma Data Proxy + # Cold boots will be faster and you'll be able to scale your DB independently of your app. + # @see https://www.prisma.io/docs/data-platform/data-proxy/use-data-proxy + # PRISMA_GENERATE_DATAPROXY=true + PRISMA_GENERATE_DATAPROXY: + + # NextJS Auth + # @see: https://next-auth.js.org/configuration/options#nextauth_secret + # You can use: `openssl rand -base64 32` to generate one + NEXTAUTH_SECRET: + # Set this to your public-facing URL, e.g., https://example.com + # You do not need the NEXTAUTH_URL environment variable in Vercel. + NEXTAUTH_URL: http://localhost:3000 + +services: + postgres: + restart: always + image: postgres:15-alpine + volumes: + - postgres:/var/lib/postgresql/data + environment: + - POSTGRES_PASSWORD=postgres + + formbricks: + restart: always + image: formbricks/formbricks:latest + depends_on: + - postgres + ports: + - 3000:3000 + <<: *environment + +volumes: + postgres: + driver: local diff --git a/package.json b/package.json index 1258bdf569..e0cffa9c76 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "format": "prettier --write \"**/*.{ts,tsx,md}\"", "generate": "turbo run generate", "lint": "turbo run lint", - "release": "turbo run build --filter=react^... && changeset publish", + "release": "turbo run build --filter=js... && changeset publish", "test": "turbo run test" }, "devDependencies": { diff --git a/packages/database/package.json b/packages/database/package.json index 8343333132..4f9f79b237 100644 --- a/packages/database/package.json +++ b/packages/database/package.json @@ -19,7 +19,7 @@ "db:setup": "pnpm db:up && pnpm db:migrate:dev", "db:start": "pnpm db:setup", "dev": "tsup --watch", - "go": "pnpm db:setup", + "go": "pnpm db:setup && tsup", "format": "prisma format", "generate": "prisma generate", "lint": "eslint ./src --fix", @@ -27,14 +27,14 @@ "predev": "npm run generate" }, "dependencies": { - "@prisma/client": "^4.16.2", + "@prisma/client": "^5.0.0", "dotenv-cli": "^7.2.1" }, "devDependencies": { "@formbricks/tsconfig": "workspace:*", "@formbricks/types": "workspace:*", "eslint-config-formbricks": "workspace:*", - "prisma": "^4.16.2", + "prisma": "^5.0.0", "prisma-dbml-generator": "^0.10.0", "prisma-json-types-generator": "^2.5.0", "tsup": "^7.1.0", diff --git a/packages/database/schema.prisma b/packages/database/schema.prisma index ef46948cb4..c504b71087 100644 --- a/packages/database/schema.prisma +++ b/packages/database/schema.prisma @@ -7,8 +7,7 @@ datasource db { } generator client { - provider = "prisma-client-js" - previewFeatures = ["extendedWhereUnique"] + provider = "prisma-client-js" //provider = "prisma-dbml-generator" } diff --git a/packages/ee/package.json b/packages/ee/package.json index e6da1d8dc2..ba2c1c8a94 100644 --- a/packages/ee/package.json +++ b/packages/ee/package.json @@ -16,7 +16,7 @@ }, "dependencies": { "@formbricks/database": "workspace:*", - "next": "13.4.8", - "stripe": "^12.6.0" + "next": "13.4.9", + "stripe": "^12.12.0" } } diff --git a/packages/eslint-config-formbricks/package.json b/packages/eslint-config-formbricks/package.json index aed6c00f55..646e846c76 100644 --- a/packages/eslint-config-formbricks/package.json +++ b/packages/eslint-config-formbricks/package.json @@ -8,8 +8,8 @@ "clean": "rimraf node_modules .turbo" }, "devDependencies": { - "eslint": "^8.41.0", - "eslint-config-next": "^13.4.4", + "eslint": "^8.44.0", + "eslint-config-next": "^13.4.9", "eslint-config-prettier": "^8.8.0", "eslint-plugin-react": "7.32.2", "eslint-config-turbo": "latest" diff --git a/packages/js/package.json b/packages/js/package.json index 6858355cf5..b57d396354 100644 --- a/packages/js/package.json +++ b/packages/js/package.json @@ -44,28 +44,28 @@ }, "author": "Formbricks ", "devDependencies": { - "@babel/core": "^7.22.5", - "@babel/preset-env": "^7.22.5", + "@babel/core": "^7.22.9", + "@babel/preset-env": "^7.22.9", "@babel/preset-typescript": "^7.22.5", "@formbricks/api": "workspace:*", "@formbricks/types": "workspace:*", - "@types/jest": "^29.5.2", - "@typescript-eslint/eslint-plugin": "^5.59.9", - "@typescript-eslint/parser": "^5.59.9", + "@types/jest": "^29.5.3", + "@typescript-eslint/eslint-plugin": "^6.0.0", + "@typescript-eslint/parser": "^6.0.0", "autoprefixer": "^10.4.14", - "babel-jest": "^29.5.0", + "babel-jest": "^29.6.1", "cross-env": "^7.0.3", "eslint-config-formbricks": "workspace:*", "eslint-config-preact": "^1.3.0", "isomorphic-fetch": "^3.0.0", - "jest": "^29.5.0", - "jest-environment-jsdom": "^29.5.0", + "jest": "^29.6.1", + "jest-environment-jsdom": "^29.6.1", "jest-fetch-mock": "^3.0.3", "jest-preset-preact": "^4.0.5", "microbundle": "^0.15.1", - "preact": "10.15.1", - "preact-cli": "^3.4.5", - "preact-render-to-string": "^6.1.0", + "preact": "10.16.0", + "preact-cli": "^3.4.6", + "preact-render-to-string": "^6.2.0", "regenerator-runtime": "^0.13.11" }, "jest": { diff --git a/packages/js/src/lib/init.ts b/packages/js/src/lib/init.ts index 570671dfc6..68544816b0 100644 --- a/packages/js/src/lib/init.ts +++ b/packages/js/src/lib/init.ts @@ -115,9 +115,9 @@ export const initialize = async ( // continue for now - next sync will check complete state } } else { - logger.debug("No valid session found. Creating new config."); + logger.debug("No valid configuration found. Creating new config."); // we need new config - config.update({ environmentId: c.environmentId, apiHost: c.apiHost }); + config.update({ environmentId: c.environmentId, apiHost: c.apiHost, state: undefined }); logger.debug("Syncing."); const syncResult = await sync(); diff --git a/packages/lib/constants.ts b/packages/lib/constants.ts index 9b2efee6a7..56e8994df7 100644 --- a/packages/lib/constants.ts +++ b/packages/lib/constants.ts @@ -1,5 +1,6 @@ export const RESPONSES_LIMIT_FREE = 100; export const IS_FORMBRICKS_CLOUD = process.env.NEXT_PUBLIC_IS_FORMBRICKS_CLOUD === "1"; +export const REVALIDATION_INTERVAL = process.env.NODE_ENV === "production" ? 30 : 0; // 30 seconds in production, 10 seconds in development // URLs const VERCEL_URL = process.env.NEXT_PUBLIC_VERCEL_URL ? `https://${process.env.NEXT_PUBLIC_VERCEL_URL}` : ""; diff --git a/packages/lib/services/environment.ts b/packages/lib/services/environment.ts index 81ffc3fc79..143b05cf14 100644 --- a/packages/lib/services/environment.ts +++ b/packages/lib/services/environment.ts @@ -6,6 +6,7 @@ import { DatabaseError, ResourceNotFoundError, ValidationError } from "@formbric import { ZEnvironment } from "@formbricks/types/v1/environment"; import type { TEnvironment } from "@formbricks/types/v1/environment"; import { cache } from "react"; + export const getEnvironment = cache(async (environmentId: string): Promise => { let environmentPrisma; try { diff --git a/packages/lib/services/person.ts b/packages/lib/services/person.ts index eb0fcbc460..5bdf0f02bb 100644 --- a/packages/lib/services/person.ts +++ b/packages/lib/services/person.ts @@ -83,11 +83,11 @@ export const getPeople = cache(async (environmentId: string): Promise throw new ResourceNotFoundError("Persons", "All Persons"); } - const transformedPersons: TPerson[] = personsPrisma + const transformedPeople: TPerson[] = personsPrisma .map(transformPrismaPerson) .filter((person: TPerson | null): person is TPerson => person !== null); - return transformedPersons; + return transformedPeople; } catch (error) { if (error instanceof Prisma.PrismaClientKnownRequestError) { throw new DatabaseError("Database operation failed"); diff --git a/packages/lib/services/team.ts b/packages/lib/services/team.ts new file mode 100644 index 0000000000..b2cb2be73b --- /dev/null +++ b/packages/lib/services/team.ts @@ -0,0 +1,40 @@ +import { prisma } from "@formbricks/database"; +import { DatabaseError } from "@formbricks/errors"; +import { TTeam } from "@formbricks/types/v1/teams"; +import { Prisma } from "@prisma/client"; +import { cache } from "react"; + +export const select = { + id: true, + createdAt: true, + updatedAt: true, + name: true, + plan: true, +}; + +export const getTeamByEnvironmentId = cache(async (environmentId: string): Promise => { + try { + const team = await prisma.team.findFirst({ + where: { + products: { + some: { + environments: { + some: { + id: environmentId, + }, + }, + }, + }, + }, + select, + }); + + return team; + } catch (error) { + if (error instanceof Prisma.PrismaClientKnownRequestError) { + throw new DatabaseError("Database operation failed"); + } + + throw error; + } +}); diff --git a/packages/prettier-config/package.json b/packages/prettier-config/package.json index 8b9e231655..2c34d0a3a2 100644 --- a/packages/prettier-config/package.json +++ b/packages/prettier-config/package.json @@ -8,6 +8,6 @@ }, "devDependencies": { "prettier": "^2.8.8", - "prettier-plugin-tailwindcss": "^0.3.0" + "prettier-plugin-tailwindcss": "^0.4.0" } } diff --git a/packages/tailwind-config/package.json b/packages/tailwind-config/package.json index 4024f1ca8c..ae22be3923 100644 --- a/packages/tailwind-config/package.json +++ b/packages/tailwind-config/package.json @@ -10,7 +10,7 @@ "@tailwindcss/forms": "^0.5.3", "@tailwindcss/typography": "^0.5.9", "autoprefixer": "^10.4.14", - "postcss": "^8.4.24", + "postcss": "^8.4.25", "tailwindcss": "^3.3.2" } } diff --git a/packages/tsconfig/package.json b/packages/tsconfig/package.json index 77bba2c741..e842824899 100644 --- a/packages/tsconfig/package.json +++ b/packages/tsconfig/package.json @@ -6,9 +6,9 @@ "clean": "rimraf node_modules" }, "devDependencies": { - "@types/node": "20.3.3", + "@types/node": "20.4.2", "@types/react": "18.2.14", - "@types/react-dom": "18.2.6", + "@types/react-dom": "18.2.7", "typescript": "5.1.6" } } diff --git a/packages/types/next-auth.d.ts b/packages/types/next-auth.d.ts index a2dfcfcb15..25f6f2f27a 100644 --- a/packages/types/next-auth.d.ts +++ b/packages/types/next-auth.d.ts @@ -8,8 +8,11 @@ declare module "next-auth" { user: { id: string; createdAt: string; - teamId?: string; - plan?: string; + teams: { + id: string; + plan: string; + role: string; + }[]; email: string; name: string; onboardingCompleted: boolean; diff --git a/packages/types/v1/teams.ts b/packages/types/v1/teams.ts new file mode 100644 index 0000000000..2c5416a605 --- /dev/null +++ b/packages/types/v1/teams.ts @@ -0,0 +1,11 @@ +import { z } from "zod"; + +export const ZTeam = z.object({ + id: z.string().cuid2(), + createdAt: z.date(), + updatedAt: z.date(), + name: z.string(), + plan: z.enum(["free", "pro"]), +}); + +export type TTeam = z.infer; diff --git a/packages/ui/components/Calendar.tsx b/packages/ui/components/Calendar.tsx index e248d62cdc..8d7a402746 100644 --- a/packages/ui/components/Calendar.tsx +++ b/packages/ui/components/Calendar.tsx @@ -39,9 +39,6 @@ function Calendar({ className, classNames, showOutsideDays = true, ...props }: C day_hidden: "invisible", ...classNames, }} - disabled={{ - before: new Date(), - }} components={{ IconLeft: () => , IconRight: () => , diff --git a/packages/ui/components/Command.tsx b/packages/ui/components/Command.tsx index 3d88aec5ac..c0fe0e8b8f 100644 --- a/packages/ui/components/Command.tsx +++ b/packages/ui/components/Command.tsx @@ -40,7 +40,7 @@ const CommandInput = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( -
+
- + ); diff --git a/packages/ui/components/icons/NetPromoterScoreIcon.tsx b/packages/ui/components/icons/NetPromoterScoreIcon.tsx new file mode 100644 index 0000000000..2d13c580ad --- /dev/null +++ b/packages/ui/components/icons/NetPromoterScoreIcon.tsx @@ -0,0 +1,15 @@ +export const NetPromoterScoreIcon: React.FC> = (props) => { + return ( + + + + + + ); +}; diff --git a/packages/ui/index.tsx b/packages/ui/index.tsx index b324a8b3c1..0cc68f0b8a 100644 --- a/packages/ui/index.tsx +++ b/packages/ui/index.tsx @@ -114,3 +114,4 @@ export { UserGroupIcon } from "./components/icons/UserGroupIcon"; export { UserSearchGlasIcon } from "./components/icons/UserSearchGlasIcon"; export { VeryDisappointedIcon } from "./components/icons/VeryDisappointedIcon"; export { VideoTabletAdjustIcon } from "./components/icons/VideoTabletAdjustIcon"; +export { NetPromoterScoreIcon } from "./components/icons/NetPromoterScoreIcon"; diff --git a/packages/ui/package.json b/packages/ui/package.json index 554b5cadbc..58b242262f 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -16,19 +16,19 @@ "@formbricks/tsconfig": "workspace:*", "concurrently": "^8.2.0", "eslint-config-formbricks": "workspace:*", - "postcss": "^8.4.24", + "postcss": "^8.4.25", "react": "18.2.0" }, "dependencies": { "@formbricks/lib": "workspace:*", "@heroicons/react": "^2.0.18", - "@lexical/code": "^0.11.1", - "@lexical/link": "^0.11.1", - "@lexical/list": "^0.11.1", - "@lexical/markdown": "^0.11.1", - "@lexical/react": "^0.11.1", - "@lexical/rich-text": "^0.11.1", - "@lexical/table": "^0.11.1", + "@lexical/code": "^0.11.2", + "@lexical/link": "^0.11.2", + "@lexical/list": "^0.11.2", + "@lexical/markdown": "^0.11.2", + "@lexical/react": "^0.11.2", + "@lexical/rich-text": "^0.11.2", + "@lexical/table": "^0.11.2", "@radix-ui/react-checkbox": "^1.0.4", "@radix-ui/react-dialog": "^1.0.4", "@radix-ui/react-dropdown-menu": "^2.0.5", @@ -42,8 +42,8 @@ "class-variance-authority": "^0.6.1", "clsx": "^1.2.1", "cmdk": "^0.2.0", - "lucide-react": "^0.258.0", - "next": "13.4.8", + "lucide-react": "^0.260.0", + "next": "13.4.9", "react-colorful": "^5.6.1", "react-confetti": "^6.1.0", "react-day-picker": "^8.8.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 04bad180a9..e6811b7716 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,5 +1,9 @@ lockfileVersion: '6.0' +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + importers: .: @@ -15,7 +19,7 @@ importers: version: 3.12.7 turbo: specifier: latest - version: 1.10.3 + version: 1.10.7 apps/demo: dependencies: @@ -26,8 +30,8 @@ importers: specifier: ^2.0.18 version: 2.0.18(react@18.2.0) next: - specifier: 13.4.8 - version: 13.4.8(react-dom@18.2.0)(react@18.2.0) + specifier: 13.4.9 + version: 13.4.9(react-dom@18.2.0)(react@18.2.0) react: specifier: 18.2.0 version: 18.2.0 @@ -72,8 +76,8 @@ importers: specifier: ^2.3.0 version: 2.3.0(react@18.2.0) '@next/mdx': - specifier: ^13.4.8 - version: 13.4.8(@mdx-js/loader@2.3.0)(@mdx-js/react@2.3.0) + specifier: ^13.4.9 + version: 13.4.9(@mdx-js/loader@2.3.0)(@mdx-js/react@2.3.0) '@paralleldrive/cuid2': specifier: ^2.2.1 version: 2.2.1 @@ -84,14 +88,14 @@ importers: specifier: ^5.12.2 version: 5.12.2 next: - specifier: 13.4.8 - version: 13.4.8(react-dom@18.2.0)(react@18.2.0) + specifier: 13.4.9 + version: 13.4.9(react-dom@18.2.0)(react@18.2.0) next-plausible: - specifier: ^3.8.0 - version: 3.8.0(next@13.4.8)(react-dom@18.2.0)(react@18.2.0) + specifier: ^3.9.1 + version: 3.9.1(next@13.4.9)(react-dom@18.2.0)(react@18.2.0) next-sitemap: specifier: ^4.1.8 - version: 4.1.8(next@13.4.8) + version: 4.1.8(next@13.4.9) prism-react-renderer: specifier: ^2.0.6 version: 2.0.6(react@18.2.0) @@ -114,8 +118,8 @@ importers: specifier: ^3.0.1 version: 3.0.1 sharp: - specifier: ^0.32.1 - version: 0.32.1 + specifier: ^0.32.2 + version: 0.32.2 devDependencies: '@formbricks/tsconfig': specifier: workspace:* @@ -178,29 +182,29 @@ importers: specifier: ^2.4.3 version: 2.4.3 eslint-config-next: - specifier: ^13.4.8 - version: 13.4.8(eslint@8.44.0)(typescript@5.1.6) + specifier: ^13.4.9 + version: 13.4.9(eslint@8.44.0)(typescript@5.1.6) jsonwebtoken: - specifier: ^9.0.0 - version: 9.0.0 + specifier: ^9.0.1 + version: 9.0.1 lodash: specifier: ^4.17.21 version: 4.17.21 lucide-react: - specifier: ^0.258.0 - version: 0.258.0(react@18.2.0) + specifier: ^0.260.0 + version: 0.260.0(react@18.2.0) next: - specifier: 13.4.8 - version: 13.4.8(react-dom@18.2.0)(react@18.2.0) + specifier: 13.4.9 + version: 13.4.9(react-dom@18.2.0)(react@18.2.0) next-auth: specifier: ^4.22.1 - version: 4.22.1(next@13.4.8)(nodemailer@6.9.3)(react-dom@18.2.0)(react@18.2.0) + version: 4.22.1(next@13.4.9)(nodemailer@6.9.3)(react-dom@18.2.0)(react@18.2.0) nodemailer: specifier: ^6.9.3 version: 6.9.3 posthog-js: - specifier: ^1.68.5 - version: 1.68.5 + specifier: ^1.71.0 + version: 1.71.0 prismjs: specifier: ^1.29.0 version: 1.29.0 @@ -267,8 +271,8 @@ importers: packages/database: dependencies: '@prisma/client': - specifier: ^4.16.2 - version: 4.16.2(prisma@4.16.2) + specifier: ^5.0.0 + version: 5.0.0(prisma@5.0.0) dotenv-cli: specifier: ^7.2.1 version: 7.2.1 @@ -283,14 +287,14 @@ importers: specifier: workspace:* version: link:../eslint-config-formbricks prisma: - specifier: ^4.16.2 - version: 4.16.2 + specifier: ^5.0.0 + version: 5.0.0 prisma-dbml-generator: specifier: ^0.10.0 version: 0.10.0 prisma-json-types-generator: specifier: ^2.5.0 - version: 2.5.0(prisma@4.16.2) + version: 2.5.0(prisma@5.0.0) tsup: specifier: ^7.1.0 version: 7.1.0 @@ -299,7 +303,7 @@ importers: version: 3.21.4 zod-prisma: specifier: ^0.5.4 - version: 0.5.4(prisma@4.16.2)(zod@3.21.4) + version: 0.5.4(prisma@5.0.0)(zod@3.21.4) packages/ee: dependencies: @@ -307,11 +311,11 @@ importers: specifier: workspace:* version: link:../database next: - specifier: 13.4.8 - version: 13.4.8(react-dom@18.2.0)(react@18.2.0) + specifier: 13.4.9 + version: 13.4.9(react-dom@18.2.0)(react@18.2.0) stripe: - specifier: ^12.6.0 - version: 12.6.0 + specifier: ^12.12.0 + version: 12.12.0 devDependencies: '@formbricks/tsconfig': specifier: '*' @@ -338,32 +342,32 @@ importers: packages/eslint-config-formbricks: devDependencies: eslint: - specifier: ^8.41.0 - version: 8.41.0 + specifier: ^8.44.0 + version: 8.44.0 eslint-config-next: - specifier: ^13.4.4 - version: 13.4.4(eslint@8.41.0)(typescript@5.1.6) + specifier: ^13.4.9 + version: 13.4.9(eslint@8.44.0)(typescript@5.1.6) eslint-config-prettier: specifier: ^8.8.0 - version: 8.8.0(eslint@8.41.0) + version: 8.8.0(eslint@8.44.0) eslint-config-turbo: specifier: latest - version: 1.10.3(eslint@8.41.0) + version: 1.8.8(eslint@8.44.0) eslint-plugin-react: specifier: 7.32.2 - version: 7.32.2(eslint@8.41.0) + version: 7.32.2(eslint@8.44.0) packages/js: devDependencies: '@babel/core': - specifier: ^7.22.5 - version: 7.22.5 + specifier: ^7.22.9 + version: 7.22.9 '@babel/preset-env': - specifier: ^7.22.5 - version: 7.22.5(@babel/core@7.22.5) + specifier: ^7.22.9 + version: 7.22.9(@babel/core@7.22.9) '@babel/preset-typescript': specifier: ^7.22.5 - version: 7.22.5(@babel/core@7.22.5) + version: 7.22.5(@babel/core@7.22.9) '@formbricks/api': specifier: workspace:* version: link:../api @@ -371,20 +375,20 @@ importers: specifier: workspace:* version: link:../types '@types/jest': - specifier: ^29.5.2 - version: 29.5.2 + specifier: ^29.5.3 + version: 29.5.3 '@typescript-eslint/eslint-plugin': - specifier: ^5.59.9 - version: 5.59.9(@typescript-eslint/parser@5.59.9)(eslint@8.44.0)(typescript@5.1.6) + specifier: ^6.0.0 + version: 6.0.0(@typescript-eslint/parser@6.0.0)(eslint@8.44.0)(typescript@5.1.6) '@typescript-eslint/parser': - specifier: ^5.59.9 - version: 5.59.9(eslint@8.44.0)(typescript@5.1.6) + specifier: ^6.0.0 + version: 6.0.0(eslint@8.44.0)(typescript@5.1.6) autoprefixer: specifier: ^10.4.14 - version: 10.4.14(postcss@8.4.24) + version: 10.4.14(postcss@8.4.25) babel-jest: - specifier: ^29.5.0 - version: 29.5.0(@babel/core@7.22.5) + specifier: ^29.6.1 + version: 29.6.1(@babel/core@7.22.9) cross-env: specifier: ^7.0.3 version: 7.0.3 @@ -393,34 +397,34 @@ importers: version: link:../eslint-config-formbricks eslint-config-preact: specifier: ^1.3.0 - version: 1.3.0(@typescript-eslint/eslint-plugin@5.59.9)(eslint@8.44.0)(jest@29.5.0)(typescript@5.1.6) + version: 1.3.0(@typescript-eslint/eslint-plugin@6.0.0)(eslint@8.44.0)(jest@29.6.1)(typescript@5.1.6) isomorphic-fetch: specifier: ^3.0.0 version: 3.0.0 jest: - specifier: ^29.5.0 - version: 29.5.0 + specifier: ^29.6.1 + version: 29.6.1 jest-environment-jsdom: - specifier: ^29.5.0 - version: 29.5.0 + specifier: ^29.6.1 + version: 29.6.1 jest-fetch-mock: specifier: ^3.0.3 version: 3.0.3 jest-preset-preact: specifier: ^4.0.5 - version: 4.0.5(jest@29.5.0)(preact-render-to-string@6.1.0)(preact@10.15.1) + version: 4.0.5(jest@29.6.1)(preact-render-to-string@6.2.0)(preact@10.16.0) microbundle: specifier: ^0.15.1 version: 0.15.1 preact: - specifier: 10.15.1 - version: 10.15.1 + specifier: 10.16.0 + version: 10.16.0 preact-cli: - specifier: ^3.4.5 - version: 3.4.5(eslint@8.44.0)(preact-render-to-string@6.1.0)(preact@10.15.1) + specifier: ^3.4.6 + version: 3.4.6(eslint@8.44.0)(preact-render-to-string@6.2.0)(preact@10.16.0) preact-render-to-string: - specifier: ^6.1.0 - version: 6.1.0(preact@10.15.1) + specifier: ^6.2.0 + version: 6.2.0(preact@10.16.0) regenerator-runtime: specifier: ^0.13.11 version: 0.13.11 @@ -465,8 +469,8 @@ importers: specifier: ^2.8.8 version: 2.8.8 prettier-plugin-tailwindcss: - specifier: ^0.3.0 - version: 0.3.0(prettier@2.8.8) + specifier: ^0.4.0 + version: 0.4.0(prettier@2.8.8) packages/tailwind-config: devDependencies: @@ -478,10 +482,10 @@ importers: version: 0.5.9(tailwindcss@3.3.2) autoprefixer: specifier: ^10.4.14 - version: 10.4.14(postcss@8.4.24) + version: 10.4.14(postcss@8.4.25) postcss: - specifier: ^8.4.24 - version: 8.4.24 + specifier: ^8.4.25 + version: 8.4.25 tailwindcss: specifier: ^3.3.2 version: 3.3.2 @@ -489,14 +493,14 @@ importers: packages/tsconfig: devDependencies: '@types/node': - specifier: 20.3.3 - version: 20.3.3 + specifier: 20.4.2 + version: 20.4.2 '@types/react': specifier: 18.2.14 version: 18.2.14 '@types/react-dom': - specifier: 18.2.6 - version: 18.2.6 + specifier: 18.2.7 + version: 18.2.7 typescript: specifier: 5.1.6 version: 5.1.6 @@ -520,26 +524,26 @@ importers: specifier: ^2.0.18 version: 2.0.18(react@18.2.0) '@lexical/code': - specifier: ^0.11.1 - version: 0.11.1(lexical@0.11.1) + specifier: ^0.11.2 + version: 0.11.2(lexical@0.11.2) '@lexical/link': - specifier: ^0.11.1 - version: 0.11.1(lexical@0.11.1) + specifier: ^0.11.2 + version: 0.11.2(lexical@0.11.2) '@lexical/list': - specifier: ^0.11.1 - version: 0.11.1(lexical@0.11.1) + specifier: ^0.11.2 + version: 0.11.2(lexical@0.11.2) '@lexical/markdown': - specifier: ^0.11.1 - version: 0.11.1(@lexical/clipboard@0.11.1)(@lexical/selection@0.11.1)(lexical@0.11.1) + specifier: ^0.11.2 + version: 0.11.2(@lexical/clipboard@0.11.2)(@lexical/selection@0.11.2)(lexical@0.11.2) '@lexical/react': - specifier: ^0.11.1 - version: 0.11.1(lexical@0.11.1)(react-dom@18.2.0)(react@18.2.0)(yjs@13.6.0) + specifier: ^0.11.2 + version: 0.11.2(lexical@0.11.2)(react-dom@18.2.0)(react@18.2.0)(yjs@13.6.0) '@lexical/rich-text': - specifier: ^0.11.1 - version: 0.11.1(@lexical/clipboard@0.11.1)(@lexical/selection@0.11.1)(@lexical/utils@0.11.1)(lexical@0.11.1) + specifier: ^0.11.2 + version: 0.11.2(@lexical/clipboard@0.11.2)(@lexical/selection@0.11.2)(@lexical/utils@0.11.2)(lexical@0.11.2) '@lexical/table': - specifier: ^0.11.1 - version: 0.11.1(lexical@0.11.1) + specifier: ^0.11.2 + version: 0.11.2(lexical@0.11.2) '@radix-ui/react-checkbox': specifier: ^1.0.4 version: 1.0.4(react-dom@18.2.0)(react@18.2.0) @@ -580,11 +584,11 @@ importers: specifier: ^0.2.0 version: 0.2.0(react-dom@18.2.0)(react@18.2.0) lucide-react: - specifier: ^0.258.0 - version: 0.258.0(react@18.2.0) + specifier: ^0.260.0 + version: 0.260.0(react@18.2.0) next: - specifier: 13.4.8 - version: 13.4.8(react-dom@18.2.0)(react@18.2.0) + specifier: 13.4.9 + version: 13.4.9(react-dom@18.2.0)(react@18.2.0) react-colorful: specifier: ^5.6.1 version: 5.6.1(react-dom@18.2.0)(react@18.2.0) @@ -614,8 +618,8 @@ importers: specifier: workspace:* version: link:../eslint-config-formbricks postcss: - specifier: ^8.4.24 - version: 8.4.24 + specifier: ^8.4.25 + version: 8.4.25 react: specifier: 18.2.0 version: 18.2.0 @@ -792,51 +796,46 @@ packages: '@babel/highlight': 7.22.5 dev: true - /@babel/compat-data@7.20.5: - resolution: {integrity: sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==} + /@babel/compat-data@7.22.9: + resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==} engines: {node: '>=6.9.0'} dev: true - /@babel/compat-data@7.22.5: - resolution: {integrity: sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/core@7.22.5: - resolution: {integrity: sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==} + /@babel/core@7.22.9: + resolution: {integrity: sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.0 '@babel/code-frame': 7.22.5 - '@babel/generator': 7.22.5 - '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) - '@babel/helper-module-transforms': 7.22.5 - '@babel/helpers': 7.22.5 - '@babel/parser': 7.22.5 + '@babel/generator': 7.22.9 + '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.9) + '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.9) + '@babel/helpers': 7.22.6 + '@babel/parser': 7.22.7 '@babel/template': 7.22.5 - '@babel/traverse': 7.22.5 + '@babel/traverse': 7.22.8 '@babel/types': 7.22.5 convert-source-map: 1.9.0 debug: 4.3.4 gensync: 1.0.0-beta.2 json5: 2.2.3 - semver: 6.3.0 + semver: 6.3.1 transitivePeerDependencies: - supports-color dev: true - /@babel/eslint-parser@7.19.1(@babel/core@7.22.5)(eslint@8.44.0): + /@babel/eslint-parser@7.19.1(@babel/core@7.22.9)(eslint@8.44.0): resolution: {integrity: sha512-AqNf2QWt1rtu2/1rLswy6CDP7H9Oh3mMhk177Y67Rg8d7RD9WfOLLv8CGn6tisFvS2htm86yIe1yLF6I1UDaGQ==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} peerDependencies: '@babel/core': '>=7.11.0' eslint: ^7.5.0 || ^8.0.0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 eslint: 8.44.0 eslint-visitor-keys: 2.1.0 - semver: 6.3.0 + semver: 6.3.1 dev: true /@babel/generator@7.22.5: @@ -849,6 +848,16 @@ packages: jsesc: 2.5.2 dev: true + /@babel/generator@7.22.9: + resolution: {integrity: sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + '@jridgewell/gen-mapping': 0.3.2 + '@jridgewell/trace-mapping': 0.3.17 + jsesc: 2.5.2 + dev: true + /@babel/helper-annotate-as-pure@7.18.6: resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} engines: {node: '>=6.9.0'} @@ -870,45 +879,45 @@ packages: '@babel/types': 7.22.5 dev: true - /@babel/helper-compilation-targets@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==} + /@babel/helper-compilation-targets@7.22.9(@babel/core@7.22.9): + resolution: {integrity: sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.22.5 - '@babel/core': 7.22.5 + '@babel/compat-data': 7.22.9 + '@babel/core': 7.22.9 '@babel/helper-validator-option': 7.22.5 - browserslist: 4.21.5 + browserslist: 4.21.9 lru-cache: 5.1.1 - semver: 6.3.0 + semver: 6.3.1 dev: true - /@babel/helper-create-class-features-plugin@7.20.5(@babel/core@7.22.5): + /@babel/helper-create-class-features-plugin@7.20.5(@babel/core@7.22.9): resolution: {integrity: sha512-3RCdA/EmEaikrhayahwToF0fpweU/8o2p8vhc1c/1kftHOdTKuC65kik/TLc+qfbS8JKw4qqJbne4ovICDhmww==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-function-name': 7.22.5 - '@babel/helper-member-expression-to-functions': 7.22.5 + '@babel/helper-member-expression-to-functions': 7.18.9 '@babel/helper-optimise-call-expression': 7.22.5 '@babel/helper-replace-supers': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 transitivePeerDependencies: - supports-color dev: true - /@babel/helper-create-class-features-plugin@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==} + /@babel/helper-create-class-features-plugin@7.22.6(@babel/core@7.22.9): + resolution: {integrity: sha512-iwdzgtSiBxF6ni6mzVnZCF3xt5qE6cEA0J7nFt8QOAWZ0zjCFceEgpn3vtb2V7WFR6QzP2jmIFOHMTRo7eNJjQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-function-name': 7.22.5 @@ -916,47 +925,35 @@ packages: '@babel/helper-optimise-call-expression': 7.22.5 '@babel/helper-replace-supers': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.5 - semver: 6.3.0 + '@babel/helper-split-export-declaration': 7.22.6 + '@nicolo-ribaudo/semver-v6': 6.3.3 transitivePeerDependencies: - supports-color dev: true - /@babel/helper-create-regexp-features-plugin@7.20.5(@babel/core@7.22.5): - resolution: {integrity: sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==} + /@babel/helper-create-regexp-features-plugin@7.22.6(@babel/core@7.22.9): + resolution: {integrity: sha512-nBookhLKxAWo/TUCmhnaEJyLz2dekjQvv5SRpE9epWQBcpedWLKt8aZdsuT9XV5ovzR3fENLjRXVT0GsSlGGhA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.22.5 - '@babel/helper-annotate-as-pure': 7.22.5 - regexpu-core: 5.2.2 - dev: true - - /@babel/helper-create-regexp-features-plugin@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-annotate-as-pure': 7.22.5 + '@nicolo-ribaudo/semver-v6': 6.3.3 regexpu-core: 5.3.2 - semver: 6.3.0 dev: true - /@babel/helper-define-polyfill-provider@0.4.0(@babel/core@7.22.5): - resolution: {integrity: sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==} + /@babel/helper-define-polyfill-provider@0.4.1(@babel/core@7.22.9): + resolution: {integrity: sha512-kX4oXixDxG197yhX+J3Wp+NpL2wuCFjWQAr6yX2jtCnflK9ulMI51ULFGIrWiX1jGfvAxdHp+XQCcP2bZGPs9A==} peerDependencies: '@babel/core': ^7.4.0-0 dependencies: - '@babel/core': 7.22.5 - '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) + '@babel/core': 7.22.9 + '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.9) '@babel/helper-plugin-utils': 7.22.5 debug: 4.3.4 lodash.debounce: 4.0.8 resolve: 1.22.2 - semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true @@ -981,6 +978,13 @@ packages: '@babel/types': 7.22.5 dev: true + /@babel/helper-member-expression-to-functions@7.18.9: + resolution: {integrity: sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + dev: true + /@babel/helper-member-expression-to-functions@7.22.5: resolution: {integrity: sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==} engines: {node: '>=6.9.0'} @@ -1009,15 +1013,29 @@ packages: '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-module-imports': 7.22.5 '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.5 '@babel/template': 7.22.5 - '@babel/traverse': 7.22.5 + '@babel/traverse': 7.22.6 '@babel/types': 7.22.5 transitivePeerDependencies: - supports-color dev: true + /@babel/helper-module-transforms@7.22.9(@babel/core@7.22.9): + resolution: {integrity: sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.5 + dev: true + /@babel/helper-optimise-call-expression@7.22.5: resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} engines: {node: '>=6.9.0'} @@ -1030,13 +1048,13 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/helper-remap-async-to-generator@7.22.5(@babel/core@7.22.5): + /@babel/helper-remap-async-to-generator@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-wrap-function': 7.22.5 @@ -1045,19 +1063,6 @@ packages: - supports-color dev: true - /@babel/helper-replace-supers@7.19.1: - resolution: {integrity: sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-member-expression-to-functions': 7.22.5 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/traverse': 7.22.5 - '@babel/types': 7.22.5 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/helper-replace-supers@7.22.5: resolution: {integrity: sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==} engines: {node: '>=6.9.0'} @@ -1066,7 +1071,7 @@ packages: '@babel/helper-member-expression-to-functions': 7.22.5 '@babel/helper-optimise-call-expression': 7.22.5 '@babel/template': 7.22.5 - '@babel/traverse': 7.22.5 + '@babel/traverse': 7.22.6 '@babel/types': 7.22.5 transitivePeerDependencies: - supports-color @@ -1086,15 +1091,8 @@ packages: '@babel/types': 7.22.5 dev: true - /@babel/helper-split-export-declaration@7.18.6: - resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - dev: true - - /@babel/helper-split-export-declaration@7.22.5: - resolution: {integrity: sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==} + /@babel/helper-split-export-declaration@7.22.6: + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.5 @@ -1121,18 +1119,18 @@ packages: dependencies: '@babel/helper-function-name': 7.22.5 '@babel/template': 7.22.5 - '@babel/traverse': 7.22.5 + '@babel/traverse': 7.22.8 '@babel/types': 7.22.5 transitivePeerDependencies: - supports-color dev: true - /@babel/helpers@7.22.5: - resolution: {integrity: sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==} + /@babel/helpers@7.22.6: + resolution: {integrity: sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.22.5 - '@babel/traverse': 7.22.5 + '@babel/traverse': 7.22.8 '@babel/types': 7.22.5 transitivePeerDependencies: - supports-color @@ -1147,615 +1145,621 @@ packages: js-tokens: 4.0.0 dev: true - /@babel/parser@7.22.5: - resolution: {integrity: sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==} + /@babel/parser@7.22.6: + resolution: {integrity: sha512-EIQu22vNkceq3LbjAq7knDf/UmtI2qbcNI8GRBlijez6TpQLvSodJPYfydQmNA5buwkxxxa/PVI44jjYZ+/cLw==} engines: {node: '>=6.0.0'} hasBin: true dependencies: '@babel/types': 7.22.5 dev: true - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.5(@babel/core@7.22.5): + /@babel/parser@7.22.7: + resolution: {integrity: sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.22.5 + dev: true + + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.5(@babel/core@7.22.5): + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-optional-chaining': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-optional-chaining': 7.22.6(@babel/core@7.22.9) dev: true - /@babel/plugin-proposal-class-properties@7.12.1(@babel/core@7.22.5): + /@babel/plugin-proposal-class-properties@7.12.1(@babel/core@7.22.9): resolution: {integrity: sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.20.5(@babel/core@7.22.5) + '@babel/core': 7.22.9 + '@babel/helper-create-class-features-plugin': 7.20.5(@babel/core@7.22.9) '@babel/helper-plugin-utils': 7.22.5 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.22.5): + /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.22.9): resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.20.5(@babel/core@7.22.5) + '@babel/core': 7.22.9 + '@babel/helper-create-class-features-plugin': 7.20.5(@babel/core@7.22.9) '@babel/helper-plugin-utils': 7.22.5 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-decorators@7.20.5(@babel/core@7.22.5): + /@babel/plugin-proposal-decorators@7.20.5(@babel/core@7.22.9): resolution: {integrity: sha512-Lac7PpRJXcC3s9cKsBfl+uc+DYXU5FD06BrTFunQO6QIQT+DwyzDPURAowI3bcvD1dZF/ank1Z5rstUJn3Hn4Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.20.5(@babel/core@7.22.5) + '@babel/core': 7.22.9 + '@babel/helper-create-class-features-plugin': 7.22.6(@babel/core@7.22.9) '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.19.1 - '@babel/helper-split-export-declaration': 7.18.6 - '@babel/plugin-syntax-decorators': 7.19.0(@babel/core@7.22.5) + '@babel/helper-replace-supers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/plugin-syntax-decorators': 7.19.0(@babel/core@7.22.9) transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-object-rest-spread@7.20.2(@babel/core@7.22.5): + /@babel/plugin-proposal-object-rest-spread@7.20.2(@babel/core@7.22.9): resolution: {integrity: sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.20.5 - '@babel/core': 7.22.5 - '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) + '@babel/compat-data': 7.22.9 + '@babel/core': 7.22.9 + '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.9) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.5) - '@babel/plugin-transform-parameters': 7.20.5(@babel/core@7.22.5) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.9) + '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.22.9) dev: true - /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.5): + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.9): resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 dev: true - /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.22.5): + /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.22.9): resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} engines: {node: '>=4'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 - '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/core': 7.22.9 + '@babel/helper-create-regexp-features-plugin': 7.22.6(@babel/core@7.22.9) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.22.5): + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.22.9): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.22.5): + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.22.9): resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.22.5): + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.22.9): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.22.5): + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.22.9): resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-decorators@7.19.0(@babel/core@7.22.5): + /@babel/plugin-syntax-decorators@7.19.0(@babel/core@7.22.9): resolution: {integrity: sha512-xaBZUEDntt4faL1yN8oIFlhfXeQAWJW7CLKYsHTUqriCUbj8xOra8bfxxKGi/UwExPFBuPdH4XfHc9rGQhrVkQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.22.5): + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.22.9): resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.22.5): + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.22.9): resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-flow@7.18.6(@babel/core@7.22.5): + /@babel/plugin-syntax-flow@7.18.6(@babel/core@7.22.9): resolution: {integrity: sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.22.5): + /@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-import-attributes@7.22.5(@babel/core@7.22.5): + /@babel/plugin-syntax-import-attributes@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.5): + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.9): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.22.5): + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.22.9): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-jsx@7.18.6(@babel/core@7.22.5): + /@babel/plugin-syntax-jsx@7.18.6(@babel/core@7.22.9): resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.5): + /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.22.5): + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.22.9): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.22.5): + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.22.9): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.22.5): + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.22.9): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.22.5): + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.22.9): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.22.5): + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.22.9): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.22.5): + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.22.9): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.22.5): + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.22.9): resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.22.5): + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.22.9): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.22.5): + /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.22.5): + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.22.9): resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.22.5 - '@babel/helper-create-regexp-features-plugin': 7.20.5(@babel/core@7.22.5) + '@babel/core': 7.22.9 + '@babel/helper-create-regexp-features-plugin': 7.22.6(@babel/core@7.22.9) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-async-generator-functions@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==} + /@babel/plugin-transform-async-generator-functions@7.22.7(@babel/core@7.22.9): + resolution: {integrity: sha512-7HmE7pk/Fmke45TODvxvkxRMV9RazV+ZZzhOL9AG8G29TLrr3jkjwF7uJfxZ30EoXpO+LJkq4oA8NjO2DTnEDg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.5) + '@babel/helper-remap-async-to-generator': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.9) transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-async-to-generator@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-async-to-generator@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-module-imports': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.5(@babel/core@7.22.5) + '@babel/helper-remap-async-to-generator': 7.22.5(@babel/core@7.22.9) transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-block-scoping@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-block-scoping@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-class-properties@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-class-properties@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/core': 7.22.9 + '@babel/helper-create-class-features-plugin': 7.22.6(@babel/core@7.22.9) '@babel/helper-plugin-utils': 7.22.5 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-class-static-block@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-class-static-block@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 dependencies: - '@babel/core': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/core': 7.22.9 + '@babel/helper-create-class-features-plugin': 7.22.6(@babel/core@7.22.9) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.5) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.9) transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-classes@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==} + /@babel/plugin-transform-classes@7.22.6(@babel/core@7.22.9): + resolution: {integrity: sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) + '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.9) '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-function-name': 7.22.5 '@babel/helper-optimise-call-expression': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-replace-supers': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 globals: 11.12.0 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 '@babel/template': 7.22.5 dev: true - /@babel/plugin-transform-destructuring@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-destructuring@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 - '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/core': 7.22.9 + '@babel/helper-create-regexp-features-plugin': 7.22.6(@babel/core@7.22.9) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-duplicate-keys@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-duplicate-keys@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-dynamic-import@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-dynamic-import@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.9) dev: true - /@babel/plugin-transform-exponentiation-operator@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-exponentiation-operator@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-export-namespace-from@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-export-namespace-from@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.9) dev: true - /@babel/plugin-transform-flow-strip-types@7.19.0(@babel/core@7.22.5): + /@babel/plugin-transform-flow-strip-types@7.19.0(@babel/core@7.22.9): resolution: {integrity: sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-flow': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-syntax-flow': 7.18.6(@babel/core@7.22.9) dev: true - /@babel/plugin-transform-for-of@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-for-of@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-function-name@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-function-name@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 - '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) + '@babel/core': 7.22.9 + '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.9) '@babel/helper-function-name': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-json-strings@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-json-strings@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.9) dev: true - /@babel/plugin-transform-literals@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-literals@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-logical-assignment-operators@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-logical-assignment-operators@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.5) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.9) dev: true - /@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-modules-amd@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-modules-amd@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 - '@babel/helper-module-transforms': 7.22.5 + '@babel/core': 7.22.9 + '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.9) '@babel/helper-plugin-utils': 7.22.5 - transitivePeerDependencies: - - supports-color dev: true - /@babel/plugin-transform-modules-commonjs@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-modules-commonjs@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-module-transforms': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-simple-access': 7.22.5 @@ -1763,524 +1767,510 @@ packages: - supports-color dev: true - /@babel/plugin-transform-modules-systemjs@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-modules-systemjs@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.9) '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-identifier': 7.22.5 - transitivePeerDependencies: - - supports-color dev: true - /@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 - '@babel/helper-module-transforms': 7.22.5 + '@babel/core': 7.22.9 + '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.9) '@babel/helper-plugin-utils': 7.22.5 - transitivePeerDependencies: - - supports-color dev: true - /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.22.5 - '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/core': 7.22.9 + '@babel/helper-create-regexp-features-plugin': 7.22.6(@babel/core@7.22.9) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-new-target@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-new-target@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-nullish-coalescing-operator@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-nullish-coalescing-operator@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.9) dev: true - /@babel/plugin-transform-numeric-separator@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-numeric-separator@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.5) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.9) dev: true - /@babel/plugin-transform-object-assign@7.18.6(@babel/core@7.22.5): + /@babel/plugin-transform-object-assign@7.18.6(@babel/core@7.22.9): resolution: {integrity: sha512-mQisZ3JfqWh2gVXvfqYCAAyRs6+7oev+myBsTwW5RnPhYXOTuCEw2oe3YgxlXMViXUS53lG8koulI7mJ+8JE+A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-object-rest-spread@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-object-rest-spread@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.22.5 - '@babel/core': 7.22.5 - '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) + '@babel/compat-data': 7.22.9 + '@babel/core': 7.22.9 + '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.9) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.5) - '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.9) + '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.22.9) dev: true - /@babel/plugin-transform-object-super@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-object-super@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-replace-supers': 7.22.5 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-optional-catch-binding@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-optional-catch-binding@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.9) dev: true - /@babel/plugin-transform-optional-chaining@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==} + /@babel/plugin-transform-optional-chaining@7.22.6(@babel/core@7.22.9): + resolution: {integrity: sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.9) dev: true - /@babel/plugin-transform-parameters@7.20.5(@babel/core@7.22.5): - resolution: {integrity: sha512-h7plkOmcndIUWXZFLgpbrh2+fXAi47zcUX7IrOQuZdLD0I0KvjJ6cvo3BEcAOsDOcZhVKGJqv07mkSqK0y2isQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-transform-parameters@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-parameters@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-private-methods@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-private-methods@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/core': 7.22.9 + '@babel/helper-create-class-features-plugin': 7.22.6(@babel/core@7.22.9) '@babel/helper-plugin-utils': 7.22.5 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-private-property-in-object@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-private-property-in-object@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/helper-create-class-features-plugin': 7.22.6(@babel/core@7.22.9) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.5) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.9) transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-react-display-name@7.18.6(@babel/core@7.22.5): + /@babel/plugin-transform-react-display-name@7.18.6(@babel/core@7.22.9): resolution: {integrity: sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-react-jsx-development@7.18.6(@babel/core@7.22.5): + /@babel/plugin-transform-react-jsx-development@7.18.6(@babel/core@7.22.9): resolution: {integrity: sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 - '@babel/plugin-transform-react-jsx': 7.19.0(@babel/core@7.22.5) + '@babel/core': 7.22.9 + '@babel/plugin-transform-react-jsx': 7.19.0(@babel/core@7.22.9) dev: true - /@babel/plugin-transform-react-jsx@7.19.0(@babel/core@7.22.5): + /@babel/plugin-transform-react-jsx@7.19.0(@babel/core@7.22.9): resolution: {integrity: sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-module-imports': 7.18.6 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.9) '@babel/types': 7.22.5 dev: true - /@babel/plugin-transform-react-pure-annotations@7.18.6(@babel/core@7.22.5): + /@babel/plugin-transform-react-pure-annotations@7.18.6(@babel/core@7.22.9): resolution: {integrity: sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-regenerator@7.20.5(@babel/core@7.22.5): + /@babel/plugin-transform-regenerator@7.20.5(@babel/core@7.22.9): resolution: {integrity: sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 regenerator-transform: 0.15.1 dev: true - /@babel/plugin-transform-regenerator@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-regenerator@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 regenerator-transform: 0.15.1 dev: true - /@babel/plugin-transform-reserved-words@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-reserved-words@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-spread@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-spread@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 dev: true - /@babel/plugin-transform-sticky-regex@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-sticky-regex@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-typeof-symbol@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-typeof-symbol@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-typescript@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-typescript@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-SMubA9S7Cb5sGSFFUlqxyClTA9zWJ8qGQrppNUm05LtFuN1ELRFNndkix4zUJrC9F+YivWwa1dHMSyo0e0N9dA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/helper-create-class-features-plugin': 7.22.6(@babel/core@7.22.9) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.9) transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-unicode-escapes@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-unicode-escapes@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-property-regex@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-unicode-property-regex@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 - '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/core': 7.22.9 + '@babel/helper-create-regexp-features-plugin': 7.22.6(@babel/core@7.22.9) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 - '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/core': 7.22.9 + '@babel/helper-create-regexp-features-plugin': 7.22.6(@babel/core@7.22.9) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-sets-regex@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-unicode-sets-regex@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.22.5 - '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/core': 7.22.9 + '@babel/helper-create-regexp-features-plugin': 7.22.6(@babel/core@7.22.9) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/preset-env@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==} + /@babel/preset-env@7.22.9(@babel/core@7.22.9): + resolution: {integrity: sha512-wNi5H/Emkhll/bqPjsjQorSykrlfY5OWakd6AulLvMEytpKasMVUpVy8RL4qBIBs5Ac6/5i0/Rv0b/Fg6Eag/g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.22.5 - '@babel/core': 7.22.5 - '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) + '@babel/compat-data': 7.22.9 + '@babel/core': 7.22.9 + '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.9) '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-option': 7.22.5 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.5) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.5) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.5) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.5) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.5) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.5) - '@babel/plugin-syntax-import-assertions': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-syntax-import-attributes': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.5) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.5) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.5) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.5) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.5) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.5) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.5) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.5) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.5) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.5) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.22.5) - '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-async-generator-functions': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-async-to-generator': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-block-scoping': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-class-properties': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-class-static-block': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-classes': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-destructuring': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-duplicate-keys': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-dynamic-import': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-exponentiation-operator': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-export-namespace-from': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-for-of': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-json-strings': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-logical-assignment-operators': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-modules-amd': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-modules-systemjs': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-modules-umd': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-new-target': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-nullish-coalescing-operator': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-numeric-separator': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-object-rest-spread': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-optional-catch-binding': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-optional-chaining': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-private-methods': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-private-property-in-object': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-regenerator': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-reserved-words': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-sticky-regex': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-typeof-symbol': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-unicode-escapes': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-unicode-property-regex': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-unicode-sets-regex': 7.22.5(@babel/core@7.22.5) - '@babel/preset-modules': 0.1.5(@babel/core@7.22.5) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.9) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.9) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.9) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.9) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.9) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.9) + '@babel/plugin-syntax-import-assertions': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-syntax-import-attributes': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.9) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.9) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.9) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.9) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.9) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.9) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.9) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.9) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.9) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.9) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.22.9) + '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-async-generator-functions': 7.22.7(@babel/core@7.22.9) + '@babel/plugin-transform-async-to-generator': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-block-scoping': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-class-properties': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-class-static-block': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-classes': 7.22.6(@babel/core@7.22.9) + '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-destructuring': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-duplicate-keys': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-dynamic-import': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-exponentiation-operator': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-export-namespace-from': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-for-of': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-json-strings': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-logical-assignment-operators': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-modules-amd': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-modules-systemjs': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-modules-umd': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-new-target': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-nullish-coalescing-operator': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-numeric-separator': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-object-rest-spread': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-optional-catch-binding': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-optional-chaining': 7.22.6(@babel/core@7.22.9) + '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-private-methods': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-private-property-in-object': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-regenerator': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-reserved-words': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-sticky-regex': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-typeof-symbol': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-unicode-escapes': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-unicode-property-regex': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-unicode-sets-regex': 7.22.5(@babel/core@7.22.9) + '@babel/preset-modules': 0.1.5(@babel/core@7.22.9) '@babel/types': 7.22.5 - babel-plugin-polyfill-corejs2: 0.4.3(@babel/core@7.22.5) - babel-plugin-polyfill-corejs3: 0.8.1(@babel/core@7.22.5) - babel-plugin-polyfill-regenerator: 0.5.0(@babel/core@7.22.5) + babel-plugin-polyfill-corejs2: 0.4.4(@babel/core@7.22.9) + babel-plugin-polyfill-corejs3: 0.8.2(@babel/core@7.22.9) + babel-plugin-polyfill-regenerator: 0.5.1(@babel/core@7.22.9) core-js-compat: 3.31.0 - semver: 6.3.0 + semver: 6.3.1 transitivePeerDependencies: - supports-color dev: true - /@babel/preset-flow@7.18.6(@babel/core@7.22.5): + /@babel/preset-flow@7.18.6(@babel/core@7.22.9): resolution: {integrity: sha512-E7BDhL64W6OUqpuyHnSroLnqyRTcG6ZdOBl1OKI/QK/HJfplqK/S3sq1Cckx7oTodJ5yOXyfw7rEADJ6UjoQDQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-option': 7.22.5 - '@babel/plugin-transform-flow-strip-types': 7.19.0(@babel/core@7.22.5) + '@babel/plugin-transform-flow-strip-types': 7.19.0(@babel/core@7.22.9) dev: true - /@babel/preset-modules@0.1.5(@babel/core@7.22.5): + /@babel/preset-modules@0.1.5(@babel/core@7.22.9): resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.22.5) - '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.22.9) + '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.22.9) '@babel/types': 7.22.5 esutils: 2.0.3 dev: true - /@babel/preset-react@7.18.6(@babel/core@7.22.5): + /@babel/preset-react@7.18.6(@babel/core@7.22.9): resolution: {integrity: sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-option': 7.22.5 - '@babel/plugin-transform-react-display-name': 7.18.6(@babel/core@7.22.5) - '@babel/plugin-transform-react-jsx': 7.19.0(@babel/core@7.22.5) - '@babel/plugin-transform-react-jsx-development': 7.18.6(@babel/core@7.22.5) - '@babel/plugin-transform-react-pure-annotations': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-transform-react-display-name': 7.18.6(@babel/core@7.22.9) + '@babel/plugin-transform-react-jsx': 7.19.0(@babel/core@7.22.9) + '@babel/plugin-transform-react-jsx-development': 7.18.6(@babel/core@7.22.9) + '@babel/plugin-transform-react-pure-annotations': 7.18.6(@babel/core@7.22.9) dev: true - /@babel/preset-typescript@7.22.5(@babel/core@7.22.5): + /@babel/preset-typescript@7.22.5(@babel/core@7.22.9): resolution: {integrity: sha512-YbPaal9LxztSGhmndR46FmAbkJ/1fAsw293tSU+I5E5h+cnJ3d4GTwyUgGYmOXJYdGA+uNePle4qbaRzj2NISQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-option': 7.22.5 - '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-typescript': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-typescript': 7.22.5(@babel/core@7.22.9) transitivePeerDependencies: - supports-color dev: true @@ -2307,12 +2297,12 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.22.5 - '@babel/parser': 7.22.5 + '@babel/parser': 7.22.6 '@babel/types': 7.22.5 dev: true - /@babel/traverse@7.22.5: - resolution: {integrity: sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==} + /@babel/traverse@7.22.6: + resolution: {integrity: sha512-53CijMvKlLIDlOTrdWiHileRddlIiwUIyCKqYa7lYnnPldXCG5dUSN38uT0cA6i7rHWNKJLH0VU/Kxdr1GzB3w==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.22.5 @@ -2320,8 +2310,26 @@ packages: '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-function-name': 7.22.5 '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.5 - '@babel/parser': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.22.6 + '@babel/types': 7.22.5 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/traverse@7.22.8: + resolution: {integrity: sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.5 + '@babel/generator': 7.22.9 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.22.7 '@babel/types': 7.22.5 debug: 4.3.4 globals: 11.12.0 @@ -2823,16 +2831,6 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils@4.2.0(eslint@8.41.0): - resolution: {integrity: sha512-gB8T4H4DEfX2IV9zGDJPOBgP1e/DbfCPDTtEqUMckpvzS1OYtva8JdFYBqMwYk7xAQ429WGF/UPqn8uQ//h2vQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - dependencies: - eslint: 8.41.0 - eslint-visitor-keys: 3.4.1 - dev: true - /@eslint-community/eslint-utils@4.2.0(eslint@8.44.0): resolution: {integrity: sha512-gB8T4H4DEfX2IV9zGDJPOBgP1e/DbfCPDTtEqUMckpvzS1OYtva8JdFYBqMwYk7xAQ429WGF/UPqn8uQ//h2vQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2842,25 +2840,23 @@ packages: eslint: 8.44.0 eslint-visitor-keys: 3.4.1 + /@eslint-community/eslint-utils@4.4.0(eslint@8.44.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.44.0 + eslint-visitor-keys: 3.4.1 + dev: true + /@eslint-community/regexpp@4.4.0: resolution: {integrity: sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - /@eslint/eslintrc@2.0.3: - resolution: {integrity: sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - ajv: 6.12.6 - debug: 4.3.4 - espree: 9.5.2 - globals: 13.19.0 - ignore: 5.2.1 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color + /@eslint-community/regexpp@4.5.1: + resolution: {integrity: sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true /@eslint/eslintrc@2.1.0: @@ -2871,7 +2867,7 @@ packages: debug: 4.3.4 espree: 9.6.0 globals: 13.19.0 - ignore: 5.2.1 + ignore: 5.2.4 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -2879,11 +2875,6 @@ packages: transitivePeerDependencies: - supports-color - /@eslint/js@8.41.0: - resolution: {integrity: sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - /@eslint/js@8.44.0: resolution: {integrity: sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2943,17 +2934,6 @@ packages: transitivePeerDependencies: - supports-color - /@humanwhocodes/config-array@0.11.8: - resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==} - engines: {node: '>=10.10.0'} - dependencies: - '@humanwhocodes/object-schema': 1.2.1 - debug: 4.3.4 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - dev: true - /@humanwhocodes/module-importer@1.0.1: resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} @@ -2967,7 +2947,7 @@ packages: dependencies: string-width: 5.1.2 string-width-cjs: /string-width@4.2.3 - strip-ansi: 7.1.0 + strip-ansi: 7.0.1 strip-ansi-cjs: /strip-ansi@6.0.1 wrap-ansi: 8.1.0 wrap-ansi-cjs: /wrap-ansi@7.0.0 @@ -2994,27 +2974,27 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 20.3.3 + '@types/node': 20.4.2 chalk: 4.1.2 jest-message-util: 27.5.1 jest-util: 27.5.1 slash: 3.0.0 dev: true - /@jest/console@29.5.0: - resolution: {integrity: sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==} + /@jest/console@29.6.1: + resolution: {integrity: sha512-Aj772AYgwTSr5w8qnyoJ0eDYvN6bMsH3ORH1ivMotrInHLKdUz6BDlaEXHdM6kODaBIkNIyQGzsMvRdOv7VG7Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.5.0 - '@types/node': 20.3.3 + '@jest/types': 29.6.1 + '@types/node': 20.4.2 chalk: 4.1.2 - jest-message-util: 29.5.0 - jest-util: 29.5.0 + jest-message-util: 29.6.1 + jest-util: 29.6.1 slash: 3.0.0 dev: true - /@jest/core@29.5.0: - resolution: {integrity: sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==} + /@jest/core@29.6.1: + resolution: {integrity: sha512-CcowHypRSm5oYQ1obz1wfvkjZZ2qoQlrKKvlfPwh5jUXVU12TWr2qMeH8chLMuTFzHh5a1g2yaqlqDICbr+ukQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -3022,32 +3002,32 @@ packages: node-notifier: optional: true dependencies: - '@jest/console': 29.5.0 - '@jest/reporters': 29.5.0 - '@jest/test-result': 29.5.0 - '@jest/transform': 29.5.0 - '@jest/types': 29.5.0 - '@types/node': 20.3.3 + '@jest/console': 29.6.1 + '@jest/reporters': 29.6.1 + '@jest/test-result': 29.6.1 + '@jest/transform': 29.6.1 + '@jest/types': 29.6.1 + '@types/node': 20.4.2 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.7.0 exit: 0.1.2 graceful-fs: 4.2.10 jest-changed-files: 29.5.0 - jest-config: 29.5.0(@types/node@20.3.3) - jest-haste-map: 29.5.0 - jest-message-util: 29.5.0 + jest-config: 29.6.1(@types/node@20.4.2) + jest-haste-map: 29.6.1 + jest-message-util: 29.6.1 jest-regex-util: 29.4.3 - jest-resolve: 29.5.0 - jest-resolve-dependencies: 29.5.0 - jest-runner: 29.5.0 - jest-runtime: 29.5.0 - jest-snapshot: 29.5.0 - jest-util: 29.5.0 - jest-validate: 29.5.0 - jest-watcher: 29.5.0 + jest-resolve: 29.6.1 + jest-resolve-dependencies: 29.6.1 + jest-runner: 29.6.1 + jest-runtime: 29.6.1 + jest-snapshot: 29.6.1 + jest-util: 29.6.1 + jest-validate: 29.6.1 + jest-watcher: 29.6.1 micromatch: 4.0.5 - pretty-format: 29.5.0 + pretty-format: 29.6.1 slash: 3.0.0 strip-ansi: 6.0.1 transitivePeerDependencies: @@ -3055,14 +3035,14 @@ packages: - ts-node dev: true - /@jest/environment@29.5.0: - resolution: {integrity: sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==} + /@jest/environment@29.6.1: + resolution: {integrity: sha512-RMMXx4ws+Gbvw3DfLSuo2cfQlK7IwGbpuEWXCqyYDcqYTI+9Ju3a5hDnXaxjNsa6uKh9PQF2v+qg+RLe63tz5A==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/fake-timers': 29.5.0 - '@jest/types': 29.5.0 - '@types/node': 20.3.3 - jest-mock: 29.5.0 + '@jest/fake-timers': 29.6.1 + '@jest/types': 29.6.1 + '@types/node': 20.4.2 + jest-mock: 29.6.1 dev: true /@jest/expect-utils@29.5.0: @@ -3072,42 +3052,49 @@ packages: jest-get-type: 29.4.3 dev: true - /@jest/expect@29.5.0: - resolution: {integrity: sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==} + /@jest/expect-utils@29.6.1: + resolution: {integrity: sha512-o319vIf5pEMx0LmzSxxkYYxo4wrRLKHq9dP1yJU7FoPTB0LfAKSz8SWD6D/6U3v/O52t9cF5t+MeJiRsfk7zMw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - expect: 29.5.0 - jest-snapshot: 29.5.0 + jest-get-type: 29.4.3 + dev: true + + /@jest/expect@29.6.1: + resolution: {integrity: sha512-N5xlPrAYaRNyFgVf2s9Uyyvr795jnB6rObuPx4QFvNJz8aAjpZUDfO4bh5G/xuplMID8PrnuF1+SfSyDxhsgYg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + expect: 29.6.1 + jest-snapshot: 29.6.1 transitivePeerDependencies: - supports-color dev: true - /@jest/fake-timers@29.5.0: - resolution: {integrity: sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==} + /@jest/fake-timers@29.6.1: + resolution: {integrity: sha512-RdgHgbXyosCDMVYmj7lLpUwXA4c69vcNzhrt69dJJdf8azUrpRh3ckFCaTPNjsEeRi27Cig0oKDGxy5j7hOgHg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.5.0 + '@jest/types': 29.6.1 '@sinonjs/fake-timers': 10.0.2 - '@types/node': 20.3.3 - jest-message-util: 29.5.0 - jest-mock: 29.5.0 - jest-util: 29.5.0 + '@types/node': 20.4.2 + jest-message-util: 29.6.1 + jest-mock: 29.6.1 + jest-util: 29.6.1 dev: true - /@jest/globals@29.5.0: - resolution: {integrity: sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==} + /@jest/globals@29.6.1: + resolution: {integrity: sha512-2VjpaGy78JY9n9370H8zGRCFbYVWwjY6RdDMhoJHa1sYfwe6XM/azGN0SjY8kk7BOZApIejQ1BFPyH7FPG0w3A==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.5.0 - '@jest/expect': 29.5.0 - '@jest/types': 29.5.0 - jest-mock: 29.5.0 + '@jest/environment': 29.6.1 + '@jest/expect': 29.6.1 + '@jest/types': 29.6.1 + jest-mock: 29.6.1 transitivePeerDependencies: - supports-color dev: true - /@jest/reporters@29.5.0: - resolution: {integrity: sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==} + /@jest/reporters@29.6.1: + resolution: {integrity: sha512-9zuaI9QKr9JnoZtFQlw4GREQbxgmNYXU6QuWtmuODvk5nvPUeBYapVR/VYMyi2WSx3jXTLJTJji8rN6+Cm4+FA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -3116,12 +3103,12 @@ packages: optional: true dependencies: '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 29.5.0 - '@jest/test-result': 29.5.0 - '@jest/transform': 29.5.0 - '@jest/types': 29.5.0 - '@jridgewell/trace-mapping': 0.3.17 - '@types/node': 20.3.3 + '@jest/console': 29.6.1 + '@jest/test-result': 29.6.1 + '@jest/transform': 29.6.1 + '@jest/types': 29.6.1 + '@jridgewell/trace-mapping': 0.3.18 + '@types/node': 20.4.2 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 @@ -3132,9 +3119,9 @@ packages: istanbul-lib-report: 3.0.0 istanbul-lib-source-maps: 4.0.1 istanbul-reports: 3.1.5 - jest-message-util: 29.5.0 - jest-util: 29.5.0 - jest-worker: 29.5.0 + jest-message-util: 29.6.1 + jest-util: 29.6.1 + jest-worker: 29.6.1 slash: 3.0.0 string-length: 4.0.2 strip-ansi: 6.0.1 @@ -3150,11 +3137,18 @@ packages: '@sinclair/typebox': 0.25.24 dev: true - /@jest/source-map@29.4.3: - resolution: {integrity: sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==} + /@jest/schemas@29.6.0: + resolution: {integrity: sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jridgewell/trace-mapping': 0.3.17 + '@sinclair/typebox': 0.27.8 + dev: true + + /@jest/source-map@29.6.0: + resolution: {integrity: sha512-oA+I2SHHQGxDCZpbrsCQSoMLb3Bz547JnM+jUr9qEbuw0vQlWZfpPS7CO9J7XiwKicEz9OFn/IYoLkkiUD7bzA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jridgewell/trace-mapping': 0.3.18 callsites: 3.1.0 graceful-fs: 4.2.10 dev: true @@ -3169,23 +3163,23 @@ packages: collect-v8-coverage: 1.0.1 dev: true - /@jest/test-result@29.5.0: - resolution: {integrity: sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==} + /@jest/test-result@29.6.1: + resolution: {integrity: sha512-Ynr13ZRcpX6INak0TPUukU8GWRfm/vAytE3JbJNGAvINySWYdfE7dGZMbk36oVuK4CigpbhMn8eg1dixZ7ZJOw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/console': 29.5.0 - '@jest/types': 29.5.0 + '@jest/console': 29.6.1 + '@jest/types': 29.6.1 '@types/istanbul-lib-coverage': 2.0.4 collect-v8-coverage: 1.0.1 dev: true - /@jest/test-sequencer@29.5.0: - resolution: {integrity: sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==} + /@jest/test-sequencer@29.6.1: + resolution: {integrity: sha512-oBkC36PCDf/wb6dWeQIhaviU0l5u6VCsXa119yqdUosYAt7/FbQU2M2UoziO3igj/HBDEgp57ONQ3fm0v9uyyg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/test-result': 29.5.0 + '@jest/test-result': 29.6.1 graceful-fs: 4.2.10 - jest-haste-map: 29.5.0 + jest-haste-map: 29.6.1 slash: 3.0.0 dev: true @@ -3193,7 +3187,7 @@ packages: resolution: {integrity: sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@jest/types': 27.5.1 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 @@ -3212,21 +3206,21 @@ packages: - supports-color dev: true - /@jest/transform@29.5.0: - resolution: {integrity: sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==} + /@jest/transform@29.6.1: + resolution: {integrity: sha512-URnTneIU3ZjRSaf906cvf6Hpox3hIeJXRnz3VDSw5/X93gR8ycdfSIEy19FlVx8NFmpN7fe3Gb1xF+NjXaQLWg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.22.5 - '@jest/types': 29.5.0 - '@jridgewell/trace-mapping': 0.3.17 + '@babel/core': 7.22.9 + '@jest/types': 29.6.1 + '@jridgewell/trace-mapping': 0.3.18 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 2.0.0 fast-json-stable-stringify: 2.1.0 graceful-fs: 4.2.10 - jest-haste-map: 29.5.0 + jest-haste-map: 29.6.1 jest-regex-util: 29.4.3 - jest-util: 29.5.0 + jest-util: 29.6.1 micromatch: 4.0.5 pirates: 4.0.5 slash: 3.0.0 @@ -3241,19 +3235,19 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 20.3.3 + '@types/node': 20.4.2 '@types/yargs': 16.0.5 chalk: 4.1.2 dev: true - /@jest/types@29.5.0: - resolution: {integrity: sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==} + /@jest/types@29.6.1: + resolution: {integrity: sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/schemas': 29.4.3 + '@jest/schemas': 29.6.0 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 20.3.3 + '@types/node': 20.4.2 '@types/yargs': 17.0.24 chalk: 4.1.2 dev: true @@ -3297,6 +3291,12 @@ packages: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 + /@jridgewell/trace-mapping@0.3.18: + resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} + dependencies: + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 + /@json2csv/formatters@7.0.1: resolution: {integrity: sha512-eCmYKIIoFDXUB0Fotet2RmcoFTtNLXLmSV7j6aEQH/D2GiO749Uan3ts03PtAhXpE11QghxBjS0toXom8VQNBw==} dev: false @@ -3319,162 +3319,162 @@ packages: resolution: {integrity: sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==} dev: true - /@lexical/clipboard@0.11.1(lexical@0.11.1): - resolution: {integrity: sha512-xwesC2BMv+/ZF0DRMaTPHr4hrnaEbqsfkL1MG+xtqHZOM+paavXqEYp2Uh4WEAaSsmkIFWbrxP1Kraq9O8EZbw==} + /@lexical/clipboard@0.11.2(lexical@0.11.2): + resolution: {integrity: sha512-Cq3chsBhX9fJPWQXxqoaNr+MSN9VMbplhQXwEQJOXHYErkAVQgpr4cSlPFVD+MI2MO1TMhYRkMlXWZ33iYmcKQ==} peerDependencies: - lexical: 0.11.1 + lexical: 0.11.2 dependencies: - '@lexical/html': 0.11.1(lexical@0.11.1) - '@lexical/list': 0.11.1(lexical@0.11.1) - '@lexical/selection': 0.11.1(lexical@0.11.1) - '@lexical/utils': 0.11.1(lexical@0.11.1) - lexical: 0.11.1 + '@lexical/html': 0.11.2(lexical@0.11.2) + '@lexical/list': 0.11.2(lexical@0.11.2) + '@lexical/selection': 0.11.2(lexical@0.11.2) + '@lexical/utils': 0.11.2(lexical@0.11.2) + lexical: 0.11.2 dev: false - /@lexical/code@0.11.1(lexical@0.11.1): - resolution: {integrity: sha512-6XIclSRdPI3E6QtM0sVvip4M5xSvbghoyUnG0hiGjYv5py73748VrRnkr1JF0narSXeKSLKKe4j7IssTaKYS0A==} + /@lexical/code@0.11.2(lexical@0.11.2): + resolution: {integrity: sha512-xR+K8qtvSeKefNIvRCbDT2iNdl+5UKxDmQLh1ZqUeT5TBefXevnF0Hevek8xs1f+XSYwNeXjK/x1THD/i9e2jQ==} peerDependencies: - lexical: 0.11.1 + lexical: 0.11.2 dependencies: - '@lexical/utils': 0.11.1(lexical@0.11.1) - lexical: 0.11.1 + '@lexical/utils': 0.11.2(lexical@0.11.2) + lexical: 0.11.2 prismjs: 1.29.0 dev: false - /@lexical/dragon@0.11.1(lexical@0.11.1): - resolution: {integrity: sha512-Yg4lsaHgHdgxMFdz8bapfPHXevxk5rgegleJxsmx/c59+MLG7/R7h1ZIVRoZesIhlYF1rvvZHuWzQCJRqleCrQ==} + /@lexical/dragon@0.11.2(lexical@0.11.2): + resolution: {integrity: sha512-zJXeUiViYEbOEL9aXSYZmzku7SytZbD2pQ1FYQJ6H2o7UoK1WkYunRZkyxrx6uclQnZTUB1VO/OM2KuYlzl9wA==} peerDependencies: - lexical: 0.11.1 + lexical: 0.11.2 dependencies: - lexical: 0.11.1 + lexical: 0.11.2 dev: false - /@lexical/hashtag@0.11.1(lexical@0.11.1): - resolution: {integrity: sha512-DcAhrVmJ7pJ49z3oGkA8kd+oPtgglsoM89GkBTOOTh0hF8f2y0xpsaRVY/+YnOn7mxE3SAC2DDVh5txqOzZ1HQ==} + /@lexical/hashtag@0.11.2(lexical@0.11.2): + resolution: {integrity: sha512-nXtjIW8K+YLUBwh70vtO2oy5IpYiSb1XwM2Wn4c2yrzKk7tOVs7JAVO48Vyag0DsCpfLj1n+F2vd0zsLC147/A==} peerDependencies: - lexical: 0.11.1 + lexical: 0.11.2 dependencies: - '@lexical/utils': 0.11.1(lexical@0.11.1) - lexical: 0.11.1 + '@lexical/utils': 0.11.2(lexical@0.11.2) + lexical: 0.11.2 dev: false - /@lexical/history@0.11.1(lexical@0.11.1): - resolution: {integrity: sha512-JDwTb3GvD3GwIsAekdSLSZkKKA9iGVwt/ncnf75hKC19dLogsRmFqlT7gvZGnYmX8QlYhKTb3wyUQsn7Iax3qA==} + /@lexical/history@0.11.2(lexical@0.11.2): + resolution: {integrity: sha512-N2oaLhCrCt6AkAIba+sEzhPo5VrjaZDC/2Arn7/2q8vDnQc5WqoyNtEtFaYp+or5oI93C1jM9Qp7FB54lobAXA==} peerDependencies: - lexical: 0.11.1 + lexical: 0.11.2 dependencies: - '@lexical/utils': 0.11.1(lexical@0.11.1) - lexical: 0.11.1 + '@lexical/utils': 0.11.2(lexical@0.11.2) + lexical: 0.11.2 dev: false - /@lexical/html@0.11.1(lexical@0.11.1): - resolution: {integrity: sha512-tkXPpJCM73VwMynnWwZPqdL8gN9ydGtJsPz28Q1m5P3WD6sFERwCasJxYyMPCcL3KfGQ6a0WZCCEtnyUn7VQkg==} + /@lexical/html@0.11.2(lexical@0.11.2): + resolution: {integrity: sha512-QzPqci+FBoaOJcdqO2XXaiowUDVTkGN8y6ycZPjKYfu+fMDdkfSC6b3fdLfb99v6FluriVih39DJ8WQC0PcC1g==} peerDependencies: - lexical: 0.11.1 + lexical: 0.11.2 dependencies: - '@lexical/selection': 0.11.1(lexical@0.11.1) - lexical: 0.11.1 + '@lexical/selection': 0.11.2(lexical@0.11.2) + lexical: 0.11.2 dev: false - /@lexical/link@0.11.1(lexical@0.11.1): - resolution: {integrity: sha512-eEVZfSvdYKyjv5g35Rm50y+gglg4d5hgjiWuHzynT6XknU1VmR/WknEdSQybPK9vo2E2qf3qURyp1oAUaAPVjw==} + /@lexical/link@0.11.2(lexical@0.11.2): + resolution: {integrity: sha512-/EYhUkWnQ7cjJDnNrl8SNCT8zNicryOIf8PIkRpDKnDgG3SQMzXV6NT6JRAebam913AenfcBLaje21zBul7m4w==} peerDependencies: - lexical: 0.11.1 + lexical: 0.11.2 dependencies: - '@lexical/utils': 0.11.1(lexical@0.11.1) - lexical: 0.11.1 + '@lexical/utils': 0.11.2(lexical@0.11.2) + lexical: 0.11.2 dev: false - /@lexical/list@0.11.1(lexical@0.11.1): - resolution: {integrity: sha512-gONvM0q0eyA7yaSQ9WnoVs0riUrgilqVS4mdXDu3UKlr0hcDfJICEZO8ooorFu9yRkNzp8HRIkGByW6oQBa1cQ==} + /@lexical/list@0.11.2(lexical@0.11.2): + resolution: {integrity: sha512-VK+CeJdWaZS/H2ivELxIZd8UTFAJuqkMMF1XzQqZDxYKus8TJWBsG2SwY3ouADpHifrBTufIZlQrLSwaqxrACA==} peerDependencies: - lexical: 0.11.1 + lexical: 0.11.2 dependencies: - '@lexical/utils': 0.11.1(lexical@0.11.1) - lexical: 0.11.1 + '@lexical/utils': 0.11.2(lexical@0.11.2) + lexical: 0.11.2 dev: false - /@lexical/mark@0.11.1(lexical@0.11.1): - resolution: {integrity: sha512-HA9XTrfXFmipxsFbtDTN8uQl7v9EPm40C4LgJKc2PFV7uNXnz/KF6FE5Gwe/iz/ueMF0EH288t7w3J2KuHbFkQ==} + /@lexical/mark@0.11.2(lexical@0.11.2): + resolution: {integrity: sha512-OtOjQmsQNraTR7TQhMs6sUCAyT+903EZbP48BLqwIBEZNyRK8FsBh8boI68sdTBpypUmHfYpzn1aAJnLDocTTQ==} peerDependencies: - lexical: 0.11.1 + lexical: 0.11.2 dependencies: - '@lexical/utils': 0.11.1(lexical@0.11.1) - lexical: 0.11.1 + '@lexical/utils': 0.11.2(lexical@0.11.2) + lexical: 0.11.2 dev: false - /@lexical/markdown@0.11.1(@lexical/clipboard@0.11.1)(@lexical/selection@0.11.1)(lexical@0.11.1): - resolution: {integrity: sha512-yk8q2808PJrW7yT5ym/4j78lkNCdi/rWmbZN49tNtetWClddHPEYifdOfuSsf2aAOx65/23B7zHs87BuyzXWFw==} + /@lexical/markdown@0.11.2(@lexical/clipboard@0.11.2)(@lexical/selection@0.11.2)(lexical@0.11.2): + resolution: {integrity: sha512-4UyPSLuOFT1ezub5DPnwhbLPdaqWSTXSe7UBNw8Qt0/J3koAX4Kg099n+YcXJUwe04yJ00JKScsUjpDQXOOudw==} peerDependencies: - lexical: 0.11.1 + lexical: 0.11.2 dependencies: - '@lexical/code': 0.11.1(lexical@0.11.1) - '@lexical/link': 0.11.1(lexical@0.11.1) - '@lexical/list': 0.11.1(lexical@0.11.1) - '@lexical/rich-text': 0.11.1(@lexical/clipboard@0.11.1)(@lexical/selection@0.11.1)(@lexical/utils@0.11.1)(lexical@0.11.1) - '@lexical/text': 0.11.1(lexical@0.11.1) - '@lexical/utils': 0.11.1(lexical@0.11.1) - lexical: 0.11.1 + '@lexical/code': 0.11.2(lexical@0.11.2) + '@lexical/link': 0.11.2(lexical@0.11.2) + '@lexical/list': 0.11.2(lexical@0.11.2) + '@lexical/rich-text': 0.11.2(@lexical/clipboard@0.11.2)(@lexical/selection@0.11.2)(@lexical/utils@0.11.2)(lexical@0.11.2) + '@lexical/text': 0.11.2(lexical@0.11.2) + '@lexical/utils': 0.11.2(lexical@0.11.2) + lexical: 0.11.2 transitivePeerDependencies: - '@lexical/clipboard' - '@lexical/selection' dev: false - /@lexical/offset@0.11.1(lexical@0.11.1): - resolution: {integrity: sha512-x6ERzo1cHoL9tcetpomqnf52EJ8f/wAF4vnEbJ9k/BRAZJQBc3UX/WYx+IyycxCBVeh3mxOhjZHqesYCvPFTRw==} + /@lexical/offset@0.11.2(lexical@0.11.2): + resolution: {integrity: sha512-9eYK8DV0DM24/mrMdJ9/6lOySIF10QUrePBDq9pzpk9i+S0cfyjnbLszUO+2Fk4/yiDUmMomSYa44K/kndqI3A==} peerDependencies: - lexical: 0.11.1 + lexical: 0.11.2 dependencies: - lexical: 0.11.1 + lexical: 0.11.2 dev: false - /@lexical/overflow@0.11.1(lexical@0.11.1): - resolution: {integrity: sha512-mx99fWfGjbr6Va/jPgsagUJzYzC0WV7us43HYk98XSJJpz/dPapNyRUARJrSinv/iu47HkA1X4Kvgd6LqbIvxA==} + /@lexical/overflow@0.11.2(lexical@0.11.2): + resolution: {integrity: sha512-59c8Kk+ee2jU1RlnosIg323uWrRCIB9aYy7FMsKdH0Hhl+ZhkKI4BVA8rT0SINoq3kA//XwiCWclOQzm2Jmshw==} peerDependencies: - lexical: 0.11.1 + lexical: 0.11.2 dependencies: - lexical: 0.11.1 + lexical: 0.11.2 dev: false - /@lexical/plain-text@0.11.1(@lexical/clipboard@0.11.1)(@lexical/selection@0.11.1)(@lexical/utils@0.11.1)(lexical@0.11.1): - resolution: {integrity: sha512-G4OlqDTPWR2S58ONzEtyJW0XvTh0M46mhCzldrvJatcOUNrnCqL9ZeL3LSld/IRz8T4sjCRD6E1QjAFy51DUxg==} + /@lexical/plain-text@0.11.2(@lexical/clipboard@0.11.2)(@lexical/selection@0.11.2)(@lexical/utils@0.11.2)(lexical@0.11.2): + resolution: {integrity: sha512-WVipqB8ltK5tXr/5ZYeJp5ry/SVAXEffVgWqjj30D35nbekNDATkg/qzihm3wUVf1dB87U+nI2oiFJWLoIASuQ==} peerDependencies: - '@lexical/clipboard': 0.11.1 - '@lexical/selection': 0.11.1 - '@lexical/utils': 0.11.1 - lexical: 0.11.1 + '@lexical/clipboard': 0.11.2 + '@lexical/selection': 0.11.2 + '@lexical/utils': 0.11.2 + lexical: 0.11.2 dependencies: - '@lexical/clipboard': 0.11.1(lexical@0.11.1) - '@lexical/selection': 0.11.1(lexical@0.11.1) - '@lexical/utils': 0.11.1(lexical@0.11.1) - lexical: 0.11.1 + '@lexical/clipboard': 0.11.2(lexical@0.11.2) + '@lexical/selection': 0.11.2(lexical@0.11.2) + '@lexical/utils': 0.11.2(lexical@0.11.2) + lexical: 0.11.2 dev: false - /@lexical/react@0.11.1(lexical@0.11.1)(react-dom@18.2.0)(react@18.2.0)(yjs@13.6.0): - resolution: {integrity: sha512-iXZusD0Z+eqttuh8s58ZP3H+tn0V1JYOay/Xo3y6/N+UXJ3NpBfVXRQB97cY/861jezMgbmvcjXuhH/rlKCvSg==} + /@lexical/react@0.11.2(lexical@0.11.2)(react-dom@18.2.0)(react@18.2.0)(yjs@13.6.0): + resolution: {integrity: sha512-lRKdt+uc+MFQ5mQFUr/QpW9GtUdTAyDN0wlG/pLDYFIjU++kTrPhX/fK6SPevSRFm4lsLV2qKd8Ubj7ZOkmmJw==} peerDependencies: - lexical: 0.11.1 + lexical: 0.11.2 react: '>=17.x' react-dom: '>=17.x' dependencies: - '@lexical/clipboard': 0.11.1(lexical@0.11.1) - '@lexical/code': 0.11.1(lexical@0.11.1) - '@lexical/dragon': 0.11.1(lexical@0.11.1) - '@lexical/hashtag': 0.11.1(lexical@0.11.1) - '@lexical/history': 0.11.1(lexical@0.11.1) - '@lexical/link': 0.11.1(lexical@0.11.1) - '@lexical/list': 0.11.1(lexical@0.11.1) - '@lexical/mark': 0.11.1(lexical@0.11.1) - '@lexical/markdown': 0.11.1(@lexical/clipboard@0.11.1)(@lexical/selection@0.11.1)(lexical@0.11.1) - '@lexical/overflow': 0.11.1(lexical@0.11.1) - '@lexical/plain-text': 0.11.1(@lexical/clipboard@0.11.1)(@lexical/selection@0.11.1)(@lexical/utils@0.11.1)(lexical@0.11.1) - '@lexical/rich-text': 0.11.1(@lexical/clipboard@0.11.1)(@lexical/selection@0.11.1)(@lexical/utils@0.11.1)(lexical@0.11.1) - '@lexical/selection': 0.11.1(lexical@0.11.1) - '@lexical/table': 0.11.1(lexical@0.11.1) - '@lexical/text': 0.11.1(lexical@0.11.1) - '@lexical/utils': 0.11.1(lexical@0.11.1) - '@lexical/yjs': 0.11.1(lexical@0.11.1)(yjs@13.6.0) - lexical: 0.11.1 + '@lexical/clipboard': 0.11.2(lexical@0.11.2) + '@lexical/code': 0.11.2(lexical@0.11.2) + '@lexical/dragon': 0.11.2(lexical@0.11.2) + '@lexical/hashtag': 0.11.2(lexical@0.11.2) + '@lexical/history': 0.11.2(lexical@0.11.2) + '@lexical/link': 0.11.2(lexical@0.11.2) + '@lexical/list': 0.11.2(lexical@0.11.2) + '@lexical/mark': 0.11.2(lexical@0.11.2) + '@lexical/markdown': 0.11.2(@lexical/clipboard@0.11.2)(@lexical/selection@0.11.2)(lexical@0.11.2) + '@lexical/overflow': 0.11.2(lexical@0.11.2) + '@lexical/plain-text': 0.11.2(@lexical/clipboard@0.11.2)(@lexical/selection@0.11.2)(@lexical/utils@0.11.2)(lexical@0.11.2) + '@lexical/rich-text': 0.11.2(@lexical/clipboard@0.11.2)(@lexical/selection@0.11.2)(@lexical/utils@0.11.2)(lexical@0.11.2) + '@lexical/selection': 0.11.2(lexical@0.11.2) + '@lexical/table': 0.11.2(lexical@0.11.2) + '@lexical/text': 0.11.2(lexical@0.11.2) + '@lexical/utils': 0.11.2(lexical@0.11.2) + '@lexical/yjs': 0.11.2(lexical@0.11.2)(yjs@13.6.0) + lexical: 0.11.2 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-error-boundary: 3.1.4(react@18.2.0) @@ -3482,64 +3482,64 @@ packages: - yjs dev: false - /@lexical/rich-text@0.11.1(@lexical/clipboard@0.11.1)(@lexical/selection@0.11.1)(@lexical/utils@0.11.1)(lexical@0.11.1): - resolution: {integrity: sha512-cwko/7VuvHd8nuvt0GTaOxxpDpT24NnP15C0ZMJ6LVBgqKz7hOqhZZ6iAB/JOrivifF9nGBlC+jabZF75Gz3Fw==} + /@lexical/rich-text@0.11.2(@lexical/clipboard@0.11.2)(@lexical/selection@0.11.2)(@lexical/utils@0.11.2)(lexical@0.11.2): + resolution: {integrity: sha512-/CvQPfmeFwKXSF3nYL5DBT3YLI8RKoIw2Stq0xHjvgo0iFtu0jgfkfbm3b1qxEeENpxkBKkOpq6b9j4GT2avew==} peerDependencies: - '@lexical/clipboard': 0.11.1 - '@lexical/selection': 0.11.1 - '@lexical/utils': 0.11.1 - lexical: 0.11.1 + '@lexical/clipboard': 0.11.2 + '@lexical/selection': 0.11.2 + '@lexical/utils': 0.11.2 + lexical: 0.11.2 dependencies: - '@lexical/clipboard': 0.11.1(lexical@0.11.1) - '@lexical/selection': 0.11.1(lexical@0.11.1) - '@lexical/utils': 0.11.1(lexical@0.11.1) - lexical: 0.11.1 + '@lexical/clipboard': 0.11.2(lexical@0.11.2) + '@lexical/selection': 0.11.2(lexical@0.11.2) + '@lexical/utils': 0.11.2(lexical@0.11.2) + lexical: 0.11.2 dev: false - /@lexical/selection@0.11.1(lexical@0.11.1): - resolution: {integrity: sha512-sSiwWlu7LmxasdXAWcphtf5+ZK/6GRe3e/SAuCULfcrvYtEQrXIeyZt1IAvMxStELdQgf8vd0PzwajKcYjEM4A==} + /@lexical/selection@0.11.2(lexical@0.11.2): + resolution: {integrity: sha512-hRkanEZsTxEH4J9MBd6htvV10lXfSZLj2MrQrA8XIduHq5uVNwvCFQBALA+7pvnp12AamAuf/HeROzn93laiLw==} peerDependencies: - lexical: 0.11.1 + lexical: 0.11.2 dependencies: - lexical: 0.11.1 + lexical: 0.11.2 dev: false - /@lexical/table@0.11.1(lexical@0.11.1): - resolution: {integrity: sha512-v5HNW6jk4BHFsxsr8tPhAgokWUxL/ekvIHByXnikgEXVQiG7NPXMt7PWKVdOhH4Pn+OeF/OeeqcsTSh1/I8ZKQ==} + /@lexical/table@0.11.2(lexical@0.11.2): + resolution: {integrity: sha512-MxNKgO1XjbpkVakFgJ8dzkgIsvOJir9/jyJQ/dcePK+6RYnjzsSBHsKoZtdoZCVIWhmaV2HwDdHOdnbKpJ60Kw==} peerDependencies: - lexical: 0.11.1 + lexical: 0.11.2 dependencies: - '@lexical/utils': 0.11.1(lexical@0.11.1) - lexical: 0.11.1 + '@lexical/utils': 0.11.2(lexical@0.11.2) + lexical: 0.11.2 dev: false - /@lexical/text@0.11.1(lexical@0.11.1): - resolution: {integrity: sha512-TQ9vb24sStMicnJaGT9U6yUCVXTIVFHAzt5cMPtr7hK6b1CsJPMTRmsM7n5vIo9xnHM9SLLe01AxwL2O7I1QKg==} + /@lexical/text@0.11.2(lexical@0.11.2): + resolution: {integrity: sha512-XZmALZpzV+k9xmt2bhclKRTGhPlyZIvrDsxVADb+MEx6GpJk+VqYJqLgVpha5RiWtWKEjFXfU4pnPz56L3v/jA==} peerDependencies: - lexical: 0.11.1 + lexical: 0.11.2 dependencies: - lexical: 0.11.1 + lexical: 0.11.2 dev: false - /@lexical/utils@0.11.1(lexical@0.11.1): - resolution: {integrity: sha512-Sssv82m0yJgRBvShZDZnE4KNX+8O49sAI1Mc2kRKoTlSSbpmpEcrbJnz8S2bmbYcyHalP8+Id/GFziOclI3zUQ==} + /@lexical/utils@0.11.2(lexical@0.11.2): + resolution: {integrity: sha512-4wzEznp+Q4inCfF8XJmr+KWGGqFOk6o8dKH7DmyOBO7YjgzOsbX2Dz/ImVyjt0c3ROkLHisouBFb8GP5iWa0UA==} peerDependencies: - lexical: 0.11.1 + lexical: 0.11.2 dependencies: - '@lexical/list': 0.11.1(lexical@0.11.1) - '@lexical/selection': 0.11.1(lexical@0.11.1) - '@lexical/table': 0.11.1(lexical@0.11.1) - lexical: 0.11.1 + '@lexical/list': 0.11.2(lexical@0.11.2) + '@lexical/selection': 0.11.2(lexical@0.11.2) + '@lexical/table': 0.11.2(lexical@0.11.2) + lexical: 0.11.2 dev: false - /@lexical/yjs@0.11.1(lexical@0.11.1)(yjs@13.6.0): - resolution: {integrity: sha512-69Q462s4roXN6S8mk/ogMRZNyqLY024w38RzMVvJkY/W7sz30vPNX1RyEDHvTjgBhPXQqhRgmDUPT2V3lE7dRg==} + /@lexical/yjs@0.11.2(lexical@0.11.2)(yjs@13.6.0): + resolution: {integrity: sha512-4lDAXP4jscNuG72Q8Jgb67YVJKrMO50lEIsKs3aEHKqpV1L3/2sgxekNy4s5uI0fIpMXxbsec4uxG8MuJO3UgQ==} peerDependencies: - lexical: 0.11.1 + lexical: 0.11.2 yjs: '>=13.5.22' dependencies: - '@lexical/offset': 0.11.1(lexical@0.11.1) - lexical: 0.11.1 + '@lexical/offset': 0.11.2(lexical@0.11.2) + lexical: 0.11.2 yjs: 13.6.0 dev: false @@ -3623,7 +3623,7 @@ packages: react: '>=16' dependencies: '@types/mdx': 2.0.3 - '@types/react': 18.2.14 + '@types/react': 18.2.7 react: 18.2.0 dev: false @@ -3631,20 +3631,17 @@ packages: resolution: {integrity: sha512-twuSf1klb3k9wXI7IZhbZGtFCWvGD4wXTY2rmvzIgVhXhs7ISThrbNyutBx3jWIL8Y/Hk9+woytFz5QsgtcRKQ==} dev: false - /@next/eslint-plugin-next@13.4.4: - resolution: {integrity: sha512-5jnh7q6I15efnjR/rR+/TGTc9hn53g3JTbEjAMjmeQiExKqEUgIXqrHI5zlTNlNyzCPkBB860/ctxXheZaF2Vw==} - dependencies: - glob: 7.1.7 - dev: true - - /@next/eslint-plugin-next@13.4.8: - resolution: {integrity: sha512-cmfVHpxWjjcETFt2WHnoFU6EmY69QcPJRlRNAooQlNe53Ke90vg1Ci/dkPffryJZaxxiRziP9bQrV8lDVCn3Fw==} - dependencies: - glob: 7.1.7 + /@next/env@13.4.9: + resolution: {integrity: sha512-vuDRK05BOKfmoBYLNi2cujG2jrYbEod/ubSSyqgmEx9n/W3eZaJQdRNhTfumO+qmq/QTzLurW487n/PM/fHOkw==} dev: false - /@next/mdx@13.4.8(@mdx-js/loader@2.3.0)(@mdx-js/react@2.3.0): - resolution: {integrity: sha512-8h0mjPlSKC/KpREJOVhVht6cjXDp5oGBiJw6lYVbRBlFcGSLEt4aehHw8y/aZ2a5o2SThAjh5QOlVbeCz2N1ug==} + /@next/eslint-plugin-next@13.4.9: + resolution: {integrity: sha512-nDtGpa992tNyAkT/KmSMy7QkHfNZmGCBYhHtafU97DubqxzNdvLsqRtliQ4FU04CysRCtvP2hg8rRC1sAKUTUA==} + dependencies: + glob: 7.1.7 + + /@next/mdx@13.4.9(@mdx-js/loader@2.3.0)(@mdx-js/react@2.3.0): + resolution: {integrity: sha512-6ALqgOUsHWFWCl5LaYM96RzjBb/+Ca8IxVLhyZ4ukOZkFlYXInJmVLZhXWDxes7b8iVMMKZNgvNJR9dKLaGAQw==} peerDependencies: '@mdx-js/loader': '>=0.15.0' '@mdx-js/react': '>=0.15.0' @@ -3659,8 +3656,8 @@ packages: source-map: 0.7.4 dev: false - /@next/swc-darwin-arm64@13.4.8: - resolution: {integrity: sha512-MSFplVM4dTWOuKAUv0XR9gY7AWtMSBu9os9f+kp+s5rWhM1I2CdR3obFttd6366nS/W/VZxbPM5oEIdlIa46zA==} + /@next/swc-darwin-arm64@13.4.9: + resolution: {integrity: sha512-TVzGHpZoVBk3iDsTOQA/R6MGmFp0+17SWXMEWd6zG30AfuELmSSMe2SdPqxwXU0gbpWkJL1KgfLzy5ReN0crqQ==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] @@ -3668,8 +3665,8 @@ packages: dev: false optional: true - /@next/swc-darwin-x64@13.4.8: - resolution: {integrity: sha512-Reox+UXgonon9P0WNDE6w85DGtyBqGitl/ryznOvn6TvfxEaZIpTgeu3ZrJLU9dHSMhiK7YAM793mE/Zii2/Qw==} + /@next/swc-darwin-x64@13.4.9: + resolution: {integrity: sha512-aSfF1fhv28N2e7vrDZ6zOQ+IIthocfaxuMWGReB5GDriF0caTqtHttAvzOMgJgXQtQx6XhyaJMozLTSEXeNN+A==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] @@ -3677,8 +3674,8 @@ packages: dev: false optional: true - /@next/swc-linux-arm64-gnu@13.4.8: - resolution: {integrity: sha512-kdyzYvAYtqQVgzIKNN7e1rLU8aZv86FDSRqPlOkKZlvqudvTO0iohuTPmnEEDlECeBM6qRPShNffotDcU/R2KA==} + /@next/swc-linux-arm64-gnu@13.4.9: + resolution: {integrity: sha512-JhKoX5ECzYoTVyIy/7KykeO4Z2lVKq7HGQqvAH+Ip9UFn1MOJkOnkPRB7v4nmzqAoY+Je05Aj5wNABR1N18DMg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -3686,8 +3683,8 @@ packages: dev: false optional: true - /@next/swc-linux-arm64-musl@13.4.8: - resolution: {integrity: sha512-oWxx4yRkUGcR81XwbI+T0zhZ3bDF6V1aVLpG+C7hSG50ULpV8gC39UxVO22/bv93ZlcfMY4zl8xkz9Klct6dpQ==} + /@next/swc-linux-arm64-musl@13.4.9: + resolution: {integrity: sha512-OOn6zZBIVkm/4j5gkPdGn4yqQt+gmXaLaSjRSO434WplV8vo2YaBNbSHaTM9wJpZTHVDYyjzuIYVEzy9/5RVZw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -3695,8 +3692,8 @@ packages: dev: false optional: true - /@next/swc-linux-x64-gnu@13.4.8: - resolution: {integrity: sha512-anhtvuO6eE9YRhYnaEGTfbpH3L5gT/9qPFcNoi6xS432r/4DAtpJY8kNktqkTVevVIC/pVumqO8tV59PR3zbNg==} + /@next/swc-linux-x64-gnu@13.4.9: + resolution: {integrity: sha512-iA+fJXFPpW0SwGmx/pivVU+2t4zQHNOOAr5T378PfxPHY6JtjV6/0s1vlAJUdIHeVpX98CLp9k5VuKgxiRHUpg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -3704,8 +3701,8 @@ packages: dev: false optional: true - /@next/swc-linux-x64-musl@13.4.8: - resolution: {integrity: sha512-aR+J4wWfNgH1DwCCBNjan7Iumx0lLtn+2/rEYuhIrYLY4vnxqSVGz9u3fXcgUwo6Q9LT8NFkaqK1vPprdq+BXg==} + /@next/swc-linux-x64-musl@13.4.9: + resolution: {integrity: sha512-rlNf2WUtMM+GAQrZ9gMNdSapkVi3koSW3a+dmBVp42lfugWVvnyzca/xJlN48/7AGx8qu62WyO0ya1ikgOxh6A==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -3713,8 +3710,8 @@ packages: dev: false optional: true - /@next/swc-win32-arm64-msvc@13.4.8: - resolution: {integrity: sha512-OWBKIrJwQBTqrat0xhxEB/jcsjJR3+diD9nc/Y8F1mRdQzsn4bPsomgJyuqPVZs6Lz3K18qdIkvywmfSq75SsQ==} + /@next/swc-win32-arm64-msvc@13.4.9: + resolution: {integrity: sha512-5T9ybSugXP77nw03vlgKZxD99AFTHaX8eT1ayKYYnGO9nmYhJjRPxcjU5FyYI+TdkQgEpIcH7p/guPLPR0EbKA==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] @@ -3722,8 +3719,8 @@ packages: dev: false optional: true - /@next/swc-win32-ia32-msvc@13.4.8: - resolution: {integrity: sha512-agiPWGjUndXGTOn4ChbKipQXRA6/UPkywAWIkx7BhgGv48TiJfHTK6MGfBoL9tS6B4mtW39++uy0wFPnfD0JWg==} + /@next/swc-win32-ia32-msvc@13.4.9: + resolution: {integrity: sha512-ojZTCt1lP2ucgpoiFgrFj07uq4CZsq4crVXpLGgQfoFq00jPKRPgesuGPaz8lg1yLfvafkU3Jd1i8snKwYR3LA==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] @@ -3731,8 +3728,8 @@ packages: dev: false optional: true - /@next/swc-win32-x64-msvc@13.4.8: - resolution: {integrity: sha512-UIRKoByVKbuR6SnFG4JM8EMFlJrfEGuUQ1ihxzEleWcNwRMMiVaCj1KyqfTOW8VTQhJ0u8P1Ngg6q1RwnIBTtw==} + /@next/swc-win32-x64-msvc@13.4.9: + resolution: {integrity: sha512-QbT03FXRNdpuL+e9pLnu+XajZdm/TtIXVYY4lA9t+9l0fLZbHXDYEKitAqxrOj37o3Vx5ufxiRAniaIebYDCgw==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -3746,6 +3743,11 @@ packages: eslint-scope: 5.1.1 dev: true + /@nicolo-ribaudo/semver-v6@6.3.3: + resolution: {integrity: sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==} + hasBin: true + dev: true + /@noble/hashes@1.2.0: resolution: {integrity: sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==} dev: false @@ -3772,7 +3774,7 @@ packages: resolution: {integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==} dependencies: '@gar/promisify': 1.1.3 - semver: 7.5.3 + semver: 7.5.4 dev: true /@npmcli/move-file@1.1.2: @@ -3859,7 +3861,7 @@ packages: resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} dev: true - /@preact/async-loader@3.0.2(preact@10.15.1): + /@preact/async-loader@3.0.2(preact@10.16.0): resolution: {integrity: sha512-nYIdlAGbZ0+0/u5VJxQdLDgNFgEJmNLzctuqnCBZxW/EpLPMg8lcsnRsoXVl+O28ZZYhVhos3XiWM3KtuN0C3Q==} engines: {node: '>=8'} peerDependencies: @@ -3867,26 +3869,26 @@ packages: dependencies: kleur: 4.1.5 loader-utils: 2.0.4 - preact: 10.15.1 + preact: 10.16.0 dev: true /@prefresh/babel-plugin@0.4.4: resolution: {integrity: sha512-/EvgIFMDL+nd20WNvMO0JQnzIl1EJPgmSaSYrZUww7A+aSdKsi37aL07TljrZR1cBMuzFxcr4xvqsUQLFJEukw==} dev: true - /@prefresh/core@1.4.1(preact@10.15.1): + /@prefresh/core@1.4.1(preact@10.16.0): resolution: {integrity: sha512-og1vaBj3LMJagVncNrDb37Gqc0cWaUcDbpVt5hZtsN4i2Iwzd/5hyTsDHvlMirhSym3wL9ihU0Xa2VhSaOue7g==} peerDependencies: preact: ^10.0.0 dependencies: - preact: 10.15.1 + preact: 10.16.0 dev: true /@prefresh/utils@1.1.3: resolution: {integrity: sha512-Mb9abhJTOV4yCfkXrMrcgFiFT7MfNOw8sDa+XyZBdq/Ai2p4Zyxqsb3EgHLOEdHpMj6J9aiZ54W8H6FTam1u+A==} dev: true - /@prefresh/webpack@3.3.4(@prefresh/babel-plugin@0.4.4)(preact@10.15.1)(webpack@4.46.0): + /@prefresh/webpack@3.3.4(@prefresh/babel-plugin@0.4.4)(preact@10.16.0)(webpack@4.46.0): resolution: {integrity: sha512-RiXS/hvXDup5cQw/267kxkKie81kxaAB7SFbkr8ppshobDEzwgUN1tbGbHNx6Uari0Ql2XByC6HIgQGpaq2Q7w==} peerDependencies: '@prefresh/babel-plugin': ^0.4.0 @@ -3894,15 +3896,15 @@ packages: webpack: ^4.0.0 || ^5.0.0 dependencies: '@prefresh/babel-plugin': 0.4.4 - '@prefresh/core': 1.4.1(preact@10.15.1) + '@prefresh/core': 1.4.1(preact@10.16.0) '@prefresh/utils': 1.1.3 - preact: 10.15.1 + preact: 10.16.0 webpack: 4.46.0 dev: true - /@prisma/client@4.16.2(prisma@4.16.2): - resolution: {integrity: sha512-qCoEyxv1ZrQ4bKy39GnylE8Zq31IRmm8bNhNbZx7bF2cU5aiCCnSa93J2imF88MBjn7J9eUQneNxUQVJdl/rPQ==} - engines: {node: '>=14.17'} + /@prisma/client@5.0.0(prisma@5.0.0): + resolution: {integrity: sha512-XlO5ELNAQ7rV4cXIDJUNBEgdLwX3pjtt9Q/RHqDpGf43szpNJx2hJnggfFs7TKNx0cOFsl6KJCSfqr5duEU/bQ==} + engines: {node: '>=16.13'} requiresBuild: true peerDependencies: prisma: '*' @@ -3910,8 +3912,8 @@ packages: prisma: optional: true dependencies: - '@prisma/engines-version': 4.16.1-1.4bc8b6e1b66cb932731fb1bdbbc550d1e010de81 - prisma: 4.16.2 + '@prisma/engines-version': 4.17.0-26.6b0aef69b7cdfc787f822ecd7cdc76d5f1991584 + prisma: 5.0.0 dev: false /@prisma/debug@3.8.1: @@ -3963,19 +3965,19 @@ packages: - supports-color dev: true - /@prisma/engines-version@4.16.1-1.4bc8b6e1b66cb932731fb1bdbbc550d1e010de81: - resolution: {integrity: sha512-q617EUWfRIDTriWADZ4YiWRZXCa/WuhNgLTVd+HqWLffjMSPzyM5uOWoauX91wvQClSKZU4pzI4JJLQ9Kl62Qg==} + /@prisma/engines-version@4.17.0-26.6b0aef69b7cdfc787f822ecd7cdc76d5f1991584: + resolution: {integrity: sha512-HHiUF6NixsldsP3JROq07TYBLEjXFKr6PdH8H4gK/XAoTmIplOJBCgrIUMrsRAnEuGyRoRLXKXWUb943+PFoKQ==} dev: false - /@prisma/engines@4.16.2: - resolution: {integrity: sha512-vx1nxVvN4QeT/cepQce68deh/Turxy5Mr+4L4zClFuK1GlxN3+ivxfuv+ej/gvidWn1cE1uAhW7ALLNlYbRUAw==} - requiresBuild: true - /@prisma/engines@4.6.1: resolution: {integrity: sha512-3u2/XxvxB+Q7cMXHnKU0CpBiUK1QWqpgiBv28YDo1zOIJE3FCF8DI2vrp6vuwjGt5h0JGXDSvmSf4D4maVjJdw==} requiresBuild: true dev: true + /@prisma/engines@5.0.0: + resolution: {integrity: sha512-kyT/8fd0OpWmhAU5YnY7eP31brW1q1YrTGoblWrhQJDiN/1K+Z8S1kylcmtjqx5wsUGcP1HBWutayA/jtyt+sg==} + requiresBuild: true + /@prisma/fetch-engine@4.6.1: resolution: {integrity: sha512-0Nggqzd6J630wO65i5LjyYxarHSZL3mlN04j98Eff5tzhymwv6A8QEMMwuIJY3B5mQ+3ns3q6zZsJ3Ef063RUA==} dependencies: @@ -5020,7 +5022,7 @@ packages: slash: 3.0.0 dev: true - /@rollup/plugin-babel@5.3.1(@babel/core@7.22.5)(rollup@2.79.1): + /@rollup/plugin-babel@5.3.1(@babel/core@7.22.9)(rollup@2.79.1): resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} engines: {node: '>= 10.0.0'} peerDependencies: @@ -5031,7 +5033,7 @@ packages: '@types/babel__core': optional: true dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@babel/helper-module-imports': 7.18.6 '@rollup/pluginutils': 3.1.0(rollup@2.79.1) rollup: 2.79.1 @@ -5114,6 +5116,10 @@ packages: resolution: {integrity: sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==} dev: true + /@sinclair/typebox@0.27.8: + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + dev: true + /@sindresorhus/is@0.14.0: resolution: {integrity: sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==} engines: {node: '>=6'} @@ -5204,7 +5210,7 @@ packages: /@types/babel__core@7.20.0: resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==} dependencies: - '@babel/parser': 7.22.5 + '@babel/parser': 7.22.7 '@babel/types': 7.22.5 '@types/babel__generator': 7.6.4 '@types/babel__template': 7.4.1 @@ -5220,7 +5226,7 @@ packages: /@types/babel__template@7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: - '@babel/parser': 7.22.5 + '@babel/parser': 7.22.7 '@babel/types': 7.22.5 dev: true @@ -5238,32 +5244,32 @@ packages: resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} dependencies: '@types/connect': 3.4.35 - '@types/node': 20.3.3 + '@types/node': 20.4.2 dev: true /@types/bonjour@3.5.10: resolution: {integrity: sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==} dependencies: - '@types/node': 20.3.3 + '@types/node': 20.4.2 dev: true /@types/connect-history-api-fallback@1.3.5: resolution: {integrity: sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==} dependencies: '@types/express-serve-static-core': 4.17.33 - '@types/node': 20.3.3 + '@types/node': 20.4.2 dev: true /@types/connect@3.4.35: resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} dependencies: - '@types/node': 20.3.3 + '@types/node': 20.4.2 dev: true /@types/cross-spawn@6.0.2: resolution: {integrity: sha512-KuwNhp3eza+Rhu8IFI5HUXRP0LIhqH5cAjubUvGXXthh4YYBuP2ntwEX+Cz8GJoZUHlKo247wPWOfA9LYEq4cw==} dependencies: - '@types/node': 20.3.3 + '@types/node': 20.4.2 dev: true /@types/debug@4.1.7: @@ -5311,7 +5317,7 @@ packages: /@types/express-serve-static-core@4.17.33: resolution: {integrity: sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==} dependencies: - '@types/node': 20.3.3 + '@types/node': 20.4.2 '@types/qs': 6.9.7 '@types/range-parser': 1.2.4 dev: true @@ -5328,7 +5334,7 @@ packages: /@types/graceful-fs@4.1.5: resolution: {integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==} dependencies: - '@types/node': 20.3.3 + '@types/node': 20.4.2 dev: true /@types/hast@2.3.4: @@ -5347,7 +5353,7 @@ packages: /@types/http-proxy@1.17.10: resolution: {integrity: sha512-Qs5aULi+zV1bwKAg5z1PWnDXWmsn+LxIvUGv6E2+OOMYhclZMO+OXd9pYVf2gLykf2I7IV2u7oTHwChPNsvJ7g==} dependencies: - '@types/node': 20.3.3 + '@types/node': 20.4.2 dev: true /@types/is-ci@3.0.0: @@ -5372,8 +5378,8 @@ packages: '@types/istanbul-lib-report': 3.0.0 dev: true - /@types/jest@29.5.2: - resolution: {integrity: sha512-mSoZVJF5YzGVCk+FsDxzDuH7s+SCkzrgKZzf0Z0T2WudhBUPoF6ktoTPC4R0ZoCPCV5xUvuU6ias5NvxcBcMMg==} + /@types/jest@29.5.3: + resolution: {integrity: sha512-1Nq7YrO/vJE/FYnqYyw0FS8LdrjExSgIiHyKg7xPpn+yi8Q4huZryKnkJatN1ZRH89Kw2v33/8ZMB7DuZeSLlA==} dependencies: expect: 29.5.0 pretty-format: 29.5.0 @@ -5386,7 +5392,7 @@ packages: /@types/jsdom@20.0.1: resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} dependencies: - '@types/node': 20.3.3 + '@types/node': 20.4.2 '@types/tough-cookie': 4.0.2 parse5: 7.1.2 dev: true @@ -5400,7 +5406,7 @@ packages: /@types/keyv@3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: - '@types/node': 20.3.3 + '@types/node': 20.4.2 /@types/linkify-it@3.0.2: resolution: {integrity: sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==} @@ -5446,8 +5452,8 @@ packages: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} dev: true - /@types/node@20.3.3: - resolution: {integrity: sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==} + /@types/node@20.4.2: + resolution: {integrity: sha512-Dd0BYtWgnWJKwO1jkmTrzofjK2QXXcai0dmtzvIBhcA+RsG5h8R3xlyta0kGOZRNfL9GuRtb1knmPEhQrePCEw==} /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} @@ -5479,8 +5485,8 @@ packages: resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} dev: true - /@types/react-dom@18.2.6: - resolution: {integrity: sha512-2et4PDvg6PVCyS7fuTc4gPoksV58bW0RwSxWKcPRcHZf0PRUGq03TKcD/rUHe3azfV6/5/biUBJw+HhCQjaP0A==} + /@types/react-dom@18.2.7: + resolution: {integrity: sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==} dependencies: '@types/react': 18.2.14 dev: true @@ -5501,16 +5507,24 @@ packages: '@types/scheduler': 0.16.2 csstype: 3.1.1 + /@types/react@18.2.7: + resolution: {integrity: sha512-ojrXpSH2XFCmHm7Jy3q44nXDyN54+EYKP2lBhJ2bqfyPj6cIUW/FZW/Csdia34NQgq7KYcAlHi5184m4X88+yw==} + dependencies: + '@types/prop-types': 15.7.5 + '@types/scheduler': 0.16.2 + csstype: 3.1.1 + dev: false + /@types/resolve@1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: - '@types/node': 20.3.3 + '@types/node': 20.4.2 dev: true /@types/responselike@1.0.0: resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} dependencies: - '@types/node': 20.3.3 + '@types/node': 20.4.2 /@types/retry@0.12.0: resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} @@ -5533,13 +5547,13 @@ packages: resolution: {integrity: sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==} dependencies: '@types/mime': 3.0.1 - '@types/node': 20.3.3 + '@types/node': 20.4.2 dev: true /@types/sockjs@0.3.33: resolution: {integrity: sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==} dependencies: - '@types/node': 20.3.3 + '@types/node': 20.4.2 dev: true /@types/source-list-map@0.1.2: @@ -5575,7 +5589,7 @@ packages: /@types/webpack-sources@3.2.0: resolution: {integrity: sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==} dependencies: - '@types/node': 20.3.3 + '@types/node': 20.4.2 '@types/source-list-map': 0.1.2 source-map: 0.7.4 dev: true @@ -5583,7 +5597,7 @@ packages: /@types/webpack@4.41.33: resolution: {integrity: sha512-PPajH64Ft2vWevkerISMtnZ8rTs4YmRbs+23c402J0INmxDKCrhZNvwZYtzx96gY2wAtXdrK1BS2fiC8MlLr3g==} dependencies: - '@types/node': 20.3.3 + '@types/node': 20.4.2 '@types/tapable': 1.0.8 '@types/uglify-js': 3.17.1 '@types/webpack-sources': 3.2.0 @@ -5594,7 +5608,7 @@ packages: /@types/ws@8.5.4: resolution: {integrity: sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==} dependencies: - '@types/node': 20.3.3 + '@types/node': 20.4.2 dev: true /@types/yargs-parser@21.0.0: @@ -5613,29 +5627,32 @@ packages: '@types/yargs-parser': 21.0.0 dev: true - /@typescript-eslint/eslint-plugin@5.59.9(@typescript-eslint/parser@5.59.9)(eslint@8.44.0)(typescript@5.1.6): - resolution: {integrity: sha512-4uQIBq1ffXd2YvF7MAvehWKW3zVv/w+mSfRAu+8cKbfj3nwzyqJLNcZJpQ/WZ1HLbJDiowwmQ6NO+63nCA+fqA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/eslint-plugin@6.0.0(@typescript-eslint/parser@6.0.0)(eslint@8.44.0)(typescript@5.1.6): + resolution: {integrity: sha512-xuv6ghKGoiq856Bww/yVYnXGsKa588kY3M0XK7uUW/3fJNNULKRfZfSBkMTSpqGG/8ZCXCadfh8G/z/B4aqS/A==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.4.0 - '@typescript-eslint/parser': 5.59.9(eslint@8.44.0)(typescript@5.1.6) - '@typescript-eslint/scope-manager': 5.59.9 - '@typescript-eslint/type-utils': 5.59.9(eslint@8.44.0)(typescript@5.1.6) - '@typescript-eslint/utils': 5.59.9(eslint@8.44.0)(typescript@5.1.6) + '@eslint-community/regexpp': 4.5.1 + '@typescript-eslint/parser': 6.0.0(eslint@8.44.0)(typescript@5.1.6) + '@typescript-eslint/scope-manager': 6.0.0 + '@typescript-eslint/type-utils': 6.0.0(eslint@8.44.0)(typescript@5.1.6) + '@typescript-eslint/utils': 6.0.0(eslint@8.44.0)(typescript@5.1.6) + '@typescript-eslint/visitor-keys': 6.0.0 debug: 4.3.4 eslint: 8.44.0 grapheme-splitter: 1.0.4 - ignore: 5.2.1 + graphemer: 1.4.0 + ignore: 5.2.4 + natural-compare: 1.4.0 natural-compare-lite: 1.4.0 - semver: 7.3.8 - tsutils: 3.21.0(typescript@5.1.6) + semver: 7.5.4 + ts-api-utils: 1.0.1(typescript@5.1.6) typescript: 5.1.6 transitivePeerDependencies: - supports-color @@ -5654,26 +5671,6 @@ packages: - typescript dev: true - /@typescript-eslint/parser@5.59.8(eslint@8.41.0)(typescript@5.1.6): - resolution: {integrity: sha512-AnR19RjJcpjoeGojmwZtCwBX/RidqDZtzcbG3xHrmz0aHHoOcbWnpDllenRDmDvsV0RQ6+tbb09/kyc+UT9Orw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/scope-manager': 5.59.8 - '@typescript-eslint/types': 5.59.8 - '@typescript-eslint/typescript-estree': 5.59.8(typescript@5.1.6) - debug: 4.3.4 - eslint: 8.41.0 - typescript: 5.1.6 - transitivePeerDependencies: - - supports-color - dev: true - /@typescript-eslint/parser@5.59.9(eslint@8.44.0)(typescript@5.1.6): resolution: {integrity: sha512-FsPkRvBtcLQ/eVK1ivDiNYBjn3TGJdXy2fhXX+rc7czWl4ARwnpArwbihSOHI2Peg9WbtGHrbThfBUkZZGTtvQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -5693,6 +5690,27 @@ packages: transitivePeerDependencies: - supports-color + /@typescript-eslint/parser@6.0.0(eslint@8.44.0)(typescript@5.1.6): + resolution: {integrity: sha512-TNaufYSPrr1U8n+3xN+Yp9g31vQDJqhXzzPSHfQDLcaO4tU+mCfODPxCwf4H530zo7aUBE3QIdxCXamEnG04Tg==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 6.0.0 + '@typescript-eslint/types': 6.0.0 + '@typescript-eslint/typescript-estree': 6.0.0(typescript@5.1.6) + '@typescript-eslint/visitor-keys': 6.0.0 + debug: 4.3.4 + eslint: 8.44.0 + typescript: 5.1.6 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/scope-manager@5.54.0: resolution: {integrity: sha512-VTPYNZ7vaWtYna9M4oD42zENOBrb+ZYyCNdFs949GcN8Miwn37b8b7eMj+EZaq7VK9fx0Jd+JhmkhjFhvnovhg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -5701,14 +5719,6 @@ packages: '@typescript-eslint/visitor-keys': 5.54.0 dev: true - /@typescript-eslint/scope-manager@5.59.8: - resolution: {integrity: sha512-/w08ndCYI8gxGf+9zKf1vtx/16y8MHrZs5/tnjHhMLNSixuNcJavSX4wAiPf4aS5x41Es9YPCn44MIe4cxIlig==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.59.8 - '@typescript-eslint/visitor-keys': 5.59.8 - dev: true - /@typescript-eslint/scope-manager@5.59.9: resolution: {integrity: sha512-8RA+E+w78z1+2dzvK/tGZ2cpGigBZ58VMEHDZtpE1v+LLjzrYGc8mMaTONSxKyEkz3IuXFM0IqYiGHlCsmlZxQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -5716,21 +5726,29 @@ packages: '@typescript-eslint/types': 5.59.9 '@typescript-eslint/visitor-keys': 5.59.9 - /@typescript-eslint/type-utils@5.59.9(eslint@8.44.0)(typescript@5.1.6): - resolution: {integrity: sha512-ksEsT0/mEHg9e3qZu98AlSrONAQtrSTljL3ow9CGej8eRo7pe+yaC/mvTjptp23Xo/xIf2mLZKC6KPv4Sji26Q==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/scope-manager@6.0.0: + resolution: {integrity: sha512-o4q0KHlgCZTqjuaZ25nw5W57NeykZT9LiMEG4do/ovwvOcPnDO1BI5BQdCsUkjxFyrCL0cSzLjvIMfR9uo7cWg==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.0.0 + '@typescript-eslint/visitor-keys': 6.0.0 + dev: true + + /@typescript-eslint/type-utils@6.0.0(eslint@8.44.0)(typescript@5.1.6): + resolution: {integrity: sha512-ah6LJvLgkoZ/pyJ9GAdFkzeuMZ8goV6BH7eC9FPmojrnX9yNCIsfjB+zYcnex28YO3RFvBkV6rMV6WpIqkPvoQ==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - eslint: '*' + eslint: ^7.0.0 || ^8.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.59.9(typescript@5.1.6) - '@typescript-eslint/utils': 5.59.9(eslint@8.44.0)(typescript@5.1.6) + '@typescript-eslint/typescript-estree': 6.0.0(typescript@5.1.6) + '@typescript-eslint/utils': 6.0.0(eslint@8.44.0)(typescript@5.1.6) debug: 4.3.4 eslint: 8.44.0 - tsutils: 3.21.0(typescript@5.1.6) + ts-api-utils: 1.0.1(typescript@5.1.6) typescript: 5.1.6 transitivePeerDependencies: - supports-color @@ -5741,15 +5759,15 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/types@5.59.8: - resolution: {integrity: sha512-+uWuOhBTj/L6awoWIg0BlWy0u9TyFpCHrAuQ5bNfxDaZ1Ppb3mx6tUigc74LHcbHpOHuOTOJrBoAnhdHdaea1w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - /@typescript-eslint/types@5.59.9: resolution: {integrity: sha512-uW8H5NRgTVneSVTfiCVffBb8AbwWSKg7qcA4Ot3JI3MPCJGsB4Db4BhvAODIIYE5mNj7Q+VJkK7JxmRhk2Lyjw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/types@6.0.0: + resolution: {integrity: sha512-Zk9KDggyZM6tj0AJWYYKgF0yQyrcnievdhG0g5FqyU3Y2DRxJn4yWY21sJC0QKBckbsdKKjYDV2yVrrEvuTgxg==} + engines: {node: ^16.0.0 || >=18.0.0} + dev: true + /@typescript-eslint/typescript-estree@5.54.0(typescript@5.1.6): resolution: {integrity: sha512-X2rJG97Wj/VRo5YxJ8Qx26Zqf0RRKsVHd4sav8NElhbZzhpBI8jU54i6hfo9eheumj4oO4dcRN1B/zIVEqR/MQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -5764,28 +5782,7 @@ packages: debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.5.3 - tsutils: 3.21.0(typescript@5.1.6) - typescript: 5.1.6 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/typescript-estree@5.59.8(typescript@5.1.6): - resolution: {integrity: sha512-Jy/lPSDJGNow14vYu6IrW790p7HIf/SOV1Bb6lZ7NUkLc2iB2Z9elESmsaUtLw8kVqogSbtLH9tut5GCX1RLDg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/types': 5.59.8 - '@typescript-eslint/visitor-keys': 5.59.8 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.5.3 + semver: 7.5.4 tsutils: 3.21.0(typescript@5.1.6) typescript: 5.1.6 transitivePeerDependencies: @@ -5806,12 +5803,33 @@ packages: debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.5.3 + semver: 7.5.4 tsutils: 3.21.0(typescript@5.1.6) typescript: 5.1.6 transitivePeerDependencies: - supports-color + /@typescript-eslint/typescript-estree@6.0.0(typescript@5.1.6): + resolution: {integrity: sha512-2zq4O7P6YCQADfmJ5OTDQTP3ktajnXIRrYAtHM9ofto/CJZV3QfJ89GEaM2BNGeSr1KgmBuLhEkz5FBkS2RQhQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 6.0.0 + '@typescript-eslint/visitor-keys': 6.0.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.4 + ts-api-utils: 1.0.1(typescript@5.1.6) + typescript: 5.1.6 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/utils@5.54.0(eslint@8.44.0)(typescript@5.1.6): resolution: {integrity: sha512-cuwm8D/Z/7AuyAeJ+T0r4WZmlnlxQ8wt7C7fLpFlKMR+dY6QO79Cq1WpJhvZbMA4ZeZGHiRWnht7ZJ8qkdAunw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -5826,27 +5844,27 @@ packages: eslint: 8.44.0 eslint-scope: 5.1.1 eslint-utils: 3.0.0(eslint@8.44.0) - semver: 7.5.3 + semver: 7.5.4 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/utils@5.59.9(eslint@8.44.0)(typescript@5.1.6): - resolution: {integrity: sha512-1PuMYsju/38I5Ggblaeb98TOoUvjhRvLpLa1DoTOFaLWqaXl/1iQ1eGurTXgBY58NUdtfTXKP5xBq7q9NDaLKg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/utils@6.0.0(eslint@8.44.0)(typescript@5.1.6): + resolution: {integrity: sha512-SOr6l4NB6HE4H/ktz0JVVWNXqCJTOo/mHnvIte1ZhBQ0Cvd04x5uKZa3zT6tiodL06zf5xxdK8COiDvPnQ27JQ==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint: ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.2.0(eslint@8.44.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.44.0) '@types/json-schema': 7.0.11 '@types/semver': 7.5.0 - '@typescript-eslint/scope-manager': 5.59.9 - '@typescript-eslint/types': 5.59.9 - '@typescript-eslint/typescript-estree': 5.59.9(typescript@5.1.6) + '@typescript-eslint/scope-manager': 6.0.0 + '@typescript-eslint/types': 6.0.0 + '@typescript-eslint/typescript-estree': 6.0.0(typescript@5.1.6) eslint: 8.44.0 eslint-scope: 5.1.1 - semver: 7.5.3 + semver: 7.5.4 transitivePeerDependencies: - supports-color - typescript @@ -5860,14 +5878,6 @@ packages: eslint-visitor-keys: 3.4.1 dev: true - /@typescript-eslint/visitor-keys@5.59.8: - resolution: {integrity: sha512-pJhi2ms0x0xgloT7xYabil3SGGlojNNKjK/q6dB3Ey0uJLMjK2UDGJvHieiyJVW/7C3KI+Z4Q3pEHkm4ejA+xQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.59.8 - eslint-visitor-keys: 3.4.1 - dev: true - /@typescript-eslint/visitor-keys@5.59.9: resolution: {integrity: sha512-bT7s0td97KMaLwpEBckbzj/YohnvXtqbe2XgqNvTl6RJVakY5mvENOTPvw5u66nljfZxthESpDozs86U+oLY8Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -5875,6 +5885,14 @@ packages: '@typescript-eslint/types': 5.59.9 eslint-visitor-keys: 3.4.1 + /@typescript-eslint/visitor-keys@6.0.0: + resolution: {integrity: sha512-cvJ63l8c0yXdeT5POHpL0Q1cZoRcmRKFCtSjNGJxPkcP571EfZMcNbzWAc7oK3D1dRzm/V5EwtkANTZxqvuuUA==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.0.0 + eslint-visitor-keys: 3.4.1 + dev: true + /@webassemblyjs/ast@1.11.1: resolution: {integrity: sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==} dependencies: @@ -6140,32 +6158,32 @@ packages: /acorn-globals@7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} dependencies: - acorn: 8.9.0 + acorn: 8.10.0 acorn-walk: 8.2.0 dev: true - /acorn-import-assertions@1.8.0(acorn@8.9.0): + /acorn-import-assertions@1.8.0(acorn@8.10.0): resolution: {integrity: sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==} peerDependencies: acorn: ^8 dependencies: - acorn: 8.9.0 + acorn: 8.10.0 dev: false + /acorn-jsx@5.3.2(acorn@8.10.0): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.10.0 + /acorn-jsx@5.3.2(acorn@8.8.1): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: acorn: 8.8.1 - dev: true - - /acorn-jsx@5.3.2(acorn@8.9.0): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - acorn: 8.9.0 + dev: false /acorn-walk@6.2.0: resolution: {integrity: sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==} @@ -6183,14 +6201,13 @@ packages: hasBin: true dev: true - /acorn@8.8.1: - resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==} + /acorn@8.10.0: + resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} engines: {node: '>=0.4.0'} hasBin: true - dev: true - /acorn@8.9.0: - resolution: {integrity: sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==} + /acorn@8.8.1: + resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==} engines: {node: '>=0.4.0'} hasBin: true @@ -6440,7 +6457,7 @@ packages: resolution: {integrity: sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==} engines: {node: '>=10'} dependencies: - tslib: 2.5.3 + tslib: 2.5.2 dev: false /aria-query@4.2.2: @@ -6637,6 +6654,22 @@ packages: postcss-value-parser: 4.2.0 dev: true + /autoprefixer@10.4.14(postcss@8.4.25): + resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.21.5 + caniuse-lite: 1.0.30001466 + fraction.js: 4.2.0 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.25 + postcss-value-parser: 4.2.0 + dev: true + /aws-sign2@0.7.0: resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} dev: true @@ -6669,6 +6702,10 @@ packages: /axobject-query@2.2.0: resolution: {integrity: sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==} + /b4a@1.6.4: + resolution: {integrity: sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==} + dev: false + /babel-code-frame@6.26.0: resolution: {integrity: sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==} dependencies: @@ -6687,18 +6724,18 @@ packages: webpack: 4.46.0 dev: true - /babel-jest@27.5.1(@babel/core@7.22.5): + /babel-jest@27.5.1(@babel/core@7.22.9): resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 '@types/babel__core': 7.20.0 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 27.5.1(@babel/core@7.22.5) + babel-preset-jest: 27.5.1(@babel/core@7.22.9) chalk: 4.1.2 graceful-fs: 4.2.10 slash: 3.0.0 @@ -6706,17 +6743,17 @@ packages: - supports-color dev: true - /babel-jest@29.5.0(@babel/core@7.22.5): - resolution: {integrity: sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==} + /babel-jest@29.6.1(@babel/core@7.22.9): + resolution: {integrity: sha512-qu+3bdPEQC6KZSPz+4Fyjbga5OODNcp49j6GKzG1EKbkfyJBxEYGVUmVGpwCSeGouG52R4EgYMLb6p9YeEEQ4A==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.22.5 - '@jest/transform': 29.5.0 + '@babel/core': 7.22.9 + '@jest/transform': 29.6.1 '@types/babel__core': 7.20.0 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.5.0(@babel/core@7.22.5) + babel-preset-jest: 29.5.0(@babel/core@7.22.9) chalk: 4.1.2 graceful-fs: 4.2.10 slash: 3.0.0 @@ -6724,14 +6761,14 @@ packages: - supports-color dev: true - /babel-loader@8.3.0(@babel/core@7.22.5)(webpack@4.46.0): + /babel-loader@8.3.0(@babel/core@7.22.9)(webpack@4.46.0): resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==} engines: {node: '>= 8.9'} peerDependencies: '@babel/core': ^7.0.0 webpack: '>=2' dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 find-cache-dir: 3.3.2 loader-utils: 2.0.4 make-dir: 3.1.0 @@ -6781,38 +6818,38 @@ packages: resolve: 1.22.2 dev: true - /babel-plugin-polyfill-corejs2@0.4.3(@babel/core@7.22.5): - resolution: {integrity: sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==} + /babel-plugin-polyfill-corejs2@0.4.4(@babel/core@7.22.9): + resolution: {integrity: sha512-9WeK9snM1BfxB38goUEv2FLnA6ja07UMfazFHzCXUb3NyDZAwfXvQiURQ6guTTMeHcOsdknULm1PDhs4uWtKyA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.22.5 - '@babel/core': 7.22.5 - '@babel/helper-define-polyfill-provider': 0.4.0(@babel/core@7.22.5) - semver: 6.3.0 + '@babel/compat-data': 7.22.9 + '@babel/core': 7.22.9 + '@babel/helper-define-polyfill-provider': 0.4.1(@babel/core@7.22.9) + '@nicolo-ribaudo/semver-v6': 6.3.3 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-corejs3@0.8.1(@babel/core@7.22.5): - resolution: {integrity: sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==} + /babel-plugin-polyfill-corejs3@0.8.2(@babel/core@7.22.9): + resolution: {integrity: sha512-Cid+Jv1BrY9ReW9lIfNlNpsI53N+FN7gE+f73zLAUbr9C52W4gKLWSByx47pfDJsEysojKArqOtOKZSVIIUTuQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 - '@babel/helper-define-polyfill-provider': 0.4.0(@babel/core@7.22.5) + '@babel/core': 7.22.9 + '@babel/helper-define-polyfill-provider': 0.4.1(@babel/core@7.22.9) core-js-compat: 3.31.0 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-regenerator@0.5.0(@babel/core@7.22.5): - resolution: {integrity: sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==} + /babel-plugin-polyfill-regenerator@0.5.1(@babel/core@7.22.9): + resolution: {integrity: sha512-L8OyySuI6OSQ5hFy9O+7zFjyr4WhAfRjLIOkhQGYl+emwJkd/S4XXT1JpfrgR1jrQ1NcGiOh+yAdGlF8pnC3Jw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 - '@babel/helper-define-polyfill-provider': 0.4.0(@babel/core@7.22.5) + '@babel/core': 7.22.9 + '@babel/helper-define-polyfill-provider': 0.4.1(@babel/core@7.22.9) transitivePeerDependencies: - supports-color dev: true @@ -6825,55 +6862,55 @@ packages: resolution: {integrity: sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==} dev: true - /babel-plugin-transform-replace-expressions@0.2.0(@babel/core@7.22.5): + /babel-plugin-transform-replace-expressions@0.2.0(@babel/core@7.22.9): resolution: {integrity: sha512-Eh1rRd9hWEYgkgoA3D0kGp7xJ/wgVshgsqmq60iC4HVWD+Lux+fNHSHBa2v1Hsv+dHflShC71qKhiH40OiPtDA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 - '@babel/parser': 7.22.5 + '@babel/core': 7.22.9 + '@babel/parser': 7.22.7 dev: true - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.22.5): + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.22.9): resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.22.5 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.5) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.22.5) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.5) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.5) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.5) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.5) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.5) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.5) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.5) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.5) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.5) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.5) + '@babel/core': 7.22.9 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.9) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.22.9) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.9) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.9) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.9) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.9) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.9) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.9) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.9) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.9) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.9) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.9) dev: true - /babel-preset-jest@27.5.1(@babel/core@7.22.5): + /babel-preset-jest@27.5.1(@babel/core@7.22.9): resolution: {integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 babel-plugin-jest-hoist: 27.5.1 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.5) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.9) dev: true - /babel-preset-jest@29.5.0(@babel/core@7.22.5): + /babel-preset-jest@29.5.0(@babel/core@7.22.9): resolution: {integrity: sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.22.9 babel-plugin-jest-hoist: 29.5.0 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.5) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.9) dev: true /bail@2.0.2: @@ -7165,6 +7202,17 @@ packages: electron-to-chromium: 1.4.284 node-releases: 2.0.10 update-browserslist-db: 1.0.10(browserslist@4.21.5) + dev: true + + /browserslist@4.21.9: + resolution: {integrity: sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001512 + electron-to-chromium: 1.4.450 + node-releases: 2.0.12 + update-browserslist-db: 1.0.11(browserslist@4.21.9) /bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} @@ -7217,7 +7265,7 @@ packages: /builtins@5.0.1: resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} dependencies: - semver: 7.5.3 + semver: 7.5.4 dev: true /bundle-require@4.0.1(esbuild@0.18.10): @@ -7391,14 +7439,18 @@ packages: /caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} dependencies: - browserslist: 4.21.5 - caniuse-lite: 1.0.30001466 + browserslist: 4.21.9 + caniuse-lite: 1.0.30001512 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 dev: true /caniuse-lite@1.0.30001466: resolution: {integrity: sha512-ewtFBSfWjEmxUgNBSZItFSmVtvk9zkwkl1OfRZlKA8slltRN+/C/tuGVrF9styXkN36Yu3+SeJ1qkXxDEyNZ5w==} + dev: true + + /caniuse-lite@1.0.30001512: + resolution: {integrity: sha512-2S9nK0G/mE+jasCUsMPlARhRCts1ebcp2Ji8Y8PWi4NDE1iRdLCnEPHkEfeBrGC45L4isBx5ur3IQ6yTE2mRZw==} /capture-stack-trace@1.0.2: resolution: {integrity: sha512-X/WM2UQs6VMHUtjUDnZTRI+i1crWteJySFzr9UpGoQa4WQffXVTTXuekjl7TjZRlcF2XfjgITT0HxZ9RnxeT0w==} @@ -8049,7 +8101,7 @@ packages: /core-js-compat@3.31.0: resolution: {integrity: sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==} dependencies: - browserslist: 4.21.5 + browserslist: 4.21.9 dev: true /core-js-pure@3.26.1: @@ -8164,8 +8216,8 @@ packages: cross-spawn: 7.0.3 dev: true - /cross-fetch@3.1.6: - resolution: {integrity: sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==} + /cross-fetch@3.1.8: + resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} dependencies: node-fetch: 2.6.12 transitivePeerDependencies: @@ -8246,6 +8298,15 @@ packages: postcss: 8.4.24 dev: true + /css-declaration-sorter@6.3.1(postcss@8.4.25): + resolution: {integrity: sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==} + engines: {node: ^10 || ^12 || >=14} + peerDependencies: + postcss: ^8.0.9 + dependencies: + postcss: 8.4.25 + dev: true + /css-in-js-utils@3.1.0: resolution: {integrity: sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A==} dependencies: @@ -8258,16 +8319,16 @@ packages: peerDependencies: webpack: ^4.27.0 || ^5.0.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.24) + icss-utils: 5.1.0(postcss@8.4.25) loader-utils: 2.0.4 - postcss: 8.4.24 - postcss-modules-extract-imports: 3.0.0(postcss@8.4.24) - postcss-modules-local-by-default: 4.0.0(postcss@8.4.24) - postcss-modules-scope: 3.0.0(postcss@8.4.24) - postcss-modules-values: 4.0.0(postcss@8.4.24) + postcss: 8.4.25 + postcss-modules-extract-imports: 3.0.0(postcss@8.4.25) + postcss-modules-local-by-default: 4.0.0(postcss@8.4.25) + postcss-modules-scope: 3.0.0(postcss@8.4.25) + postcss-modules-values: 4.0.0(postcss@8.4.25) postcss-value-parser: 4.2.0 schema-utils: 3.1.1 - semver: 7.5.3 + semver: 7.5.4 webpack: 4.46.0 dev: true @@ -8408,6 +8469,44 @@ packages: postcss-unique-selectors: 5.1.1(postcss@8.4.24) dev: true + /cssnano-preset-default@5.2.13(postcss@8.4.25): + resolution: {integrity: sha512-PX7sQ4Pb+UtOWuz8A1d+Rbi+WimBIxJTRyBdgGp1J75VU0r/HFQeLnMYgHiCAp6AR4rqrc7Y4R+1Rjk3KJz6DQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + css-declaration-sorter: 6.3.1(postcss@8.4.25) + cssnano-utils: 3.1.0(postcss@8.4.25) + postcss: 8.4.25 + postcss-calc: 8.2.4(postcss@8.4.25) + postcss-colormin: 5.3.0(postcss@8.4.25) + postcss-convert-values: 5.1.3(postcss@8.4.25) + postcss-discard-comments: 5.1.2(postcss@8.4.25) + postcss-discard-duplicates: 5.1.0(postcss@8.4.25) + postcss-discard-empty: 5.1.1(postcss@8.4.25) + postcss-discard-overridden: 5.1.0(postcss@8.4.25) + postcss-merge-longhand: 5.1.7(postcss@8.4.25) + postcss-merge-rules: 5.1.3(postcss@8.4.25) + postcss-minify-font-values: 5.1.0(postcss@8.4.25) + postcss-minify-gradients: 5.1.1(postcss@8.4.25) + postcss-minify-params: 5.1.4(postcss@8.4.25) + postcss-minify-selectors: 5.2.1(postcss@8.4.25) + postcss-normalize-charset: 5.1.0(postcss@8.4.25) + postcss-normalize-display-values: 5.1.0(postcss@8.4.25) + postcss-normalize-positions: 5.1.1(postcss@8.4.25) + postcss-normalize-repeat-style: 5.1.1(postcss@8.4.25) + postcss-normalize-string: 5.1.0(postcss@8.4.25) + postcss-normalize-timing-functions: 5.1.0(postcss@8.4.25) + postcss-normalize-unicode: 5.1.1(postcss@8.4.25) + postcss-normalize-url: 5.1.0(postcss@8.4.25) + postcss-normalize-whitespace: 5.1.1(postcss@8.4.25) + postcss-ordered-values: 5.1.3(postcss@8.4.25) + postcss-reduce-initial: 5.1.1(postcss@8.4.25) + postcss-reduce-transforms: 5.1.0(postcss@8.4.25) + postcss-svgo: 5.1.0(postcss@8.4.25) + postcss-unique-selectors: 5.1.1(postcss@8.4.25) + dev: true + /cssnano-util-get-arguments@4.0.0: resolution: {integrity: sha512-6RIcwmV3/cBMG8Aj5gucQRsJb4vv4I4rn6YjPbVWd5+Pn/fuG+YseGvXGk00XLkoZkaj31QOD7vMUpNPC4FIuw==} engines: {node: '>=6.9.0'} @@ -8439,6 +8538,15 @@ packages: postcss: 8.4.24 dev: true + /cssnano-utils@3.1.0(postcss@8.4.25): + resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.25 + dev: true + /cssnano@4.1.11: resolution: {integrity: sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==} engines: {node: '>=6.9.0'} @@ -8461,6 +8569,18 @@ packages: yaml: 1.10.2 dev: true + /cssnano@5.1.14(postcss@8.4.25): + resolution: {integrity: sha512-Oou7ihiTocbKqi0J1bB+TRJIQX5RMR3JghA8hcWSw9mjBLQ5Y3RWqEDoYG3sRNlAbCIXpqMoZGbq5KDR3vdzgw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + cssnano-preset-default: 5.2.13(postcss@8.4.25) + lilconfig: 2.1.0 + postcss: 8.4.25 + yaml: 1.10.2 + dev: true + /csso@4.2.0: resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} engines: {node: '>=8.0.0'} @@ -8989,6 +9109,10 @@ packages: /electron-to-chromium@1.4.284: resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==} + dev: true + + /electron-to-chromium@1.4.450: + resolution: {integrity: sha512-BLG5HxSELlrMx7dJ2s+8SFlsCtJp37Zpk2VAxyC6CZtbc+9AJeZHfYHbrlSgdXp6saQ8StMqOTEDaBKgA7u1sw==} /elliptic@6.5.4: resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} @@ -9437,21 +9561,20 @@ packages: source-map: 0.6.1 dev: true - /escodegen@2.0.0: - resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==} + /escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} engines: {node: '>=6.0'} hasBin: true dependencies: esprima: 4.0.1 estraverse: 5.3.0 esutils: 2.0.3 - optionator: 0.8.3 optionalDependencies: source-map: 0.6.1 dev: true - /eslint-config-next@13.4.4(eslint@8.41.0)(typescript@5.1.6): - resolution: {integrity: sha512-z/PMbm6L0iC/fwISULxe8IVy4DtNqZk2wQY711o35klenq70O6ns82A8yuMVCFjHC0DIyB2lyugesRtuk9u8dQ==} + /eslint-config-next@13.4.9(eslint@8.44.0)(typescript@5.1.6): + resolution: {integrity: sha512-0fLtKRR268NArpqeXXwnLgMXPvF64YESQvptVg+RMLCaijKm3FICN9Y7Jc1p2o+yrWwE4DufJXDM/Vo53D1L7g==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 typescript: '>=3.3.1' @@ -9459,32 +9582,7 @@ packages: typescript: optional: true dependencies: - '@next/eslint-plugin-next': 13.4.4 - '@rushstack/eslint-patch': 1.2.0 - '@typescript-eslint/parser': 5.59.8(eslint@8.41.0)(typescript@5.1.6) - eslint: 8.41.0 - eslint-import-resolver-node: 0.3.6 - eslint-import-resolver-typescript: 3.5.2(eslint-plugin-import@2.26.0)(eslint@8.41.0) - eslint-plugin-import: 2.26.0(@typescript-eslint/parser@5.59.8)(eslint-import-resolver-typescript@3.5.2)(eslint@8.41.0) - eslint-plugin-jsx-a11y: 6.6.1(eslint@8.41.0) - eslint-plugin-react: 7.32.2(eslint@8.41.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.41.0) - typescript: 5.1.6 - transitivePeerDependencies: - - eslint-import-resolver-webpack - - supports-color - dev: true - - /eslint-config-next@13.4.8(eslint@8.44.0)(typescript@5.1.6): - resolution: {integrity: sha512-2hE0b6lHuhtHBX8VgEXi8v4G8PVrPUBMOSLCTq8qtcQ2qQOX7+uBOLK2kU4FD2qDZzyXNlhmuH+WLT5ptY4XLA==} - peerDependencies: - eslint: ^7.23.0 || ^8.0.0 - typescript: '>=3.3.1' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@next/eslint-plugin-next': 13.4.8 + '@next/eslint-plugin-next': 13.4.9 '@rushstack/eslint-patch': 1.2.0 '@typescript-eslint/parser': 5.59.9(eslint@8.44.0)(typescript@5.1.6) eslint: 8.44.0 @@ -9493,26 +9591,25 @@ packages: eslint-plugin-import: 2.26.0(@typescript-eslint/parser@5.59.9)(eslint-import-resolver-typescript@3.5.2)(eslint@8.44.0) eslint-plugin-jsx-a11y: 6.6.1(eslint@8.44.0) eslint-plugin-react: 7.32.2(eslint@8.44.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.44.0) + eslint-plugin-react-hooks: 5.0.0-canary-7118f5dd7-20230705(eslint@8.44.0) typescript: 5.1.6 transitivePeerDependencies: - eslint-import-resolver-webpack - supports-color - dev: false - /eslint-config-preact@1.3.0(@typescript-eslint/eslint-plugin@5.59.9)(eslint@8.44.0)(jest@29.5.0)(typescript@5.1.6): + /eslint-config-preact@1.3.0(@typescript-eslint/eslint-plugin@6.0.0)(eslint@8.44.0)(jest@29.6.1)(typescript@5.1.6): resolution: {integrity: sha512-yHYXg5qNzEJd3D/30AmsIW0W8MuY858KpApXp7xxBF08IYUljSKCOqMx+dVucXHQnAm7+11wOnMkgVHIBAechw==} peerDependencies: eslint: 6.x || 7.x || 8.x dependencies: - '@babel/core': 7.22.5 - '@babel/eslint-parser': 7.19.1(@babel/core@7.22.5)(eslint@8.44.0) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.5) - '@babel/plugin-syntax-decorators': 7.19.0(@babel/core@7.22.5) - '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.22.5) + '@babel/core': 7.22.9 + '@babel/eslint-parser': 7.19.1(@babel/core@7.22.9)(eslint@8.44.0) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.9) + '@babel/plugin-syntax-decorators': 7.19.0(@babel/core@7.22.9) + '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.22.9) eslint: 8.44.0 eslint-plugin-compat: 4.1.2(eslint@8.44.0) - eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.59.9)(eslint@8.44.0)(jest@29.5.0)(typescript@5.1.6) + eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@6.0.0)(eslint@8.44.0)(jest@29.6.1)(typescript@5.1.6) eslint-plugin-react: 7.32.2(eslint@8.44.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.44.0) transitivePeerDependencies: @@ -9522,22 +9619,22 @@ packages: - typescript dev: true - /eslint-config-prettier@8.8.0(eslint@8.41.0): + /eslint-config-prettier@8.8.0(eslint@8.44.0): resolution: {integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.41.0 + eslint: 8.44.0 dev: true - /eslint-config-turbo@1.10.3(eslint@8.41.0): - resolution: {integrity: sha512-ggzPfTJfMsMS383oZ4zfTP1zQvyMyiigOQJRUnLt1nqII6SKkTzdKZdwmXRDHU24KFwUfEFtT6c8vnm2VhL0uQ==} + /eslint-config-turbo@1.8.8(eslint@8.44.0): + resolution: {integrity: sha512-+yT22sHOT5iC1sbBXfLIdXfbZuiv9bAyOXsxTxFCWelTeFFnANqmuKB3x274CFvf7WRuZ/vYP/VMjzU9xnFnxA==} peerDependencies: eslint: '>6.6.0' dependencies: - eslint: 8.41.0 - eslint-plugin-turbo: 1.10.3(eslint@8.41.0) + eslint: 8.44.0 + eslint-plugin-turbo: 1.8.8(eslint@8.44.0) dev: true /eslint-import-resolver-node@0.3.6: @@ -9548,26 +9645,6 @@ packages: transitivePeerDependencies: - supports-color - /eslint-import-resolver-typescript@3.5.2(eslint-plugin-import@2.26.0)(eslint@8.41.0): - resolution: {integrity: sha512-zX4ebnnyXiykjhcBvKIf5TNvt8K7yX6bllTRZ14MiurKPjDpCAZujlszTdB8pcNXhZcOf+god4s9SjQa5GnytQ==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '*' - eslint-plugin-import: '*' - dependencies: - debug: 4.3.4 - enhanced-resolve: 5.12.0 - eslint: 8.41.0 - eslint-plugin-import: 2.26.0(@typescript-eslint/parser@5.59.8)(eslint-import-resolver-typescript@3.5.2)(eslint@8.41.0) - get-tsconfig: 4.4.0 - globby: 13.1.2 - is-core-module: 2.11.0 - is-glob: 4.0.3 - synckit: 0.8.4 - transitivePeerDependencies: - - supports-color - dev: true - /eslint-import-resolver-typescript@3.5.2(eslint-plugin-import@2.26.0)(eslint@8.44.0): resolution: {integrity: sha512-zX4ebnnyXiykjhcBvKIf5TNvt8K7yX6bllTRZ14MiurKPjDpCAZujlszTdB8pcNXhZcOf+god4s9SjQa5GnytQ==} engines: {node: ^14.18.0 || >=16.0.0} @@ -9586,37 +9663,6 @@ packages: synckit: 0.8.4 transitivePeerDependencies: - supports-color - dev: false - - /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.59.8)(eslint-import-resolver-node@0.3.6)(eslint-import-resolver-typescript@3.5.2)(eslint@8.41.0): - resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': 5.59.8(eslint@8.41.0)(typescript@5.1.6) - debug: 3.2.7 - eslint: 8.41.0 - eslint-import-resolver-node: 0.3.6 - eslint-import-resolver-typescript: 3.5.2(eslint-plugin-import@2.26.0)(eslint@8.41.0) - transitivePeerDependencies: - - supports-color - dev: true /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.59.9)(eslint-import-resolver-node@0.3.6)(eslint-import-resolver-typescript@3.5.2)(eslint@8.44.0): resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} @@ -9646,7 +9692,6 @@ packages: eslint-import-resolver-typescript: 3.5.2(eslint-plugin-import@2.26.0)(eslint@8.44.0) transitivePeerDependencies: - supports-color - dev: false /eslint-plugin-compat@4.1.2(eslint@8.44.0): resolution: {integrity: sha512-DNrQgDi5L4mAL4FdFboKBlSRg6MWfd75eA7K91lMjtP5ryN+O11qT2FDn7Z6zqy6sZ4sJawUR5V75qzB6l0CBg==} @@ -9656,45 +9701,14 @@ packages: dependencies: '@mdn/browser-compat-data': 5.2.39 ast-metadata-inferer: 0.7.0 - browserslist: 4.21.5 - caniuse-lite: 1.0.30001466 + browserslist: 4.21.9 + caniuse-lite: 1.0.30001512 eslint: 8.44.0 find-up: 5.0.0 lodash.memoize: 4.1.2 semver: 7.3.8 dev: true - /eslint-plugin-import@2.26.0(@typescript-eslint/parser@5.59.8)(eslint-import-resolver-typescript@3.5.2)(eslint@8.41.0): - resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - dependencies: - '@typescript-eslint/parser': 5.59.8(eslint@8.41.0)(typescript@5.1.6) - array-includes: 3.1.6 - array.prototype.flat: 1.3.1 - debug: 2.6.9 - doctrine: 2.1.0 - eslint: 8.41.0 - eslint-import-resolver-node: 0.3.6 - eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.59.8)(eslint-import-resolver-node@0.3.6)(eslint-import-resolver-typescript@3.5.2)(eslint@8.41.0) - has: 1.0.3 - is-core-module: 2.11.0 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.values: 1.1.6 - resolve: 1.22.2 - tsconfig-paths: 3.14.1 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - dev: true - /eslint-plugin-import@2.26.0(@typescript-eslint/parser@5.59.9)(eslint-import-resolver-typescript@3.5.2)(eslint@8.44.0): resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==} engines: {node: '>=4'} @@ -9724,9 +9738,8 @@ packages: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - dev: false - /eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.59.9)(eslint@8.44.0)(jest@29.5.0)(typescript@5.1.6): + /eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@6.0.0)(eslint@8.44.0)(jest@29.6.1)(typescript@5.1.6): resolution: {integrity: sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} peerDependencies: @@ -9739,37 +9752,15 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.59.9(@typescript-eslint/parser@5.59.9)(eslint@8.44.0)(typescript@5.1.6) + '@typescript-eslint/eslint-plugin': 6.0.0(@typescript-eslint/parser@6.0.0)(eslint@8.44.0)(typescript@5.1.6) '@typescript-eslint/experimental-utils': 5.54.0(eslint@8.44.0)(typescript@5.1.6) eslint: 8.44.0 - jest: 29.5.0 + jest: 29.6.1 transitivePeerDependencies: - supports-color - typescript dev: true - /eslint-plugin-jsx-a11y@6.6.1(eslint@8.41.0): - resolution: {integrity: sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==} - engines: {node: '>=4.0'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - dependencies: - '@babel/runtime': 7.21.0 - aria-query: 4.2.2 - array-includes: 3.1.6 - ast-types-flow: 0.0.7 - axe-core: 4.5.2 - axobject-query: 2.2.0 - damerau-levenshtein: 1.0.8 - emoji-regex: 9.2.2 - eslint: 8.41.0 - has: 1.0.3 - jsx-ast-utils: 3.3.3 - language-tags: 1.0.5 - minimatch: 3.1.2 - semver: 6.3.0 - dev: true - /eslint-plugin-jsx-a11y@6.6.1(eslint@8.44.0): resolution: {integrity: sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==} engines: {node: '>=4.0'} @@ -9789,17 +9780,7 @@ packages: jsx-ast-utils: 3.3.3 language-tags: 1.0.5 minimatch: 3.1.2 - semver: 6.3.0 - dev: false - - /eslint-plugin-react-hooks@4.6.0(eslint@8.41.0): - resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - dependencies: - eslint: 8.41.0 - dev: true + semver: 6.3.1 /eslint-plugin-react-hooks@4.6.0(eslint@8.44.0): resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} @@ -9808,31 +9789,16 @@ packages: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 dependencies: eslint: 8.44.0 - - /eslint-plugin-react@7.32.2(eslint@8.41.0): - resolution: {integrity: sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - dependencies: - array-includes: 3.1.6 - array.prototype.flatmap: 1.3.1 - array.prototype.tosorted: 1.1.1 - doctrine: 2.1.0 - eslint: 8.41.0 - estraverse: 5.3.0 - jsx-ast-utils: 3.3.3 - minimatch: 3.1.2 - object.entries: 1.1.6 - object.fromentries: 2.0.6 - object.hasown: 1.1.2 - object.values: 1.1.6 - prop-types: 15.8.1 - resolve: 2.0.0-next.4 - semver: 6.3.0 - string.prototype.matchall: 4.0.8 dev: true + /eslint-plugin-react-hooks@5.0.0-canary-7118f5dd7-20230705(eslint@8.44.0): + resolution: {integrity: sha512-AZYbMo/NW9chdL7vk6HQzQhT+PvTAEVqWk9ziruUoW2kAOcN5qNyelv70e0F1VNQAbvutOC9oc+xfWycI9FxDw==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + dependencies: + eslint: 8.44.0 + /eslint-plugin-react@7.32.2(eslint@8.44.0): resolution: {integrity: sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==} engines: {node: '>=4'} @@ -9853,15 +9819,15 @@ packages: object.values: 1.1.6 prop-types: 15.8.1 resolve: 2.0.0-next.4 - semver: 6.3.0 + semver: 6.3.1 string.prototype.matchall: 4.0.8 - /eslint-plugin-turbo@1.10.3(eslint@8.41.0): - resolution: {integrity: sha512-g3Mnnk7el1FqxHfqbE/MayLvCsYjA/vKmAnUj66kV4AlM7p/EZqdt42NMcMSKtDVEm0w+utQkkzWG2Xsa0Pd/g==} + /eslint-plugin-turbo@1.8.8(eslint@8.44.0): + resolution: {integrity: sha512-zqyTIvveOY4YU5jviDWw9GXHd4RiKmfEgwsjBrV/a965w0PpDwJgEUoSMB/C/dU310Sv9mF3DSdEjxjJLaw6rA==} peerDependencies: eslint: '>6.6.0' dependencies: - eslint: 8.41.0 + eslint: 8.44.0 dev: true /eslint-scope@4.0.3: @@ -9905,54 +9871,6 @@ packages: resolution: {integrity: sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - /eslint@8.41.0: - resolution: {integrity: sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true - dependencies: - '@eslint-community/eslint-utils': 4.2.0(eslint@8.41.0) - '@eslint-community/regexpp': 4.4.0 - '@eslint/eslintrc': 2.0.3 - '@eslint/js': 8.41.0 - '@humanwhocodes/config-array': 0.11.8 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4 - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.2.0 - eslint-visitor-keys: 3.4.1 - espree: 9.5.2 - esquery: 1.5.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.19.0 - graphemer: 1.4.0 - ignore: 5.2.1 - import-fresh: 3.3.0 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.1 - strip-ansi: 6.0.1 - strip-json-comments: 3.1.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - dev: true - /eslint@8.44.0: resolution: {integrity: sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -10005,21 +9923,12 @@ packages: engines: {node: '>=6'} dev: true - /espree@9.5.2: - resolution: {integrity: sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - acorn: 8.8.1 - acorn-jsx: 5.3.2(acorn@8.8.1) - eslint-visitor-keys: 3.4.1 - dev: true - /espree@9.6.0: resolution: {integrity: sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.9.0 - acorn-jsx: 5.3.2(acorn@8.9.0) + acorn: 8.10.0 + acorn-jsx: 5.3.2(acorn@8.10.0) eslint-visitor-keys: 3.4.1 /esprima@4.0.1: @@ -10181,7 +10090,19 @@ packages: jest-get-type: 29.4.3 jest-matcher-utils: 29.5.0 jest-message-util: 29.5.0 - jest-util: 29.5.0 + jest-util: 29.6.1 + dev: true + + /expect@29.6.1: + resolution: {integrity: sha512-XEdDLonERCU1n9uR56/Stx9OqojaLAQtZf9PrCHH9Hl8YXiEIka3H4NXJ3NOIBmQJTg7+j7buh34PMHfJujc8g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/expect-utils': 29.6.1 + '@types/node': 20.4.2 + jest-get-type: 29.4.3 + jest-matcher-utils: 29.6.1 + jest-message-util: 29.6.1 + jest-util: 29.6.1 dev: true /express@4.18.2: @@ -10276,6 +10197,10 @@ packages: /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + /fast-fifo@1.3.0: + resolution: {integrity: sha512-IgfweLvEpwyA4WgiQe9Nx6VV2QkML2NkvZnk1oKnIzXgXdWxuhF7zw4DvLTPZJn6PIUneiAXPF24QmoEqHTjyw==} + dev: false + /fast-glob@3.2.12: resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} engines: {node: '>=8.6.0'} @@ -10495,7 +10420,7 @@ packages: engines: {node: '>=14'} dependencies: cross-spawn: 7.0.3 - signal-exit: 4.0.2 + signal-exit: 4.0.1 dev: true /forever-agent@0.6.1: @@ -10830,16 +10755,16 @@ packages: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} dev: false - /glob@10.3.1: - resolution: {integrity: sha512-9BKYcEeIs7QwlCYs+Y3GBvqAMISufUS0i2ELd11zpZjxI5V9iyRj0HgzB5/cLf2NY4vcYBTYzJ7GIui7j/4DOw==} + /glob@10.2.6: + resolution: {integrity: sha512-U/rnDpXJGF414QQQZv5uVsabTVxMSwzS5CH0p3DRCIV6ownl4f7PzGnkGmvlum2wB+9RlJWJZ6ACU1INnBqiPA==} engines: {node: '>=16 || 14 >=14.17'} hasBin: true dependencies: foreground-child: 3.1.1 - jackspeak: 2.2.1 - minimatch: 9.0.2 - minipass: 6.0.2 - path-scurry: 1.10.0 + jackspeak: 2.2.0 + minimatch: 9.0.1 + minipass: 5.0.0 + path-scurry: 1.7.0 dev: true /glob@7.1.6: @@ -10936,7 +10861,7 @@ packages: dependencies: dir-glob: 3.0.1 fast-glob: 3.2.12 - ignore: 5.2.1 + ignore: 5.2.4 merge2: 1.4.1 slash: 4.0.0 @@ -11436,6 +11361,15 @@ packages: postcss: 8.4.24 dev: true + /icss-utils@5.1.0(postcss@8.4.25): + resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.25 + dev: true + /idb@7.1.1: resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} dev: true @@ -11458,6 +11392,10 @@ packages: resolution: {integrity: sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==} engines: {node: '>= 4'} + /ignore@5.2.4: + resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} + engines: {node: '>= 4'} + /import-cwd@3.0.0: resolution: {integrity: sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==} engines: {node: '>=8'} @@ -12111,11 +12049,11 @@ packages: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.22.5 - '@babel/parser': 7.22.5 + '@babel/core': 7.22.9 + '@babel/parser': 7.22.7 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 - semver: 6.3.0 + semver: 6.3.1 transitivePeerDependencies: - supports-color dev: true @@ -12148,8 +12086,8 @@ packages: istanbul-lib-report: 3.0.0 dev: true - /jackspeak@2.2.1: - resolution: {integrity: sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==} + /jackspeak@2.2.0: + resolution: {integrity: sha512-r5XBrqIJfwRIjRt/Xr5fv9Wh09qyhHfKnYddDlpM+ibRR20qrYActpCAgU6U+d53EOEjzkvxPMVHSlgR7leXrQ==} engines: {node: '>=14'} dependencies: '@isaacs/cliui': 8.0.2 @@ -12176,27 +12114,27 @@ packages: p-limit: 3.1.0 dev: true - /jest-circus@29.5.0: - resolution: {integrity: sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==} + /jest-circus@29.6.1: + resolution: {integrity: sha512-tPbYLEiBU4MYAL2XoZme/bgfUeotpDBd81lgHLCbDZZFaGmECk0b+/xejPFtmiBP87GgP/y4jplcRpbH+fgCzQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.5.0 - '@jest/expect': 29.5.0 - '@jest/test-result': 29.5.0 - '@jest/types': 29.5.0 - '@types/node': 20.3.3 + '@jest/environment': 29.6.1 + '@jest/expect': 29.6.1 + '@jest/test-result': 29.6.1 + '@jest/types': 29.6.1 + '@types/node': 20.4.2 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 is-generator-fn: 2.1.0 - jest-each: 29.5.0 - jest-matcher-utils: 29.5.0 - jest-message-util: 29.5.0 - jest-runtime: 29.5.0 - jest-snapshot: 29.5.0 - jest-util: 29.5.0 + jest-each: 29.6.1 + jest-matcher-utils: 29.6.1 + jest-message-util: 29.6.1 + jest-runtime: 29.6.1 + jest-snapshot: 29.6.1 + jest-util: 29.6.1 p-limit: 3.1.0 - pretty-format: 29.5.0 + pretty-format: 29.6.1 pure-rand: 6.0.1 slash: 3.0.0 stack-utils: 2.0.6 @@ -12204,8 +12142,8 @@ packages: - supports-color dev: true - /jest-cli@29.5.0: - resolution: {integrity: sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==} + /jest-cli@29.6.1: + resolution: {integrity: sha512-607dSgTA4ODIN6go9w6xY3EYkyPFGicx51a69H7yfvt7lN53xNswEVLovq+E77VsTRi5fWprLH0yl4DJgE8Ing==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: @@ -12214,16 +12152,16 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.5.0 - '@jest/test-result': 29.5.0 - '@jest/types': 29.5.0 + '@jest/core': 29.6.1 + '@jest/test-result': 29.6.1 + '@jest/types': 29.6.1 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.10 import-local: 3.1.0 - jest-config: 29.5.0(@types/node@20.3.3) - jest-util: 29.5.0 - jest-validate: 29.5.0 + jest-config: 29.6.1(@types/node@20.4.2) + jest-util: 29.6.1 + jest-validate: 29.6.1 prompts: 2.4.2 yargs: 17.7.2 transitivePeerDependencies: @@ -12232,8 +12170,8 @@ packages: - ts-node dev: true - /jest-config@29.5.0(@types/node@20.3.3): - resolution: {integrity: sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==} + /jest-config@29.6.1(@types/node@20.4.2): + resolution: {integrity: sha512-XdjYV2fy2xYixUiV2Wc54t3Z4oxYPAELUzWnV6+mcbq0rh742X2p52pii5A3oeRzYjLnQxCsZmp0qpI6klE2cQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@types/node': '*' @@ -12244,27 +12182,27 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.22.5 - '@jest/test-sequencer': 29.5.0 - '@jest/types': 29.5.0 - '@types/node': 20.3.3 - babel-jest: 29.5.0(@babel/core@7.22.5) + '@babel/core': 7.22.9 + '@jest/test-sequencer': 29.6.1 + '@jest/types': 29.6.1 + '@types/node': 20.4.2 + babel-jest: 29.6.1(@babel/core@7.22.9) chalk: 4.1.2 ci-info: 3.7.0 deepmerge: 4.2.2 glob: 7.2.3 graceful-fs: 4.2.10 - jest-circus: 29.5.0 - jest-environment-node: 29.5.0 + jest-circus: 29.6.1 + jest-environment-node: 29.6.1 jest-get-type: 29.4.3 jest-regex-util: 29.4.3 - jest-resolve: 29.5.0 - jest-runner: 29.5.0 - jest-util: 29.5.0 - jest-validate: 29.5.0 + jest-resolve: 29.6.1 + jest-runner: 29.6.1 + jest-util: 29.6.1 + jest-validate: 29.6.1 micromatch: 4.0.5 parse-json: 5.2.0 - pretty-format: 29.5.0 + pretty-format: 29.6.1 slash: 3.0.0 strip-json-comments: 3.1.1 transitivePeerDependencies: @@ -12278,7 +12216,17 @@ packages: chalk: 4.1.2 diff-sequences: 29.4.3 jest-get-type: 29.4.3 - pretty-format: 29.5.0 + pretty-format: 29.6.1 + dev: true + + /jest-diff@29.6.1: + resolution: {integrity: sha512-FsNCvinvl8oVxpNLttNQX7FAq7vR+gMDGj90tiP7siWw1UdakWUGqrylpsYrpvj908IYckm5Y0Q7azNAozU1Kg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + chalk: 4.1.2 + diff-sequences: 29.4.3 + jest-get-type: 29.4.3 + pretty-format: 29.6.1 dev: true /jest-docblock@29.4.3: @@ -12288,19 +12236,19 @@ packages: detect-newline: 3.1.0 dev: true - /jest-each@29.5.0: - resolution: {integrity: sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==} + /jest-each@29.6.1: + resolution: {integrity: sha512-n5eoj5eiTHpKQCAVcNTT7DRqeUmJ01hsAL0Q1SMiBHcBcvTKDELixQOGMCpqhbIuTcfC4kMfSnpmDqRgRJcLNQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.5.0 + '@jest/types': 29.6.1 chalk: 4.1.2 jest-get-type: 29.4.3 - jest-util: 29.5.0 - pretty-format: 29.5.0 + jest-util: 29.6.1 + pretty-format: 29.6.1 dev: true - /jest-environment-jsdom@29.5.0: - resolution: {integrity: sha512-/KG8yEK4aN8ak56yFVdqFDzKNHgF4BAymCx2LbPNPsUshUlfAl0eX402Xm1pt+eoG9SLZEUVifqXtX8SK74KCw==} + /jest-environment-jsdom@29.6.1: + resolution: {integrity: sha512-PoY+yLaHzVRhVEjcVKSfJ7wXmJW4UqPYNhR05h7u/TK0ouf6DmRNZFBL/Z00zgQMyWGMBXn69/FmOvhEJu8cIw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: canvas: ^2.5.0 @@ -12308,13 +12256,13 @@ packages: canvas: optional: true dependencies: - '@jest/environment': 29.5.0 - '@jest/fake-timers': 29.5.0 - '@jest/types': 29.5.0 + '@jest/environment': 29.6.1 + '@jest/fake-timers': 29.6.1 + '@jest/types': 29.6.1 '@types/jsdom': 20.0.1 - '@types/node': 20.3.3 - jest-mock: 29.5.0 - jest-util: 29.5.0 + '@types/node': 20.4.2 + jest-mock: 29.6.1 + jest-util: 29.6.1 jsdom: 20.0.3 transitivePeerDependencies: - bufferutil @@ -12322,22 +12270,22 @@ packages: - utf-8-validate dev: true - /jest-environment-node@29.5.0: - resolution: {integrity: sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==} + /jest-environment-node@29.6.1: + resolution: {integrity: sha512-ZNIfAiE+foBog24W+2caIldl4Irh8Lx1PUhg/GZ0odM1d/h2qORAsejiFc7zb+SEmYPn1yDZzEDSU5PmDkmVLQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.5.0 - '@jest/fake-timers': 29.5.0 - '@jest/types': 29.5.0 - '@types/node': 20.3.3 - jest-mock: 29.5.0 - jest-util: 29.5.0 + '@jest/environment': 29.6.1 + '@jest/fake-timers': 29.6.1 + '@jest/types': 29.6.1 + '@types/node': 20.4.2 + jest-mock: 29.6.1 + jest-util: 29.6.1 dev: true /jest-fetch-mock@3.0.3: resolution: {integrity: sha512-Ux1nWprtLrdrH4XwE7O7InRY6psIi3GOsqNESJgMJ+M5cv4A8Lh7SN9d2V2kKRZ8ebAfcd1LNyZguAOb6JiDqw==} dependencies: - cross-fetch: 3.1.6 + cross-fetch: 3.1.8 promise-polyfill: 8.3.0 transitivePeerDependencies: - encoding @@ -12354,7 +12302,7 @@ packages: dependencies: '@jest/types': 27.5.1 '@types/graceful-fs': 4.1.5 - '@types/node': 20.3.3 + '@types/node': 20.4.2 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.10 @@ -12368,31 +12316,31 @@ packages: fsevents: 2.3.2 dev: true - /jest-haste-map@29.5.0: - resolution: {integrity: sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==} + /jest-haste-map@29.6.1: + resolution: {integrity: sha512-0m7f9PZXxOCk1gRACiVgX85knUKPKLPg4oRCjLoqIm9brTHXaorMA0JpmtmVkQiT8nmXyIVoZd/nnH1cfC33ig==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.5.0 + '@jest/types': 29.6.1 '@types/graceful-fs': 4.1.5 - '@types/node': 20.3.3 + '@types/node': 20.4.2 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.10 jest-regex-util: 29.4.3 - jest-util: 29.5.0 - jest-worker: 29.5.0 + jest-util: 29.6.1 + jest-worker: 29.6.1 micromatch: 4.0.5 walker: 1.0.8 optionalDependencies: fsevents: 2.3.2 dev: true - /jest-leak-detector@29.5.0: - resolution: {integrity: sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==} + /jest-leak-detector@29.6.1: + resolution: {integrity: sha512-OrxMNyZirpOEwkF3UHnIkAiZbtkBWiye+hhBweCHkVbCgyEy71Mwbb5zgeTNYWJBi1qgDVfPC1IwO9dVEeTLwQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-get-type: 29.4.3 - pretty-format: 29.5.0 + pretty-format: 29.6.1 dev: true /jest-matcher-utils@29.5.0: @@ -12402,7 +12350,17 @@ packages: chalk: 4.1.2 jest-diff: 29.5.0 jest-get-type: 29.4.3 - pretty-format: 29.5.0 + pretty-format: 29.6.1 + dev: true + + /jest-matcher-utils@29.6.1: + resolution: {integrity: sha512-SLaztw9d2mfQQKHmJXKM0HCbl2PPVld/t9Xa6P9sgiExijviSp7TnZZpw2Fpt+OI3nwUO/slJbOfzfUMKKC5QA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + chalk: 4.1.2 + jest-diff: 29.6.1 + jest-get-type: 29.4.3 + pretty-format: 29.6.1 dev: true /jest-message-util@27.5.1: @@ -12425,26 +12383,41 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/code-frame': 7.22.5 - '@jest/types': 29.5.0 + '@jest/types': 29.6.1 '@types/stack-utils': 2.0.1 chalk: 4.1.2 graceful-fs: 4.2.10 micromatch: 4.0.5 - pretty-format: 29.5.0 + pretty-format: 29.6.1 slash: 3.0.0 stack-utils: 2.0.6 dev: true - /jest-mock@29.5.0: - resolution: {integrity: sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==} + /jest-message-util@29.6.1: + resolution: {integrity: sha512-KoAW2zAmNSd3Gk88uJ56qXUWbFk787QKmjjJVOjtGFmmGSZgDBrlIL4AfQw1xyMYPNVD7dNInfIbur9B2rd/wQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.5.0 - '@types/node': 20.3.3 - jest-util: 29.5.0 + '@babel/code-frame': 7.22.5 + '@jest/types': 29.6.1 + '@types/stack-utils': 2.0.1 + chalk: 4.1.2 + graceful-fs: 4.2.10 + micromatch: 4.0.5 + pretty-format: 29.6.1 + slash: 3.0.0 + stack-utils: 2.0.6 dev: true - /jest-pnp-resolver@1.2.3(jest-resolve@29.5.0): + /jest-mock@29.6.1: + resolution: {integrity: sha512-brovyV9HBkjXAEdRooaTQK42n8usKoSRR3gihzUpYeV/vwqgSoNfrksO7UfSACnPmxasO/8TmHM3w9Hp3G1dgw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.1 + '@types/node': 20.4.2 + jest-util: 29.6.1 + dev: true + + /jest-pnp-resolver@1.2.3(jest-resolve@29.6.1): resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} engines: {node: '>=6'} peerDependencies: @@ -12453,28 +12426,28 @@ packages: jest-resolve: optional: true dependencies: - jest-resolve: 29.5.0 + jest-resolve: 29.6.1 dev: true - /jest-preset-preact@4.0.5(jest@29.5.0)(preact-render-to-string@6.1.0)(preact@10.15.1): + /jest-preset-preact@4.0.5(jest@29.6.1)(preact-render-to-string@6.2.0)(preact@10.16.0): resolution: {integrity: sha512-MnU7mfpnwopJkdx0WoEyRmrNDIvRN+w6sOur0zEhaRYYMo0gJM7UdZHWTV8k6uo0+ypY+m0kQW6kMukUx4v8JQ==} peerDependencies: jest: 26.x || 27.x preact: 10.x preact-render-to-string: 5.x dependencies: - '@babel/core': 7.22.5 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.5) - '@babel/plugin-transform-react-jsx': 7.19.0(@babel/core@7.22.5) - '@babel/preset-env': 7.22.5(@babel/core@7.22.5) - '@babel/preset-typescript': 7.22.5(@babel/core@7.22.5) - babel-jest: 27.5.1(@babel/core@7.22.5) + '@babel/core': 7.22.9 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.9) + '@babel/plugin-transform-react-jsx': 7.19.0(@babel/core@7.22.9) + '@babel/preset-env': 7.22.9(@babel/core@7.22.9) + '@babel/preset-typescript': 7.22.5(@babel/core@7.22.9) + babel-jest: 27.5.1(@babel/core@7.22.9) identity-obj-proxy: 3.0.0 isomorphic-unfetch: 3.1.0 - jest: 29.5.0 - jest-watch-typeahead: 0.6.5(jest@29.5.0) - preact: 10.15.1 - preact-render-to-string: 6.1.0(preact@10.15.1) + jest: 29.6.1 + jest-watch-typeahead: 0.6.5(jest@29.6.1) + preact: 10.16.0 + preact-render-to-string: 6.2.0(preact@10.16.0) transitivePeerDependencies: - encoding - supports-color @@ -12490,84 +12463,84 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /jest-resolve-dependencies@29.5.0: - resolution: {integrity: sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==} + /jest-resolve-dependencies@29.6.1: + resolution: {integrity: sha512-BbFvxLXtcldaFOhNMXmHRWx1nXQO5LoXiKSGQcA1LxxirYceZT6ch8KTE1bK3X31TNG/JbkI7OkS/ABexVahiw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-regex-util: 29.4.3 - jest-snapshot: 29.5.0 + jest-snapshot: 29.6.1 transitivePeerDependencies: - supports-color dev: true - /jest-resolve@29.5.0: - resolution: {integrity: sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==} + /jest-resolve@29.6.1: + resolution: {integrity: sha512-AeRkyS8g37UyJiP9w3mmI/VXU/q8l/IH52vj/cDAyScDcemRbSBhfX/NMYIGilQgSVwsjxrCHf3XJu4f+lxCMg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 graceful-fs: 4.2.10 - jest-haste-map: 29.5.0 - jest-pnp-resolver: 1.2.3(jest-resolve@29.5.0) - jest-util: 29.5.0 - jest-validate: 29.5.0 + jest-haste-map: 29.6.1 + jest-pnp-resolver: 1.2.3(jest-resolve@29.6.1) + jest-util: 29.6.1 + jest-validate: 29.6.1 resolve: 1.22.2 resolve.exports: 2.0.2 slash: 3.0.0 dev: true - /jest-runner@29.5.0: - resolution: {integrity: sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==} + /jest-runner@29.6.1: + resolution: {integrity: sha512-tw0wb2Q9yhjAQ2w8rHRDxteryyIck7gIzQE4Reu3JuOBpGp96xWgF0nY8MDdejzrLCZKDcp8JlZrBN/EtkQvPQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/console': 29.5.0 - '@jest/environment': 29.5.0 - '@jest/test-result': 29.5.0 - '@jest/transform': 29.5.0 - '@jest/types': 29.5.0 - '@types/node': 20.3.3 + '@jest/console': 29.6.1 + '@jest/environment': 29.6.1 + '@jest/test-result': 29.6.1 + '@jest/transform': 29.6.1 + '@jest/types': 29.6.1 + '@types/node': 20.4.2 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.10 jest-docblock: 29.4.3 - jest-environment-node: 29.5.0 - jest-haste-map: 29.5.0 - jest-leak-detector: 29.5.0 - jest-message-util: 29.5.0 - jest-resolve: 29.5.0 - jest-runtime: 29.5.0 - jest-util: 29.5.0 - jest-watcher: 29.5.0 - jest-worker: 29.5.0 + jest-environment-node: 29.6.1 + jest-haste-map: 29.6.1 + jest-leak-detector: 29.6.1 + jest-message-util: 29.6.1 + jest-resolve: 29.6.1 + jest-runtime: 29.6.1 + jest-util: 29.6.1 + jest-watcher: 29.6.1 + jest-worker: 29.6.1 p-limit: 3.1.0 source-map-support: 0.5.13 transitivePeerDependencies: - supports-color dev: true - /jest-runtime@29.5.0: - resolution: {integrity: sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==} + /jest-runtime@29.6.1: + resolution: {integrity: sha512-D6/AYOA+Lhs5e5il8+5pSLemjtJezUr+8zx+Sn8xlmOux3XOqx4d8l/2udBea8CRPqqrzhsKUsN/gBDE/IcaPQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.5.0 - '@jest/fake-timers': 29.5.0 - '@jest/globals': 29.5.0 - '@jest/source-map': 29.4.3 - '@jest/test-result': 29.5.0 - '@jest/transform': 29.5.0 - '@jest/types': 29.5.0 - '@types/node': 20.3.3 + '@jest/environment': 29.6.1 + '@jest/fake-timers': 29.6.1 + '@jest/globals': 29.6.1 + '@jest/source-map': 29.6.0 + '@jest/test-result': 29.6.1 + '@jest/transform': 29.6.1 + '@jest/types': 29.6.1 + '@types/node': 20.4.2 chalk: 4.1.2 cjs-module-lexer: 1.2.2 collect-v8-coverage: 1.0.1 glob: 7.2.3 graceful-fs: 4.2.10 - jest-haste-map: 29.5.0 - jest-message-util: 29.5.0 - jest-mock: 29.5.0 + jest-haste-map: 29.6.1 + jest-message-util: 29.6.1 + jest-mock: 29.6.1 jest-regex-util: 29.4.3 - jest-resolve: 29.5.0 - jest-snapshot: 29.5.0 - jest-util: 29.5.0 + jest-resolve: 29.6.1 + jest-snapshot: 29.6.1 + jest-util: 29.6.1 slash: 3.0.0 strip-bom: 4.0.0 transitivePeerDependencies: @@ -12578,37 +12551,35 @@ packages: resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@types/node': 20.3.3 + '@types/node': 20.4.2 graceful-fs: 4.2.10 dev: true - /jest-snapshot@29.5.0: - resolution: {integrity: sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==} + /jest-snapshot@29.6.1: + resolution: {integrity: sha512-G4UQE1QQ6OaCgfY+A0uR1W2AY0tGXUPQpoUClhWHq1Xdnx1H6JOrC2nH5lqnOEqaDgbHFgIwZ7bNq24HpB180A==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.22.5 - '@babel/generator': 7.22.5 - '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.5) - '@babel/traverse': 7.22.5 + '@babel/core': 7.22.9 + '@babel/generator': 7.22.9 + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.9) '@babel/types': 7.22.5 - '@jest/expect-utils': 29.5.0 - '@jest/transform': 29.5.0 - '@jest/types': 29.5.0 - '@types/babel__traverse': 7.18.3 + '@jest/expect-utils': 29.6.1 + '@jest/transform': 29.6.1 + '@jest/types': 29.6.1 '@types/prettier': 2.7.2 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.5) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.9) chalk: 4.1.2 - expect: 29.5.0 + expect: 29.6.1 graceful-fs: 4.2.10 - jest-diff: 29.5.0 + jest-diff: 29.6.1 jest-get-type: 29.4.3 - jest-matcher-utils: 29.5.0 - jest-message-util: 29.5.0 - jest-util: 29.5.0 + jest-matcher-utils: 29.6.1 + jest-message-util: 29.6.1 + jest-util: 29.6.1 natural-compare: 1.4.0 - pretty-format: 29.5.0 - semver: 7.5.3 + pretty-format: 29.6.1 + semver: 7.5.4 transitivePeerDependencies: - supports-color dev: true @@ -12618,38 +12589,38 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 20.3.3 + '@types/node': 20.4.2 chalk: 4.1.2 ci-info: 3.7.0 graceful-fs: 4.2.10 picomatch: 2.3.1 dev: true - /jest-util@29.5.0: - resolution: {integrity: sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==} + /jest-util@29.6.1: + resolution: {integrity: sha512-NRFCcjc+/uO3ijUVyNOQJluf8PtGCe/W6cix36+M3cTFgiYqFOOW5MgN4JOOcvbUhcKTYVd1CvHz/LWi8d16Mg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.5.0 - '@types/node': 20.3.3 + '@jest/types': 29.6.1 + '@types/node': 20.4.2 chalk: 4.1.2 ci-info: 3.7.0 graceful-fs: 4.2.10 picomatch: 2.3.1 dev: true - /jest-validate@29.5.0: - resolution: {integrity: sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==} + /jest-validate@29.6.1: + resolution: {integrity: sha512-r3Ds69/0KCN4vx4sYAbGL1EVpZ7MSS0vLmd3gV78O+NAx3PDQQukRU5hNHPXlyqCgFY8XUk7EuTMLugh0KzahA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.5.0 + '@jest/types': 29.6.1 camelcase: 6.3.0 chalk: 4.1.2 jest-get-type: 29.4.3 leven: 3.1.0 - pretty-format: 29.5.0 + pretty-format: 29.6.1 dev: true - /jest-watch-typeahead@0.6.5(jest@29.5.0): + /jest-watch-typeahead@0.6.5(jest@29.6.1): resolution: {integrity: sha512-GIbV6h37/isatMDtqZlA8Q5vC6T3w+5qdvtF+3LIkPc58zEWzbKmTHvlUIp3wvBm400RzrQWcVPcsAJqKWu7XQ==} engines: {node: '>=10'} peerDependencies: @@ -12657,7 +12628,7 @@ packages: dependencies: ansi-escapes: 4.3.2 chalk: 4.1.2 - jest: 29.5.0 + jest: 29.6.1 jest-regex-util: 27.5.1 jest-watcher: 27.5.1 slash: 3.0.0 @@ -12671,24 +12642,24 @@ packages: dependencies: '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 20.3.3 + '@types/node': 20.4.2 ansi-escapes: 4.3.2 chalk: 4.1.2 jest-util: 27.5.1 string-length: 4.0.2 dev: true - /jest-watcher@29.5.0: - resolution: {integrity: sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==} + /jest-watcher@29.6.1: + resolution: {integrity: sha512-d4wpjWTS7HEZPaaj8m36QiaP856JthRZkrgcIY/7ISoUWPIillrXM23WPboZVLbiwZBt4/qn2Jke84Sla6JhFA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/test-result': 29.5.0 - '@jest/types': 29.5.0 - '@types/node': 20.3.3 + '@jest/test-result': 29.6.1 + '@jest/types': 29.6.1 + '@types/node': 20.4.2 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 - jest-util: 29.5.0 + jest-util: 29.6.1 string-length: 4.0.2 dev: true @@ -12696,7 +12667,7 @@ packages: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 20.3.3 + '@types/node': 20.4.2 merge-stream: 2.0.0 supports-color: 7.2.0 dev: true @@ -12705,22 +12676,22 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 20.3.3 + '@types/node': 20.4.2 merge-stream: 2.0.0 supports-color: 8.1.1 - /jest-worker@29.5.0: - resolution: {integrity: sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==} + /jest-worker@29.6.1: + resolution: {integrity: sha512-U+Wrbca7S8ZAxAe9L6nb6g8kPdia5hj32Puu5iOqBCMTMWFHXuK6dOV2IFrpedbTV8fjMFLdWNttQTBL6u2MRA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 20.3.3 - jest-util: 29.5.0 + '@types/node': 20.4.2 + jest-util: 29.6.1 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true - /jest@29.5.0: - resolution: {integrity: sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==} + /jest@29.6.1: + resolution: {integrity: sha512-Nirw5B4nn69rVUZtemCQhwxOBhm0nsp3hmtF4rzCeWD7BkjAXRIji7xWQfnTNbz9g0aVsBX6aZK3n+23LM6uDw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: @@ -12729,10 +12700,10 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.5.0 - '@jest/types': 29.5.0 + '@jest/core': 29.6.1 + '@jest/types': 29.6.1 import-local: 3.1.0 - jest-cli: 29.5.0 + jest-cli: 29.6.1 transitivePeerDependencies: - '@types/node' - supports-color @@ -12826,14 +12797,14 @@ packages: optional: true dependencies: abab: 2.0.6 - acorn: 8.9.0 + acorn: 8.10.0 acorn-globals: 7.0.1 cssom: 0.5.0 cssstyle: 2.3.0 data-urls: 3.0.2 decimal.js: 10.4.3 domexception: 4.0.0 - escodegen: 2.0.0 + escodegen: 2.1.0 form-data: 4.0.0 html-encoding-sniffer: 3.0.0 http-proxy-agent: 5.0.0 @@ -12931,14 +12902,14 @@ packages: engines: {node: '>=0.10.0'} dev: true - /jsonwebtoken@9.0.0: - resolution: {integrity: sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==} + /jsonwebtoken@9.0.1: + resolution: {integrity: sha512-K8wx7eJ5TPvEjuiVSkv167EVboBDv9PZdDoF7BgeQnBLVvZWW9clr2PsQHVJDTKaEIH5JBIwHujGcHp7GgI2eg==} engines: {node: '>=12', npm: '>=6'} dependencies: jws: 3.2.2 lodash: 4.17.21 ms: 2.1.3 - semver: 7.3.8 + semver: 7.5.3 dev: false /jsprim@1.4.2: @@ -13070,8 +13041,8 @@ packages: prelude-ls: 1.2.1 type-check: 0.4.0 - /lexical@0.11.1: - resolution: {integrity: sha512-PhAGADxqzwJldmkVK5tvkaARTULCdeJjfhxWTnJQXTAlApE9heJir7SWxbxeUx1G5gdKZQFicGhOQlDXJmma2Q==} + /lexical@0.11.2: + resolution: {integrity: sha512-9pvMhn28Liac6uRVwhedIy7iw9IYTR6J1A2Ic+sfgdc5GbLBVZm1obCxazdbJzprRoQdrRUh7M4JJfQdCxC0MQ==} dev: false /lib0@0.2.74: @@ -13289,11 +13260,6 @@ packages: resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} engines: {node: '>=8'} - /lru-cache@10.0.0: - resolution: {integrity: sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==} - engines: {node: 14 || >=16.14} - dev: true - /lru-cache@4.1.5: resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} dependencies: @@ -13312,8 +13278,13 @@ packages: dependencies: yallist: 4.0.0 - /lucide-react@0.258.0(react@18.2.0): - resolution: {integrity: sha512-3evnpKadBrjLr2HHJ66eDZ1y0vPS6pm8NiNDaLqhddUUyJGnA+lfDPZfbVkuAFq7Xaa1TEy7Sg17sM7mHpMKrA==} + /lru-cache@9.1.1: + resolution: {integrity: sha512-65/Jky17UwSb0BuB9V+MyDpsOtXKmYwzhyl+cOa9XUiI4uV2Ouy/2voFP3+al0BjZbJgMBD8FojMpAf+Z+qn4A==} + engines: {node: 14 || >=16.14} + dev: true + + /lucide-react@0.260.0(react@18.2.0): + resolution: {integrity: sha512-xN6wuhUlcXeS4GsxZpd2DZp+m1jEZPckuCr90nQAXKRNl63GZ4KshIcGmqJEUqEygmv8Rf99MhcwF3DqBqQ9Dg==} peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 dependencies: @@ -13345,7 +13316,7 @@ packages: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} dependencies: - semver: 6.3.0 + semver: 6.3.1 /makeerror@1.0.12: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} @@ -13662,18 +13633,18 @@ packages: resolution: {integrity: sha512-aAF+nwFbkSIJGfrJk+HyzmJOq3KFaimH6OIFBU6J2DPjQeg1jXIYlIyEv81Gyisb9moUkudn+wj7zLNYMOv75Q==} hasBin: true dependencies: - '@babel/core': 7.22.5 - '@babel/plugin-proposal-class-properties': 7.12.1(@babel/core@7.22.5) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.5) - '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.22.5) - '@babel/plugin-transform-flow-strip-types': 7.19.0(@babel/core@7.22.5) - '@babel/plugin-transform-react-jsx': 7.19.0(@babel/core@7.22.5) - '@babel/plugin-transform-regenerator': 7.20.5(@babel/core@7.22.5) - '@babel/preset-env': 7.22.5(@babel/core@7.22.5) - '@babel/preset-flow': 7.18.6(@babel/core@7.22.5) - '@babel/preset-react': 7.18.6(@babel/core@7.22.5) + '@babel/core': 7.22.9 + '@babel/plugin-proposal-class-properties': 7.12.1(@babel/core@7.22.9) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.9) + '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.22.9) + '@babel/plugin-transform-flow-strip-types': 7.19.0(@babel/core@7.22.9) + '@babel/plugin-transform-react-jsx': 7.19.0(@babel/core@7.22.9) + '@babel/plugin-transform-regenerator': 7.20.5(@babel/core@7.22.9) + '@babel/preset-env': 7.22.9(@babel/core@7.22.9) + '@babel/preset-flow': 7.18.6(@babel/core@7.22.9) + '@babel/preset-react': 7.18.6(@babel/core@7.22.9) '@rollup/plugin-alias': 3.1.9(rollup@2.79.1) - '@rollup/plugin-babel': 5.3.1(@babel/core@7.22.5)(rollup@2.79.1) + '@rollup/plugin-babel': 5.3.1(@babel/core@7.22.9)(rollup@2.79.1) '@rollup/plugin-commonjs': 17.1.0(rollup@2.79.1) '@rollup/plugin-json': 4.1.0(rollup@2.79.1) '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.1) @@ -13682,7 +13653,7 @@ packages: autoprefixer: 10.4.14(postcss@8.4.24) babel-plugin-macros: 3.1.0 babel-plugin-transform-async-to-promises: 0.8.18 - babel-plugin-transform-replace-expressions: 0.2.0(@babel/core@7.22.5) + babel-plugin-transform-replace-expressions: 0.2.0(@babel/core@7.22.9) brotli-size: 4.0.0 builtin-modules: 3.3.0 camelcase: 6.3.0 @@ -13856,8 +13827,8 @@ packages: /micromark-extension-mdxjs@1.0.0: resolution: {integrity: sha512-TZZRZgeHvtgm+IhtgC2+uDMR7h8eTKF0QUX9YsgoL9+bADBpBY6SiLvWqnBlLbCEevITmTqmEuY3FoxMKVs1rQ==} dependencies: - acorn: 8.9.0 - acorn-jsx: 5.3.2(acorn@8.9.0) + acorn: 8.8.1 + acorn-jsx: 5.3.2(acorn@8.8.1) micromark-extension-mdx-expression: 1.0.3 micromark-extension-mdx-jsx: 1.0.3 micromark-extension-mdx-md: 1.0.0 @@ -14159,8 +14130,8 @@ packages: brace-expansion: 2.0.1 dev: true - /minimatch@9.0.2: - resolution: {integrity: sha512-PZOT9g5v2ojiTL7r1xF6plNHLtOeTpSlDI007As2NlA2aYBMfVom17yqa6QzhmDP8QOhn7LjHTg7DFCVSSa6yg==} + /minimatch@9.0.1: + resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==} engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 @@ -14213,9 +14184,9 @@ packages: yallist: 4.0.0 dev: true - /minipass@6.0.2: - resolution: {integrity: sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==} - engines: {node: '>=16 || 14 >=14.17'} + /minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} dev: true /minizlib@1.3.3: @@ -14455,7 +14426,7 @@ packages: engines: {node: '>=10'} dev: true - /next-auth@4.22.1(next@13.4.8)(nodemailer@6.9.3)(react-dom@18.2.0)(react@18.2.0): + /next-auth@4.22.1(next@13.4.9)(nodemailer@6.9.3)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-NTR3f6W7/AWXKw8GSsgSyQcDW6jkslZLH8AiZa5PQ09w1kR8uHtR9rez/E9gAq/o17+p0JYHE8QjF3RoniiObA==} peerDependencies: next: ^12.2.5 || ^13 @@ -14470,7 +14441,7 @@ packages: '@panva/hkdf': 1.0.2 cookie: 0.5.0 jose: 4.13.1 - next: 13.4.8(react-dom@18.2.0)(react@18.2.0) + next: 13.4.9(react-dom@18.2.0)(react@18.2.0) nodemailer: 6.9.3 oauth: 0.9.15 openid-client: 5.4.0 @@ -14481,19 +14452,19 @@ packages: uuid: 8.3.2 dev: false - /next-plausible@3.8.0(next@13.4.8)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-fOSI5dRwQkDcARAPqwCM2nqYf2bCP5ITUrX/jj2owkggi7LHAaKku4k/6CoKHAygs7EumYiGOuPt+qaTxxo+YA==} + /next-plausible@3.9.1(next@13.4.9)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Vt1vUKefLzBO/B/m0SbZf0wviKQcfwpogCxxmpr+gYmbAhZl8RClypKXvPKJHH/P9Rt2aw+GmlAIUUReFKGBPQ==} peerDependencies: next: ^11.1.0 || ^12.0.0 || ^13.0.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - next: 13.4.8(react-dom@18.2.0)(react@18.2.0) + next: 13.4.9(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /next-sitemap@4.1.8(next@13.4.8): + /next-sitemap@4.1.8(next@13.4.9): resolution: {integrity: sha512-XAXpBHX4o89JfMgvrm0zimlZwpu2iBPXHpimJMUrqOZSc4C2oB1Lv89mxuVON9IE8HOezaM+w4GjJxcYCuGPTQ==} engines: {node: '>=14.18'} hasBin: true @@ -14504,11 +14475,11 @@ packages: '@next/env': 13.4.8 fast-glob: 3.2.12 minimist: 1.2.8 - next: 13.4.8(react-dom@18.2.0)(react@18.2.0) + next: 13.4.9(react-dom@18.2.0)(react@18.2.0) dev: false - /next@13.4.8(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-lxUjndYKjZHGK3CWeN2RI+/6ni6EUvjiqGWXAYPxUfGIdFGQ5XoisrqAJ/dF74aP27buAfs8MKIbIMMdxjqSBg==} + /next@13.4.9(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-vtefFm/BWIi/eWOqf1GsmKG3cjKw1k3LjuefKRcL3iiLl3zWzFdPG3as6xtxrGO6gwTzzaO1ktL4oiHt/uvTjA==} engines: {node: '>=16.8.0'} hasBin: true peerDependencies: @@ -14525,10 +14496,10 @@ packages: sass: optional: true dependencies: - '@next/env': 13.4.8 + '@next/env': 13.4.9 '@swc/helpers': 0.5.1 busboy: 1.6.0 - caniuse-lite: 1.0.30001466 + caniuse-lite: 1.0.30001512 postcss: 8.4.14 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -14536,15 +14507,15 @@ packages: watchpack: 2.4.0 zod: 3.21.4 optionalDependencies: - '@next/swc-darwin-arm64': 13.4.8 - '@next/swc-darwin-x64': 13.4.8 - '@next/swc-linux-arm64-gnu': 13.4.8 - '@next/swc-linux-arm64-musl': 13.4.8 - '@next/swc-linux-x64-gnu': 13.4.8 - '@next/swc-linux-x64-musl': 13.4.8 - '@next/swc-win32-arm64-msvc': 13.4.8 - '@next/swc-win32-ia32-msvc': 13.4.8 - '@next/swc-win32-x64-msvc': 13.4.8 + '@next/swc-darwin-arm64': 13.4.9 + '@next/swc-darwin-x64': 13.4.9 + '@next/swc-linux-arm64-gnu': 13.4.9 + '@next/swc-linux-arm64-musl': 13.4.9 + '@next/swc-linux-x64-gnu': 13.4.9 + '@next/swc-linux-x64-musl': 13.4.9 + '@next/swc-win32-arm64-msvc': 13.4.9 + '@next/swc-win32-ia32-msvc': 13.4.9 + '@next/swc-win32-x64-msvc': 13.4.9 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros @@ -14560,7 +14531,7 @@ packages: resolution: {integrity: sha512-eSKV6s+APenqVh8ubJyiu/YhZgxQpGP66ntzUb3lY1xB9ukSRaGnx0AIxI+IM+1+IVYC1oWobgG5L3Lt9ARykQ==} engines: {node: '>=10'} dependencies: - semver: 7.5.3 + semver: 7.5.4 dev: false /node-addon-api@6.1.0: @@ -14630,6 +14601,10 @@ packages: /node-releases@2.0.10: resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} + dev: true + + /node-releases@2.0.12: + resolution: {integrity: sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==} /nodemailer@6.9.3: resolution: {integrity: sha512-fy9v3NgTzBngrMFkDsKEj0r02U7jm6XfC3b52eoNV+GCrGj+s8pt5OqhiJdWKuw51zCTdiNR/IUD1z33LIIGpg==} @@ -14889,9 +14864,9 @@ packages: peerDependencies: webpack: ^4.0.0 dependencies: - cssnano: 5.1.14(postcss@8.4.24) + cssnano: 5.1.14(postcss@8.4.25) last-call-webpack-plugin: 3.0.0 - postcss: 8.4.24 + postcss: 8.4.25 webpack: 4.46.0 dev: true @@ -14907,18 +14882,6 @@ packages: word-wrap: 1.2.3 dev: true - /optionator@0.9.1: - resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} - engines: {node: '>= 0.8.0'} - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - word-wrap: 1.2.3 - dev: true - /optionator@0.9.3: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} @@ -15070,7 +15033,7 @@ packages: got: 9.6.0 registry-auth-token: 4.2.2 registry-url: 5.1.0 - semver: 6.3.0 + semver: 6.3.1 /pako@1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} @@ -15238,12 +15201,12 @@ packages: /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - /path-scurry@1.10.0: - resolution: {integrity: sha512-tZFEaRQbMLjwrsmidsGJ6wDMv0iazJWk6SfIKnY4Xru8auXgmJkOBa5DUbYFcFD2Rzk2+KDlIiF0GVXNCbgC7g==} + /path-scurry@1.7.0: + resolution: {integrity: sha512-UkZUeDjczjYRE495+9thsgcVgsaCPkaw80slmfVFgllxY+IO8ubTsOpFVjDPROBqJdHfVPUFRHPBV/WciOVfWg==} engines: {node: '>=16 || 14 >=14.17'} dependencies: - lru-cache: 10.0.0 - minipass: 6.0.2 + lru-cache: 9.1.1 + minipass: 5.0.0 dev: true /path-to-regexp@0.1.7: @@ -15362,11 +15325,21 @@ packages: postcss-value-parser: 4.2.0 dev: true + /postcss-calc@8.2.4(postcss@8.4.25): + resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} + peerDependencies: + postcss: ^8.2.2 + dependencies: + postcss: 8.4.25 + postcss-selector-parser: 6.0.11 + postcss-value-parser: 4.2.0 + dev: true + /postcss-colormin@4.0.3: resolution: {integrity: sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==} engines: {node: '>=6.9.0'} dependencies: - browserslist: 4.21.5 + browserslist: 4.21.9 color: 3.2.1 has: 1.0.3 postcss: 7.0.39 @@ -15379,13 +15352,26 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.5 + browserslist: 4.21.9 caniuse-api: 3.0.0 colord: 2.9.3 postcss: 8.4.24 postcss-value-parser: 4.2.0 dev: true + /postcss-colormin@5.3.0(postcss@8.4.25): + resolution: {integrity: sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.9 + caniuse-api: 3.0.0 + colord: 2.9.3 + postcss: 8.4.25 + postcss-value-parser: 4.2.0 + dev: true + /postcss-convert-values@4.0.1: resolution: {integrity: sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==} engines: {node: '>=6.9.0'} @@ -15400,11 +15386,22 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.5 + browserslist: 4.21.9 postcss: 8.4.24 postcss-value-parser: 4.2.0 dev: true + /postcss-convert-values@5.1.3(postcss@8.4.25): + resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.9 + postcss: 8.4.25 + postcss-value-parser: 4.2.0 + dev: true + /postcss-discard-comments@4.0.2: resolution: {integrity: sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==} engines: {node: '>=6.9.0'} @@ -15421,6 +15418,15 @@ packages: postcss: 8.4.24 dev: true + /postcss-discard-comments@5.1.2(postcss@8.4.25): + resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.25 + dev: true + /postcss-discard-duplicates@4.0.2: resolution: {integrity: sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==} engines: {node: '>=6.9.0'} @@ -15437,6 +15443,15 @@ packages: postcss: 8.4.24 dev: true + /postcss-discard-duplicates@5.1.0(postcss@8.4.25): + resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.25 + dev: true + /postcss-discard-empty@4.0.1: resolution: {integrity: sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==} engines: {node: '>=6.9.0'} @@ -15453,6 +15468,15 @@ packages: postcss: 8.4.24 dev: true + /postcss-discard-empty@5.1.1(postcss@8.4.25): + resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.25 + dev: true + /postcss-discard-overridden@4.0.1: resolution: {integrity: sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==} engines: {node: '>=6.9.0'} @@ -15469,26 +15493,35 @@ packages: postcss: 8.4.24 dev: true - /postcss-import@15.1.0(postcss@8.4.24): + /postcss-discard-overridden@5.1.0(postcss@8.4.25): + resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.25 + dev: true + + /postcss-import@15.1.0(postcss@8.4.25): resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} engines: {node: '>=14.0.0'} peerDependencies: postcss: ^8.0.0 dependencies: - postcss: 8.4.24 + postcss: 8.4.25 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.2 dev: true - /postcss-js@4.0.1(postcss@8.4.24): + /postcss-js@4.0.1(postcss@8.4.25): resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} engines: {node: ^12 || ^14 || >= 16} peerDependencies: postcss: ^8.4.21 dependencies: camelcase-css: 2.0.1 - postcss: 8.4.24 + postcss: 8.4.25 dev: true /postcss-load-config@3.1.4(postcss@8.4.24): @@ -15508,7 +15541,24 @@ packages: yaml: 1.10.2 dev: true - /postcss-load-config@4.0.1(postcss@8.4.24): + /postcss-load-config@3.1.4(postcss@8.4.25): + resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} + engines: {node: '>= 10'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 2.1.0 + postcss: 8.4.25 + yaml: 1.10.2 + dev: true + + /postcss-load-config@4.0.1(postcss@8.4.25): resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} engines: {node: '>= 14'} peerDependencies: @@ -15521,11 +15571,11 @@ packages: optional: true dependencies: lilconfig: 2.1.0 - postcss: 8.4.24 + postcss: 8.4.25 yaml: 2.1.3 dev: true - /postcss-loader@4.3.0(postcss@8.4.24)(webpack@4.46.0): + /postcss-loader@4.3.0(postcss@8.4.25)(webpack@4.46.0): resolution: {integrity: sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -15535,9 +15585,9 @@ packages: cosmiconfig: 7.1.0 klona: 2.0.5 loader-utils: 2.0.4 - postcss: 8.4.24 + postcss: 8.4.25 schema-utils: 3.1.1 - semver: 7.5.3 + semver: 7.5.4 webpack: 4.46.0 dev: true @@ -15562,11 +15612,22 @@ packages: stylehacks: 5.1.1(postcss@8.4.24) dev: true + /postcss-merge-longhand@5.1.7(postcss@8.4.25): + resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.25 + postcss-value-parser: 4.2.0 + stylehacks: 5.1.1(postcss@8.4.25) + dev: true + /postcss-merge-rules@4.0.3: resolution: {integrity: sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==} engines: {node: '>=6.9.0'} dependencies: - browserslist: 4.21.5 + browserslist: 4.21.9 caniuse-api: 3.0.0 cssnano-util-same-parent: 4.0.1 postcss: 7.0.39 @@ -15580,13 +15641,26 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.5 + browserslist: 4.21.9 caniuse-api: 3.0.0 cssnano-utils: 3.1.0(postcss@8.4.24) postcss: 8.4.24 postcss-selector-parser: 6.0.11 dev: true + /postcss-merge-rules@5.1.3(postcss@8.4.25): + resolution: {integrity: sha512-LbLd7uFC00vpOuMvyZop8+vvhnfRGpp2S+IMQKeuOZZapPRY4SMq5ErjQeHbHsjCUgJkRNrlU+LmxsKIqPKQlA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.9 + caniuse-api: 3.0.0 + cssnano-utils: 3.1.0(postcss@8.4.25) + postcss: 8.4.25 + postcss-selector-parser: 6.0.11 + dev: true + /postcss-minify-font-values@4.0.2: resolution: {integrity: sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==} engines: {node: '>=6.9.0'} @@ -15605,6 +15679,16 @@ packages: postcss-value-parser: 4.2.0 dev: true + /postcss-minify-font-values@5.1.0(postcss@8.4.25): + resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.25 + postcss-value-parser: 4.2.0 + dev: true + /postcss-minify-gradients@4.0.2: resolution: {integrity: sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==} engines: {node: '>=6.9.0'} @@ -15627,12 +15711,24 @@ packages: postcss-value-parser: 4.2.0 dev: true + /postcss-minify-gradients@5.1.1(postcss@8.4.25): + resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + colord: 2.9.3 + cssnano-utils: 3.1.0(postcss@8.4.25) + postcss: 8.4.25 + postcss-value-parser: 4.2.0 + dev: true + /postcss-minify-params@4.0.2: resolution: {integrity: sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==} engines: {node: '>=6.9.0'} dependencies: alphanum-sort: 1.0.2 - browserslist: 4.21.5 + browserslist: 4.21.9 cssnano-util-get-arguments: 4.0.0 postcss: 7.0.39 postcss-value-parser: 3.3.1 @@ -15645,12 +15741,24 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.5 + browserslist: 4.21.9 cssnano-utils: 3.1.0(postcss@8.4.24) postcss: 8.4.24 postcss-value-parser: 4.2.0 dev: true + /postcss-minify-params@5.1.4(postcss@8.4.25): + resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.9 + cssnano-utils: 3.1.0(postcss@8.4.25) + postcss: 8.4.25 + postcss-value-parser: 4.2.0 + dev: true + /postcss-minify-selectors@4.0.2: resolution: {integrity: sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==} engines: {node: '>=6.9.0'} @@ -15671,6 +15779,16 @@ packages: postcss-selector-parser: 6.0.11 dev: true + /postcss-minify-selectors@5.2.1(postcss@8.4.25): + resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.25 + postcss-selector-parser: 6.0.11 + dev: true + /postcss-modules-extract-imports@3.0.0(postcss@8.4.24): resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} engines: {node: ^10 || ^12 || >= 14} @@ -15680,6 +15798,15 @@ packages: postcss: 8.4.24 dev: true + /postcss-modules-extract-imports@3.0.0(postcss@8.4.25): + resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.25 + dev: true + /postcss-modules-local-by-default@4.0.0(postcss@8.4.24): resolution: {integrity: sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==} engines: {node: ^10 || ^12 || >= 14} @@ -15692,6 +15819,18 @@ packages: postcss-value-parser: 4.2.0 dev: true + /postcss-modules-local-by-default@4.0.0(postcss@8.4.25): + resolution: {integrity: sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + icss-utils: 5.1.0(postcss@8.4.25) + postcss: 8.4.25 + postcss-selector-parser: 6.0.11 + postcss-value-parser: 4.2.0 + dev: true + /postcss-modules-scope@3.0.0(postcss@8.4.24): resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==} engines: {node: ^10 || ^12 || >= 14} @@ -15702,6 +15841,16 @@ packages: postcss-selector-parser: 6.0.11 dev: true + /postcss-modules-scope@3.0.0(postcss@8.4.25): + resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.25 + postcss-selector-parser: 6.0.11 + dev: true + /postcss-modules-values@4.0.0(postcss@8.4.24): resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} engines: {node: ^10 || ^12 || >= 14} @@ -15712,6 +15861,16 @@ packages: postcss: 8.4.24 dev: true + /postcss-modules-values@4.0.0(postcss@8.4.25): + resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + icss-utils: 5.1.0(postcss@8.4.25) + postcss: 8.4.25 + dev: true + /postcss-modules@4.3.1(postcss@8.4.24): resolution: {integrity: sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==} peerDependencies: @@ -15728,13 +15887,13 @@ packages: string-hash: 1.1.3 dev: true - /postcss-nested@6.0.1(postcss@8.4.24): + /postcss-nested@6.0.1(postcss@8.4.25): resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 dependencies: - postcss: 8.4.24 + postcss: 8.4.25 postcss-selector-parser: 6.0.11 dev: true @@ -15754,6 +15913,15 @@ packages: postcss: 8.4.24 dev: true + /postcss-normalize-charset@5.1.0(postcss@8.4.25): + resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.25 + dev: true + /postcss-normalize-display-values@4.0.2: resolution: {integrity: sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==} engines: {node: '>=6.9.0'} @@ -15773,6 +15941,16 @@ packages: postcss-value-parser: 4.2.0 dev: true + /postcss-normalize-display-values@5.1.0(postcss@8.4.25): + resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.25 + postcss-value-parser: 4.2.0 + dev: true + /postcss-normalize-positions@4.0.2: resolution: {integrity: sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==} engines: {node: '>=6.9.0'} @@ -15793,6 +15971,16 @@ packages: postcss-value-parser: 4.2.0 dev: true + /postcss-normalize-positions@5.1.1(postcss@8.4.25): + resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.25 + postcss-value-parser: 4.2.0 + dev: true + /postcss-normalize-repeat-style@4.0.2: resolution: {integrity: sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==} engines: {node: '>=6.9.0'} @@ -15813,6 +16001,16 @@ packages: postcss-value-parser: 4.2.0 dev: true + /postcss-normalize-repeat-style@5.1.1(postcss@8.4.25): + resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.25 + postcss-value-parser: 4.2.0 + dev: true + /postcss-normalize-string@4.0.2: resolution: {integrity: sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==} engines: {node: '>=6.9.0'} @@ -15832,6 +16030,16 @@ packages: postcss-value-parser: 4.2.0 dev: true + /postcss-normalize-string@5.1.0(postcss@8.4.25): + resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.25 + postcss-value-parser: 4.2.0 + dev: true + /postcss-normalize-timing-functions@4.0.2: resolution: {integrity: sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==} engines: {node: '>=6.9.0'} @@ -15851,11 +16059,21 @@ packages: postcss-value-parser: 4.2.0 dev: true + /postcss-normalize-timing-functions@5.1.0(postcss@8.4.25): + resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.25 + postcss-value-parser: 4.2.0 + dev: true + /postcss-normalize-unicode@4.0.1: resolution: {integrity: sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==} engines: {node: '>=6.9.0'} dependencies: - browserslist: 4.21.5 + browserslist: 4.21.9 postcss: 7.0.39 postcss-value-parser: 3.3.1 dev: true @@ -15866,11 +16084,22 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.5 + browserslist: 4.21.9 postcss: 8.4.24 postcss-value-parser: 4.2.0 dev: true + /postcss-normalize-unicode@5.1.1(postcss@8.4.25): + resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.9 + postcss: 8.4.25 + postcss-value-parser: 4.2.0 + dev: true + /postcss-normalize-url@4.0.1: resolution: {integrity: sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==} engines: {node: '>=6.9.0'} @@ -15892,6 +16121,17 @@ packages: postcss-value-parser: 4.2.0 dev: true + /postcss-normalize-url@5.1.0(postcss@8.4.25): + resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + normalize-url: 6.1.0 + postcss: 8.4.25 + postcss-value-parser: 4.2.0 + dev: true + /postcss-normalize-whitespace@4.0.2: resolution: {integrity: sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==} engines: {node: '>=6.9.0'} @@ -15910,6 +16150,16 @@ packages: postcss-value-parser: 4.2.0 dev: true + /postcss-normalize-whitespace@5.1.1(postcss@8.4.25): + resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.25 + postcss-value-parser: 4.2.0 + dev: true + /postcss-ordered-values@4.1.2: resolution: {integrity: sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==} engines: {node: '>=6.9.0'} @@ -15930,11 +16180,22 @@ packages: postcss-value-parser: 4.2.0 dev: true + /postcss-ordered-values@5.1.3(postcss@8.4.25): + resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + cssnano-utils: 3.1.0(postcss@8.4.25) + postcss: 8.4.25 + postcss-value-parser: 4.2.0 + dev: true + /postcss-reduce-initial@4.0.3: resolution: {integrity: sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==} engines: {node: '>=6.9.0'} dependencies: - browserslist: 4.21.5 + browserslist: 4.21.9 caniuse-api: 3.0.0 has: 1.0.3 postcss: 7.0.39 @@ -15946,11 +16207,22 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.5 + browserslist: 4.21.9 caniuse-api: 3.0.0 postcss: 8.4.24 dev: true + /postcss-reduce-initial@5.1.1(postcss@8.4.25): + resolution: {integrity: sha512-//jeDqWcHPuXGZLoolFrUXBDyuEGbr9S2rMo19bkTIjBQ4PqkaO+oI8wua5BOUxpfi97i3PCoInsiFIEBfkm9w==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.9 + caniuse-api: 3.0.0 + postcss: 8.4.25 + dev: true + /postcss-reduce-transforms@4.0.2: resolution: {integrity: sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==} engines: {node: '>=6.9.0'} @@ -15971,6 +16243,16 @@ packages: postcss-value-parser: 4.2.0 dev: true + /postcss-reduce-transforms@5.1.0(postcss@8.4.25): + resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.25 + postcss-value-parser: 4.2.0 + dev: true + /postcss-selector-parser@3.1.2: resolution: {integrity: sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==} engines: {node: '>=8'} @@ -16016,6 +16298,17 @@ packages: svgo: 2.8.0 dev: true + /postcss-svgo@5.1.0(postcss@8.4.25): + resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.25 + postcss-value-parser: 4.2.0 + svgo: 2.8.0 + dev: true + /postcss-unique-selectors@4.0.1: resolution: {integrity: sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==} engines: {node: '>=6.9.0'} @@ -16035,6 +16328,16 @@ packages: postcss-selector-parser: 6.0.11 dev: true + /postcss-unique-selectors@5.1.1(postcss@8.4.25): + resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.25 + postcss-selector-parser: 6.0.11 + dev: true + /postcss-value-parser@3.3.1: resolution: {integrity: sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==} dev: true @@ -16069,8 +16372,17 @@ packages: source-map-js: 1.0.2 dev: true - /posthog-js@1.68.5: - resolution: {integrity: sha512-EqQuIX0k564T2fhmzQK2Gcb8s/XRhHTpk6JOeGtJV7lpMI8Hffe+gGjGHcqIc4RoOg3LjAGYNHj6XgN+QPggLg==} + /postcss@8.4.25: + resolution: {integrity: sha512-7taJ/8t2av0Z+sQEvNzCkpDynl0tX3uJMCODi6nT3PfASC7dYCWV9aQ+uiCf+KBD4SEFcu+GvJdGdwzQ6OSjCw==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.6 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: true + + /posthog-js@1.71.0: + resolution: {integrity: sha512-Qs7lIBivj993apV17x8krEy46SKzSYCwMq4hihkNJ01U6ZltrIx0piYfKCC2pmiBgCaJG7Hjn0iTLy5evntdEw==} dependencies: fflate: 0.4.8 dev: false @@ -16085,8 +16397,8 @@ packages: - debug dev: false - /preact-cli@3.4.5(eslint@8.44.0)(preact-render-to-string@6.1.0)(preact@10.15.1): - resolution: {integrity: sha512-pLTawiXDy4rEct5ul0mDCP92GB6NK/QFhpoR+iHZJqgkeyE25qEXPf1/tJhAiijphDL5kxGvsT4qA6SrpQ5BsQ==} + /preact-cli@3.4.6(eslint@8.44.0)(preact-render-to-string@6.2.0)(preact@10.16.0): + resolution: {integrity: sha512-ztFylaIgDSLKT2keK2E97dzVCZy+rCyRG7SSx/yHxRYsqkebuWpIPedAGy5Y21IE7E0Yd0MO9i+23/y0VzieNg==} engines: {node: '>=12'} hasBin: true peerDependencies: @@ -16103,25 +16415,25 @@ packages: stylus-loader: optional: true dependencies: - '@babel/core': 7.22.5 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.5) - '@babel/plugin-proposal-decorators': 7.20.5(@babel/core@7.22.5) - '@babel/plugin-proposal-object-rest-spread': 7.20.2(@babel/core@7.22.5) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.5) - '@babel/plugin-transform-object-assign': 7.18.6(@babel/core@7.22.5) - '@babel/plugin-transform-react-jsx': 7.19.0(@babel/core@7.22.5) - '@babel/preset-env': 7.22.5(@babel/core@7.22.5) - '@babel/preset-typescript': 7.22.5(@babel/core@7.22.5) - '@preact/async-loader': 3.0.2(preact@10.15.1) + '@babel/core': 7.22.9 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.9) + '@babel/plugin-proposal-decorators': 7.20.5(@babel/core@7.22.9) + '@babel/plugin-proposal-object-rest-spread': 7.20.2(@babel/core@7.22.9) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.9) + '@babel/plugin-transform-object-assign': 7.18.6(@babel/core@7.22.9) + '@babel/plugin-transform-react-jsx': 7.19.0(@babel/core@7.22.9) + '@babel/preset-env': 7.22.9(@babel/core@7.22.9) + '@babel/preset-typescript': 7.22.5(@babel/core@7.22.9) + '@preact/async-loader': 3.0.2(preact@10.16.0) '@prefresh/babel-plugin': 0.4.4 - '@prefresh/webpack': 3.3.4(@prefresh/babel-plugin@0.4.4)(preact@10.15.1)(webpack@4.46.0) + '@prefresh/webpack': 3.3.4(@prefresh/babel-plugin@0.4.4)(preact@10.16.0)(webpack@4.46.0) '@types/webpack': 4.41.33 - autoprefixer: 10.4.14(postcss@8.4.24) + autoprefixer: 10.4.14(postcss@8.4.25) babel-esm-plugin: 0.9.0(webpack@4.46.0) - babel-loader: 8.3.0(@babel/core@7.22.5)(webpack@4.46.0) + babel-loader: 8.3.0(@babel/core@7.22.9)(webpack@4.46.0) babel-plugin-macros: 3.1.0 babel-plugin-transform-react-remove-prop-types: 0.4.24 - browserslist: 4.21.5 + browserslist: 4.21.9 compression-webpack-plugin: 6.1.1(webpack@4.46.0) console-clear: 1.1.1 copy-webpack-plugin: 6.4.1(webpack@4.46.0) @@ -16149,11 +16461,11 @@ packages: optimize-css-assets-webpack-plugin: 6.0.1(webpack@4.46.0) ora: 5.4.1 pnp-webpack-plugin: 1.7.0(typescript@4.6.4) - postcss: 8.4.24 - postcss-load-config: 3.1.4(postcss@8.4.24) - postcss-loader: 4.3.0(postcss@8.4.24)(webpack@4.46.0) - preact: 10.15.1 - preact-render-to-string: 6.1.0(preact@10.15.1) + postcss: 8.4.25 + postcss-load-config: 3.1.4(postcss@8.4.25) + postcss-loader: 4.3.0(postcss@8.4.25)(webpack@4.46.0) + preact: 10.16.0 + preact-render-to-string: 6.2.0(preact@10.16.0) progress-bar-webpack-plugin: 2.1.0(webpack@4.46.0) promise-polyfill: 8.3.0 prompts: 2.4.2 @@ -16209,12 +16521,12 @@ packages: pretty-format: 3.8.0 dev: false - /preact-render-to-string@6.1.0(preact@10.15.1): - resolution: {integrity: sha512-/AsKU4Q4R8r4aKwwNQrkQQNUVEDmTeZr6IwesDffobFRPcTk4dSQrfo1VOcXjtlcUss6QYEe7JShUGbQIhaw+A==} + /preact-render-to-string@6.2.0(preact@10.16.0): + resolution: {integrity: sha512-51HDkgWGssQvWhAXE6xWGSFgqXx+qzQPKatLBVm5Uxl2Bq8RHz+CcNMTWz3kjGNM8PL+9GZZfTLGHyR1wu6ZuA==} peerDependencies: preact: '>=10' dependencies: - preact: 10.15.1 + preact: 10.16.0 pretty-format: 3.8.0 dev: true @@ -16222,8 +16534,8 @@ packages: resolution: {integrity: sha512-nZSa8M2R2m1n7nJSBlzDpxRJaIsejrTO1vlFbdpFvyC8qM1iU+On2y0otfoUm6SRB5o0lF0CKDFxg6grEFU0iQ==} dev: false - /preact@10.15.1: - resolution: {integrity: sha512-qs2ansoQEwzNiV5eAcRT1p1EC/dmEzaATVDJNiB3g2sRDWdA7b7MurXdJjB2+/WQktGWZwxvDrnuRFbWuIr64g==} + /preact@10.16.0: + resolution: {integrity: sha512-XTSj3dJ4roKIC93pald6rWuB2qQJO9gO2iLLyTe87MrjQN+HklueLsmskbywEWqCHlclgz3/M4YLL2iBr9UmMA==} dev: true /prebuild-install@7.1.1: @@ -16273,8 +16585,8 @@ packages: resolution: {integrity: sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==} engines: {node: '>=4'} - /prettier-plugin-tailwindcss@0.3.0(prettier@2.8.8): - resolution: {integrity: sha512-009/Xqdy7UmkcTBpwlq7jsViDqXAYSOMLDrHAdTMlVZOrKfM2o9Ci7EMWTMZ7SkKBFTG04UM9F9iM2+4i6boDA==} + /prettier-plugin-tailwindcss@0.4.0(prettier@2.8.8): + resolution: {integrity: sha512-Rna0sDPETA0KNhMHlN8wxKNgfSa8mTl2hPPAGxnbv6tUcHT6J4RQmQ8TLXyhB7Dm5Von4iHloBxTyClYM6wT0A==} engines: {node: '>=12.17.0'} peerDependencies: '@ianvs/prettier-plugin-sort-imports': '*' @@ -16282,7 +16594,7 @@ packages: '@shopify/prettier-plugin-liquid': '*' '@shufo/prettier-plugin-blade': '*' '@trivago/prettier-plugin-sort-imports': '*' - prettier: '>=2.2.0' + prettier: ^2.2 || ^3.0 prettier-plugin-astro: '*' prettier-plugin-css-order: '*' prettier-plugin-import-sort: '*' @@ -16376,6 +16688,15 @@ packages: react-is: 18.2.0 dev: true + /pretty-format@29.6.1: + resolution: {integrity: sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.6.0 + ansi-styles: 5.2.0 + react-is: 18.2.0 + dev: true + /pretty-format@3.8.0: resolution: {integrity: sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==} @@ -16400,7 +16721,7 @@ packages: - supports-color dev: true - /prisma-json-types-generator@2.5.0(prisma@4.16.2): + /prisma-json-types-generator@2.5.0(prisma@5.0.0): resolution: {integrity: sha512-jVaaIhHNceWba1LPnS6j1Q+HZLZnrTjwxGANfCvHxFtywSEP9iM25cs233m90TpC7E+ABFJcWgBpXob2ms+3gw==} engines: {node: '>=14.0'} hasBin: true @@ -16408,19 +16729,19 @@ packages: prisma: ^4.16.0 dependencies: '@prisma/generator-helper': 4.16.0 - prisma: 4.16.2 + prisma: 5.0.0 tslib: 2.5.3 transitivePeerDependencies: - supports-color dev: true - /prisma@4.16.2: - resolution: {integrity: sha512-SYCsBvDf0/7XSJyf2cHTLjLeTLVXYfqp7pG5eEVafFLeT0u/hLFz/9W196nDRGUOo1JfPatAEb+uEnTQImQC1g==} - engines: {node: '>=14.17'} + /prisma@5.0.0: + resolution: {integrity: sha512-KYWk83Fhi1FH59jSpavAYTt2eoMVW9YKgu8ci0kuUnt6Dup5Qy47pcB4/TLmiPAbhGrxxSz7gsSnJcCmkyPANA==} + engines: {node: '>=16.13'} hasBin: true requiresBuild: true dependencies: - '@prisma/engines': 4.16.2 + '@prisma/engines': 5.0.0 /prismjs@1.27.0: resolution: {integrity: sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==} @@ -16614,6 +16935,10 @@ packages: /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + /queue-tick@1.0.1: + resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} + dev: false + /quick-lru@4.0.1: resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} engines: {node: '>=8'} @@ -16830,7 +17155,7 @@ packages: dependencies: react: 18.2.0 react-style-singleton: 2.2.1(react@18.2.0) - tslib: 2.5.3 + tslib: 2.5.2 dev: false /react-remove-scroll@2.5.4(react@18.2.0): @@ -16846,7 +17171,7 @@ packages: react: 18.2.0 react-remove-scroll-bar: 2.3.4(react@18.2.0) react-style-singleton: 2.2.1(react@18.2.0) - tslib: 2.5.3 + tslib: 2.5.2 use-callback-ref: 1.3.0(react@18.2.0) use-sidecar: 1.1.2(react@18.2.0) dev: false @@ -16864,7 +17189,7 @@ packages: react: 18.2.0 react-remove-scroll-bar: 2.3.4(react@18.2.0) react-style-singleton: 2.2.1(react@18.2.0) - tslib: 2.5.3 + tslib: 2.5.2 use-callback-ref: 1.3.0(react@18.2.0) use-sidecar: 1.1.2(react@18.2.0) dev: false @@ -16893,7 +17218,7 @@ packages: get-nonce: 1.0.1 invariant: 2.2.4 react: 18.2.0 - tslib: 2.5.3 + tslib: 2.5.2 dev: false /react-universal-interface@0.6.2(react@18.2.0)(tslib@2.4.1): @@ -17080,18 +17405,6 @@ packages: define-properties: 1.1.4 functions-have-names: 1.2.3 - /regexpu-core@5.2.2: - resolution: {integrity: sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==} - engines: {node: '>=4'} - dependencies: - regenerate: 1.4.2 - regenerate-unicode-properties: 10.1.0 - regjsgen: 0.7.1 - regjsparser: 0.9.1 - unicode-match-property-ecmascript: 2.0.0 - unicode-match-property-value-ecmascript: 2.1.0 - dev: true - /regexpu-core@5.3.2: resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} engines: {node: '>=4'} @@ -17130,10 +17443,6 @@ packages: dependencies: rc: 1.2.8 - /regjsgen@0.7.1: - resolution: {integrity: sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==} - dev: true - /regjsparser@0.9.1: resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} hasBin: true @@ -17398,7 +17707,7 @@ packages: engines: {node: '>=14'} hasBin: true dependencies: - glob: 10.3.1 + glob: 10.2.6 dev: true /ripemd160@2.0.2: @@ -17463,7 +17772,7 @@ packages: fs-extra: 10.1.0 resolve: 1.22.2 rollup: 2.79.1 - tslib: 2.5.3 + tslib: 2.5.2 typescript: 4.9.5 dev: true @@ -17670,7 +17979,7 @@ packages: resolution: {integrity: sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==} engines: {node: '>=8'} dependencies: - semver: 6.3.0 + semver: 6.3.1 /semver-utils@1.1.4: resolution: {integrity: sha512-EjnoLE5OGmDAVV/8YDoN5KiajNadjzIp9BAHOhYeQHt7j0UWxjmgsx4YD48wp4Ue1Qogq38F1GNUJNqF1kKKxA==} @@ -17683,6 +17992,11 @@ packages: /semver@6.3.0: resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} hasBin: true + dev: false + + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true /semver@7.3.8: resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} @@ -17690,6 +18004,7 @@ packages: hasBin: true dependencies: lru-cache: 6.0.0 + dev: true /semver@7.5.3: resolution: {integrity: sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==} @@ -17698,6 +18013,13 @@ packages: dependencies: lru-cache: 6.0.0 + /semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + /send@0.18.0: resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} engines: {node: '>= 0.8.0'} @@ -17813,8 +18135,8 @@ packages: kind-of: 6.0.3 dev: true - /sharp@0.32.1: - resolution: {integrity: sha512-kQTFtj7ldpUqSe8kDxoGLZc1rnMFU0AO2pqbX6pLy3b7Oj8ivJIdoKNwxHVQG2HN6XpHPJqCSM2nsma2gOXvOg==} + /sharp@0.32.2: + resolution: {integrity: sha512-e4hyWKtU7ks/rLmoPys476zhpQnLqPJopz4+5b6OPeyJfvCTInAp0pe5tGhstjsNdUvDLrUVGEwevewYdZM8Eg==} engines: {node: '>=14.15.0'} requiresBuild: true dependencies: @@ -17822,9 +18144,9 @@ packages: detect-libc: 2.0.1 node-addon-api: 6.1.0 prebuild-install: 7.1.1 - semver: 7.5.3 + semver: 7.5.4 simple-get: 4.0.1 - tar-fs: 2.1.1 + tar-fs: 3.0.4 tunnel-agent: 0.6.0 dev: false @@ -17866,8 +18188,8 @@ packages: /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - /signal-exit@4.0.2: - resolution: {integrity: sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==} + /signal-exit@4.0.1: + resolution: {integrity: sha512-uUWsN4aOxJAS8KOuf3QMyFtgm1pkb6I+KRZbRF/ghdf5T7sM+B1lLLzPDxswUjkmHyxQAVzEgG35E3NzDM9GVw==} engines: {node: '>=14'} dev: true @@ -18291,6 +18613,13 @@ packages: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} + /streamx@2.15.0: + resolution: {integrity: sha512-HcxY6ncGjjklGs1xsP1aR71INYcsXFJet5CU1CHqihQ2J5nOsbd4OjgjHO42w/4QNv9gZb3BueV+Vxok5pLEXg==} + dependencies: + fast-fifo: 1.3.0 + queue-tick: 1.0.1 + dev: false + /string-hash@1.1.3: resolution: {integrity: sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==} dev: true @@ -18334,7 +18663,7 @@ packages: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 - strip-ansi: 7.1.0 + strip-ansi: 7.0.1 dev: true /string.prototype.matchall@4.0.8: @@ -18416,8 +18745,8 @@ packages: dependencies: ansi-regex: 5.0.1 - /strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + /strip-ansi@7.0.1: + resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==} engines: {node: '>=12'} dependencies: ansi-regex: 6.0.1 @@ -18461,11 +18790,11 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - /stripe@12.6.0: - resolution: {integrity: sha512-aJat4pGA6fr5DvuojRVXMaOCAw8ceS3UQM4ux1BMUViG686NmOAf1psEh6Wu+NFUifoy6kV7+4APq66OlTWtTw==} + /stripe@12.12.0: + resolution: {integrity: sha512-aM9xfyDryiaf/qSWMtJaTMrlc/he3qyx3aVHMqOZqUiMdgTV6lt7tLpFrU0pG+QURm1LAP9GYZ+EcA17446YoQ==} engines: {node: '>=12.*'} dependencies: - '@types/node': 20.3.3 + '@types/node': 20.4.2 qs: 6.11.0 dev: false @@ -18511,7 +18840,7 @@ packages: resolution: {integrity: sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==} engines: {node: '>=6.9.0'} dependencies: - browserslist: 4.21.5 + browserslist: 4.21.9 postcss: 7.0.39 postcss-selector-parser: 3.1.2 dev: true @@ -18522,11 +18851,22 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.5 + browserslist: 4.21.9 postcss: 8.4.24 postcss-selector-parser: 6.0.11 dev: true + /stylehacks@5.1.1(postcss@8.4.25): + resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.9 + postcss: 8.4.25 + postcss-selector-parser: 6.0.11 + dev: true + /stylis@4.1.3: resolution: {integrity: sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==} dev: false @@ -18657,11 +18997,11 @@ packages: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.0.0 - postcss: 8.4.24 - postcss-import: 15.1.0(postcss@8.4.24) - postcss-js: 4.0.1(postcss@8.4.24) - postcss-load-config: 4.0.1(postcss@8.4.24) - postcss-nested: 6.0.1(postcss@8.4.24) + postcss: 8.4.25 + postcss-import: 15.1.0(postcss@8.4.25) + postcss-js: 4.0.1(postcss@8.4.25) + postcss-load-config: 4.0.1(postcss@8.4.25) + postcss-nested: 6.0.1(postcss@8.4.25) postcss-selector-parser: 6.0.11 postcss-value-parser: 4.2.0 resolve: 1.22.2 @@ -18688,6 +19028,14 @@ packages: tar-stream: 2.2.0 dev: false + /tar-fs@3.0.4: + resolution: {integrity: sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==} + dependencies: + mkdirp-classic: 0.5.3 + pump: 3.0.0 + tar-stream: 3.1.6 + dev: false + /tar-stream@2.2.0: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} engines: {node: '>=6'} @@ -18698,6 +19046,14 @@ packages: inherits: 2.0.4 readable-stream: 3.6.0 + /tar-stream@3.1.6: + resolution: {integrity: sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==} + dependencies: + b4a: 1.6.4 + fast-fifo: 1.3.0 + streamx: 2.15.0 + dev: false + /tar@4.4.19: resolution: {integrity: sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==} engines: {node: '>=4.5'} @@ -18838,7 +19194,7 @@ packages: uglify-js: optional: true dependencies: - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/trace-mapping': 0.3.18 jest-worker: 27.5.1 schema-utils: 3.1.1 serialize-javascript: 6.0.0 @@ -18851,7 +19207,7 @@ packages: engines: {node: '>=6.0.0'} hasBin: true dependencies: - acorn: 8.9.0 + acorn: 8.10.0 commander: 2.20.3 source-map: 0.6.1 source-map-support: 0.5.21 @@ -18863,7 +19219,7 @@ packages: hasBin: true dependencies: '@jridgewell/source-map': 0.3.2 - acorn: 8.9.0 + acorn: 8.8.1 commander: 2.20.3 source-map-support: 0.5.21 @@ -19070,6 +19426,15 @@ packages: resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} dev: false + /ts-api-utils@1.0.1(typescript@5.1.6): + resolution: {integrity: sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==} + engines: {node: '>=16.13.0'} + peerDependencies: + typescript: '>=4.2.0' + dependencies: + typescript: 5.1.6 + dev: true + /ts-easing@0.2.0: resolution: {integrity: sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==} dev: false @@ -19115,6 +19480,9 @@ packages: /tslib@2.4.1: resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} + /tslib@2.5.2: + resolution: {integrity: sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==} + /tslib@2.5.3: resolution: {integrity: sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==} @@ -19142,7 +19510,7 @@ packages: execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 4.0.1(postcss@8.4.24) + postcss-load-config: 4.0.1(postcss@8.4.25) resolve-from: 5.0.0 rollup: 3.5.1 source-map: 0.8.0-beta.0 @@ -19196,65 +19564,65 @@ packages: dependencies: safe-buffer: 5.2.1 - /turbo-darwin-64@1.10.3: - resolution: {integrity: sha512-IIB9IomJGyD3EdpSscm7Ip1xVWtYb7D0x7oH3vad3gjFcjHJzDz9xZ/iw/qItFEW+wGFcLSRPd+1BNnuLM8AsA==} + /turbo-darwin-64@1.10.7: + resolution: {integrity: sha512-N2MNuhwrl6g7vGuz4y3fFG2aR1oCs0UZ5HKl8KSTn/VC2y2YIuLGedQ3OVbo0TfEvygAlF3QGAAKKtOCmGPNKA==} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /turbo-darwin-arm64@1.10.3: - resolution: {integrity: sha512-SBNmOZU9YEB0eyNIxeeQ+Wi0Ufd+nprEVp41rgUSRXEIpXjsDjyBnKnF+sQQj3+FLb4yyi/yZQckB+55qXWEsw==} + /turbo-darwin-arm64@1.10.7: + resolution: {integrity: sha512-WbJkvjU+6qkngp7K4EsswOriO3xrNQag7YEGRtfLoDdMTk4O4QTeU6sfg2dKfDsBpTidTvEDwgIYJhYVGzrz9Q==} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /turbo-linux-64@1.10.3: - resolution: {integrity: sha512-kvAisGKE7xHJdyMxZLvg53zvHxjqPK1UVj4757PQqtx9dnjYHSc8epmivE6niPgDHon5YqImzArCjVZJYpIGHQ==} + /turbo-linux-64@1.10.7: + resolution: {integrity: sha512-x1CF2CDP1pDz/J8/B2T0hnmmOQI2+y11JGIzNP0KtwxDM7rmeg3DDTtDM/9PwGqfPotN9iVGgMiMvBuMFbsLhg==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /turbo-linux-arm64@1.10.3: - resolution: {integrity: sha512-Qgaqln0IYRgyL0SowJOi+PNxejv1I2xhzXOI+D+z4YHbgSx87ox1IsALYBlK8VRVYY8VCXl+PN12r1ioV09j7A==} + /turbo-linux-arm64@1.10.7: + resolution: {integrity: sha512-JtnBmaBSYbs7peJPkXzXxsRGSGBmBEIb6/kC8RRmyvPAMyqF8wIex0pttsI+9plghREiGPtRWv/lfQEPRlXnNQ==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /turbo-windows-64@1.10.3: - resolution: {integrity: sha512-rbH9wManURNN8mBnN/ZdkpUuTvyVVEMiUwFUX4GVE5qmV15iHtZfDLUSGGCP2UFBazHcpNHG1OJzgc55GFFrUw==} + /turbo-windows-64@1.10.7: + resolution: {integrity: sha512-7A/4CByoHdolWS8dg3DPm99owfu1aY/W0V0+KxFd0o2JQMTQtoBgIMSvZesXaWM57z3OLsietFivDLQPuzE75w==} cpu: [x64] os: [win32] requiresBuild: true dev: true optional: true - /turbo-windows-arm64@1.10.3: - resolution: {integrity: sha512-ThlkqxhcGZX39CaTjsHqJnqVe+WImjX13pmjnpChz6q5HHbeRxaJSFzgrHIOt0sUUVx90W/WrNRyoIt/aafniw==} + /turbo-windows-arm64@1.10.7: + resolution: {integrity: sha512-D36K/3b6+hqm9IBAymnuVgyePktwQ+F0lSXr2B9JfAdFPBktSqGmp50JNC7pahxhnuCLj0Vdpe9RqfnJw5zATA==} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /turbo@1.10.3: - resolution: {integrity: sha512-U4gKCWcKgLcCjQd4Pl8KJdfEKumpyWbzRu75A6FCj6Ctea1PIm58W6Ltw1QXKqHrl2pF9e1raAskf/h6dlrPCA==} + /turbo@1.10.7: + resolution: {integrity: sha512-xm0MPM28TWx1e6TNC3wokfE5eaDqlfi0G24kmeHupDUZt5Wd0OzHFENEHMPqEaNKJ0I+AMObL6nbSZonZBV2HA==} hasBin: true requiresBuild: true optionalDependencies: - turbo-darwin-64: 1.10.3 - turbo-darwin-arm64: 1.10.3 - turbo-linux-64: 1.10.3 - turbo-linux-arm64: 1.10.3 - turbo-windows-64: 1.10.3 - turbo-windows-arm64: 1.10.3 + turbo-darwin-64: 1.10.7 + turbo-darwin-arm64: 1.10.7 + turbo-linux-64: 1.10.7 + turbo-linux-arm64: 1.10.7 + turbo-windows-64: 1.10.7 + turbo-windows-arm64: 1.10.7 dev: true /tween-functions@1.2.0: @@ -19593,6 +19961,17 @@ packages: browserslist: 4.21.5 escalade: 3.1.1 picocolors: 1.0.0 + dev: true + + /update-browserslist-db@1.0.11(browserslist@4.21.9): + resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.21.9 + escalade: 3.1.1 + picocolors: 1.0.0 /update-notifier@2.5.0: resolution: {integrity: sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==} @@ -19644,7 +20023,7 @@ packages: is-yarn-global: 0.3.0 latest-version: 5.1.0 pupa: 2.1.1 - semver: 7.5.3 + semver: 7.5.4 semver-diff: 3.1.1 xdg-basedir: 4.0.0 dev: true @@ -19718,7 +20097,7 @@ packages: optional: true dependencies: react: 18.2.0 - tslib: 2.5.3 + tslib: 2.5.2 dev: false /use-memo-one@1.1.3(react@18.2.0): @@ -19741,7 +20120,7 @@ packages: dependencies: detect-node-es: 1.1.0 react: 18.2.0 - tslib: 2.5.3 + tslib: 2.5.2 dev: false /use-sync-external-store@1.2.0(react@18.2.0): @@ -19827,7 +20206,7 @@ packages: resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} engines: {node: '>=10.12.0'} dependencies: - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/trace-mapping': 0.3.18 '@types/istanbul-lib-coverage': 2.0.4 convert-source-map: 1.9.0 dev: true @@ -19978,7 +20357,7 @@ packages: hasBin: true dependencies: '@discoveryjs/json-ext': 0.5.7 - acorn: 8.9.0 + acorn: 8.10.0 acorn-walk: 8.2.0 chalk: 4.1.2 commander: 7.2.0 @@ -20171,9 +20550,9 @@ packages: '@webassemblyjs/ast': 1.11.1 '@webassemblyjs/wasm-edit': 1.11.1 '@webassemblyjs/wasm-parser': 1.11.1 - acorn: 8.9.0 - acorn-import-assertions: 1.8.0(acorn@8.9.0) - browserslist: 4.21.5 + acorn: 8.10.0 + acorn-import-assertions: 1.8.0(acorn@8.10.0) + browserslist: 4.21.9 chrome-trace-event: 1.0.3 enhanced-resolve: 5.12.0 es-module-lexer: 0.9.3 @@ -20332,10 +20711,10 @@ packages: engines: {node: '>=10.0.0'} dependencies: '@apideck/better-ajv-errors': 0.3.6(ajv@8.11.0) - '@babel/core': 7.22.5 - '@babel/preset-env': 7.22.5(@babel/core@7.22.5) + '@babel/core': 7.22.9 + '@babel/preset-env': 7.22.9(@babel/core@7.22.9) '@babel/runtime': 7.21.0 - '@rollup/plugin-babel': 5.3.1(@babel/core@7.22.5)(rollup@2.79.1) + '@rollup/plugin-babel': 5.3.1(@babel/core@7.22.9)(rollup@2.79.1) '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.1) '@rollup/plugin-replace': 2.4.2(rollup@2.79.1) '@surma/rollup-plugin-off-main-thread': 2.2.3 @@ -20522,7 +20901,7 @@ packages: dependencies: ansi-styles: 6.2.1 string-width: 5.1.2 - strip-ansi: 7.1.0 + strip-ansi: 7.0.1 dev: true /wrappy@1.0.2: @@ -20731,7 +21110,7 @@ packages: readable-stream: 3.6.0 dev: true - /zod-prisma@0.5.4(prisma@4.16.2)(zod@3.21.4): + /zod-prisma@0.5.4(prisma@5.0.0)(zod@3.21.4): resolution: {integrity: sha512-5Ca4Qd1a1jy1T/NqCEpbr0c+EsbjJfJ/7euEHob3zDvtUK2rTuD1Rc/vfzH8q8PtaR2TZbysD88NHmrLwpv3Xg==} engines: {node: '>=14'} hasBin: true @@ -20745,7 +21124,7 @@ packages: dependencies: '@prisma/generator-helper': 3.8.1 parenthesis: 3.1.8 - prisma: 4.16.2 + prisma: 5.0.0 ts-morph: 13.0.3 zod: 3.21.4 dev: true @@ -20756,7 +21135,3 @@ packages: /zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} dev: false - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false