diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS deleted file mode 100644 index 3edecfe1b6..0000000000 --- a/.github/CODEOWNERS +++ /dev/null @@ -1,37 +0,0 @@ -# This is a comment. -# Each line is a file pattern followed by one or more owners. - -# These owners will be the default owners for everything in -# the repo. Unless a later match takes precedence, -# @global-owner1 and @global-owner2 will be requested for -# review when someone opens a pull request. -# ⬇️ Removed so we can manually trigger checks -# * @calcom/reviewers - -.github/ @calcom/core -.husky/ @calcom/core -.vcode/ @calcom/core -.snaplet/ @calcom/core -deploy/ @calcom/core -scripts/ @calcom/core - -apps/docs @calcom/docs -apps/swagger @calcom/docs - -packages/app-store-cli @hariombalhara @calcom/core -packages/dayjs @zomars @calcom/core -packages/emails @zomars @calcom/core -packages/embeds @hariombalhara @calcom/core -packages/eslint-plugin @zomars @calcom/core -packages/features @zomars @calcom/core -packages/features/kbar @alishaz-polymath @calcom/core -packages/features/ee/impersonation @sean-brydon @calcom/core -packages/features/ee/payments @alannnc @calcom/core -packages/features/ee/workflows @CarinaWolli @calcom/core -packages/features/tips @PeerRich @calcom/core -# Trivial changes should be mergeable by core team as well -# Major UI changes must be reviewed by UI team -# Critical changes even if major can still be merged by core team if needed. -packages/ui @calcom/ui @calcom/core -packages/config @calcom/core -packages/app-store/routing-forms @hariombalhara @calcom/core diff --git a/.infisical.json b/.infisical.json deleted file mode 100644 index c7fe4ccd1f..0000000000 --- a/.infisical.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "workspaceId": "63ea8121b6e2b0543ba79616", - "defaultEnvironment": "dev", - "gitBranchToEnvironmentMapping": { - "main": "staging", - "production": "prod" - } -} diff --git a/.prettierignore b/.prettierignore index 7944833941..013d82b3a2 100644 --- a/.prettierignore +++ b/.prettierignore @@ -7,6 +7,7 @@ public *.lock *.log +*.test.ts .gitignore .npmignore diff --git a/apps/docs/.gitignore b/apps/docs/.gitignore deleted file mode 100644 index fbea7fdedb..0000000000 --- a/apps/docs/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -node_modules -.next -.DS_Store -yarn-error.log -dist -examples -packages \ No newline at end of file diff --git a/apps/docs/.nvmrc b/apps/docs/.nvmrc deleted file mode 100644 index 3f430af82b..0000000000 --- a/apps/docs/.nvmrc +++ /dev/null @@ -1 +0,0 @@ -v18 diff --git a/apps/docs/.prettierignore b/apps/docs/.prettierignore deleted file mode 100644 index f74c78183c..0000000000 --- a/apps/docs/.prettierignore +++ /dev/null @@ -1,2 +0,0 @@ -.next -node_modules diff --git a/apps/docs/LICENSE b/apps/docs/LICENSE deleted file mode 100644 index 6734428423..0000000000 --- a/apps/docs/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2020 Shu Ding - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/apps/docs/README.md b/apps/docs/README.md deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/apps/docs/components/Anchor.tsx b/apps/docs/components/Anchor.tsx deleted file mode 100644 index b7322b6bf8..0000000000 --- a/apps/docs/components/Anchor.tsx +++ /dev/null @@ -1,21 +0,0 @@ -function getAnchor(text) { - return text - .toLowerCase() - .replace(/[^a-z0-9 ]/g, "") - .replace(/[ ]/g, "-") - .replace(/ /g, "%20"); -} - -export default function Anchor({ as, children }) { - const anchor = getAnchor(children); - const link = `#${anchor}`; - const Component = as || "div"; - return ( - - - § - - {children} - - ); -} diff --git a/apps/docs/lib/useWindowSize.ts b/apps/docs/lib/useWindowSize.ts deleted file mode 100644 index 1987e6f363..0000000000 --- a/apps/docs/lib/useWindowSize.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { useState, useEffect } from "react"; - -// Define general type for useWindowSize hook, which includes width and height -export interface Size { - width: number | undefined; - height: number | undefined; -} -// Hook from: https://usehooks.com/useWindowSize/ -export function useWindowSize(): Size { - // Initialize state with undefined width/height so server and client renders match - // Learn more here: https://joshwcomeau.com/react/the-perils-of-rehydration/ - const [windowSize, setWindowSize] = useState({ - width: undefined, - height: undefined, - }); - useEffect(() => { - // Handler to call on window resize - function handleResize() { - // Set window width/height to state - setWindowSize({ - width: window.innerWidth, - height: window.innerHeight, - }); - } - // Add event listener - window.addEventListener("resize", handleResize); - // Call handler right away so state gets updated with initial window size - handleResize(); - // Remove event listener on cleanup - return () => window.removeEventListener("resize", handleResize); - }, []); // Empty array ensures that effect is only run on mount - return windowSize; -} diff --git a/apps/docs/next-env.d.ts b/apps/docs/next-env.d.ts deleted file mode 100644 index 4f11a03dc6..0000000000 --- a/apps/docs/next-env.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/// -/// - -// NOTE: This file should not be edited -// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/apps/docs/next.config.js b/apps/docs/next.config.js deleted file mode 100644 index dce01e92c1..0000000000 --- a/apps/docs/next.config.js +++ /dev/null @@ -1,17 +0,0 @@ -/* eslint-disable @typescript-eslint/no-var-requires */ -const withNextra = require("nextra")({ - theme: "nextra-theme-docs", - themeConfig: "./theme.config.js", - unstable_staticImage: true, -}); -module.exports = withNextra({ - async rewrites() { - return [ - // This redirects requests recieved at /api to /public-api to workaround nextjs default use of /api. - { - source: "/api", - destination: "/public-api", - }, - ]; - }, -}); diff --git a/apps/docs/package.json b/apps/docs/package.json deleted file mode 100644 index 236c09a272..0000000000 --- a/apps/docs/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "@calcom/docs", - "version": "1.0.0", - "private": true, - "description": "", - "main": "index.js", - "scripts": { - "build": "next build", - "clean": "rm -rf .turbo && rm -rf node_modules && rm -rf .next", - "dev": "PORT=4000 next", - "lint": "eslint . --ignore-path .gitignore", - "lint:fix": "eslint . --ext .ts,.js,.tsx,.jsx --fix", - "lint:report": "eslint . --format json --output-file ../../lint-results/docs.json", - "start": "PORT=4000 next start", - "type-check": "tsc --pretty --noEmit", - "type-check:ci": "tsc-absolute --pretty --noEmit" - }, - "author": "Cal.com, Inc.", - "license": "MIT", - "dependencies": { - "iframe-resizer-react": "^1.1.0", - "next": "^13.2.1", - "nextra": "^1.1.0", - "nextra-theme-docs": "^1.2.2", - "react": "^18.2.0", - "react-dom": "^18.2.0" - }, - "devDependencies": { - "@calcom/config": "*" - } -} diff --git a/apps/docs/pages/_app.tsx b/apps/docs/pages/_app.tsx deleted file mode 100644 index e8aad3b926..0000000000 --- a/apps/docs/pages/_app.tsx +++ /dev/null @@ -1,8 +0,0 @@ -import type { AppProps } from "next/app"; -import "nextra-theme-docs/style.css"; - -import "./style.css"; - -export default function Nextra({ Component, pageProps }: AppProps) { - return ; -} diff --git a/apps/docs/pages/availability.mdx b/apps/docs/pages/availability.mdx deleted file mode 100644 index 878d38a398..0000000000 --- a/apps/docs/pages/availability.mdx +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: Availability ---- - -# Availability - -## Setting your availability - -1. Go to [Your Availability](https://app.cal.com/availability) page within your cal.com account. -2. On the availability page you can manage your availability to suit your working day accordingly. -You can also troubleshoot your availability if your calendar does not look like it is blocking out the correct times. - - -## Troubleshooting availability - -This will tell you when your calendar shows you as busy, so you can understand why Cal is blocking certain times. - -## How to troubleshoot availability - -1. Go to [Your Availability](https://app.cal.com/availability). -2. To the right of your screen a box saying 'Something doesn't look right?' will appear. Press the button 'Launch Troubleshooter'. -3. After pressing this, your availability will appear according to your calendar and inform you of the times booked up for that day! - -By doing this you will know understand why certain times are available and others are blocked. - -## In team settings availability set to only Mondays but the calendar shows availability on other days as well -It’s showing as available on days other than Monday because only you have set your availability to only Mondays, whereas the rest of the team haven't made that setting. diff --git a/apps/docs/pages/billing.mdx b/apps/docs/pages/billing.mdx deleted file mode 100644 index 36ede5c157..0000000000 --- a/apps/docs/pages/billing.mdx +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: Billing ---- - -# Billing -## How the trial works -You are given FREE access for 14 days of our PRO subscription, you can use this to test and try out our product and see if it works for you. No credit card is required to sign up and you decide if you want to upgrade to a PRO subscription afterwards. - -## How to cancel the trial -If you are looking to cancel the trial and want to downgrade to the free option you can contact our support team where we will be happy to help you make that change! - -## How to upgrade -If you are looking at upgrading from our FREE subscription to our PRO subscription, head over to cal.com/upgrade where you can easily upgrade hassle free. - -## How to downgrade -1. Go to your [Billing Settings](https://app.cal.com/settings/billing). -2. From here you can press the button called `Go to the billing Portal`. That will take you to the page where you can upgrade/downgrade your plan. - -## How to delete your account -You can delete your account from within the [Settings](https://app.cal.com/settings/profile) option. Just scroll all the way down and click on `Delete Account`. - -## Purchasing a premium username -We've reserved a ton of premium usernames, such as short handles or first names to prevent name squatters. To find out if your username is premium, head over to [cal.com/signup](https://cal.com/signup) and choose your desired username. From here you will be taken straight to checkout and after proceeding your Cal.com account will be created with your desired username. - -## Manage your subscription -1. Go to your [Billing Settings](https://app.cal.com/settings/billing). -2. From here you can press the button called `Go to the billing Portal`. -3. This will take you to an external site provided by Stripe as they deal with all our payments. - -Some users may not be able to access Billing as their billing email is different to their account email. If this is the case, you can change the email associated with your account in [Profile Settings](https://app.cal.com/settings/profile). - -## Subscription for each team member -If your team requires multiple event types then each team member has to be subscribed to our paid plan. If that is something that isn’t necessary for your team, you can proceed with your FREE plan. - -## Discount for non-profits and students -We offer 50% for non-profit organizations and students. Just raise a ticket with our support team and submit the necessary proof of status. - diff --git a/apps/docs/pages/bookings.mdx b/apps/docs/pages/bookings.mdx deleted file mode 100644 index 0519aeec30..0000000000 --- a/apps/docs/pages/bookings.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: Bookings ---- - -# Bookings - -## What can you do on the bookings page? - -On the bookings page you are able to see upcoming and past events booked through your event type links. This page also lets you cancel or reschedule upcoming events users have scheduled. - -## How to view bookings - -1. Go to [your upcoming and past bookings](https://app.cal.com/bookings/upcoming). -2. On this page you can see upcoming and past events booked through your event type links. - -## Reschedule bookings - -1. Go to [your rescheduled bookings](https://app.cal.com/bookings/upcoming). -2. Hovering over the event you want to reschedule, click the button saying 'Reschedule' -3. Clicking 'Reschedule' will bring you to your Cal booking page. Select a new Time and Date. -4. After selecting this you can go ahead and click that 'Reschedule' Button! -5. After, you and your attendee will receive a new confirmation email of your new date and time. - -## Cancel bookings - -1. Go to [your cancelled](https://app.cal.com/bookings/cancelled). -2. Hovering over the event you want to cancel, click the button saying 'Cancel' -3. Once done, you will receive a confirmation message saying 'Really cancel your booking?'. After confirming you can go ahead and click the red 'Cancel' button at the bottom of your screen. -4. After, you and your attendee will receive a new confirmation email of your event being cancelled. diff --git a/apps/docs/pages/contributing.mdx b/apps/docs/pages/contributing.mdx deleted file mode 100644 index 0714ddd466..0000000000 --- a/apps/docs/pages/contributing.mdx +++ /dev/null @@ -1,83 +0,0 @@ ---- -title: Contributing ---- - -# Contributing - -Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are **greatly appreciated**. - -- Before jumping into a PR be sure to search [existing PRs](https://github.com/calcom/cal.com/pulls) or [issues](https://github.com/calcom/cal.com/issues) for an open or closed item that relates to your submission. - -## Developing - -The development branch is `main`. This is the branch that all pull -requests should be made against. The changes on the `main` -branch are tagged into a release monthly. - -To develop locally: - -1. [Fork](https://help.github.com/articles/fork-a-repo/) this repository to your - own GitHub account and then - [clone](https://help.github.com/articles/cloning-a-repository/) it to your local device. -2. Create a new branch: - - ```sh - git checkout -b MY_BRANCH_NAME - ``` - -3. Install yarn: - - ```sh - npm install -g yarn - ``` - -4. Install the dependencies with: - - ```sh - yarn - ``` - -5. Start developing and watch for code changes: - - ```sh - yarn dev - ``` - -## Building - -You can build the project with: - -```bash -yarn build -``` - -Please be sure that you can make a full production build before pushing code. - -## Testing - -More info on how to add new tests coming soon. - -### Running tests - -This will run and test all flows in multiple Chromium windows to verify that no critical flow breaks: - -```sh -yarn test-e2e -``` - -## Linting - -To check the formatting of your code: - -```sh -yarn lint -``` - -If you get errors, be sure to fix them before comitting. - -## Making a Pull Request - -- Be sure to [check the "Allow edits from maintainers" option](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/allowing-changes-to-a-pull-request-branch-created-from-a-fork) while creating you PR. -- If your PR refers to or fixes an issue, be sure to add `refs #XXX` or `fixes #XXX` to the PR description. Replacing `XXX` with the respective issue number. Se more about [Linking a pull request to an issue - ](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue). -- Be sure to fill the PR Template accordingly. diff --git a/apps/docs/pages/developer/adding-css.mdx b/apps/docs/pages/developer/adding-css.mdx deleted file mode 100644 index 219d1187dd..0000000000 --- a/apps/docs/pages/developer/adding-css.mdx +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: Adding CSS ---- - -import Callout from "nextra-theme-docs/callout"; - -# Adding CSS - - - Adding or modifying CSS counts as changing the code, so as per [our license](https://github.com/calcom/cal.com/blob/main/LICENSE) you must either open-source your modified version or purchase an enterprise license. - - -Cal.com uses [TailwindCSS](https://tailwindcss.com) as a replacement for traditional CSS styling within the application, but some people prefer to add CSS styles themselves. - -CSS files should be stored in the `styles` directory within the codebase. - -Within the `styles` directory, you will find a single CSS file, `global.css`. We suggest not to add to this file, and instead create new CSS files and import them into the application. This helps reduce conflicts when pulling in changes that we've made to either of the existing CSS files. - -## Adding new stylesheets -Firstly, create the CSS file inside the `styles` directory. - -Then, open the `pages/_app.tsx` file, and you will see the following two lines: -```javascript -import "../styles/globals.css"; -``` - -Duplicate one of these import statements and change the path to link to your new CSS stylesheet, like so: -```javascript -import "../styles/your-new-stylesheet.css"; -``` - - - These styles will apply to all pages and components in your application. - - -Due to the global nature of stylesheets, and to avoid conflicts, you may **only import them inside `pages/_app.tsx`**. diff --git a/apps/docs/pages/developer/app-store.mdx b/apps/docs/pages/developer/app-store.mdx deleted file mode 100644 index c0acd23996..0000000000 --- a/apps/docs/pages/developer/app-store.mdx +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: Contributing to App Store ---- - -# Contributing to the App Store - -Since Cal.com is open source we encourage developers to create new apps for others to use. This guide is to help you get started. - -## Structure - -All apps can be found under `packages/app-store`. In this folder is `_example` which shows the general structure of an app. - -```sh -├──_example -| -| ├──api -| | ├──example.ts -| | ├──index.ts -| -| ├──components -| | ├──InstallAppButton.tsx -| | ├──index.ts -| -| ├──lib -| | ├──adaptor.ts -| | ├──index.ts -| -| ├──static -| | ├──icon.svg -| -| ├──index.ts -| ├──package.json -| ├──.env.example -| ├──DESCRIPTION.md -``` - -## Getting Started - -In the `package.json` name your package appropriately and list the dependencies needed for the package. - -Next in the `.env.example` specify the environmental variables (ex. auth token, API secrets) that your app will need. In a comment add a link to instructions on how to obtain the credentials. Create a `.env` with your the filled in environmental variables. - -In `index.js` fill out the meta data that will be rendered on the app page. Under `packages/app-store/index.ts`, import your app and add it under `appStore`. Your app should now appear in the app store. - -Under the `/api` folder, this is where any API calls that are associated with your app will be handled. Since cal.com uses Next.js we use dynamic API routes. In this example if we want to hit `/api/example.ts` the route would be `{BASE_URL}/api/integrations/_example/example`. Export your endpoints in an `index.ts` file under `/api` folder and import them in your main `index.ts` file. - -Under the `/components` folder, this is where the install button for your app should live. Follow the template under `_example` to add your on click action (ex. Redirecting to a log in page or opening a modal). - -The `/lib` folder is where the functions of your app live. For example, when creating a booking with a MS Teams link the function to make the call to grab the link lives in the `/lib` folder. Export your endpoints in an `index.ts` file under `/lib` folder and import them in your main `index.ts` file. - -On the app store page you can customize your apps description by adding a markdown file called `DESCRIPTION.md`. If you do not add one then the description from you `package.json` will be used instead. - -The `/static` folder is where you can store your app icon and any images that your `DESCRIPTION.md` may use. - -## Adding Your App to the App Store -To render your app on the app store page, go to `packages/app-store/index.ts`. Import your app into the file and add it to the `appStore` object. - -Under `packages/app-store/components.tsx`, in the `InstallAppButtonMap` object dynamically import your install button. Your install button should live under `{your_app}/components`. - -If you need any help feel free to join us on [Slack](https://cal.com/slack) diff --git a/apps/docs/pages/developer/code-styling.mdx b/apps/docs/pages/developer/code-styling.mdx deleted file mode 100644 index b18a4cf26b..0000000000 --- a/apps/docs/pages/developer/code-styling.mdx +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Code styling ---- - -# Code Styling -Keeping our code styles consistent is key to making the repository easy to read and work with. - -We use a number of style guides written by other amazing companies, simply because they are widely used and because we like working with them. - -We don't expect you to study every single rule of each style guide, but these are great reference points as to how your code should be styled. We may reject a pull request if your code style significantly differs from these style guides however. - -## ESLint & Prettier -Cal.com uses the ESLint and Prettier formatting tools, and the repository comes with defined rules for each tool. We recommend setting up both tools and using these to help automatically style your code to our guidelines. - -## JavaScript/TypeScript -We use the [Airbnb JavaScript Style Guide](https://github.com/airbnb/javascript) for all JavaScript and TypeScript code. - -## HTML & CSS -We use the [Google HTML/CSS Style Guide](https://google.github.io/styleguide/htmlcssguide.html) for any HTML and CSS markup. However, exceptions to the HTML guide apply where JSX differentiates from standard HTML. diff --git a/apps/docs/pages/developer/meta.json b/apps/docs/pages/developer/meta.json deleted file mode 100644 index be45eb35eb..0000000000 --- a/apps/docs/pages/developer/meta.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "migrations": "Migrations", - "pre-fill": "Pre-fill fields", - "code-styling": "Code styling", - "project-structure": "Project structure", - "pull-requests": "Pull requests", - "adding-css": "Adding CSS", - "app-store": "Contributing to App Store" -} diff --git a/apps/docs/pages/developer/migrations.mdx b/apps/docs/pages/developer/migrations.mdx deleted file mode 100644 index 28d5acefa3..0000000000 --- a/apps/docs/pages/developer/migrations.mdx +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Migrations ---- - -# Database Migrations -As described in the [upgrade guide](https://docs.cal.com/self-hosting/upgrade), you should use the `yarn workspace @calcom/prisma db-migrate` or `yarn workspace @calcom/prisma db-deploy` command to update the database. - -We use database migrations in order to handle changes to the database schema in a more secure and stable way. This is actually very common. The thing is that when just changing the schema in `schema.prisma` without creating migrations, the update to the newer database schema can damage or delete all data in production mode, since the system sometimes doesn't know how to transform the data from A to B. Using migrations, each step is reproducable, transparent and can be undone in a simple way. - -## Creating migrations -If you are modifying the codebase and make a change to the `schema.prisma` file, you must create a migration. - -To create a migration for your previously changed `schema.prisma`, simply run the following: -```sh -yarn workspace @calcom/prisma db-migrate -``` - -Now, you must create a short name for your migration to describe what changed (for example, "user_add_email_verified"). Then just add and commit it with the corresponding code that uses your new database schema. - -:::caution - -Always keep an eye on what migrations Prisma is generating. Prisma often happily will drop entire columns of data because it can't figure out what to do. - -::: - -## Error: The database schema is not empty -Prisma uses a database called `_prisma_migrations` to keep track of which migrations have been applied and which haven't. If your local migrations database doesn't match up with what's in the actual database, then Prisma will throw the following error: -```text -Error: P3005 - -The database schema for `localhost:5432` is not empty. Read more about how to baseline an existing production database: https://pris.ly/d/migrate-baseline -``` - -In order to fix this, we need to tell Prisma which migrations have already been applied. - -This can be done by running the following command, replacing `migration_name` with each migration that you have already applied: -```sh -yarn prisma migrate resolve --applied migration_name -``` - -You will need to run the command for each migration that you want to mark as applied. diff --git a/apps/docs/pages/developer/pre-fill.mdx b/apps/docs/pages/developer/pre-fill.mdx deleted file mode 100644 index e4c6075811..0000000000 --- a/apps/docs/pages/developer/pre-fill.mdx +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Pre-fill fields ---- - -# Pre-fill fields - -You can pre-fill a number of fields on the booking form by using their corresponding URL parameters. This can include the user’s name, email, or guests to be added to the booking. - -Usually when they go to the link, all that is needed will be the time of the booking, and the form will be pre-filled with the information given. - -Pre-filling booking fields can save a lot of time and speed up processes with filling out these forms, and assist with a smooth integration with your existing website or app. - -You can pre-fill a user’s name and email address like so: -```text -cal.com/rick/quick-chat/?email=attendee@example.com&name=John -``` -The data is persisted through the 3 booking pages; and is used to prefill the booking form. - -Guests can also be added to the link, there is also no limit to the amount of guests you wish to add. - -These should be added to your link like this: -```text -guest=guest1@example.com&guest=guest2@example.com -``` diff --git a/apps/docs/pages/developer/project-structure.mdx b/apps/docs/pages/developer/project-structure.mdx deleted file mode 100644 index 72449b6e37..0000000000 --- a/apps/docs/pages/developer/project-structure.mdx +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: Project structure ---- - -# Project Structure - -This page gives an overview of how the codebase is structured so you can easily dive into the Cal.com code. - -Cal.com is written in Next.js, so you will find that we follow Next.js best practices for structure and layouts. - -## Basic folder structure - -The project comprises of the following folder structure: - -```text -.github/ - GitHub configuration files - ISSUE_TEMPLATE/ - workflows/ -.husky/ - Git hooks -.vscode/ - VS Code editor configuration -components/ - Application components - booking/ - dialog/ - team/ - ui/ -lib/ - Reusable code - emails/ - events/ - forgot-password/messaging/ - integrations/CalDav/ - teams/ -pages/ - Most of the project lives here - [user]/ - Booking pages - api/ - The backend API - auth/ - Next-Auth.js and other authentication routes - availability/ - bookings/ - cancel/ - event-types/ - integrations/ - reschedule/ - settings/ - team/ -prisma/ - The database schema and migrations - migrations/ -public/ - Images and static files - integrations/ -styles/ -test/lib/ -``` diff --git a/apps/docs/pages/developer/pull-requests.mdx b/apps/docs/pages/developer/pull-requests.mdx deleted file mode 100644 index 56d698d0f3..0000000000 --- a/apps/docs/pages/developer/pull-requests.mdx +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: Pull requests ---- - -# Pull Requests - -## Requirements - -We have a number of requirements for PRs to ensure they are as easy to review as possible and to ensure that they are up to standard with the code. - -### Title & Content - -Start by providing a short and concise title. Don’t put something generic (e.g. bug fixes), and instead mention more specifically what your PR achieves, for instance “Fixes dropdown not expanding on settings page”. - -For the PR description, you should go into much greater detail about what your PR adds or fixes. Firstly, the description should include a link to any relevant issues or discussions surrounding the feature or bug that your PR addresses. - -#### Feature PRs - -Give a functional overview of how your feature works, including how the user can use the feature. Then, share any technical details in an overview of how the PR works (e.g. “Once the user enters their password, the password is hashed using BCrypt and stored in the Users database field”). - -#### Bug Fix PRs - -Give an overview of how your PR fixes the bug both as a high-level overview and a technical explanation of what caused the issue and how your PR resolves this. - -Feel free to add a short video or screenshots of what your PR achieves. Loom is a great way of sharing short videos. - -### Code Quality & Styling - -All submitted code must match our [code styling](/docs/code-styling) standards. We will reject pull requests that differ significantly from our standardised code styles. - -All code is automatically checked by Codacy and our linting process, and will notify you if there are any issues with the code that you submit. We require that code passes these quality checks before merging. - -## PR review process - -At least two members of the Calendso team should review and approve any PR before it is merged. - -Once two members of the team have approved this, someone from the team will merge the PR. If you are part of the Calendso team, you should merge your own PRs once you have received both approvals. diff --git a/apps/docs/pages/event-types.mdx b/apps/docs/pages/event-types.mdx deleted file mode 100644 index 8d34cfb87a..0000000000 --- a/apps/docs/pages/event-types.mdx +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Event Types ---- - -# Event Types -Event types allow you to create different events for different occasions when booking a time with you in your calendar. These can be named differently, have different time durations and the choice of platform can change. - -## Creating an event type -1. Go to [Your Event Types](https://app.cal.com/event-types). -2. Click the button at the top right of your screen saying '+ New Event Type'. -3. Create the title of your new event. -4. Confirm the auto-generated event type URL. -5. Create a description on what your event will be used for. -6. Decide on the amount of minutes you wish for this event to last for. -7. Press 'Continue' -8. Your event has now been created! - -## Editing event types -1. Go to [Your Event Types](https://app.cal.com/event-types). -2. Click anywhere within the box of the event you would like to edit. - (From here you can edit the basic settings of your event) -3. To get the advanced options, at the bottom of your event setting click 'Show Advanced Settings' -4. After you have finished editing the event type, scroll to the bottom of your page and select 'Update' -5. Your event type has now been updated. - -## Deleting event types -1. Go to [Your Event Types](https://app.cal.com/event-types). -2. Click anywhere within the box of the event, just like you would if you were editing the event. -3. From this page, just to the right, a button saying 'delete' will appear. Click this and your event will be deleted! - -## How to block a time slot before/after a meeting -You can block out a time frame in your calendar only after the meeting. You can do this by selecting `Show advanced settings` of your Event Type. The setting is labeled `Time-slot intervals`. - -## Setting up specific availability for each type of Event -Head to `Show advanced settings` of your event. At the bottom you can set up specific availability for different Event Types. - -## Availability not showing on a certain day in your calendar -Head over to your event and once you click on `Show advanced settings`, make sure your time zones are correct. Also, check if you have any calendar events scheduled that could overlap with your availability. - -## People can't book me even though there is still a couple of hours left on my availability for today -Head over to your event and once you click on `Show advanced settings`, have a look at the `Minimum booking notice`. It probably overlaps with your availability so make sure that notice fits your desired time frame for meetings. For example, if someone wants to book a meeting with you at 16:15 and it’s already 15:30, your 90 minutes minimum booking notice doesn’t allow that meeting to be booked. - - diff --git a/apps/docs/pages/faq.mdx b/apps/docs/pages/faq.mdx deleted file mode 100644 index dcc176fc30..0000000000 --- a/apps/docs/pages/faq.mdx +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: FAQs ---- - -# Frequently asked questions - -## Does Cal.com support a custom domain? -This is possible with our self-hosted option. - -## Is there a possibility of multi-bookings for events where more people can book at the same time? -As it stands this is currently not possible. We always keep an eye on the limitations like these that our users point to us. We’ve had requests in the past for the multi-booking feature and this is on our priority list. - -## How to quickly block further bookings? -1. Click on the lower left corner of your dashboard where your username is displayed. -2. That initiates a dropdown menu. Click on `Set yourself as away`. - -This is a method to disable your Cal.com account which won't allow any bookings once initiated. However, bookings made before turning on *away mode* will still be booked. diff --git a/apps/docs/pages/import.mdx b/apps/docs/pages/import.mdx deleted file mode 100644 index dac0d5e3a2..0000000000 --- a/apps/docs/pages/import.mdx +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: Import ---- - -import Callout from "nextra-theme-docs/callout"; - -# Import data from other scheduling tools - -When setting up your Cal.com account via the onboarding process, you can import data from other scheduling tools, such as Calendly or SavvyCal. All that you need to import your data is an access token, which you can retrieve from your Calendly/SavvyCal account. - -Once you've pasted your access token, we import your account data in less than a second. - -Naturally, we take security very seriously when it comes to importing your data from other accounts, so that's why we never store your access token, and use it once to query the Calendly/SavvyCal APIs, populate your account with the data it returns, and then your key is destroyed from memory. All of the importer code can be [freely viewed on GitHub](https://github.com/calcom/cal.com/tree/main/pages/api/import), so you can be assured we're not using your data for malicious purposes. - -## Calendly -The following steps will help you retrieve your Calendly access token, which you will need to present at the import screen of the onboarding process. -1. Go to the Calendly website and click on **My Account** in the top right -2. Now click on **Integrations** in the top right -3. Scroll to the bottom and click on **API & Webhooks** -4. Click the blue **Generate new token** button and type in anything you'd like as the app name -5. Press **Copy token** and then paste it into the Cal.com importer - - Even though we don't store your access token, you can press **Revoke** to destroy the access token from the **API & Webhooks** page once the import is complete. - - -## SavvyCal -The following steps will help you retrieve your SavvyCal access token, which you will need to present at the import screen of the onboarding process. -1. Head to the SavvyCal website and click **Settings** in the sidebar -2. Click the **Developers** tab, and under **Personal access tokens**, click the blue **Create a token** link -3. Give the token any name you'd like, and then confirm -4. Click to copy the token, and then paste the token into the Cal.com importer - - Even though we don't store your access token, you can press the trash icon to revoke the access token from the **Developers** tab once the import is complete. - diff --git a/apps/docs/pages/index.mdx b/apps/docs/pages/index.mdx deleted file mode 100644 index 94b8d51ebb..0000000000 --- a/apps/docs/pages/index.mdx +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Home ---- - -import Bleed from "nextra-theme-docs/bleed"; - -# Cal.com Documentation - -Welcome to our product documentation, where you can explore advice and explanations for all of our features, as well as discover new tips and tricks to get the most out of your subscription. - -This is also the home of our design system documentation and developer docs. - -If you don't already know what Cal.com is about, please head over to [our website](https://cal.com), where you can learn more about the product before venturing into the documentation. - -Want to help make these docs even better? This site is fully open source, and the source code is available on [GitHub](https://github.com/calcom/cal.com/tree/main/apps/docs). You can also click the edit button at the bottom of any page to start editing the source code and start a pull request. - -![Telemedicine Example](https://cal.com/telemedicine-example.svg) diff --git a/apps/docs/pages/integrations/embed.mdx b/apps/docs/pages/integrations/embed.mdx deleted file mode 100644 index 7a876d8b45..0000000000 --- a/apps/docs/pages/integrations/embed.mdx +++ /dev/null @@ -1,262 +0,0 @@ ---- -title: Embed ---- - -import Anchor from "../../components/Anchor" - -# Embed - -The Embed allows your website visitors to book a meeting with you directly from your website. - -## Install on any website - -Install the following Vanilla JS Snippet to get embed to work on any website. After that you can choose any of the ways to show your Cal Link embedded on your website. - -```html - -``` - -## Install with a Framework - -### embed-react - -It provides a react component `` that can be used to show the embed inline at that place. - -```bash -yarn add @calcom/embed-react -``` - -### Any XYZ Framework - -You can use Vanilla JS Snippet to install - -Popular ways in which you can embed on your website - -Assuming that you have followed the steps of installing and initializing the snippet, you can show the embed in following ways: - -### Inline - -Show the embed inline inside a container element. It would take the width and height of the container element. - -
- _Vanilla JS_ - -```html - - -*Sample sandbox* -``` - -
- -#### - -
-_React_ - -```jsx -import Cal from "@calcom/embed-react"; - -const MyComponent = () => ( - -); -``` - -*Sample sandbox* - - -
- -### Popup on any existing element - -To show the embed as a popup on clicking an element, add `data-cal-link` attribute to the element. - -
- -Vanilla JS - -To show the embed as a popup on clicking an element, simply add `data-cal-link` attribute to the element. - -*Sample sandbox* - - - -
-
- React - ```jsx - import "@calcom/embed-react"; - - const MyComponent = ()=> { - return - } -``` - -*Sample sandbox* - - -
- -### Floating pop-up button - -```html - -``` - -*Sample sandbox* - - -## Supported Instructions - -Consider an instruction as a function with that name and that would be called with the given arguments. - -### `inline` - -Appends embed inline as the child of the element. - -```html - -```` - -- `elementOrSelector` - Give it either a valid CSS selector or an HTMLElement instance directly - -- `calLink` - Cal Link that you want to embed e.g. john. Just give the username. No need to give the full URL [https://cal.com/john](). It makes it easy to configure the calendar host once and use as many links you want with just usernames - -### `ui` - -Configure UI for embed. Make it look part of your webpage. - -```html - -``` - -- `styles` - It supports styling for `body` and `eventTypeListItem`. Right now we support just background on these two. - -### preload - -Usage: - -If you want to open cal link on some action. Make it pop open instantly by preloading it. - -```html - -``` - -- `calLink` - Cal Link that you want to embed e.g. john. Just give the username. No need to give the full URL [https://cal.com/john]() - -## Actions -You can listen to an action that occurs in embedded cal link as follows. You can think of them as DOM events. We are avoiding the term "events" to not confuse it with Cal Events. -```html - -``` - -Following are the list of supported actions. -- -| Action | Description | Properties | -|----------------------|------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| eventTypeSelected | When user chooses an event-type from the listing. | eventType:object // Event Type that has been selected" | -| bookingSuccessful | When the booking is successfully done. It might not be confirmed. | confirmed: boolean; //Whether confirmation from organizer is pending or not

eventType: "Object for Event Type that has been booked";

date: string; // Date of Event

duration: number; //Duration of booked Event

organizer: object //Organizer details like name, timezone, email | -| linkReady | Tells that the link is ready to be shown now. | None | -| linkFailed | Fired if link fails to load | code: number; // Error Code

msg: string; //Human Readable msg

data: object // More details to debug the error | -| __iframeReady | It is fired when the embedded iframe is ready to communicate with parent snippet. This is mostly for internal use by Embed Snippet | None | -| __windowLoadComplete | Tells that window load for iframe is complete | None | -| __dimensionChanged | Tells that dimensions of the content inside the iframe changed. | iframeWidth:number, iframeHeight:number | - -_Actions that start with __ are internal._ \ No newline at end of file diff --git a/apps/docs/pages/integrations/google.mdx b/apps/docs/pages/integrations/google.mdx deleted file mode 100644 index 06de91189a..0000000000 --- a/apps/docs/pages/integrations/google.mdx +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Google ---- - -# Google Calendar -The Google Calendar integration checks for availability in your Google Calendars and creates bookings for you. - -## Removing Permissions for Cal to access your Google Account - -1. Go to your [Google Account](https://myaccount.google.com/). -2. On the left, click Data & privacy. -3. Scroll to "Data from apps and services you use." -4. Under "Download or delete your data," click Delete a Google service. You may need to sign in again. -5. Next to the product you want to remove, click Delete. -6. Follow the steps on the screen. - -To remove a product from your account that isn't listed in your Google Account, visit [Google Support](https://support.google.com) for more info on a specific product. - -## Obtaining the Google API Credentials -1. Open [Google API Console](https://console.cloud.google.com/apis/dashboard). If you don't have a project in your Google Cloud subscription, you'll need to create one before proceeding further. Under Dashboard pane, select Enable APIS and Services. -2. In the search box, type calendar and select the Google Calendar API search result. -3. Enable the selected API. -4. Next, go to the [OAuth consent screen](https://console.cloud.google.com/apis/credentials/consent) from the side pane. Select the app type (Internal or External) and enter the basic app details on the first page. -5. In the second page on Scopes, select Add or Remove Scopes. Search for Calendar.event and select the scope with scope value `.../auth/calendar.events`, `.../auth/calendar.readonly`, `.../auth/calendar` and select Update. -6. In the third page (Test Users), add the Google account(s) you'll using. Make sure the details are correct on the last page of the wizard and your consent screen will be configured. -7. Now select [Credentials](https://console.cloud.google.com/apis/credentials) from the side pane and then select Create Credentials. Select the OAuth Client ID option. -8. Select Web Application as the Application Type. -9. Under Authorized redirect URI's, select Add URI and then add the two URIs `/api/integrations/googlecalendar/callback` and `/api/auth/callback/google` replacing CALENDSO URL with the URI at which your application runs. -10. The key will be created and you will be redirected back to the Credentials page. Select the newly generated client ID under OAuth 2.0 Client IDs. -11. Select Download JSON. Copy the contents of this file and paste the entire JSON string in the .env file as the value for GOOGLE_API_CREDENTIALS key. - -## Where to find the Google Meet integration? - -Google Meet is a part of the Google Calendar integration and it should be available once you've added your Google Calendar. Just select Google Meet as location for your Event Type: - -1. Go to your `Event Types`. -2. Click on the `Location` drop-down menu. -3. Select Google Meet as the location of your meeting. - -Once your Event Type slot is booked, it will automatically generate the Google Meet link for the meeting. diff --git a/apps/docs/pages/integrations/introduction.mdx b/apps/docs/pages/integrations/introduction.mdx deleted file mode 100644 index fc3af40f72..0000000000 --- a/apps/docs/pages/integrations/introduction.mdx +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: Introduction ---- - -# Integrations - -## Connecting new calendars -1. Go to the [Cal App Store](https://app.cal.com/apps). -2. Located at the top right of the screen, press the button saying '+ Connect A New App' -3. Choose the account your calendar is connected too by clicking 'Add'. (e.g. Google, Office 365, Zoom) -4. You will be redirected to the log in page of the chosen account. -5. Allow Cal access to view and edit your calendars. -6. You will be sent back to the [Cal App Store](https://app.cal.com/apps/installed). From here you will now be able to see your connected calendar! - -## How to choose the primary Calendar? - -If you have two or more integrated calendars and you want your events to show in only one, you can define a primary calendar like this: - -1. Go to your [Installed](https://app.cal.com/apps/installed) page. -2. Next to your `Calendars` you will see a dropdown that says `Create events on:`. -3. Select your primary calendar. diff --git a/apps/docs/pages/integrations/meta.json b/apps/docs/pages/integrations/meta.json deleted file mode 100644 index 7b74194351..0000000000 --- a/apps/docs/pages/integrations/meta.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "introduction": "Introduction", - "google": "Google", - "microsoft": "Microsoft", - "zoom": "Zoom", - "stripe": "Stripe", - "zapier": "Zapier" - } - \ No newline at end of file diff --git a/apps/docs/pages/integrations/microsoft.mdx b/apps/docs/pages/integrations/microsoft.mdx deleted file mode 100644 index afdfeaf118..0000000000 --- a/apps/docs/pages/integrations/microsoft.mdx +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Microsoft ---- - -# Outlook/Microsoft 365 -The Outlook integration enables you to use your outlook.com or Microsoft 365 account to use for conflict checking and event bookings. - -## Obtaining Microsoft Graph Client ID and Secret -1. Open [Azure App Registration](https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredApps) and select New registration -2. Name your application -3. Set **Who can use this application or access this API?** to **Accounts in any organizational directory (Any Azure AD directory - Multitenant)** -4. Set the **Web** redirect URI to `/api/integrations/office365calendar/callback` replacing CALENDSO URL with the URI at which your application runs. -5. Use **Application (client) ID** as the **MS_GRAPH_CLIENT_ID** attribute value in .env -6. Click **Certificates & secrets** create a new client secret and use the value as the **MS_GRAPH_CLIENT_SECRET** attribute - -## Removing Permissions for Cal to access your Microsoft Workplace Account - -Hover over Cal.com in the my apps portal, then select `manage your application`. - -The top part of permissions window shows what you personally consented to. Examples of apps permissions include the ability to access your calendar, contacts, or camera. - -You can revoke any of the permissions you consented to by selecting `Revoke Permissions`, however removing a permission may break some of the apps functionality. If you have problems after you remove permissions or accounts, contact your organization's Helpdesk for additional assistance. - -If you require more help, head over the Microsoft Documentation Page about [Managing Applications](https://docs.microsoft.com/en-us/azure/active-directory/user-help/my-applications-portal-permissions-saved-accounts) diff --git a/apps/docs/pages/integrations/slack.mdx b/apps/docs/pages/integrations/slack.mdx deleted file mode 100644 index 441a094674..0000000000 --- a/apps/docs/pages/integrations/slack.mdx +++ /dev/null @@ -1,21 +0,0 @@ ---- -Title: Slack ---- - -# Slack - -## Connecting -Connecting the bot is easy - If you are a workspace admin, the install button will add the bot to the workspace and also authorize your account with the bot. If you are a normal user, the install button will connect your Slack account with Cal.com. This will allow you to perform commands in Slack. - -## Commands -`/today` - This command will display all meetings you have in your Cal.com profile for the current day. This will send a hidden message (not visible to anyone other than you) to the channel you issued the command in. - -`/create-event` - It will display a modal allowing you to simply create a meeting invite with anyone in Slack. Success/Error information will be displayed in a private direct message from the bot. - -`/links` - This command will post all your Cal.com meeting links into the current Slack channel you are in. **Note**: The bot needs to have permission to talk in the channel you are sending the message in. Otherwise, you won't be able to send your links. - -As this is the beggining stage of our Slack integration, we plan on adding more commands in the future that will further improve your Cal.com experience. - -## Self-Hosted -If you are using our self-hosted version, please refer to our documentation in -[cal.com/README.md](https://github.com/calcom/cal.com/blob/main/README.md#obtaining-slack-client-id-and-secret-and-signing-secret) diff --git a/apps/docs/pages/integrations/stripe.mdx b/apps/docs/pages/integrations/stripe.mdx deleted file mode 100644 index bb563abd86..0000000000 --- a/apps/docs/pages/integrations/stripe.mdx +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Stripe ---- - -# Stripe Payments - -The Stripe integration allows users to add payments to their bookings. - -## Adding the stripe integration - -1. Go to the [Cal App Store](https://app.cal.com/integrations). -2. Located near the top of this page will be the integration 'Stripe' and located to the right will be a button called 'Connect', press this. -3. You will be redirected to Stripe requesting for Cal.com to be authorized access. Press 'Accept'. - -This stripe integration has now successfully been added. - -## Removing the stripe integration - -1. Go to the [Cal App Store](https://app.cal.com/integrations). -2. Located near the top of this page will be the integration 'Stripe' and located to the right will be a button called 'Disconnect', press this. -3. A confirmation pop up box will appear, to confirm press the button saying 'Yes, disconnect integration'. - -This stripe integration has now successfully been disconnected. diff --git a/apps/docs/pages/integrations/zapier.mdx b/apps/docs/pages/integrations/zapier.mdx deleted file mode 100644 index f1cb8c9c0b..0000000000 --- a/apps/docs/pages/integrations/zapier.mdx +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Zapier ---- - -## Do you have a Zapier integration? - -We are currently working on it, but it isn’t live just yet. Until then, you can use our Webhooks integration and use Zapier's “Webhooks by Zapier”. diff --git a/apps/docs/pages/integrations/zoom.mdx b/apps/docs/pages/integrations/zoom.mdx deleted file mode 100644 index 94fd02e6b1..0000000000 --- a/apps/docs/pages/integrations/zoom.mdx +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: Zoom -sidebar_position: 3 ---- - -# Zoom - -The Zoom integration automatically creates Zoom meetings for your bookings. - -## Connecting your Zoom account - -1. Go to the App Store page, and click the 'Add new integration' button. -2. Next to Zoom, go ahead and click the 'Add' button. -3. You will now be taken to Zoom to sign into your account and authorize Cal. - -## Disconnecting your Zoom account - -1. Go to the App Store page, and click on your Zoom integration in the list. -2. On the right hand side, click the Delete App button. - -This will remove the integration from Cal. Cal will not perform any actions on your account once the integration is removed. However, if you want to revoke Cal's permissions from your Zoom account, perform the following steps: - -1. Log into your Zoom account and navigate to the App Marketplace -2. Click Manage > Installed Apps or search for the Cal app -3. Click on the Cal app -4. Click Uninstall - -## How we interact with your Zoom account - -We only need the ability to create meetings, so when somebody books an event with you, Cal can communicate with Zoom and create the corresponding meeting. - -## Setting up Zoom on your self-hosted instance - -1. Open [Zoom Marketplace](https://marketplace.zoom.us/) and sign in with your Zoom account. -2. On the upper right, click "Develop" => "Build App". -3. On "OAuth", select "Create". -4. Name your App. -5. Choose "User-managed app" as the app type. -6. De-select the option to publish the app on the Zoom App Marketplace. -7. Click "Create". -8. Now copy the Client ID and Client Secret to your .env file into the `ZOOM_CLIENT_ID` and `ZOOM_CLIENT_SECRET` fields. -9. Set the Redirect URL for OAuth `/api/integrations/zoomvideo/callback` replacing CALENDSO URL with the URI at which your application runs. -10. Also add the redirect URL given above as an allowlist URL and enable "Subdomain check". Make sure it says "saved" below the form. -11. You don't need to provide basic information about your app. Instead click at "Scopes" and then at "+ Add Scopes". On the left, click the category "Meeting" and check the scope `meeting:write`. -12. Click "Done". -13. You're good to go. Now you can easily add your Zoom integration in the Cal settings. diff --git a/apps/docs/pages/meta.json b/apps/docs/pages/meta.json deleted file mode 100644 index 4d37384fa7..0000000000 --- a/apps/docs/pages/meta.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "index": "Home", - "self-hosting": "Self-hosting", - "availability": "Availability", - "bookings": "Bookings", - "event-types": "Event Types", - "teams": "Teams", - "integrations": "Integrations", - "public-api": "API", - "webhooks": "Webhooks", - "settings": "Settings", - "import": "Import", - "billing": "Billing", - "developer": "Developer", - "contributing": "Contributing", - "faq": "FAQs" -} diff --git a/apps/docs/pages/public-api.mdx b/apps/docs/pages/public-api.mdx deleted file mode 100644 index a5a2fa62a4..0000000000 --- a/apps/docs/pages/public-api.mdx +++ /dev/null @@ -1,20 +0,0 @@ -import Bleed from 'nextra-theme-docs/bleed' -import Head from "next/head"; -import IframeResizer from "iframe-resizer-react"; -import {useWindowSize} from "../lib/useWindowSize"; - - - - Public API | Cal.com - 768 ? "calc(100vw - 16rem)": "100vw", - minHeight: useWindowSize().width > 768 ? "100vh" : "200vh", - height: "auto", - border: 0, - }} - /> - diff --git a/apps/docs/pages/self-hosting/docker.mdx b/apps/docs/pages/self-hosting/docker.mdx deleted file mode 100644 index 068ed8be87..0000000000 --- a/apps/docs/pages/self-hosting/docker.mdx +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: Docker ---- - -# Docker - -The Docker configuration for Cal is an effort powered by people within the community. Cal does not provide official support for Docker, but we will accept fixes and documentation. Use at your own risk. - -The Docker configuration can be found [in our docker repository](https://github.com/calcom/docker). - -## Requirements - -Make sure you have `docker` & `docker-compose` installed on the server / system. - -## Getting Started - -### Option #1: Docker Hub - - ```bash - docker pull calendso/calendso - ``` - -or - -### Option #2: Cloning - -1. Clone calendso-docker - - ```bash - git clone --recursive https://github.com/calendso/docker.git calendso-docker - ``` - -2. Update `.env` if needed - -3. Build and start calendso - - ```bash - docker-compose up --build - ``` - -4. Start prisma studio - ```bash - docker-compose exec calendso npx prisma studio - ``` -5. Open a browser to [port 5555](http://localhost:5555) on your localhost to look at or modify the database content. - -6. Click on the `User` model to add a new user record. -7. Fill out the fields (remembering to encrypt your password with [BCrypt](https://bcrypt-generator.com/)) and click `Save 1 Record` to create your first user. -8. Open a browser to [port 3000](http://localhost:3000) on your localhost and login with your just created, first user. diff --git a/apps/docs/pages/self-hosting/install.mdx b/apps/docs/pages/self-hosting/install.mdx deleted file mode 100644 index 93e5cac0bf..0000000000 --- a/apps/docs/pages/self-hosting/install.mdx +++ /dev/null @@ -1,128 +0,0 @@ ---- -title: Installation ---- - -# Installation - -To get a local copy up and running, please follow these simple steps. - -## Prerequisites - -Here is what you need to be able to run Cal. - -- Node.js -- PostgreSQL -- Yarn _(recommended)_ - -> If you want to enable any of the available integrations, you may want to obtain additional credentials for each one. More details on this can be found below under the integrations category. - -## Setup - -1. Clone the repo - - ```sh - git clone https://github.com/calcom/cal.com.git - ``` - -1. Go to the project folder - - ```sh - cd cal.com - ``` - -1. Copy `.env.example` to `.env` - - ```sh - cp apps/web/.env.example apps/web/.env - ``` - -1. Install packages with yarn - - ```sh - yarn - ``` - -### Quick start with `yarn dx` - -> - **Requires Docker and Docker Compose to be installed** -> - Will start a local Postgres instance with a few test users - the credentials will be logged in the console - -```sh -yarn dx -``` - -### Manual setup - -1. Configure database in the `.env` file. Replace ``, ``, ``, `` with their applicable values - - ```text - DATABASE_URL='postgresql://:@:' - ``` - -
- - - If you don't know how to configure the DATABASE_URL, then follow the steps here to create a quick DB - using Heroku - - - 1. Create a free account with [Heroku](https://www.heroku.com/). - - 2. Create a new app. - - Create an App - - 3. In your new app, go to `Overview` and next to `Installed add-ons`, click `Configure Add-ons`. We need this to set up our database. - ![image](https://user-images.githubusercontent.com/16905768/115323232-a53ba480-a17f-11eb-98db-58e2f8c52426.png) - - 4. Once you clicked on `Configure Add-ons`, click on `Find more add-ons` and search for `postgres`. One of the options will be `Heroku Postgres` - click on that option. - ![image](https://user-images.githubusercontent.com/16905768/115323126-5beb5500-a17f-11eb-8030-7380310807a9.png) - - 5. Once the pop-up appears, click `Submit Order Form` - plan name should be `Hobby Dev - Free`. - - Submit Order Form - - 6. Once you completed the above steps, click on your newly created `Heroku Postgres` and go to its `Settings`. - ![image](https://user-images.githubusercontent.com/16905768/115323367-e92ea980-a17f-11eb-9ff4-dec95f2ec349.png) - - 7. In `Settings`, copy your URI to your Cal.com .env file and replace the `postgresql://:@:` with it. - ![image](https://user-images.githubusercontent.com/16905768/115323556-4591c900-a180-11eb-9808-2f55d2aa3995.png) - ![image](https://user-images.githubusercontent.com/16905768/115323697-7a9e1b80-a180-11eb-9f08-a742b1037f90.png) - - 8. To view your DB, once you add new data in Prisma, you can use [Heroku Data Explorer](https://heroku-data-explorer.herokuapp.com/). - -
- -1. Set a 32 character random string in your `apps/web/.env` file for the `CALENDSO_ENCRYPTION_KEY` (You can use a command like `openssl rand -base64 24` to generate one). -1. Set up the database using the Prisma schema (found in `packages/prisma/schema.prisma`) - - ```sh - yarn workspace @calcom/prisma db-deploy - ``` - -1. Run (in development mode) - - ```sh - yarn dev - ``` - -### Setting up your first user - -1. Open [Prisma Studio](https://www.prisma.io/studio) to look at or modify the database content: - - ```sh - yarn db-studio - ``` - -1. Click on the `User` model to add a new user record. -1. Fill out the fields `email`, `username`, `password`, and set `metadata` to empty `{}` (remembering to encrypt your password with [BCrypt](https://bcrypt-generator.com/)) and click `Save 1 Record` to create your first user. - > New users are set on a `TRIAL` plan by default. You might want to adjust this behavior to your needs in the `prisma/schema.prisma` file. -1. Open a browser to [port 3000](http://localhost:3000) and login with your just created, first user. diff --git a/apps/docs/pages/self-hosting/meta.json b/apps/docs/pages/self-hosting/meta.json deleted file mode 100644 index 9bd1650cfb..0000000000 --- a/apps/docs/pages/self-hosting/meta.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "install": "Installation", - "upgrade": "Upgrade", - "docker": "Docker", - "vercel": "Vercel" -} diff --git a/apps/docs/pages/self-hosting/upgrade.mdx b/apps/docs/pages/self-hosting/upgrade.mdx deleted file mode 100644 index f22431fa01..0000000000 --- a/apps/docs/pages/self-hosting/upgrade.mdx +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: Upgrade ---- - -# Upgrading - -**Warning**: When performing database migrations, you may lose data if the migration is not done properly. - -1. Pull the current version: - ```sh - git pull - ``` -2. Apply database migrations by running one of the following commands: - - In a development environment, run: - - ```sh - yarn workspace @calcom/prisma db-migrate - ``` - - (this can clear your development database in some cases) - - In a production environment, run: - - ```sh - yarn workspace @calcom/prisma db-deploy - ``` - -3. Check the `.env.example` and compare it to your current `.env` file. In case there are any fields not present - in your current `.env`, add them there. - - For the current version, especially check if the variable `BASE_URL` is present and properly set in your environment, for example: - - ```text - BASE_URL='https://yourdomain.com' - ``` - -4. Start the server. In a development environment, just do: - ```sh - yarn dev - ``` - For a production build, run for example: - ```sh - yarn build - yarn start - ``` -5. Enjoy the new version. diff --git a/apps/docs/pages/self-hosting/vercel.mdx b/apps/docs/pages/self-hosting/vercel.mdx deleted file mode 100644 index 2dc4b97bb4..0000000000 --- a/apps/docs/pages/self-hosting/vercel.mdx +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: Vercel ---- - -# Vercel - -## Requirements - -You need a PostgresDB database hosted somewhere. [Supabase](https://supabase.com/) offers a great free option. - -## Getting Started - -### Local settings - -1. Fork and clone the repository - - ```bash - git clone https://github.com//cal.com.git - ``` - -2. Copy the `.env.example` file in `apps/web`, rename it to `.env` and fill it with your settings ([See manual setup](https://github.com/calcom/cal.com#manual-setup) and [Obtaining the Google API Credentials](https://github.com/calcom/cal.com#obtaining-the-google-api-credentials)) - -3. Install packages with `yarn` - - ```bash - yarn install - ``` - -4. Set up the database using the Prisma schema (found in `packages/prisma/schema.prisma`) - - ```sh - yarn workspace @calcom/prisma db-deploy - ``` - -5. Open [Prisma Studio](https://www.prisma.io/studio) to look at or modify the database content: - ``` - yarn db-studio - ``` -6. Click on the `User` model to add a new user record. -7. Fill out the fields (remembering to encrypt your password with [BCrypt](https://bcrypt-generator.com/)) and click `Save 1 Record` to create your first user. -8. Open a browser to [port 3000](http://localhost:3000) on your localhost and login with your just created, first user. - -### Deployment - -1. Create a new project on Vercel -1. Import from your forked repository -1. Set the Environment Variables -1. Set the root directory to `apps/web` -1. Override the build command to `cd ../.. && yarn build` -1. Hit Deploy diff --git a/apps/docs/pages/settings.mdx b/apps/docs/pages/settings.mdx deleted file mode 100644 index 83f3ca3180..0000000000 --- a/apps/docs/pages/settings.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Settings ---- - -# Settings -## Setting up or making changes to your Profile - -1. Go to your [Profile Settings](https://app.cal.com/settings/profile). -2. From this page you are able to edit the following: -- Your URL Username -- Your Display Name -- Your About Information -- Change your Profile Picture -- Your Local Time Zone -- Your Chosen 'First Day Of The Week' -- Light or Dark Mode for your Booking Page -- Enabling or Disabling cal.com Branding on your Booking Page -3. Once you have completed all your changes, press that 'save' button located at the bottom right of your page. - -## Reset your password - -1. Go to [your account security settings](https://app.cal.com/settings/security). -2. Located at the top of your screen, you will see two boxes. -3. Enter your Old Password and New Password. -4. Click the button 'Save' located to the bottom right of your new password. -5. You have now successfully changed your password! - -## Change your email - -Go to [Profile Settings](https://app.cal.com/settings/profile). There, you will see the email associated with your account which you can then update. You’d just need to log out and back in to see the change take effect. - -## Enable 2FA - -1. Go to [Your Account Security Settings](https://app.cal.com/settings/security). -2. Located at the bottom of your screen, click on the tab labeled 'Enable Two-Factor Authentication'. -3. Enter your Password. -4. In your authenticator app, scan the QR Code presented on your screen. -5. Once Scanned, press 'Next' and then enter the code presented within your Authentication App -6. Press 'Enabled' - -You have now successfully enabled Two-Factor Authentication - -## Disable 2FA -1. Go to [Your Account Security Settings](https://app.cal.com/settings/security). -2. Located at the bottom of your screen, click on the tab labeled 'Disable Two-Factor Authentication'. -3. Enter your Password. - -You have now successfully disabled Two-Factor Authentication - -## How to delete my account - -You can delete your account from within the [Settings](https://app.cal.com/settings/profile) option. Just scroll all the way down and click on `Delete Account`. - -## How to change the language - -Go to your [Profile Settings](https://app.cal.com/settings/profile). Under `Language` you will see the dropdown menu and you can use it to select your desired language. diff --git a/apps/docs/pages/style.css b/apps/docs/pages/style.css deleted file mode 100644 index 55e436f61a..0000000000 --- a/apps/docs/pages/style.css +++ /dev/null @@ -1,15 +0,0 @@ -@font-face { - font-family: 'Cal Sans'; - src: url("https://cal.com/cal.ttf"); -} - -h1, -h2, -h3, -h4, -h5, -h6 { - font-family: 'Cal Sans'; - font-weight: normal; - letter-spacing: normal; -} diff --git a/apps/docs/pages/teams.mdx b/apps/docs/pages/teams.mdx deleted file mode 100644 index 3428294faa..0000000000 --- a/apps/docs/pages/teams.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: Teams ---- - -# Teams - -## How do I create a new team? - -1. Go to [Your Teams Settings](https://app.cal.com/settings/teams). -2. Press the button displayed on your screen called '+ New Team' -3. Enter the name you wish to call your team. -4. After entering the name press the 'Create Team' button located just under your new team name. -5. You have now created your new team. - -Creating a team will allow you to create new event types for the team, invite team members and much more! - -## How do I change my teams URL? - -1. Go to [Your Teams Settings](https://app.cal.com/settings/teams) and select the team you wish to edit. -2. Located at the top of your teams settings will be a team-url bar, from here you can input your requested teams url. -3. Once complete make sure you press 'save' at the bottom of the page. - -## How do I change my teams name? - -1. Go to [Your Teams Settings](https://app.cal.com/settings/teams) and select the team you wish to edit. -2. Located in the 2nd row of your teams settings will be a Team Name bar, from here you can input your requested team name. -3. Once complete make sure you press 'save' at the bottom of the page. - -## How do I add and remove a description of my team? - -1. Go to [Your Teams Settings](https://app.cal.com/settings/teams) and select the team you wish to edit. -2. Located below your team name entry box is a large text box labeled 'About', - -## How do I upload my team logo? - -1. Go to [Your Teams Settings](https://app.cal.com/settings/teams) and select the team you wish to edit. -2. Located under your teams subscription will be a box that says 'Upload a logo', press this box. -3. Press 'choose a file' and locate a file from your machine you wish to use as your team logo. -4. Once complete make sure you press 'save' at the bottom of the page. - -## How do I manage team members? - -1. Go to [Your Teams Settings](https://app.cal.com/settings/teams) and select the team you wish to edit. -2. Located at the bottom of your page is your team members, from here you can choose to add or remove team members and even change their role which could be Member, Admin or Owner. - -## How do I delete my team I created? - -1. Go to [Your Teams Settings](https://app.cal.com/settings/teams). -2. From here you will be able to see a list of teams you have created or apart of, located to the right of the team you wish to delete you can find three dots (...) -3. Press the 3 dots (...) then 'Disband Team' -4. This will brin gup a prompt confirming if you wish to disband your team, if your are sure you can press the button labeled 'Yes, disband team' - -Your team has now successfully been deleted. - -## Where can I find my team's Event Types? - -Once you open `Event Types` on your dashboard, you will find your team's Event Types below your individual ones. diff --git a/apps/docs/pages/webhooks.mdx b/apps/docs/pages/webhooks.mdx deleted file mode 100644 index 24659a2e6c..0000000000 --- a/apps/docs/pages/webhooks.mdx +++ /dev/null @@ -1,98 +0,0 @@ ---- -title: Webhooks ---- - -# Webhooks - -## Create a new Webhook - -1. Go to [Your Integrations](https://app.cal.com/integrations). -2. Scrolling down to the bottom of the page you will see a button called ‘New Webhook’. Press this button to open up the box which will ask for details on creating the new webhooks. -3. Select whatever event this triggers, this may be Create, Cancelled or Reschedule. -4. Once this is completed, insert the Subscriber URL then click 'Save' located at the bottom right of the box. - -## Edit an existing Webhook - -1. Go to [Your Integrations](https://app.cal.com/integrations). -2. Scrolling down to the bottom of the page you will see an icon to the right of your webhook, this will be labeled edit webhook. -3. Press the button and from here you can change any of the webhook settings. This could be changing the event that is triggered and this may be Create, Cancelled or Reschedule. Or you can change the Subscriber URL. - -## Delete an existing Webhook - -1. Go to [Your Integrations](https://app.cal.com/integrations). -2. Scrolling down to the bottom of the page you will see an icon to the right of your webhook, this will be labeled delete webhook. -3. Press the button and from here your webhook will no longer work and be deleted. - -## Webhook metadata - -Metadata is a way to pass extra information to Cal.com about a booking that is returned through a webhook. - -### Example - -The best way to explain this is with an example. Let's say you're a bank, and people register an account on your website, but you want them to book an onboarding call with your team to get set up. You could send them to your Cal.com booking link as part of your onboarding process, but when the webhook is returned, it may be difficult to match up which user booked a meeting with the user's account in your own database. Hence, you can pass a `user_id` value for instance as a URL parameter, which makes no difference to the booking process, but when the webhook is returned, you will receive the metadata as part of the webhook payload. - -Metadata is passed as a URL parameter on top of your booking link and follows the following syntax: - -```text -metadata[key_name]=value -``` - -For example, if your booking link is `cal.com/rick/quick-chat`, you can pass a user ID of 123 like so: - -```text -cal.com/rick/quick-chat?metadata[user_id]=123 -``` - -As a result, the webhook will be returned in this format: - -```text -\{ , metadata: \{ user_id: 123 \} \} -``` - -## Custom Webhooks template variable list - -Customizable webhooks are a great way reduce the development effort and in many cases remove the need for a developer to build an additional integration service. Using a custom template you can easily decide what data you receive in your webhook endpoint, manage the payload and setup related workflows accordingly. Here’s a breakdown of the payload that you would receive via an incoming webhook. - -### Webhook structure - -| Variable | Type | Description | -| ------------------- | -------- | -------------------------------------------------------------------------------------- | -| triggerEvent | String | The name of the trigger event [BOOKING_CREATED, BOOKING_RESHEDULED, BOOKING_CANCELLED] | -| createdAt | String | The time of the webhook trigger | -| type | String | The event-type slug | -| title | String | The event-type name | -| startTime | String | The event's start time | -| endTime | String | The event's end time | -| description? | String | The event's description as described in the event type | -| location? | String | Location of the event | -| organizer | Person | The organizer of the event | -| attendees | Person[] | The event booker & any guests | -| uid? | String | The UID of the booking | -| resheduleUid? | String | The UID for the rescheduling | -| cancellationReason? | String | Reason for cancellation | -| rejectionReason? | String | Reason for rejection | -| team?.name | String | Name of the team booked | -| team?.members | String[] | Members of the team booked | - -### Person structure - -| Variable | Type | Description | -| --------------- | ------ | --------------------------------------------------------------------- | -| name | String | Name of the individual | -| email | String | Email of the individual | -| timeZone | String | Timezone of the individual ("America/New_York", "Asia/Kolkata", etc.) | -| language.locale | String | Locale of the individual ("en", "fr", etc.) | - -### Example usage of variables for custom template: - -```sh -\{ - - "content": "A new event has been scheduled", - "type": "\{\{type\}\}", - "name": "\{\{title\}\}", - "organizer": "\{\{organizer.name\}\}", - "booker": "\{\{attendees.0.name\}\}" - -\} -``` diff --git a/apps/docs/public/android-chrome-192x192.png b/apps/docs/public/android-chrome-192x192.png deleted file mode 100644 index 395bfe3c60..0000000000 Binary files a/apps/docs/public/android-chrome-192x192.png and /dev/null differ diff --git a/apps/docs/public/android-chrome-256x256.png b/apps/docs/public/android-chrome-256x256.png deleted file mode 100644 index 83b5eb0ded..0000000000 Binary files a/apps/docs/public/android-chrome-256x256.png and /dev/null differ diff --git a/apps/docs/public/android-chrome-384x384.png b/apps/docs/public/android-chrome-384x384.png deleted file mode 100644 index 12d4935429..0000000000 Binary files a/apps/docs/public/android-chrome-384x384.png and /dev/null differ diff --git a/apps/docs/public/android-chrome-512x512.png b/apps/docs/public/android-chrome-512x512.png deleted file mode 100644 index f8f9a4852c..0000000000 Binary files a/apps/docs/public/android-chrome-512x512.png and /dev/null differ diff --git a/apps/docs/public/apple-touch-icon.png b/apps/docs/public/apple-touch-icon.png deleted file mode 100644 index ffa076315f..0000000000 Binary files a/apps/docs/public/apple-touch-icon.png and /dev/null differ diff --git a/apps/docs/public/browserconfig.xml b/apps/docs/public/browserconfig.xml deleted file mode 100644 index 3c58a03a73..0000000000 --- a/apps/docs/public/browserconfig.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - #292929 - - - diff --git a/apps/docs/public/cal.ttf b/apps/docs/public/cal.ttf deleted file mode 100644 index 4a2950a045..0000000000 Binary files a/apps/docs/public/cal.ttf and /dev/null differ diff --git a/apps/docs/public/demo.png b/apps/docs/public/demo.png deleted file mode 100644 index 3751514339..0000000000 Binary files a/apps/docs/public/demo.png and /dev/null differ diff --git a/apps/docs/public/favicon-16x16.png b/apps/docs/public/favicon-16x16.png deleted file mode 100644 index 92717c306b..0000000000 Binary files a/apps/docs/public/favicon-16x16.png and /dev/null differ diff --git a/apps/docs/public/favicon-32x32.png b/apps/docs/public/favicon-32x32.png deleted file mode 100644 index 5846956222..0000000000 Binary files a/apps/docs/public/favicon-32x32.png and /dev/null differ diff --git a/apps/docs/public/favicon.ico b/apps/docs/public/favicon.ico deleted file mode 100644 index 0760f8a241..0000000000 Binary files a/apps/docs/public/favicon.ico and /dev/null differ diff --git a/apps/docs/public/mstile-144x144.png b/apps/docs/public/mstile-144x144.png deleted file mode 100644 index 62f0fc9790..0000000000 Binary files a/apps/docs/public/mstile-144x144.png and /dev/null differ diff --git a/apps/docs/public/mstile-150x150.png b/apps/docs/public/mstile-150x150.png deleted file mode 100644 index f31d64926b..0000000000 Binary files a/apps/docs/public/mstile-150x150.png and /dev/null differ diff --git a/apps/docs/public/mstile-310x150.png b/apps/docs/public/mstile-310x150.png deleted file mode 100644 index 30025ecd6a..0000000000 Binary files a/apps/docs/public/mstile-310x150.png and /dev/null differ diff --git a/apps/docs/public/mstile-310x310.png b/apps/docs/public/mstile-310x310.png deleted file mode 100644 index 877f8974f1..0000000000 Binary files a/apps/docs/public/mstile-310x310.png and /dev/null differ diff --git a/apps/docs/public/mstile-70x70.png b/apps/docs/public/mstile-70x70.png deleted file mode 100644 index 56bace16e0..0000000000 Binary files a/apps/docs/public/mstile-70x70.png and /dev/null differ diff --git a/apps/docs/public/safari-pinned-tab.svg b/apps/docs/public/safari-pinned-tab.svg deleted file mode 100644 index 596052799d..0000000000 --- a/apps/docs/public/safari-pinned-tab.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - -Created by potrace 1.14, written by Peter Selinger 2001-2017 - - - - - - - diff --git a/apps/docs/public/site.webmanifest b/apps/docs/public/site.webmanifest deleted file mode 100644 index 31a1e10fdb..0000000000 --- a/apps/docs/public/site.webmanifest +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "Cal.com", - "short_name": "Cal.com", - "icons": [ - { - "src": "/android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "/android-chrome-512x512.png", - "sizes": "512x512", - "type": "image/png" - } - ], - "theme_color": "#292929", - "background_color": "#292929", - "display": "standalone" -} diff --git a/apps/docs/theme.config.js b/apps/docs/theme.config.js deleted file mode 100644 index 25857c7491..0000000000 --- a/apps/docs/theme.config.js +++ /dev/null @@ -1,47 +0,0 @@ -import { SEO_IMG_DEFAULT, DOCS_URL } from "@calcom/lib/constants"; - -const themeConfig = { - github: "https://github.com/calcom/cal.com", - docsRepositoryBase: "https://github.com/calcom/cal.com/blob/main/apps/docs/pages", - titleSuffix: " | Cal.com", - logo:

Cal.com

, - head: ( - <> - - - - - - - - - - - - - - - - - - - - - - - ), - search: true, - prevLinks: true, - nextLinks: true, - footer: true, - footerEditLink: "Edit this page on GitHub", - footerText: <>© {new Date().getFullYear()} Cal.com, Inc. All rights reserved., -}; - -export default themeConfig; diff --git a/apps/docs/tsconfig.json b/apps/docs/tsconfig.json deleted file mode 100644 index d1581064cf..0000000000 --- a/apps/docs/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "@calcom/tsconfig/nextjs.json", - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], - "exclude": ["node_modules"], - "compilerOptions": { - "noImplicitAny": false - } -} diff --git a/apps/web/.prettierignore b/apps/web/.prettierignore index 6b0e06cdef..e0f842003c 100644 --- a/apps/web/.prettierignore +++ b/apps/web/.prettierignore @@ -1 +1,2 @@ public/embed +*.test.ts diff --git a/apps/web/components/booking/AvailableTimes.tsx b/apps/web/components/booking/AvailableTimes.tsx index 4d4eebb6ad..178efafe99 100644 --- a/apps/web/components/booking/AvailableTimes.tsx +++ b/apps/web/components/booking/AvailableTimes.tsx @@ -176,7 +176,10 @@ const AvailableTimes: FC = ({ : "text-emerald-400" } text-sm`}> {slot.attendees ? seatsPerTimeSlot - slot.attendees : seatsPerTimeSlot} /{" "} - {seatsPerTimeSlot} {t("seats_available")} + {seatsPerTimeSlot}{" "} + {t("seats_available", { + count: slot.attendees ? seatsPerTimeSlot - slot.attendees : seatsPerTimeSlot, + })}

)} diff --git a/apps/web/components/booking/pages/BookingPage.tsx b/apps/web/components/booking/pages/BookingPage.tsx index ebd9d1ab68..2dc2e706ba 100644 --- a/apps/web/components/booking/pages/BookingPage.tsx +++ b/apps/web/components/booking/pages/BookingPage.tsx @@ -637,7 +637,12 @@ const BookingPage = ({ {currentSlotBooking ? eventType.seatsPerTimeSlot - currentSlotBooking.attendees.length : eventType.seatsPerTimeSlot}{" "} - / {eventType.seatsPerTimeSlot} {t("seats_available")} + / {eventType.seatsPerTimeSlot}{" "} + {t("seats_available", { + count: currentSlotBooking + ? eventType.seatsPerTimeSlot - currentSlotBooking.attendees.length + : eventType.seatsPerTimeSlot, + })}

)} diff --git a/apps/web/package.json b/apps/web/package.json index 8a9b6c54e6..e0dffcc73a 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -156,7 +156,6 @@ "@types/stripe": "^8.0.417", "@types/uuid": "8.3.1", "autoprefixer": "^10.4.12", - "babel-jest": "^28.1.0", "copy-webpack-plugin": "^11.0.0", "detect-port": "^1.3.0", "env-cmd": "^10.1.0", @@ -165,7 +164,6 @@ "msw": "^0.42.3", "postcss": "^8.4.18", "tailwindcss": "^3.3.1", - "ts-jest": "^28.0.8", "ts-node": "^10.9.1", "typescript": "^4.9.4" }, diff --git a/apps/web/pages/[user].tsx b/apps/web/pages/[user].tsx index 6ef8f4c8b0..ebd7ce56a0 100644 --- a/apps/web/pages/[user].tsx +++ b/apps/web/pages/[user].tsx @@ -103,7 +103,7 @@ export default function User(props: inferSSRProps & E delete query.user; // So it doesn't display in the Link (and make tests fail) const nameOrUsername = user.name || user.username || ""; - /* + /* const telemetry = useTelemetry(); useEffect(() => { if (top !== window) { diff --git a/apps/web/pages/[user]/[type].tsx b/apps/web/pages/[user]/[type].tsx index 882ac3b440..f0347f9d35 100644 --- a/apps/web/pages/[user]/[type].tsx +++ b/apps/web/pages/[user]/[type].tsx @@ -162,7 +162,7 @@ async function getUserPageProps(context: GetStaticPropsContext) { return false; }).length > 0; - const hasPremiumUserName = hasKeyInMetadata(user, "isPremium"); + const hasPremiumUserName = hasKeyInMetadata(user, "isPremium") ? !!user.metadata.isPremium : false; return { props: { diff --git a/apps/web/pages/api/teams/googleworkspace/add.ts b/apps/web/pages/api/teams/googleworkspace/add.ts new file mode 100644 index 0000000000..2955a03454 --- /dev/null +++ b/apps/web/pages/api/teams/googleworkspace/add.ts @@ -0,0 +1,35 @@ +import { google } from "googleapis"; +import type { NextApiRequest, NextApiResponse } from "next"; + +import getAppKeysFromSlug from "@calcom/app-store/_utils/getAppKeysFromSlug"; +import { WEBAPP_URL } from "@calcom/lib/constants"; + +const scopes = [ + "https://www.googleapis.com/auth/admin.directory.user.readonly", + "https://www.googleapis.com/auth/admin.directory.customer.readonly", +]; + +export default async function handler(req: NextApiRequest, res: NextApiResponse) { + if (req.method === "GET") { + // Get appKeys from google-calendar + const { client_id, client_secret } = await getAppKeysFromSlug("google-calendar"); + if (!client_id || typeof client_id !== "string") + return res.status(400).json({ message: "Google client_id missing." }); + if (!client_secret || typeof client_secret !== "string") + return res.status(400).json({ message: "Google client_secret missing." }); + + // use differnt callback to normal calendar connection + const redirect_uri = WEBAPP_URL + "/api/teams/googleworkspace/callback"; + const oAuth2Client = new google.auth.OAuth2(client_id, client_secret, redirect_uri); + + const authUrl = oAuth2Client.generateAuthUrl({ + access_type: "offline", + scope: scopes, + + prompt: "consent", + state: JSON.stringify({ teamId: req.query.teamId }), + }); + + res.status(200).json({ url: authUrl }); + } +} diff --git a/apps/web/pages/api/teams/googleworkspace/callback.ts b/apps/web/pages/api/teams/googleworkspace/callback.ts new file mode 100644 index 0000000000..079353b4af --- /dev/null +++ b/apps/web/pages/api/teams/googleworkspace/callback.ts @@ -0,0 +1,63 @@ +import { google } from "googleapis"; +import type { NextApiRequest, NextApiResponse } from "next"; +import { z } from "zod"; + +import getAppKeysFromSlug from "@calcom/app-store/_utils/getAppKeysFromSlug"; +import { getServerSession } from "@calcom/features/auth/lib/getServerSession"; +import { WEBAPP_URL } from "@calcom/lib/constants"; +import { getSafeRedirectUrl } from "@calcom/lib/getSafeRedirectUrl"; +import prisma from "@calcom/prisma"; + +const stateSchema = z.object({ + teamId: z.string(), +}); + +export default async function handler(req: NextApiRequest, res: NextApiResponse) { + const session = await getServerSession({ req, res }); + + if (!session?.user?.id) { + return res.status(401).json({ message: "You must be logged in to do this" }); + } + + const { code, state } = req.query; + const parsedState = stateSchema.parse(JSON.parse(state as string)); + const { teamId } = parsedState; + + if (code && typeof code !== "string") { + res.status(400).json({ message: "`code` must be a string" }); + return; + } + + const { client_id, client_secret } = await getAppKeysFromSlug("google-calendar"); + + if (!client_id || typeof client_id !== "string") + return res.status(400).json({ message: "Google client_id missing." }); + if (!client_secret || typeof client_secret !== "string") + return res.status(400).json({ message: "Google client_secret missing." }); + + const redirect_uri = WEBAPP_URL + "/api/teams/googleworkspace/callback"; + const oAuth2Client = new google.auth.OAuth2(client_id, client_secret, redirect_uri); + + if (!code) { + throw new Error("No code provided"); + } + + const credentials = await oAuth2Client.getToken(code); + + await prisma.credential.create({ + data: { + type: "google_workspace_directory", + key: credentials.res?.data, + userId: session.user.id, + }, + }); + + if (!teamId) { + res.redirect(getSafeRedirectUrl(WEBAPP_URL + "/settings") ?? `${WEBAPP_URL}/teams`); + } + + res.redirect( + getSafeRedirectUrl(WEBAPP_URL + `/settings/teams/${teamId}/members?inviteModal=true&bulk=true`) ?? + `${WEBAPP_URL}/teams` + ); +} diff --git a/apps/web/pages/api/trpc/googleWorkspace/[trpc].ts b/apps/web/pages/api/trpc/googleWorkspace/[trpc].ts new file mode 100644 index 0000000000..e6f07468dd --- /dev/null +++ b/apps/web/pages/api/trpc/googleWorkspace/[trpc].ts @@ -0,0 +1,4 @@ +import { createNextApiHandler } from "@calcom/trpc/server/createNextApiHandler"; +import { googleWorkspaceRouter } from "@calcom/trpc/server/routers/viewer/googleWorkspace/_router"; + +export default createNextApiHandler(googleWorkspaceRouter); diff --git a/apps/web/pages/availability/[schedule].tsx b/apps/web/pages/availability/[schedule].tsx index 41861fdf52..68cdcc9feb 100644 --- a/apps/web/pages/availability/[schedule].tsx +++ b/apps/web/pages/availability/[schedule].tsx @@ -82,7 +82,7 @@ const DateOverride = ({ workingHours }: { workingHours: WorkingHours[] }) => { onChange={(ranges) => append({ ranges })} Trigger={ } /> diff --git a/apps/web/public/static/locales/ar/common.json b/apps/web/public/static/locales/ar/common.json index d5cf3375bf..e2dffafa48 100644 --- a/apps/web/public/static/locales/ar/common.json +++ b/apps/web/public/static/locales/ar/common.json @@ -904,7 +904,7 @@ "duplicate": "تكرار", "offer_seats": "عرض مقاعد", "offer_seats_description": "عرض مقاعد للحجز. هذا يعطل تلقائياً حجز الضيوف وحجز الاشتراك.", - "seats_available": "المقاعد المتاحة", + "seats_available_other": "المقاعد المتاحة", "number_of_seats": "عدد المقاعد لكل حجز", "enter_number_of_seats": "أدخل عدد المقاعد", "you_can_manage_your_schedules": "يمكنك إدارة الجداول الخاصة بك في صفحة الأوقات المتاحة.", diff --git a/apps/web/public/static/locales/cs/common.json b/apps/web/public/static/locales/cs/common.json index d61b5515cf..6cb1c60076 100644 --- a/apps/web/public/static/locales/cs/common.json +++ b/apps/web/public/static/locales/cs/common.json @@ -904,7 +904,7 @@ "duplicate": "Duplikovat", "offer_seats": "Nabídka míst", "offer_seats_description": "Nabídnout místa k rezervaci. Tím se vypnou rezervace hostů a volitelné rezervace.", - "seats_available": "Dostupná místa", + "seats_available_other": "Dostupná místa", "number_of_seats": "Počet míst na rezervaci", "enter_number_of_seats": "Zadejte počet míst", "you_can_manage_your_schedules": "Své plány můžete spravovat na stránce Dostupnost.", @@ -1685,8 +1685,8 @@ "add_1_option_per_line": "Přidejte 1 možnost na řádek", "select_a_router": "Vyberte směrování", "add_a_new_route": "Přidejte nové směrování", - "make_informed_decisions": "Rozhodujte se na základě informací pomocí funkce přehledů", - "make_informed_decisions_description": "Náš panel Přehledy zobrazuje všechny aktivity vašeho týmu a trendy, které v rámci týmu umožňují lepší plánování a rozhodování.", + "make_informed_decisions": "Rozhodujte se na základě informací pomocí funkce Insights", + "make_informed_decisions_description": "Náš panel Insights zobrazuje všechny aktivity vašeho týmu a trendy, které v rámci týmu umožňují lepší plánování a rozhodování.", "view_bookings_across": "Zobrazení rezervací všech členů", "view_bookings_across_description": "Podívejte se, kdo přijímá nejvíce rezervací, a zajistěte co nejlepší rozložení v rámci celého týmu", "identify_booking_trends": "Identifikujte trendy v rezervacích", @@ -1751,15 +1751,15 @@ "events_rescheduled": "Události přesunuty", "from_last_period": "z posledního období", "from_to_date_period": "Od: {{startDate}} do: {{endDate}}", - "analytics_for_organisation": "Přehledy", + "analytics_for_organisation": "Insights", "subtitle_analytics": "Zjistěte více o činnosti vašeho týmu", "redirect_url_warning": "Přidáním přesměrování se stránka úspěchu vypne. Nezapomeňte na vlastní stránce úspěchu uvést „Rezervace potvrzena“.", "event_trends": "Trendy událostí", "clear_filters": "Vymazat filtry", - "hold": "Pozastavit", + "hold": "Blokace", "on_booking_option": "Vybrat platbu při rezervaci", "hold_option": "Účtovat poplatek za nedostavení se", - "card_held": "Karta pozastavena", + "card_held": "Blokace částky na kartě", "charge_card": "Strhnout z karty", "card_charged": "Strženo z karty", "no_show_fee_amount": "Poplatek {{amount, currency}} za nedostavení se", @@ -1773,7 +1773,7 @@ "error_charging_card": "Při strhávání poplatku za nedostavení se došlo k chybě. Zkuste to prosím později.", "collect_no_show_fee": "Vybrat poplatek za nedostavení se", "no_show_fee_charged": "Poplatek za nedostavení se stržen", - "insights": "Přehledy", + "insights": "Insights", "testing_workflow_info_message": "Při testování tohoto pracovního postupu mějte na paměti, že e-maily a SMS lze naplánovat pouze nejméně 1 hodinu předem.", "insights_no_data_found_for_filter": "Pro vybraný filtr nebo vybraná data nebyla nalezena žádná data.", "acknowledge_booking_no_show_fee": "Beru na vědomí, že pokud se této události nezúčastním, bude z mé karty stržen poplatek za nedostavení se ve výši {{amount, currency}}.", diff --git a/apps/web/public/static/locales/da/common.json b/apps/web/public/static/locales/da/common.json index 60ec96fe87..32d30c0994 100644 --- a/apps/web/public/static/locales/da/common.json +++ b/apps/web/public/static/locales/da/common.json @@ -876,7 +876,7 @@ "duplicate": "Duplikér", "offer_seats": "Tilbyd pladser", "offer_seats_description": "Tilbyd pladser til booking. Dette deaktiverer automatisk gæste- og tilvalgs bookinger.", - "seats_available": "Tilgængelige pladser", + "seats_available_other": "Tilgængelige pladser", "number_of_seats": "Antal pladser pr. booking", "enter_number_of_seats": "Angiv antal pladser", "you_can_manage_your_schedules": "Du kan administrere dine tidsplaner på siden Tilgængelighed.", diff --git a/apps/web/public/static/locales/de/common.json b/apps/web/public/static/locales/de/common.json index 3e6525a7c2..586004142c 100644 --- a/apps/web/public/static/locales/de/common.json +++ b/apps/web/public/static/locales/de/common.json @@ -757,8 +757,8 @@ "delete_event_type": "Ereignistyp löschen?", "delete_managed_event_type": "Verwalteten Ereignistyp löschen?", "delete_event_type_description": "Jede Person, mit der Sie diesen Link geteilt haben, kann nicht mehr über den Link buchen.", - "delete_managed_event_type_description": "
  • Diesem Ereignistypen zugewiesene Mitglieder werden ebenfalls ihre Ereignistypen gelöscht bekommen.
  • Jeder, mit dem sie ihren Link geteilt haben, wird nicht mehr über diesen Link buchen können.
", - "confirm_delete_event_type": "Ja, löschen", + "delete_managed_event_type_description": "
  • Die Ereignistypen der diesem Ereignistypen zugewiesenen Mitglieder werden ebenfalls gelöscht.
  • Jeder, mit dem sie ihren Link geteilt haben, wird nicht mehr über diesen Link buchen können.
", + "confirm_delete_event_type": "
  • Die Ereignistypen der diesem Ereignistypen zugewiesenen Mitglieder werden ebenfalls gelöscht.
  • Jeder, mit dem sie ihren Link geteilt haben, wird nicht mehr über diesen Link buchen können.
", "delete_account": "Account löschen", "confirm_delete_account": "Ja, Account löschen", "delete_account_confirmation_message": "Sind Sie sicher, dass Sie Ihr {{appName}}-Konto löschen möchten? Sie können dann nicht mehr über Ihre geteilten Links gebucht werden und alle Einstellungen werden gelöscht.", @@ -904,7 +904,7 @@ "duplicate": "Duplizieren", "offer_seats": "Plätze anbieten", "offer_seats_description": "Bieten Sie Plätze für Buchungen an (dies deaktiviert Gäste & Opt-in-Buchungen)", - "seats_available": "Verfügbare Plätze", + "seats_available_other": "Verfügbare Plätze", "number_of_seats": "Anzahl der Plätze pro Termin", "enter_number_of_seats": "Anzahl der Plätze eingeben", "you_can_manage_your_schedules": "Sie können Ihren Verfügbarkeitsplan bei Ihren Verfügbarkeiten ändern.", @@ -1326,7 +1326,7 @@ "exchange_version_2013_SP1": "2013 SP1", "exchange_version_2015": "2015", "exchange_version_2016": "2016", - "routing_forms_description": "Hier sehen Sie alle Formulare und Weiterleitungen, die Sie erstellt haben.", + "routing_forms_description": "Erstellen Sie Formulare , um Teilnehmer zu den richtigen Stellen weiterzuleiten", "routing_forms_send_email_owner": "E-Mail an Eigentümer senden", "routing_forms_send_email_owner_description": "Sendet eine E-Mail an den Eigentümer, wenn das Formular abgeschickt wird", "add_new_form": "Neues Formular hinzufügen", @@ -1685,8 +1685,8 @@ "add_1_option_per_line": "1 Option pro Zeile hinzufügen", "select_a_router": "Weiterleitungsformular auswählen", "add_a_new_route": "Neue Route hinzufügen", - "make_informed_decisions": "Treffen Sie mit Einblicke fundierte Entscheidungen", - "make_informed_decisions_description": "Unser Einsichten-Dashboard deckt alle Aktivitäten in Ihrem Team ab und zeigt Ihnen Trends, die eine bessere Teamplanung und Entscheidungsfindung ermöglichen.", + "make_informed_decisions": "Treffen Sie mit Insights fundierte Entscheidungen", + "make_informed_decisions_description": "Unser Insights-Dashboard deckt alle Aktivitäten in Ihrem Team ab und zeigt Ihnen Trends, die eine bessere Teamplanung und Entscheidungsfindung ermöglichen.", "view_bookings_across": "Buchungen für alle Mitglieder anzeigen", "view_bookings_across_description": "Sehen Sie, wer am häufigsten gebucht wird und sorgen Sie für die beste Verteilung in Ihrem Team", "identify_booking_trends": "Buchungstrends erkennen", @@ -1704,8 +1704,8 @@ "can_you_try_again": "Können Sie es zu einem anderen Zeitpunkt erneut versuchen?", "verify": "Bestätigen", "timezone_variable": "Zeitzone", - "timezone_info": "Die Zeitzone der empfangenen Person", - "event_end_time_variable": "Ereignis-Endzeitpunkt", + "timezone_info": "Die Zeitzone der empfangenden Person", + "event_end_time_variable": "Endzeitpunkt des Ereignisses", "event_end_time_info": "Der Endzeitpunkt des Termins", "cancel_url_variable": "Absage-URL", "cancel_url_info": "Die URL, um die Buchung abzusagen", @@ -1732,7 +1732,7 @@ "managed_event_dialog_title_other": "Die URL /{{slug}} ist bereits für {{count}} Mitglieder vorhanden. Möchten Sie sie ersetzen?", "managed_event_dialog_information_one": "{{names}} verwendet bereits die /{{slug}}-URL.", "managed_event_dialog_information_other": "{{names}} verwenden bereits die /{{slug}}-URL.", - "managed_event_dialog_clarification": "Wenn Sie ihn ersetzen, werden wir sie benachrichtigen. Gehen Sie zurück und entfernen Sie sie, wenn Sie ihn nicht überschreiben möchten.", + "managed_event_dialog_clarification": "Wenn Sie die URL ersetzen, werden wir sie benachrichtigen. Gehen Sie zurück und entfernen Sie sie, wenn Sie sie nicht überschreiben möchten.", "review_event_type": "Ereignistyp überprüfen", "looking_for_more_analytics": "Suchen Sie nach weiteren Analysedaten?", "looking_for_more_insights": "Suchen Sie nach weiteren Einsichten?", @@ -1749,9 +1749,9 @@ "events_completed": "Ereignisse abgeschlossen", "events_cancelled": "Ereignisse abgesagt", "events_rescheduled": "Ereignisse neu geplant", - "from_last_period": "vom letzten Zeitraum", + "from_last_period": "seit dem letzten Zeitraum", "from_to_date_period": "Von: {{startDate}} Bis: {{endDate}}", - "analytics_for_organisation": "Einsichten", + "analytics_for_organisation": "Insights", "subtitle_analytics": "Erfahren Sie mehr über die Aktivität Ihres Teams", "redirect_url_warning": "Das Hinzufügen einer Umleitung wird die Erfolgsseite deaktivieren. Erwähnen Sie \"Buchung bestätigt\" auf Ihrer benutzerdefinierten Erfolgsseite.", "event_trends": "Ereignistrends", @@ -1773,12 +1773,12 @@ "error_charging_card": "Beim Berechnen der Nichterscheinungsgebühr ist etwas schiefgelaufen. Bitte versuchen Sie es später erneut.", "collect_no_show_fee": "Gebühr für das Nichterscheinen anfordern", "no_show_fee_charged": "Gebühr für das Nichterscheinen berechnet", - "insights": "Einsichten", + "insights": "Insights", "testing_workflow_info_message": "Bitte beachten Sie beim Testen dieses Workflows, dass E-Mails und SMS spätestens 1 Stunde im Voraus geplant werden können", "insights_no_data_found_for_filter": "Keine Daten für den ausgewählten Filter oder das ausgewählte Datum gefunden.", "acknowledge_booking_no_show_fee": "Ich bestätige, dass meiner Karte eine Gebühr von {{amount, currency}} berechnet wird, sofern ich nicht an diesem Ereignis teilnehme.", "card_details": "Karteninformationen", - "seats_and_no_show_fee_error": "Aktuell können keine Plätze aktiviert werden oder eine Gebühr für das Nichterscheinen berechnet werden", + "seats_and_no_show_fee_error": "Aktuell können keine Plätze aktiviert oder eine Gebühr für das Nichterscheinen berechnet werden", "complete_your_booking": "Schließen Sie Ihre Buchung ab", "complete_your_booking_subject": "Schließen Sie Ihre Buchung ab: {{title}} am {{date}}", "email_invite_team": "{{email}} wurde eingeladen" diff --git a/apps/web/public/static/locales/en/common.json b/apps/web/public/static/locales/en/common.json index 3c862b1202..4aecb5157e 100644 --- a/apps/web/public/static/locales/en/common.json +++ b/apps/web/public/static/locales/en/common.json @@ -26,6 +26,8 @@ "rejection_confirmation": "Reject the booking", "manage_this_event": "Manage this event", "invite_team_member": "Invite team member", + "invite_team_individual_segment": "Invite individual", + "invite_team_bulk_segment": "Bulk import", "invite_team_notifcation_badge": "Inv.", "your_event_has_been_scheduled": "Your event has been scheduled", "your_event_has_been_scheduled_recurring": "Your recurring event has been scheduled", @@ -222,6 +224,7 @@ "go_back_login": "Go back to the login page", "error_during_login": "An error occurred when logging you in. Head back to the login screen and try again.", "request_password_reset": "Send reset email", + "send_invite": "Send invite", "forgot_password": "Forgot Password?", "forgot": "Forgot?", "done": "Done", @@ -912,7 +915,8 @@ "duplicate": "Duplicate", "offer_seats": "Offer seats", "offer_seats_description": "Offer seats for booking. This automatically disables guest & opt-in bookings.", - "seats_available": "Seats available", + "seats_available_one":"Seat available", + "seats_available_other": "Seats available", "number_of_seats": "Number of seats per booking", "enter_number_of_seats": "Enter number of seats", "you_can_manage_your_schedules": "You can manage your schedules on the Availability page.", @@ -1809,6 +1813,7 @@ "charge_attendee": "Charge attendee {{amount, currency}}", "payment_app_commission": "Require payment ({{paymentFeePercentage}}% + {{fee, currency}} commission per transaction)", "email_invite_team": "{{email}} has been invited", + "email_invite_team_bulk": "{{userCount}} users have been invited", "error_collecting_card": "Error collecting card", "image_size_limit_exceed": "Uploaded image shouldn't exceed 5mb size limit", "inline_embed": "Inline Embed", @@ -1819,12 +1824,17 @@ "open_dialog_with_element_click": "Open your Cal dialog when someone clicks an element.", "need_help_embedding": "Need help? See our guides for embedding Cal on Wix, Squarespace, or WordPress, check our common questions, or explore advanced embed options.", "book_my_cal": "Book my Cal", + "invite_as":"Invite as", "form_updated_successfully":"Form updated successfully.", "email_not_cal_member_cta": "Join your team", "disable_attendees_confirmation_emails": "Disable default confirmation emails for attendees", "disable_attendees_confirmation_emails_description": "At least one workflow is active on this event type that sends an email to the attendees when the event is booked.", "disable_host_confirmation_emails": "Disable default confirmation emails for host", "disable_host_confirmation_emails_description": "At least one workflow is active on this event type that sends an email to the host when the event is booked.", + "add_an_override": "Add an override", + "import_from_google_workspace":"Import users from Google Workspace", + "connect_google_workspace":"Connect Google Workspace", + "google_workspace_admin_tooltip":"You must be a Workspace Admin to use this feature", "first_event_type_webhook_description": "Create your first webhook for this event type", "create_for": "Create for" } diff --git a/apps/web/public/static/locales/es/common.json b/apps/web/public/static/locales/es/common.json index fd98748da5..5122e8a89f 100644 --- a/apps/web/public/static/locales/es/common.json +++ b/apps/web/public/static/locales/es/common.json @@ -904,7 +904,7 @@ "duplicate": "Duplicado", "offer_seats": "Ofrecer plazas", "offer_seats_description": "Ofrecer plazas para las reservas (desactiva las reservas de invitados y las optativas)", - "seats_available": "Plazas disponibles", + "seats_available_other": "Plazas disponibles", "number_of_seats": "Número de plazas por reserva", "enter_number_of_seats": "Introduzca el número de plazas", "you_can_manage_your_schedules": "Puede administrar sus horarios en la página Disponibilidad.", diff --git a/apps/web/public/static/locales/fr/common.json b/apps/web/public/static/locales/fr/common.json index e058ebaf12..dd5a69e6d5 100644 --- a/apps/web/public/static/locales/fr/common.json +++ b/apps/web/public/static/locales/fr/common.json @@ -908,7 +908,7 @@ "duplicate": "Dupliquer", "offer_seats": "Proposer des places", "offer_seats_description": "Proposez des places de réservation. Cela désactive automatiquement les réservations d'invités et d'opt-in.", - "seats_available": "places disponibles", + "seats_available_other": "places disponibles", "number_of_seats": "Nombre de places par réservation", "enter_number_of_seats": "Saisir le nombre de sièges", "you_can_manage_your_schedules": "Vous pouvez gérer vos disponibilités sur la page Disponibilité.", diff --git a/apps/web/public/static/locales/he/common.json b/apps/web/public/static/locales/he/common.json index 99d199a292..22f745cd4c 100644 --- a/apps/web/public/static/locales/he/common.json +++ b/apps/web/public/static/locales/he/common.json @@ -880,7 +880,7 @@ "duplicate": "כפילות", "offer_seats": "הצעת מקומות", "offer_seats_description": "הצעת מקומות להזמנות (אפשרות זו משביתה באופן אוטומטי אישורי הזמנות ואורחים).", - "seats_available": "מקומות זמינים", + "seats_available_other": "מקומות זמינים", "number_of_seats": "מספר המקומות לכל הזמנה", "enter_number_of_seats": "יש להזין את מספר המקומות", "you_can_manage_your_schedules": "ניתן לנהל את לוחות הזמנים בדף 'זמינות'.", diff --git a/apps/web/public/static/locales/it/common.json b/apps/web/public/static/locales/it/common.json index 2afc031a68..5e11627d95 100644 --- a/apps/web/public/static/locales/it/common.json +++ b/apps/web/public/static/locales/it/common.json @@ -904,7 +904,7 @@ "duplicate": "Duplica", "offer_seats": "Imposta posti", "offer_seats_description": "Indica i posti disponibili (ciò disabiliterà le prenotazioni ospite e le prenotazioni opt-in).", - "seats_available": "Posti disponibili", + "seats_available_other": "Posti disponibili", "number_of_seats": "Numero di posti per prenotazione", "enter_number_of_seats": "Immettere il numero di posti", "you_can_manage_your_schedules": "Puoi gestire i tuoi programmi dalla pagina Disponibilità.", @@ -1487,7 +1487,7 @@ "event_replaced_notice": "Un amministratore ha sostituito uno dei tuoi tipi di evento", "email_subject_slug_replacement": "Un amministratore di team ha sostituito il tuo evento /{{slug}}", "email_body_slug_replacement_notice": "Un amministratore del team {{teamName}} ha sostituito il tuo tipo di evento /{{slug}} con un tipo di evento gestito da lui controllato.", - "email_body_slug_replacement_info": "Il tuo link continuerà a funzionare, ma alcune sue impostazioni potrebbero essere state cambiate. Puoi verificarlo nella sezione Tipi di evento.", + "email_body_slug_replacement_info": "Il tuo link continuerà a funzionare, ma alcune delle sue impostazioni potrebbero essere state cambiate. Puoi verificarlo nella sezione Tipi di evento.", "email_body_slug_replacement_suggestion": "Per qualsiasi domanda sui tipi di evento, contatta il nostro amministratore.

Ti auguriamo una piacevole esperienza di pianificazione,
Il team Cal.com", "disable_payment_app": "L'amministratore ha disabilitato {{appName}}, il che ha effetto sul tuo tipo di evento {{title}}. I partecipanti sono ancora in grado di prenotare questo tipo di evento ma non gli verrà richiesto di pagare. Per evitarlo, è possibile nascondere questo tipo di evento fino a che l'amministratore non riattivi il tuo metodo di pagamento.", "payment_disabled_still_able_to_book": "I partecipanti sono ancora in grado di prenotare questo tipo di evento ma non gli verrà richiesto di pagare. Per evitarlo, è possibile nascondere questo tipo di evento fino a che l'amministratore non riattivi il tuo metodo di pagamento.", @@ -1685,8 +1685,8 @@ "add_1_option_per_line": "Aggiungi 1 opzione per riga", "select_a_router": "Seleziona un instradatore", "add_a_new_route": "Aggiungi un nuovo percorso", - "make_informed_decisions": "Prendi decisioni informate con Approfondimenti", - "make_informed_decisions_description": "Il pannello di controllo Approfondimenti offre una panoramica di tutte le attività del team e mostra le tendenze, il che consente di migliorare la pianificazione di gruppo e il processo decisionale.", + "make_informed_decisions": "Prendi decisioni informate con Insights", + "make_informed_decisions_description": "Il pannello di controllo Insights offre una panoramica di tutte le attività del team e mostra le tendenze, il che consente di migliorare la pianificazione di gruppo e il processo decisionale.", "view_bookings_across": "Visualizza le prenotazioni di tutti i membri", "view_bookings_across_description": "Individua la persona che riceve il maggior numero di prenotazioni e assicura la migliore distribuzione delle prenotazioni all'interno del team", "identify_booking_trends": "Identifica le tendenze di prenotazione", @@ -1704,7 +1704,7 @@ "can_you_try_again": "Riprovare specificando un orario differente.", "verify": "Verifica", "timezone_variable": "Timezone", - "timezone_info": "Il fuso orario della persona che riceve", + "timezone_info": "Il fuso orario della persona che riceve la prenotazione", "event_end_time_variable": "Ora di fine evento", "event_end_time_info": "Ora di fine dell'evento", "cancel_url_variable": "URL di annullamento", @@ -1733,7 +1733,7 @@ "managed_event_dialog_information_one": "{{names}} utilizza già l'URL /{{slug}}.", "managed_event_dialog_information_other": "{{names}} utilizzano già l'URL /{{slug}}.", "managed_event_dialog_clarification": "Se si decide di sostituirlo, ai membri ne verrà inviata una notifica. Tornare indietro e rimuoverli se non si desidera sovrascriverlo.", - "review_event_type": "Verifica tipo di evento", + "review_event_type": "Controlla tipo di evento", "looking_for_more_analytics": "Hai bisogno di più dati analitici?", "looking_for_more_insights": "Hai bisogno di maggiori approfondimenti?", "add_filter": "Aggiungi filtro", @@ -1749,9 +1749,9 @@ "events_completed": "Eventi completati", "events_cancelled": "Eventi annullati", "events_rescheduled": "Eventi riprogrammati", - "from_last_period": "dall'ultimo periodo", + "from_last_period": "dal periodo precedente", "from_to_date_period": "Da: {{startDate}} A: {{endDate}}", - "analytics_for_organisation": "Approfondimenti", + "analytics_for_organisation": "Insights", "subtitle_analytics": "Scopri di più sull'attività del tuo team", "redirect_url_warning": "Aggiungendo un reindirizzamento, viene disabilitata la pagina di conferma dell'esito. Assicurati che nella pagina di conferma dell'esito personalizzata compaia la dicitura \"Prenotazione confermata\".", "event_trends": "Tendenze eventi", @@ -1773,7 +1773,7 @@ "error_charging_card": "L'addebito della penale per mancata presentazione non è andato a buon fine. Riprovare più tardi.", "collect_no_show_fee": "Riscuoti penale per mancata presentazione", "no_show_fee_charged": "Penale per mancata presentazione addebitata", - "insights": "Approfondimenti", + "insights": "Insights", "testing_workflow_info_message": "Durante il test di questo flusso di lavoro, tieni presente che le e-mail e i messaggi SMS possono essere programmati con almeno 1 ora di anticipo", "insights_no_data_found_for_filter": "Nessun dato trovato per il filtro selezionato o le date selezionate.", "acknowledge_booking_no_show_fee": "Confermo che in caso di mia mancata partecipazione a questo evento, una penale per mancata presentazione di {{amount, currency}} verrà addebitata sulla mia carta.", diff --git a/apps/web/public/static/locales/ja/common.json b/apps/web/public/static/locales/ja/common.json index c33a7ef8e7..55de430dd0 100644 --- a/apps/web/public/static/locales/ja/common.json +++ b/apps/web/public/static/locales/ja/common.json @@ -70,8 +70,8 @@ "event_awaiting_approval_subject": "承認を待っています: {{date}} の {{title}}", "event_still_awaiting_approval": "イベントはまだあなたの承認待ちです", "booking_submitted_subject": "予約を送信しました: {{title}}、{{date}}", - "download_recording_subject": "録音のダウンロード: {{date}} の {{title}}", - "download_your_recording": "録音をダウンロード", + "download_recording_subject": "レコーディングのダウンロード: {{date}} の {{title}}", + "download_your_recording": "レコーディングをダウンロード", "your_meeting_has_been_booked": "ミーティングが予約されました", "event_type_has_been_rescheduled_on_time_date": "あなたの {{title}} は {{date}} に再スケジュールされました。", "event_has_been_rescheduled": "更新 - イベントのスケジュールが変更されました", @@ -904,7 +904,7 @@ "duplicate": "複製", "offer_seats": "座席を提供", "offer_seats_description": "予約可能な座席を設定します。これにより、ゲストおよびオプトイン予約は自動的に無効化されます。", - "seats_available": "空席あり", + "seats_available_other": "空席あり", "number_of_seats": "1予約あたりの座席数", "enter_number_of_seats": "座席数を入力", "you_can_manage_your_schedules": "スケジュール管理は、「空き状況」ページで行えます。", @@ -1279,8 +1279,8 @@ "download_responses": "回答をダウンロード", "download_responses_description": "CSV 形式ですべての回答をフォームにダウンロードします。", "download": "ダウンロード", - "download_recording": "録音をダウンロード", - "recording_from_your_recent_call": "Cal.com での最近の通話の録音がダウンロード可能です", + "download_recording": "レコーディングをダウンロード", + "recording_from_your_recent_call": "Cal.com での最近の通話のレコーディングがダウンロード可能です", "create_your_first_form": "最初のフォームを作成", "create_your_first_form_description": "ルーティングフォームを使用すれば、絞り込みの質問を通して適切な人物やイベントの種類へとルーティングを行うことができます。", "create_your_first_webhook": "最初のウェブフックを作成", @@ -1685,8 +1685,8 @@ "add_1_option_per_line": "1 行に 1 つのオプションを追加する", "select_a_router": "ルーターを選択", "add_a_new_route": "新しいルートを追加", - "make_informed_decisions": "インサイトを使って情報に基づいた決定をする", - "make_informed_decisions_description": "インサイトダッシュボードではチーム全体のアクティビティがひと目でわかります。傾向もわかるので、チームはより良いスケジューリングと決定ができます。", + "make_informed_decisions": "Insights を使って情報に基づいた決定をする", + "make_informed_decisions_description": "Insights ダッシュボードではチーム全体のアクティビティがひと目でわかります。傾向もわかるので、チームはより良いスケジューリングと決定ができます。", "view_bookings_across": "メンバー全体の予約を表示", "view_bookings_across_description": "誰が最も予約されているか確認し、チーム全体で最適な配分ができるようにします", "identify_booking_trends": "予約の傾向を明らかにする", @@ -1735,7 +1735,7 @@ "managed_event_dialog_clarification": "置き換えを選択すると、通知が送られます。上書きしたくない場合は、戻って削除してください。", "review_event_type": "イベントタイプを確認", "looking_for_more_analytics": "詳しい分析をお探しですか?", - "looking_for_more_insights": "詳しいインサイトをお探しですか?", + "looking_for_more_insights": "詳しい Insights をお探しですか?", "add_filter": "フィルターを追加", "select_user": "ユーザーを選択", "select_event_type": "イベントタイプを選択", @@ -1751,7 +1751,7 @@ "events_rescheduled": "イベントがスケジュール変更されました", "from_last_period": "最後の期間から", "from_to_date_period": "開始:{{startDate}} 終了:{{endDate}}", - "analytics_for_organisation": "インサイト", + "analytics_for_organisation": "Insights", "subtitle_analytics": "チームのアクティビティについてさらに詳しく知る", "redirect_url_warning": "リダイレクトを追加すると予約完了ページが無効化されます。必ずカスタムの予約完了ページで「予約が確認されました」と伝えてください。", "event_trends": "イベントのトレンド", @@ -1766,14 +1766,14 @@ "no_show_fee": "予約不参加料金", "submit_card": "カードを送信", "submit_payment_information": "支払い情報を送信", - "meeting_awaiting_payment_method": "会議の支払い方法を待っています", + "meeting_awaiting_payment_method": "会議は支払い方法待ちです", "no_show_fee_charged_email_subject": "{{date}} の {{title}} に {{amount, currency}} の予約不参加料金が請求されました", "no_show_fee_charged_text_body": "予約不参加料金が請求されました", "no_show_fee_charged_subtitle": "次のイベントに {{amount, currency}} の予約不参加料金が請求されました", "error_charging_card": "予約不参加料金の請求に問題が発生しました。後でもう一度お試しください。", "collect_no_show_fee": "予約不参加料金を受け取る", "no_show_fee_charged": "予約不参加料金が請求されました", - "insights": "インサイト", + "insights": "Insights", "testing_workflow_info_message": "このワークフローをテストする際は、少なくとも1時間前でないとメールとSMSをスケジュール設定できないことにご注意ください", "insights_no_data_found_for_filter": "選択したフィルターまたは選択した日付のデータが見つかりません。", "acknowledge_booking_no_show_fee": "このイベントに参加しない場合、{{amount, currency}} の予約不参加料金が私のカードに請求されることに同意します。", diff --git a/apps/web/public/static/locales/ko/common.json b/apps/web/public/static/locales/ko/common.json index 61ec386b46..01bc222676 100644 --- a/apps/web/public/static/locales/ko/common.json +++ b/apps/web/public/static/locales/ko/common.json @@ -592,16 +592,16 @@ "round_robin": "라운드 로빈", "round_robin_description": "여러 팀 구성원 간의 주기적인 회의", "managed_event": "관리형 이벤트", - "username_placeholder": "사용자 이름", + "username_placeholder": "username", "managed_event_description": "팀원들에게 대량으로 이벤트 유형 생성 및 배포", "managed": "관리됨", - "managed_event_url_clarification": "\"사용자 이름\"은 할당된 회원의 사용자 이름으로 채워집니다", + "managed_event_url_clarification": "\"username\"은 할당된 회원의 사용자 이름으로 채워집니다", "assign_to": "할당:", "add_members": "회원 추가:", "count_members_one": "회원 {{count}}명", "count_members_other": "회원 {{count}}명", "no_assigned_members": "할당된 회원 없음", - "assigned_to": "할당됨:", + "assigned_to": "할당된 이벤트 유형:", "start_assigning_members_above": "위에서 회원 할당 시작", "locked_fields_admin_description": "회원은 이 내용을 수정할 수 없게 됩니다", "locked_fields_member_description": "이 옵션은 팀 관리자에 의해 잠겼습니다", @@ -906,7 +906,7 @@ "duplicate": "복제", "offer_seats": "좌석 제공", "offer_seats_description": "예약에 좌석 제공(게스트를 비활성화하고 예약을 선택함)", - "seats_available": "사용 가능한 좌석", + "seats_available_other": "사용 가능한 좌석", "number_of_seats": "예약당 좌석 수", "enter_number_of_seats": "좌석 수 입력", "you_can_manage_your_schedules": "가용성 페이지에서 자신의 일정을 관리할 수 있습니다.", @@ -1321,7 +1321,7 @@ "exchange_authentication_standard": "기본 인증", "exchange_authentication_ntlm": "NTLM 인증", "exchange_compression": "GZip 압축", - "exchange_version": "전환 버전", + "exchange_version": "Exchange 버전", "exchange_version_2007_SP1": "2007 SP1", "exchange_version_2010": "2010", "exchange_version_2010_SP1": "2010 SP1", @@ -1717,7 +1717,7 @@ "can_you_try_again": "다른 시간으로 다시 해보시겠어요?", "verify": "인증", "timezone_variable": "시간대", - "timezone_info": "받는 사람의 시간대", + "timezone_info": "예약 수신자의 시간대", "event_end_time_variable": "이벤트 종료 시간", "event_end_time_info": "이벤트 종료 시간", "cancel_url_variable": "취소 URL", @@ -1745,7 +1745,7 @@ "managed_event_dialog_title_other": "URL /{{slug}}은(는) {{count}}명의 회원에 대해 이미 존재합니다. 바꾸시겠습니까?", "managed_event_dialog_information_one": "{{names}} 님이 이미 /{{slug}} url을 사용하는 중입니다.", "managed_event_dialog_information_other": "{{names}} 님이 이미 /{{slug}} url을 사용하는 중입니다.", - "managed_event_dialog_clarification": "바꾸기를 선택하면 알려드립니다. 덮어쓰지 않으려면 돌아가서 제거하십시오.", + "managed_event_dialog_clarification": "URL 바꾸기를 선택하면 회원에게 알려드립니다. 덮어쓰지 않으려면 돌아가서 제거하십시오.", "review_event_type": "이벤트 타입 검토", "looking_for_more_analytics": "추가적인 분석을 원하시나요?", "looking_for_more_insights": "더 많은 인사이트를 찾고계신가요?", @@ -1789,7 +1789,7 @@ "insights": "인사이트", "testing_workflow_info_message": "이 워크플로를 테스트할 때 이메일 및 SMS는 최소 1시간 전에만 예약할 수 있다는 점에 유의하세요", "insights_no_data_found_for_filter": "선택한 필터 또는 날짜에 대한 데이터를 찾을 수 없습니다.", - "acknowledge_booking_no_show_fee": "본인은 이 이벤트에 참석하지 않을 경우 {{amount, currency}}에 대한 노쇼 수수료가 내 카드에 적용됨을 인정합니다.", + "acknowledge_booking_no_show_fee": "본인은 이 이벤트에 참석하지 않을 경우 {{amount, currency}}에 대한 노쇼 수수료가 내 카드에 부과됨을 인정합니다.", "card_details": "카드 세부정보", "seats_and_no_show_fee_error": "현재 좌석을 활성화할 수 없으므로 노쇼 수수료를 부과할 수 없습니다", "complete_your_booking": "예약을 완료하세요", diff --git a/apps/web/public/static/locales/nl/common.json b/apps/web/public/static/locales/nl/common.json index 7c2d88017b..b10182ceb6 100644 --- a/apps/web/public/static/locales/nl/common.json +++ b/apps/web/public/static/locales/nl/common.json @@ -904,7 +904,7 @@ "duplicate": "Dupliceren", "offer_seats": "Zitplaatsen aanbieden", "offer_seats_description": "Bied beschikbare plaatsen aan voor boekingen. Hiermee worden gastboekingen en aanmeldingsboekingen automatisch uitgeschakeld.", - "seats_available": "Beschikbare zitplaatsen", + "seats_available_other": "Beschikbare zitplaatsen", "number_of_seats": "Aantal zitplaatsen per boeking", "enter_number_of_seats": "Voer het aantal zitplaatsen in", "you_can_manage_your_schedules": "U kunt uw schema's beheren op de beschikbaarheidspagina.", diff --git a/apps/web/public/static/locales/no/common.json b/apps/web/public/static/locales/no/common.json index eb36121620..d8196dd6ec 100644 --- a/apps/web/public/static/locales/no/common.json +++ b/apps/web/public/static/locales/no/common.json @@ -861,7 +861,7 @@ "duplicate": "Dupliser", "offer_seats": "Tilby seter", "offer_seats_description": "Tilby seter for booking. Dette deaktiverer automatisk gjeste- og påmeldings-bookinger.", - "seats_available": "Tilgjengelige seter", + "seats_available_other": "Tilgjengelige seter", "number_of_seats": "Antall seter per booking", "enter_number_of_seats": "Angi antall seter", "you_can_manage_your_schedules": "Du kan administrere tidsplanene dine på Tilgjengelighet-siden.", diff --git a/apps/web/public/static/locales/pl/common.json b/apps/web/public/static/locales/pl/common.json index fc86885e8e..160ded39c7 100644 --- a/apps/web/public/static/locales/pl/common.json +++ b/apps/web/public/static/locales/pl/common.json @@ -408,7 +408,7 @@ "add_time_availability": "Dodaj nowy przedział czasowy", "add_an_extra_layer_of_security": "Dodaj dodatkową warstwę zabezpieczeń do swojego konta na wypadek kradzieży hasła.", "2fa": "Uwierzytelnianie dwuetapowe", - "2fa_disabled": "Uwierzytelnianie dwuskładnikowe może zostać włączone tylko do uwierzytelniania adresu e-mail i hasła.", + "2fa_disabled": "Uwierzytelnianie dwuskładnikowe można włączyć tylko w celu uwierzytelniania adresu e-mail i hasła", "enable_2fa": "Włącz uwierzytelnianie dwuskładnikowe", "disable_2fa": "Wyłącz uwierzytelnianie dwuetapowe", "disable_2fa_recommendation": "Jeśli chcesz wyłączyć 2FA, zalecamy ponowne włączenie go tak szybko, jak to możliwe.", @@ -590,19 +590,19 @@ "round_robin": "Round Robin", "round_robin_description": "Cykl spotkań między wieloma członkami zespołu.", "managed_event": "Zarządzane wydarzenie", - "username_placeholder": "nazwa użytkownika", - "managed_event_description": "Masowo twórz i udostępniaj typy wydarzeń członkom zespołu", + "username_placeholder": "nazwa-użytkownika", + "managed_event_description": "Zbiorczo twórz typy wydarzeń i rozpowszechniaj je wśród członków zespołu", "managed": "Zarządzane", - "managed_event_url_clarification": "Pole „nazwa użytkownika” zostanie uzupełnione nazwami przypisanych użytkowników.", + "managed_event_url_clarification": "Pole „username” zostanie wypełnione nazwą przypisanego użytkownika", "assign_to": "Przypisz do", "add_members": "Dodaj członków...", - "count_members_one": "Liczba członków: {{count}}", - "count_members_other": "Liczba członków: {{count}}", + "count_members_one": "{{count}} członek", + "count_members_other": "{{count}} członków", "no_assigned_members": "Brak przypisanych członków", "assigned_to": "Przypisano do:", "start_assigning_members_above": "Rozpocznij przypisywanie członków powyżej", - "locked_fields_admin_description": "Członkowie nie będą mogli tego edytować.", - "locked_fields_member_description": "Ta opcja została zablokowana przez administratora zespołu.", + "locked_fields_admin_description": "Członkowie nie będą mogli tego edytować", + "locked_fields_member_description": "Ta opcja została zablokowana przez administratora zespołu", "url": "Adres URL", "hidden": "Ukryte", "readonly": "Tylko do odczytu", @@ -904,7 +904,7 @@ "duplicate": "Duplikat", "offer_seats": "Zaproponuj miejsca", "offer_seats_description": "Zaoferuj miejsca do zarezerwowania. To automatycznie wyłącza rezerwacje gości i rezerwacje wstępne.", - "seats_available": "Dostępne miejsca", + "seats_available_other": "Dostępne miejsca", "number_of_seats": "Liczba miejsc na rezerwację", "enter_number_of_seats": "Wprowadź liczbę miejsc", "you_can_manage_your_schedules": "Możesz zarządzać swoimi harmonogramami na stronie Dostępności.", @@ -1154,7 +1154,7 @@ "variable_format": "Format zmiennej", "webhook_subscriber_url_reserved": "Adres URL subskrybenta Webhook jest już zdefiniowany.", "custom_input_as_variable_info": "Ignoruj wszystkie znaki specjalne etykiety dodatkowych danych wejściowych (używaj tylko liter i cyfr), użyj wielkich liter w przypadku wszystkich liter i zastąp spacje znakami podkreślenia.", - "using_booking_questions_as_variables": "Jak mogę używać pytań dotyczących rezerwacji jako zmiennych?", + "using_booking_questions_as_variables": "Jak używać pytań dotyczących rezerwacji jako zmiennych?", "download_desktop_app": "Pobierz aplikację komputerową", "set_ping_link": "Ustaw link do aplikacji Ping", "rate_limit_exceeded": "Przekroczono limit prób", @@ -1177,7 +1177,7 @@ "event_advanced_tab_title": "Zaawansowane", "event_setup_multiple_duration_error": "Konfiguracja wydarzeń: wiele czasów trwania wymaga co najmniej 1 opcji.", "event_setup_multiple_duration_default_error": "Konfiguracja wydarzenia: wybierz prawidłowy domyślny czas trwania.", - "event_setup_booking_limits_error": "Limity rezerwacji muszą być podane w kolejności rosnącej. [dzień,tydzień,miesiąc,rok]", + "event_setup_booking_limits_error": "Limity rezerwacji muszą być podane w kolejności rosnącej. [dzień, tydzień, miesiąc, rok]", "event_setup_duration_limits_error": "Limity czasu trwania muszą być podane w kolejności rosnącej. [dzień, tydzień, miesiąc, rok]", "select_which_cal": "Wybierz kalendarz, do którego chcesz dodać rezerwacje.", "custom_event_name": "Niestandardowa nazwa wydarzenia", @@ -1280,7 +1280,7 @@ "download_responses_description": "Pobierz wszystkie odpowiedzi do formularza w formacie CSV.", "download": "Pobierz", "download_recording": "Pobierz nagranie", - "recording_from_your_recent_call": "Nagranie z ostatniego połączenia w witrynie Cal.com jest gotowe do pobrania.", + "recording_from_your_recent_call": "Nagranie z ostatniego połączenia w witrynie Cal.com jest gotowe do pobrania", "create_your_first_form": "Utwórz pierwszy formularz", "create_your_first_form_description": "Za pomocą formularzy przekierowujących możesz zadawać pytania profilujące i przekierowywać użytkowników do odpowiednich osób lub typów wydarzeń.", "create_your_first_webhook": "Utwórz pierwszy Webhook", @@ -1326,7 +1326,7 @@ "exchange_version_2013_SP1": "2013 SP1", "exchange_version_2015": "2015", "exchange_version_2016": "2016", - "routing_forms_description": "Możesz tutaj zobaczyć wszystkie utworzone przez siebie formularze i przekierowania.", + "routing_forms_description": "Utwórz formularze kierujące uczestników do właściwych miejsc docelowych", "routing_forms_send_email_owner": "Wyślij wiadomość e-mail do właściciela", "routing_forms_send_email_owner_description": "Wysyła wiadomość e-mail do właściciela, gdy formularz zostanie przesłany.", "add_new_form": "Dodaj nowy formularz", @@ -1484,11 +1484,11 @@ "duration_limit_reached": "Osiągnięto limit czasu trwania tego typu wydarzenia", "admin_has_disabled": "Administrator wyłączył aplikację {{appName}}", "disabled_app_affects_event_type": "Administrator wyłączył aplikację {{appName}}, która ma wpływ na Twój typ wydarzenia ({{eventType}})", - "event_replaced_notice": "Administrator zastąpił jeden z Twoich typów wydarzeń.", + "event_replaced_notice": "Administrator zastąpił jeden z Twoich typów wydarzeń", "email_subject_slug_replacement": "Administrator zespołu zastąpił Twoje wydarzenie /{{slug}}", "email_body_slug_replacement_notice": "Administrator zespołu {{teamName}} zastąpił Twój typ wydarzenia /{{slug}} kontrolowanym przez siebie typem zarządzanego wydarzenia.", "email_body_slug_replacement_info": "Twój link nadal będzie działał, ale niektóre z jego ustawień mogły ulec zmianie. Możesz zobaczyć szczegóły w typach wydarzeń.", - "email_body_slug_replacement_suggestion": "Jeśli masz jakiekolwiek pytania dotyczące typu wydarzenia, skontaktuj się z administratorem.

Miłego planowania
Zespół Cal.com", + "email_body_slug_replacement_suggestion": "Jeśli masz jakiekolwiek pytania dotyczące typu wydarzenia, skontaktuj się z administratorem.

Miłego planowania,
Zespół Cal.com", "disable_payment_app": "Administrator wyłączył aplikację {{appName}}, która ma wpływ na Twój typ wydarzenia ({{title}}). Uczestnicy nadal mogą rezerwować wydarzenie tego typu, ale nie zostaną poproszeni o płatność. Możesz ukryć ten typ wydarzenia, aby temu zapobiec, póki administrator nie włączy ponownie Twojej metody płatności.", "payment_disabled_still_able_to_book": "Uczestnicy nadal mogą rezerwować wydarzenie tego typu, ale nie zostaną poproszeni o płatność. Możesz ukryć ten typ wydarzenia, aby temu zapobiec, póki administrator nie włączy ponownie Twojej metody płatności.", "app_disabled_with_event_type": "Administrator wyłączył aplikację {{appName}}, która ma wpływ na Twój typ wydarzenia ({{title}}).", @@ -1661,7 +1661,7 @@ "not_enough_seats": "Za mało miejsc", "form_builder_field_already_exists": "Pole o tej nazwie już istnieje", "form_builder_field_add_subtitle": "Dostosuj pytania zadawane na stronie rezerwacji", - "show_on_booking_page": "Wyświetl na stronie rezerwacji", + "show_on_booking_page": "Pokaż na stronie rezerwacji", "get_started_zapier_templates": "Zacznij korzystać z szablonów Zapier", "team_is_unpublished": "Zespół {{team}} nie został opublikowany", "team_is_unpublished_description": "Link tego zespołu jest obecnie niedostępny. Skontaktuj się z właścicielem zespołu lub poproś o jego opublikowanie.", @@ -1685,14 +1685,14 @@ "add_1_option_per_line": "Dodaj 1 opcję w każdym wierszu", "select_a_router": "Wybierz formularz przekierowania", "add_a_new_route": "Dodaj nowe przekierowanie", - "make_informed_decisions": "Podejmuj świadome decyzje dzięki funkcji Statystyki", - "make_informed_decisions_description": "Panel Statystyki zawiera informacje o całej aktywności zespołu i trendach umożliwiających lepsze planowanie i podejmowanie decyzji w zespole.", - "view_bookings_across": "Zobacz rezerwacje wszystkich członków", - "view_bookings_across_description": "Zobacz, kto ma najwięcej rezerwacji i upewnij się, że Twój zespół jest równomiernie obciążony pracą.", + "make_informed_decisions": "Podejmuj świadome decyzje dzięki funkcji Insights", + "make_informed_decisions_description": "Panel Insights zawiera informacje o całej aktywności zespołu i trendach umożliwiających lepsze planowanie i podejmowanie decyzji w zespole.", + "view_bookings_across": "Wyświetl rezerwacje wszystkich członków", + "view_bookings_across_description": "Zobacz, kto ma najwięcej rezerwacji i upewnij się, że Twój zespół jest równomiernie obciążony", "identify_booking_trends": "Identyfikuj trendy w rezerwacjach", - "identify_booking_trends_description": "Zobacz, które dni tygodnia i pory dnia są popularne wśród rezerwujących.", + "identify_booking_trends_description": "Zobacz, które dni tygodnia i pory dnia są popularne wśród rezerwujących", "spot_popular_event_types": "Przekonaj się, które typy wydarzeń są popularne", - "spot_popular_event_types_description": "Zobacz, które typy wydarzeń są najczęściej klikane i rezerwowane.", + "spot_popular_event_types_description": "Zobacz, które typy wydarzeń są najczęściej klikane i rezerwowane", "no_responses_yet": "Nie ma jeszcze odpowiedzi", "this_will_be_the_placeholder": "To będzie symbol zastępczy", "this_meeting_has_not_started_yet": "To spotkanie jeszcze się nie rozpoczęło", @@ -1704,62 +1704,62 @@ "can_you_try_again": "Czy możesz spróbować ponownie w innym terminie?", "verify": "Zweryfikuj", "timezone_variable": "Strefa Czasowa", - "timezone_info": "Strefa czasowa osoby otrzymującej", + "timezone_info": "Strefa czasowa osoby rezerwowanej", "event_end_time_variable": "Czas zakończenia wydarzenia", "event_end_time_info": "Czas zakończenia wydarzenia", - "cancel_url_variable": "Adres URL do anulowania", - "cancel_url_info": "Adres URL do anulowania rezerwacji", - "reschedule_url_variable": "Adres URL do zmiany terminu", - "reschedule_url_info": "Adres URL do zmiany terminu rezerwacji", + "cancel_url_variable": "Adres URL umożliwiający anulowanie", + "cancel_url_info": "Adres URL umożliwiający anulowanie rezerwacji", + "reschedule_url_variable": "Adres URL umożliwiający zmianę terminu", + "reschedule_url_info": "Adres URL umożliwiający zmianę terminu rezerwacji", "invalid_event_name_variables": "W Twojej nazwie wydarzenia występuje nieprawidłowa zmienna.", "select_all": "Zaznacz wszystko", "default_conferencing_bulk_title": "Zbiorcza aktualizacja istniejących typów wydarzeń", - "members_default_schedule": "Domyślny harmonogram użytkownika", - "set_by_admin": "Ustalone przez administratora zespołu", + "members_default_schedule": "Domyślny harmonogram członka", + "set_by_admin": "Ustawia administrator zespołu", "members_default_location": "Domyślna lokalizacja członka", "members_default_schedule_description": "Będziemy używać domyślnego harmonogramu dostępności każdego członka. Każdy z nich będzie mógł go edytować lub zmienić.", - "requires_at_least_one_schedule": "Musisz mieć co najmniej jeden harmonogram.", + "requires_at_least_one_schedule": "Musisz mieć co najmniej jeden harmonogram", "default_conferencing_bulk_description": "Aktualizuj lokalizacje wybranych typów wydarzeń", - "locked_for_members": "Zablokowane dla członków", - "locked_apps_description": "Członkowie będą mogli zobaczyć aktywne aplikacje, ale nie będą mogli zmieniać ich ustawień.", - "locked_webhooks_description": "Członkowie będą mogli zobaczyć aktywne webhooki, ale nie będą mogli zmieniać ich ustawień.", - "locked_workflows_description": "Członkowie będą mogli zobaczyć aktywne przepływy pracy, ale nie będą mogli zmieniać ich ustawień.", - "app_not_connected": "Nie połączono konta aplikacji {{appName}}.", - "connect_now": "Połącz teraz", + "locked_for_members": "Zablokowany dla członków", + "locked_apps_description": "Członkowie będą mogli sprawdzić aktywne aplikacje, ale nie będą mogli edytować ich ustawień", + "locked_webhooks_description": "Członkowie będą mogli sprawdzić aktywne webhooki, ale nie będą mogli edytować ich ustawień", + "locked_workflows_description": "Członkowie będą mogli sprawdzić aktywne przepływy pracy, ale nie będą mogli edytować ich ustawień", + "app_not_connected": "Nie podłączono konta {{appName}}.", + "connect_now": "Podłącz teraz", "managed_event_dialog_confirm_button_one": "Zastąp i poinformuj {{count}} członka", - "managed_event_dialog_confirm_button_other": "Zastąp i poinformuj {{count}} członków", + "managed_event_dialog_confirm_button_other": "Zastąp i powiadom {{count}} członków", "managed_event_dialog_title_one": "Adres URL /{{slug}} już istnieje dla {{count}} członka. Czy chcesz go zastąpić?", "managed_event_dialog_title_other": "Adres URL /{{slug}} już istnieje dla {{count}} członków. Czy chcesz go zastąpić?", "managed_event_dialog_information_one": "{{names}} używa już adresu URL /{{slug}}.", "managed_event_dialog_information_other": "{{names}} używają już adresu URL /{{slug}}.", - "managed_event_dialog_clarification": "Jeśli zdecydujesz się go zastąpić, powiadomimy te osoby. Wróć i usuń je, jeśli nie chcesz nadpisywać adresu.", - "review_event_type": "Zobacz szczegóły typu wydarzenia", + "managed_event_dialog_clarification": "Jeśli zdecydujesz się go zastąpić, powiadomimy te osoby. Wróć i usuń je, jeśli nie chcesz zastępować adresu.", + "review_event_type": "Sprawdź typ wydarzenia", "looking_for_more_analytics": "Szukasz dokładniejszych danych analitycznych?", - "looking_for_more_insights": "Potrzebujesz dokładniejszych Statystyk?", + "looking_for_more_insights": "Szukasz dokładniejszych danych Insights?", "add_filter": "Dodaj filtr", "select_user": "Wybierz użytkownika", "select_event_type": "Wybierz typ wydarzenia", "select_date_range": "Wybierz zakres dat", "popular_events": "Popularne wydarzenia", - "no_event_types_found": "Nie znaleziono typów wydarzeń", + "no_event_types_found": "Nie znaleziono żadnych typów wydarzeń", "average_event_duration": "Średni czas trwania wydarzenia", "most_booked_members": "Najczęściej rezerwowani członkowie", "least_booked_members": "Najrzadziej rezerwowani członkowie", "events_created": "Utworzone wydarzenia", - "events_completed": "Zakończone wydarzenia", + "events_completed": "Ukończone wydarzenia", "events_cancelled": "Anulowane wydarzenia", "events_rescheduled": "Przełożone wydarzenia", - "from_last_period": "w ostatnim okresie", + "from_last_period": "od ostatniego okresu", "from_to_date_period": "Od: {{startDate}} Do: {{endDate}}", - "analytics_for_organisation": "Statystyki", + "analytics_for_organisation": "Insights", "subtitle_analytics": "Dowiedz się więcej o aktywności Twojego zespołu", - "redirect_url_warning": "Dodanie przekierowania sprawi, że strona powodzenia zostanie wyłączona. Upewnij się, że na Twojej niestandardowej stronie powodzenia umieścisz informację o potwierdzeniu rezerwacji.", + "redirect_url_warning": "Dodanie przekierowania wyłączy stronę powodzenia. Upewnij się, że na Twojej niestandardowej stronie powodzenia znajduje się wzmianka o potwierdzeniu rezerwacji.", "event_trends": "Trendy wydarzeń", "clear_filters": "Wyczyść filtry", - "hold": "Wstrzymaj", + "hold": "Zablokowano", "on_booking_option": "Pobierz płatność przy rezerwacji", "hold_option": "Pobierz opłatę za niestawienie się", - "card_held": "Posiadana karta", + "card_held": "Zablokowano środki na karcie", "charge_card": "Obciąż kartę płatniczą", "card_charged": "Obciążono kartę płatniczą", "no_show_fee_amount": "Opłata za niestawienie się w wysokości {{amount, currency}}", @@ -1773,11 +1773,11 @@ "error_charging_card": "Coś poszło nie tak podczas pobierania opłaty za niestawienie się. Spróbuj ponownie później.", "collect_no_show_fee": "Pobierz opłatę za niestawienie się", "no_show_fee_charged": "Pobrano opłatę za niestawienie się", - "insights": "Statystyki", - "testing_workflow_info_message": "Podczas testowania tego przepływu pracy pamiętaj, że wiadomości e-mail i SMS mogą zostać zaplanowane najpóźniej godzinę przed terminem ich dostarczenia.", - "insights_no_data_found_for_filter": "Nie znaleziono danych dotyczących wybranego filtra lub wskazanych dat.", - "acknowledge_booking_no_show_fee": "Rozumiem, że jeśli nie wezmę udziału w wydarzeniu, z mojej karty pobrana zostanie opłata w wysokości {{amount, currency}}.", - "card_details": "Dane karty płatniczej", + "insights": "Insights", + "testing_workflow_info_message": "Podczas testowania tego przepływu pracy pamiętaj, że wiadomości e-mail i SMS można zaplanować jedynie z co najmniej 1-godzinnym wyprzedzeniem", + "insights_no_data_found_for_filter": "Nie znaleziono danych dotyczących wybranego filtru lub wskazanych dat.", + "acknowledge_booking_no_show_fee": "Rozumiem, że jeśli nie wezmę udziału w wydarzeniu, z mojej karty pobrana zostanie opłata za niestawienie się w wysokości {{amount, currency}}.", + "card_details": "Dane karty", "seats_and_no_show_fee_error": "Obecnie nie można udostępnić miejsc ani naliczyć opłaty za niestawienie się.", "complete_your_booking": "Ukończ rezerwację", "complete_your_booking_subject": "Ukończ rezerwację: {{title}} dnia {{date}}", diff --git a/apps/web/public/static/locales/pt-BR/common.json b/apps/web/public/static/locales/pt-BR/common.json index 7befbd7f5c..98fe55007a 100644 --- a/apps/web/public/static/locales/pt-BR/common.json +++ b/apps/web/public/static/locales/pt-BR/common.json @@ -904,7 +904,7 @@ "duplicate": "Duplicar", "offer_seats": "Oferecer assentos", "offer_seats_description": "Oferecer assentos para reserva. Isto desativa automaticamente reservas de convidados e confirmações.", - "seats_available": "Assentos disponíveis", + "seats_available_other": "Assentos disponíveis", "number_of_seats": "Número de assentos por reserva", "enter_number_of_seats": "Insira a quantidade de assentos", "you_can_manage_your_schedules": "Você pode gerenciar suas agendas na página de Disponibilidade.", diff --git a/apps/web/public/static/locales/pt/common.json b/apps/web/public/static/locales/pt/common.json index 98f0593770..b3eb0917ff 100644 --- a/apps/web/public/static/locales/pt/common.json +++ b/apps/web/public/static/locales/pt/common.json @@ -71,7 +71,7 @@ "event_still_awaiting_approval": "Um evento ainda aguarda a sua aprovação", "booking_submitted_subject": "Reserva submetida: {{title}} em {{date}}", "download_recording_subject": "Transferir gravação: {{title}} em {{date}}", - "download_your_recording": "Transferir a sua gravação", + "download_your_recording": "Transfira a sua gravação", "your_meeting_has_been_booked": "A sua reunião foi reservada", "event_type_has_been_rescheduled_on_time_date": "Seu {{title}} foi remarcado para {{date}}.", "event_has_been_rescheduled": "O seu evento foi reagendado.", @@ -593,7 +593,7 @@ "username_placeholder": "nome-de-utilizador", "managed_event_description": "Criar e distribuir tipos de eventos em conjunto para os membros da equipa", "managed": "Gerido", - "managed_event_url_clarification": "\"username\" será substituído pelo nome de utilizador dos membros atribuídos", + "managed_event_url_clarification": "\"nome-de-utilizador\" será substituído pelo nome de utilizador dos membros atribuídos", "assign_to": "Atribuir a", "add_members": "Adicionar membros...", "count_members_one": "{{count}} membro", @@ -904,7 +904,7 @@ "duplicate": "Duplicar", "offer_seats": "Oferecer lugares", "offer_seats_description": "Oferecer lugares para reservas (isto desactiva os convidados e confirmações nas reservas)", - "seats_available": "Lugares disponíveis", + "seats_available_other": "Lugares disponíveis", "number_of_seats": "Número de lugares por reserva", "enter_number_of_seats": "Digite um número de lugares", "you_can_manage_your_schedules": "Pode gerir os seus horários na página de Disponibilidade.", @@ -1551,7 +1551,7 @@ "create_your_first_team_webhook_description": "Crie o seu primeiro webhook para este tipo de evento de equipa", "create_webhook_team_event_type": "Crie um webhook para este tipo de evento de equipa", "disable_success_page": "Desativar a Página de sucesso (só funciona se tiver um URL de redirecionamento)", - "invalid_admin_password": "Você é um administrador, mas ainda não tem uma palavra-passe com pelo menos 15 caracteres", + "invalid_admin_password": "Você é administrador, mas ainda não tem uma palavra-passe com pelo menos 15 caracteres", "change_password_admin": "Altere a palavra-passe para ter acesso de administrador", "username_already_taken": "O nome de utilizador já está a ser utilizado", "assignment": "Atribuição", @@ -1743,8 +1743,8 @@ "popular_events": "Eventos populares", "no_event_types_found": "Não foram encontrados tipos de eventos", "average_event_duration": "Duração média do evento", - "most_booked_members": "Membros mais reservados", - "least_booked_members": "Membros menos reservados", + "most_booked_members": "Membros com mais reservas", + "least_booked_members": "Membros com menos reservas", "events_created": "Eventos criados", "events_completed": "Eventos concluídos", "events_cancelled": "Eventos cancelados", @@ -1756,10 +1756,10 @@ "redirect_url_warning": "Ao adicionar um redirecionamento irá desativar a página de sucesso. Certifique-se que indica que \"A reserva foi confirmada\" na sua página de sucesso personalizada.", "event_trends": "Tendências de evento", "clear_filters": "Limpar filtros", - "hold": "Cativo", + "hold": "Reter", "on_booking_option": "Receber o pagamento na reserva", "hold_option": "Cobrar taxa de não-comparência", - "card_held": "Cartão cativo", + "card_held": "Cartão retido", "charge_card": "Debitar no cartão", "card_charged": "Cartão debitado", "no_show_fee_amount": "Taxa de não-comparência de {{amount, currency}}", diff --git a/apps/web/public/static/locales/ro/common.json b/apps/web/public/static/locales/ro/common.json index 208724c0ea..91fcf55e5f 100644 --- a/apps/web/public/static/locales/ro/common.json +++ b/apps/web/public/static/locales/ro/common.json @@ -904,7 +904,7 @@ "duplicate": "Duplicare", "offer_seats": "Oferiți locuri", "offer_seats_description": "Opțiunea oferă locuri pentru rezervare și dezactivează automat rezervările pentru oaspeți și cele la alegere.", - "seats_available": "Locuri disponibile", + "seats_available_other": "Locuri disponibile", "number_of_seats": "Numărul de locuri per rezervare", "enter_number_of_seats": "Introduceți numărul de locuri", "you_can_manage_your_schedules": "Vă puteți gestiona programările pe pagina Disponibilitate.", diff --git a/apps/web/public/static/locales/ru/common.json b/apps/web/public/static/locales/ru/common.json index 8affc056cd..94d93fa4bf 100644 --- a/apps/web/public/static/locales/ru/common.json +++ b/apps/web/public/static/locales/ru/common.json @@ -904,7 +904,7 @@ "duplicate": "Создать копию", "offer_seats": "Предложить места", "offer_seats_description": "Предлагать места при бронировании (данная настройка автоматически отключает гостевой режим и бронирование с подтверждением).", - "seats_available": "Доступные места", + "seats_available_other": "Доступные места", "number_of_seats": "Количество мест на одну бронь", "enter_number_of_seats": "Укажите количество мест", "you_can_manage_your_schedules": "Расписаниями можно управлять на странице «Доступность».", diff --git a/apps/web/public/static/locales/sr/common.json b/apps/web/public/static/locales/sr/common.json index 60596c4c11..6a76d1a567 100644 --- a/apps/web/public/static/locales/sr/common.json +++ b/apps/web/public/static/locales/sr/common.json @@ -590,10 +590,10 @@ "round_robin": "Round Robin", "round_robin_description": "Ciklusirajte sastanke između više članova tima.", "managed_event": "Upravljani događaj", - "username_placeholder": "korisničko ime", + "username_placeholder": "username", "managed_event_description": "Kreirajte i distribuirajte veliku količinu tipova događaja članovima tima", "managed": "Upravljano", - "managed_event_url_clarification": "„korisničko ime“ će biti ispunjeno korisničkim imenom dodeljenog člana", + "managed_event_url_clarification": "„username“ će biti ispunjeno korisničkim imenom dodeljenog člana", "assign_to": "Dodelite", "add_members": "Dodajte članove...", "count_members_one": "{{count}} član", @@ -904,7 +904,7 @@ "duplicate": "Dupliraj", "offer_seats": "Ponudi mesta", "offer_seats_description": "Ponudite mesta za zakazivanje. Ovo automatski onemogućava gostujuća i opciona zakazivanja.", - "seats_available": "Slobodnih mesta", + "seats_available_other": "Slobodnih mesta", "number_of_seats": "Broj mesta po zakazivanju", "enter_number_of_seats": "Unesite broj slobodnih mesta", "you_can_manage_your_schedules": "Svojim rasporedima možete upravljati na stranici Dostupnost.", @@ -1317,7 +1317,7 @@ "exchange_authentication_standard": "Osnovna potvrda identiteta", "exchange_authentication_ntlm": "NTLM potvrda identiteta", "exchange_compression": "GZip kompresija", - "exchange_version": "Verzija za razmenu", + "exchange_version": "Exchange verzija", "exchange_version_2007_SP1": "2007. SP1", "exchange_version_2010": "2010.", "exchange_version_2010_SP1": "2010. SP1", @@ -1584,7 +1584,7 @@ "ee_enterprise_license": "“/ee” Licenca za preduzeća", "enterprise_booking_fee": "Već od {{enterprise_booking_fee}}/mesečno", "enterprise_license_includes": "Sve za komercijalnu upotrebu", - "no_need_to_keep_your_code_open_source": "Nije potrebno da vaš kôd bude otvoren", + "no_need_to_keep_your_code_open_source": "Nije potrebno da vaš kôd bude open-source", "repackage_rebrand_resell": "Prepakujte, rebrendirajte i lako ponovo prodajte", "a_vast_suite_of_enterprise_features": "Ogroman izbor funkcija za preduzeća", "free_license_fee": "0,00 $/mesečno", diff --git a/apps/web/public/static/locales/sv/common.json b/apps/web/public/static/locales/sv/common.json index 9fb50e2812..06f6308874 100644 --- a/apps/web/public/static/locales/sv/common.json +++ b/apps/web/public/static/locales/sv/common.json @@ -904,7 +904,7 @@ "duplicate": "Duplicera", "offer_seats": "Erbjud platser", "offer_seats_description": "Erbjud platser till bokningar. Detta inaktiverar gäster och bokningar.", - "seats_available": "Tillgängliga platser", + "seats_available_other": "Tillgängliga platser", "number_of_seats": "Antal platser per bokning", "enter_number_of_seats": "Ange antal platser", "you_can_manage_your_schedules": "Du kan hantera dina scheman på sidan Tillgänglighet.", diff --git a/apps/web/public/static/locales/tr/common.json b/apps/web/public/static/locales/tr/common.json index d8cee8c53a..b3d91b918c 100644 --- a/apps/web/public/static/locales/tr/common.json +++ b/apps/web/public/static/locales/tr/common.json @@ -904,7 +904,7 @@ "duplicate": "Çoğalt", "offer_seats": "Yer teklif et", "offer_seats_description": "Rezervasyonlar için yer teklif edin. Bu işlem, misafirleri ve rezervasyon onaylarını devre dışı bırakır.", - "seats_available": "Yer mevcut", + "seats_available_other": "Yer mevcut", "number_of_seats": "Rezervasyon başına yer sayısı", "enter_number_of_seats": "Yer sayısını girin", "you_can_manage_your_schedules": "Müsaitlik durumu sayfasından planlarınızı yönetebilirsiniz.", diff --git a/apps/web/public/static/locales/uk/common.json b/apps/web/public/static/locales/uk/common.json index 4521b177bc..608f273117 100644 --- a/apps/web/public/static/locales/uk/common.json +++ b/apps/web/public/static/locales/uk/common.json @@ -593,7 +593,7 @@ "username_placeholder": "ім’я користувача", "managed_event_description": "Створюйте й надсилайте типи заходів усім учасникам команди пакетом", "managed": "Керований", - "managed_event_url_clarification": "у полі «ім’я користувача» буде вказано імена користувачів призначених учасників", + "managed_event_url_clarification": "у полі «username» буде вказано імена користувачів призначених учасників", "assign_to": "Призначити", "add_members": "Додати учасників…", "count_members_one": "{{count}} учасник", @@ -904,7 +904,7 @@ "duplicate": "Дублювати", "offer_seats": "Запропонувати місця", "offer_seats_description": "Пропонуйте місця під час бронювання (при цьому вимикається гостьовий режим і бронювання з підтвердженням).", - "seats_available": "Доступні місця", + "seats_available_other": "Доступні місця", "number_of_seats": "Кількість місць на одне бронювання", "enter_number_of_seats": "Введіть кількість місць", "you_can_manage_your_schedules": "Керувати розкладами можна на сторінці «Доступність».", @@ -1317,7 +1317,7 @@ "exchange_authentication_standard": "Проста автентифікація", "exchange_authentication_ntlm": "Автентифікація NTLM", "exchange_compression": "Стиснення GZip", - "exchange_version": "Версія обміну", + "exchange_version": "Версія Exchange", "exchange_version_2007_SP1": "2007 SP1", "exchange_version_2010": "2010", "exchange_version_2010_SP1": "2010 SP1", @@ -1584,7 +1584,7 @@ "ee_enterprise_license": "“/ee” Ліцензія для плану Enterprise", "enterprise_booking_fee": "Від {{enterprise_booking_fee}}/міс.", "enterprise_license_includes": "Усе для комерційного використання", - "no_need_to_keep_your_code_open_source": "Немає потреби залишати код відкритим", + "no_need_to_keep_your_code_open_source": "Немає потреби залишати вихідний код відкритим", "repackage_rebrand_resell": "Легко здійснювати перепакування, ребрендинг і перепродаж", "a_vast_suite_of_enterprise_features": "Великий набір корпоративних функцій", "free_license_fee": "$0,00/міс.", @@ -1685,8 +1685,8 @@ "add_1_option_per_line": "Додати 1 варіант на рядок", "select_a_router": "Вибрати форму переспрямування", "add_a_new_route": "Додати нове переспрямування", - "make_informed_decisions": "Приймайте обґрунтовані рішення за допомогою аналітики", - "make_informed_decisions_description": "У розділі «Аналітика» показано всю діяльність вашої команди й тенденції, які дають змогу краще планувати час команди й приймати рішення.", + "make_informed_decisions": "Приймайте обґрунтовані рішення за допомогою Insights", + "make_informed_decisions_description": "У розділі Insights показано всю діяльність вашої команди й тенденції, які дають змогу краще планувати час команди й приймати рішення.", "view_bookings_across": "Переглядайте бронювання всіх учасників", "view_bookings_across_description": "Дізнайтеся, хто отримує найбільше бронювань і забезпечте найкращий розподіл у команді", "identify_booking_trends": "Визначте тенденції бронювання", @@ -1751,7 +1751,7 @@ "events_rescheduled": "Перенесені заходи", "from_last_period": "після останнього періоду", "from_to_date_period": "З: {{startDate}} До: {{endDate}}", - "analytics_for_organisation": "Аналітика", + "analytics_for_organisation": "Insights", "subtitle_analytics": "Дізнайтеся більше про активність вашої команди", "redirect_url_warning": "Додавання переспрямування вимкне сторінку з результатом бронювання. Переконайтеся, що ви додали текст «Бронювання підтверджено» на свою сторінку з результатом бронювання.", "event_trends": "Тенденції заходів", @@ -1773,7 +1773,7 @@ "error_charging_card": "Сталася помилка під час стягнення плати за відсутність. Спробуйте ще раз пізніше.", "collect_no_show_fee": "Стягнути плату за відсутність", "no_show_fee_charged": "Стягнуто плату за відсутність", - "insights": "Аналітика", + "insights": "Insights", "testing_workflow_info_message": "Тестуючи цей робочий процес, зважайте на те, що надсилання електронних листів і SMS-повідомлень можна запланувати мінімум за 1 годину", "insights_no_data_found_for_filter": "Не знайдено жодних даних для вибраного фільтру або вибраних дат.", "acknowledge_booking_no_show_fee": "Я підтверджую, що в разі моєї відсутності на цьому заході з моєї картки буде стягнуто плату за відсутність у розмірі {{amount, currency}}.", diff --git a/apps/web/public/static/locales/vi/common.json b/apps/web/public/static/locales/vi/common.json index bf3e226f1f..027f020650 100644 --- a/apps/web/public/static/locales/vi/common.json +++ b/apps/web/public/static/locales/vi/common.json @@ -904,7 +904,7 @@ "duplicate": "Sao chép", "offer_seats": "Cung cấp ghế ngồi", "offer_seats_description": "Cung cấp ghế để đặt lịch. Việc này sẽ tự động vô hiệu hoá đặt lịch của khách & đặt lịch tham gia.", - "seats_available": "Số ghế trống", + "seats_available_other": "Số ghế trống", "number_of_seats": "Số ghế cho mỗi lần đặt", "enter_number_of_seats": "Điền vào số lượng ghế", "you_can_manage_your_schedules": "Bạn có thể quản lý lịch biểu của mình trên trang \bLịch khả dụng.", diff --git a/apps/web/public/static/locales/zh-CN/common.json b/apps/web/public/static/locales/zh-CN/common.json index c312b669a6..554b3f320d 100644 --- a/apps/web/public/static/locales/zh-CN/common.json +++ b/apps/web/public/static/locales/zh-CN/common.json @@ -593,7 +593,7 @@ "username_placeholder": "用户名", "managed_event_description": "批量创建事件类型并分发给团队成员", "managed": "托管", - "managed_event_url_clarification": "“用户名”将填写所分配的成员的用户名", + "managed_event_url_clarification": "“用户名”将填写所分配成员的用户名", "assign_to": "分配给", "add_members": "添加成员...", "count_members_one": "{{count}} 个成员", @@ -904,7 +904,8 @@ "duplicate": "复制", "offer_seats": "提供位置", "offer_seats_description": "提供位置以供预约 (这将自动禁止访客和选择加入预约)。", - "seats_available": "可用位置", + "seats_available_one": "可用位置", + "seats_available_other": "可用位置", "number_of_seats": "每个预约的位置数目", "enter_number_of_seats": "输入位置数目", "you_can_manage_your_schedules": "您可以在“可预约时间”页面管理您的时间表。", @@ -1688,8 +1689,8 @@ "add_1_option_per_line": "每行添加 1 个选项", "select_a_router": "选择途径", "add_a_new_route": "添加新途径", - "make_informed_decisions": "使用洞察做出明智的决策", - "make_informed_decisions_description": "我们的“洞察”仪表板会显示您团队中的所有活动,并向您展示趋势,以便更好地进行团队日程安排和制定决策。", + "make_informed_decisions": "使用 Insights 做出明智的决策", + "make_informed_decisions_description": "我们的 Insights 仪表板会显示您团队中的所有活动,并向您展示趋势,以便更好地进行团队日程安排和制定决策。", "view_bookings_across": "查看所有成员的预约", "view_bookings_across_description": "查看谁收到的预约最多,并确保在团队中实现最佳分配", "identify_booking_trends": "确定预约趋势", @@ -1736,7 +1737,7 @@ "managed_event_dialog_title_other": "{{count}} 个成员的链接/{{slug}} 已存在。是否要将其替换?", "managed_event_dialog_information_one": "{{names}} 已经在使用 /{{slug}} 链接。", "managed_event_dialog_information_other": "{{names}} 已经在使用 /{{slug}} 链接。", - "managed_event_dialog_clarification": "如果您选择将其替换,我们会通知他们。如果您不想将其覆盖,请返回并移除它们。", + "managed_event_dialog_clarification": "如果您选择将其替换,我们会通知他们。如果您不想将其覆盖,请返回并移除。", "review_event_type": "查看活动类型", "looking_for_more_analytics": "寻找更多分析?", "looking_for_more_insights": "寻找更多洞察?", @@ -1755,7 +1756,7 @@ "events_rescheduled": "重新安排的活动", "from_last_period": "从上一期间", "from_to_date_period": "开始日期: {{startDate}} 结束日期: {{endDate}}", - "analytics_for_organisation": "洞察", + "analytics_for_organisation": "Insights", "subtitle_analytics": "详细了解团队的活动", "redirect_url_warning": "添加重定向将禁用成功页面。请确保在您的自定义成功页面上提及“预约已确认”。", "event_trends": "活动趋势", @@ -1764,7 +1765,7 @@ "on_booking_option": "预约时收款", "hold_option": "收取失约费", "card_held": "卡已保留", - "charge_card": "对卡收款", + "charge_card": "从卡中扣款", "card_charged": "卡已扣款", "no_show_fee_amount": "{{amount, currency}} 失约费", "no_show_fee": "失约费", @@ -1777,7 +1778,7 @@ "error_charging_card": "收取失约费时出错。请稍后再试。", "collect_no_show_fee": "收取失约费", "no_show_fee_charged": "已收取失约费", - "insights": "洞察", + "insights": "Insights", "testing_workflow_info_message": "测试此工作流程时请注意,电子邮件和短信只能提前至少 1 小时安排", "insights_no_data_found_for_filter": "未找到所选筛选器或所选日期的数据。", "acknowledge_booking_no_show_fee": "我确认,如果我不参加此活动,我的卡将被收取 {{amount, currency}} 的失约费。", @@ -1790,6 +1791,7 @@ "disable_attendees_confirmation_emails_description": "该活动类型中至少有一个工作流程处于活动状态,当该活动被预约时,将向参与者发送电子邮件。", "disable_host_confirmation_emails": "禁用主持人的默认确认电子邮件", "disable_host_confirmation_emails_description": "该活动类型中至少有一个工作流程处于活动状态,当该活动被预约时,将向主持人发送电子邮件。", + "add_an_override": "添加替代", "first_event_type_webhook_description": "为此活动类型创建第一个 Webhook", "create_for": "创建" } diff --git a/apps/web/public/static/locales/zh-TW/common.json b/apps/web/public/static/locales/zh-TW/common.json index c1e4469c9d..a772357ba3 100644 --- a/apps/web/public/static/locales/zh-TW/common.json +++ b/apps/web/public/static/locales/zh-TW/common.json @@ -904,7 +904,7 @@ "duplicate": "複製", "offer_seats": "提供座位", "offer_seats_description": "為預約提供座位 (這將停用賓客和選擇加入的預約)", - "seats_available": "尚有座位", + "seats_available_other": "尚有座位", "number_of_seats": "每次預約的座位數", "enter_number_of_seats": "輸入座位數", "you_can_manage_your_schedules": "在開放時間頁面可以管理行程表。", @@ -1732,7 +1732,7 @@ "managed_event_dialog_title_other": "{{count}} 位成員已有網址/{{slug}}。您要取代嗎?", "managed_event_dialog_information_one": "{{names}} 已在使用 /{{slug}} 網址。", "managed_event_dialog_information_other": "{{names}} 已在使用 /{{slug}} 網址。", - "managed_event_dialog_clarification": "如果您選擇取代,我們會通知他們;如果不想覆寫既有設定,請返回並移除。", + "managed_event_dialog_clarification": "如果您選擇取代,我們會通知他們;如果不想覆寫既有網址,請返回並移除。", "review_event_type": "檢閱活動類型", "looking_for_more_analytics": "在找更多分析嗎?", "looking_for_more_insights": "在找更多 Insights 嗎?", diff --git a/apps/web/test/lib/checkBookingLimits.test.ts b/apps/web/test/lib/checkBookingLimits.test.ts index 2dad1bc828..281380e2df 100644 --- a/apps/web/test/lib/checkBookingLimits.test.ts +++ b/apps/web/test/lib/checkBookingLimits.test.ts @@ -1,10 +1,11 @@ +import { describe, expect, it } from "vitest"; +import prismaMock from "../../../../tests/libs/__mocks__/prisma"; + import dayjs from "@calcom/dayjs"; import { validateIntervalLimitOrder } from "@calcom/lib"; import { checkBookingLimits, checkBookingLimit } from "@calcom/lib/server"; import type { IntervalLimit } from "@calcom/types/Calendar"; -import { prismaMock } from "../../../../tests/config/singleton"; - type Mockdata = { id: number; startDate: Date; diff --git a/apps/web/test/lib/checkDurationLimits.test.ts b/apps/web/test/lib/checkDurationLimits.test.ts index 20c0f12b00..6186563b76 100644 --- a/apps/web/test/lib/checkDurationLimits.test.ts +++ b/apps/web/test/lib/checkDurationLimits.test.ts @@ -1,8 +1,10 @@ +import { describe, expect, it } from "vitest"; +import prismaMock from "../../../../tests/libs/__mocks__/prisma"; + import dayjs from "@calcom/dayjs"; import { validateIntervalLimitOrder } from "@calcom/lib"; import { checkDurationLimit, checkDurationLimits } from "@calcom/lib/server"; -import { prismaMock } from "../../../../tests/config/singleton"; type MockData = { id: number; diff --git a/apps/web/test/lib/getAggregateWorkingHours.test.ts b/apps/web/test/lib/getAggregateWorkingHours.test.ts index 47041f36b0..f7c96ffb6f 100644 --- a/apps/web/test/lib/getAggregateWorkingHours.test.ts +++ b/apps/web/test/lib/getAggregateWorkingHours.test.ts @@ -1,5 +1,5 @@ -import { expect, it } from "@jest/globals"; import MockDate from "mockdate"; +import { expect, it } from "vitest"; import { getAggregateWorkingHours } from "@calcom/core/getAggregateWorkingHours"; @@ -28,9 +28,9 @@ const HAWAII_AND_NEWYORK_TEAM = [ /* TODO: Make this test more "professional" */ it("Sydney and Shiraz can live in harmony 🙏", async () => { expect(getAggregateWorkingHours(HAWAII_AND_NEWYORK_TEAM, "COLLECTIVE")).toMatchInlineSnapshot(` - Array [ - Object { - "days": Array [ + [ + { + "days": [ 3, 4, 5, @@ -38,16 +38,16 @@ it("Sydney and Shiraz can live in harmony 🙏", async () => { "endTime": 360, "startTime": 780, }, - Object { - "days": Array [ + { + "days": [ 6, ], "endTime": 180, "startTime": 0, "userId": 2, }, - Object { - "days": Array [ + { + "days": [ 2, 3, 4, @@ -55,8 +55,8 @@ it("Sydney and Shiraz can live in harmony 🙏", async () => { "endTime": 1260, "startTime": 780, }, - Object { - "days": Array [ + { + "days": [ 5, ], "endTime": 1260, @@ -66,9 +66,9 @@ it("Sydney and Shiraz can live in harmony 🙏", async () => { `); expect(getAggregateWorkingHours(HAWAII_AND_NEWYORK_TEAM, "ROUND_ROBIN")).toMatchInlineSnapshot(` - Array [ - Object { - "days": Array [ + [ + { + "days": [ 1, 2, 3, @@ -79,8 +79,8 @@ it("Sydney and Shiraz can live in harmony 🙏", async () => { "startTime": 780, "userId": 1, }, - Object { - "days": Array [ + { + "days": [ 3, 4, 5, @@ -89,16 +89,16 @@ it("Sydney and Shiraz can live in harmony 🙏", async () => { "startTime": 0, "userId": 1, }, - Object { - "days": Array [ + { + "days": [ 6, ], "endTime": 180, "startTime": 0, "userId": 2, }, - Object { - "days": Array [ + { + "days": [ 2, 3, 4, @@ -107,8 +107,8 @@ it("Sydney and Shiraz can live in harmony 🙏", async () => { "startTime": 780, "userId": 3, }, - Object { - "days": Array [ + { + "days": [ 5, ], "endTime": 1439, diff --git a/apps/web/test/lib/getAvailabilityFromSchedule.test.ts b/apps/web/test/lib/getAvailabilityFromSchedule.test.ts index bac272f260..c4a26cc8b2 100644 --- a/apps/web/test/lib/getAvailabilityFromSchedule.test.ts +++ b/apps/web/test/lib/getAvailabilityFromSchedule.test.ts @@ -1,6 +1,6 @@ -import { expect, it } from "@jest/globals"; import type { Availability } from "@prisma/client"; import MockDate from "mockdate"; +import { expect, it } from "vitest"; import dayjs from "@calcom/dayjs"; import { getAvailabilityFromSchedule } from "@calcom/lib/availability"; diff --git a/apps/web/test/lib/getSchedule.test.ts b/apps/web/test/lib/getSchedule.test.ts index f9aab9ea93..9b45d7dbf0 100644 --- a/apps/web/test/lib/getSchedule.test.ts +++ b/apps/web/test/lib/getSchedule.test.ts @@ -1,15 +1,16 @@ -/** - * !: Stops the `jose` dependency from bundling the browser version and breaking tests - * @jest-environment node - */ import type { EventType as PrismaEventType, User as PrismaUser, Booking as PrismaBooking, App as PrismaApp, } from "@prisma/client"; + +import CalendarManagerMock from "../../../../tests/libs/__mocks__/CalendarManager"; +import prismaMock from "../../../../tests/libs/__mocks__/prisma"; + import { diff } from "jest-diff"; import { v4 as uuidv4 } from "uuid"; +import { describe, expect, vi, beforeEach, afterEach, test } from "vitest"; import logger from "@calcom/lib/logger"; import prisma from "@calcom/prisma"; @@ -18,14 +19,13 @@ import type { BookingStatus } from "@calcom/prisma/enums"; import type { Slot } from "@calcom/trpc/server/routers/viewer/slots/types"; import { getSchedule } from "@calcom/trpc/server/routers/viewer/slots/util"; -import { prismaMock, CalendarManagerMock } from "../../../../tests/config/singleton"; - // TODO: Mock properly prismaMock.eventType.findUnique.mockResolvedValue(null); prismaMock.user.findMany.mockResolvedValue([]); -jest.mock("@calcom/lib/constants", () => ({ +vi.mock("@calcom/lib/constants", () => ({ IS_PRODUCTION: true, + WEBAPP_URL: "http://localhost:3000" })); declare global { @@ -233,6 +233,13 @@ describe("getSchedule", () => { const { dateString: plus1DateString } = getDate({ dateIncrement: 1 }); const { dateString: plus2DateString } = getDate({ dateIncrement: 2 }); + CalendarManagerMock.getBusyCalendarTimes.mockResolvedValue([ + { + start: `${plus2DateString}T04:45:00.000Z`, + end: `${plus2DateString}T23:00:00.000Z`, + }, + ]); + const scenarioData = { hosts: [], eventTypes: [ @@ -261,12 +268,6 @@ describe("getSchedule", () => { // An event with one accepted booking createBookingScenario(scenarioData); - addBusyTimesInGoogleCalendar([ - { - start: `${plus2DateString}T04:45:00.000Z`, - end: `${plus2DateString}T23:00:00.000Z`, - }, - ]); const scheduleForDayWithAGoogleCalendarBooking = await getSchedule({ eventTypeId: 1, eventTypeSlug: "", @@ -492,7 +493,7 @@ describe("getSchedule", () => { // FIXME: Fix minimumBookingNotice is respected test test.skip("minimumBookingNotice is respected", async () => { - jest.useFakeTimers().setSystemTime( + vi.useFakeTimers().setSystemTime( (() => { const today = new Date(); // Beginning of the day in current timezone of the system @@ -571,13 +572,20 @@ describe("getSchedule", () => { dateString: todayDateString, } ); - jest.useRealTimers(); + vi.useRealTimers(); }); test("afterBuffer and beforeBuffer tests - Non Cal Busy Time", async () => { const { dateString: plus2DateString } = getDate({ dateIncrement: 2 }); const { dateString: plus3DateString } = getDate({ dateIncrement: 3 }); + CalendarManagerMock.getBusyCalendarTimes.mockResolvedValue([ + { + start: `${plus3DateString}T04:00:00.000Z`, + end: `${plus3DateString}T05:59:59.000Z`, + }, + ]); + const scenarioData = { eventTypes: [ { @@ -607,13 +615,6 @@ describe("getSchedule", () => { createBookingScenario(scenarioData); - addBusyTimesInGoogleCalendar([ - { - start: `${plus3DateString}T04:00:00.000Z`, - end: `${plus3DateString}T05:59:59.000Z`, - }, - ]); - const scheduleForEventOnADayWithNonCalBooking = await getSchedule({ eventTypeId: 1, eventTypeSlug: "", @@ -641,6 +642,13 @@ describe("getSchedule", () => { const { dateString: plus2DateString } = getDate({ dateIncrement: 2 }); const { dateString: plus3DateString } = getDate({ dateIncrement: 3 }); + CalendarManagerMock.getBusyCalendarTimes.mockResolvedValue([ + { + start: `${plus3DateString}T04:00:00.000Z`, + end: `${plus3DateString}T05:59:59.000Z`, + }, + ]); + const scenarioData = { eventTypes: [ { @@ -679,13 +687,6 @@ describe("getSchedule", () => { createBookingScenario(scenarioData); - addBusyTimesInGoogleCalendar([ - { - start: `${plus3DateString}T04:00:00.000Z`, - end: `${plus3DateString}T05:59:59.000Z`, - }, - ]); - const scheduleForEventOnADayWithCalBooking = await getSchedule({ eventTypeId: 1, eventTypeSlug: "", @@ -712,6 +713,8 @@ describe("getSchedule", () => { const { dateString: plus1DateString } = getDate({ dateIncrement: 1 }); const { dateString: plus2DateString } = getDate({ dateIncrement: 2 }); + CalendarManagerMock.getBusyCalendarTimes.mockResolvedValue([]); + const scenarioData = { eventTypes: [ { @@ -1380,15 +1383,3 @@ const getDate = (param: { dateIncrement?: number; monthIncrement?: number; yearI dateString: `${year}-${month}-${date}`, }; }; - -/** - * TODO: Improve this to validate the arguments passed to getBusyCalendarTimes if they are valid or not. - */ -function addBusyTimesInGoogleCalendar( - busy: { - start: string; - end: string; - }[] -) { - CalendarManagerMock.getBusyCalendarTimes.mockResolvedValue(busy); -} diff --git a/apps/web/test/lib/getTimezone.test.ts b/apps/web/test/lib/getTimezone.test.ts index bd3701355e..2f5f5d0d58 100644 --- a/apps/web/test/lib/getTimezone.test.ts +++ b/apps/web/test/lib/getTimezone.test.ts @@ -1,4 +1,4 @@ -import { expect, it } from "@jest/globals"; +import { expect, it } from "vitest"; import { filterByCities, addCitiesToDropdown, handleOptionLabel } from "@calcom/lib/timezone"; @@ -34,25 +34,25 @@ const option = { }; it("should return empty array for an empty string", () => { - expect(filterByCities("", cityData)).toMatchInlineSnapshot(`Array []`); + expect(filterByCities("", cityData)).toMatchInlineSnapshot(`[]`); }); it("should filter cities for a valid city name", () => { expect(filterByCities("San Francisco", cityData)).toMatchInlineSnapshot(` - Array [ - Object { + [ + { "city": "San Francisco", "timezone": "America/Argentina/Cordoba", }, - Object { + { "city": "San Francisco de Macoris", "timezone": "America/Santo_Domingo", }, - Object { + { "city": "San Francisco Gotera", "timezone": "America/El_Salvador", }, - Object { + { "city": "San Francisco", "timezone": "America/Los_Angeles", }, @@ -62,7 +62,7 @@ it("should filter cities for a valid city name", () => { it("should return appropriate timezone(s) for a given city name array", () => { expect(addCitiesToDropdown(cityData)).toMatchInlineSnapshot(` - Object { + { "America/Argentina/Cordoba": "San Francisco", "America/El_Salvador": "San Francisco Gotera", "America/Los_Angeles": "San Francisco", diff --git a/apps/web/test/lib/getWorkingHours.test.ts b/apps/web/test/lib/getWorkingHours.test.ts index acc45c6dd4..26346aa188 100644 --- a/apps/web/test/lib/getWorkingHours.test.ts +++ b/apps/web/test/lib/getWorkingHours.test.ts @@ -1,5 +1,5 @@ -import { expect, it } from "@jest/globals"; import MockDate from "mockdate"; +import { expect, it } from "vitest"; import dayjs from "@calcom/dayjs"; import { getWorkingHours } from "@calcom/lib/availability"; diff --git a/apps/web/test/lib/handleChildrenEventTypes.test.ts b/apps/web/test/lib/handleChildrenEventTypes.test.ts index d02d168100..95a7ab0aac 100644 --- a/apps/web/test/lib/handleChildrenEventTypes.test.ts +++ b/apps/web/test/lib/handleChildrenEventTypes.test.ts @@ -1,11 +1,12 @@ import type { EventType } from "@prisma/client"; -import type { Prisma } from "@prisma/client"; +import { describe, expect, it, vi } from "vitest"; import updateChildrenEventTypes from "@calcom/features/ee/managed-event-types/lib/handleChildrenEventTypes"; import { buildEventType } from "@calcom/lib/test/builder"; +import type { Prisma } from "@calcom/prisma/client"; import type { CompleteEventType, CompleteWorkflowsOnEventTypes } from "@calcom/prisma/zod"; -import { prismaMock } from "../../../../tests/config/singleton"; +import prismaMock from "../../../../tests/libs/__mocks__/prisma"; const mockFindFirstEventType = (data?: Partial) => { const eventType = buildEventType(data as Partial); @@ -13,13 +14,13 @@ const mockFindFirstEventType = (data?: Partial) => { return eventType; }; -jest.mock("@calcom/emails/email-manager", () => { +vi.mock("@calcom/emails/email-manager", () => { return { sendSlugReplacementEmail: () => ({}), }; }); -jest.mock("@calcom/lib/server/i18n", () => { +vi.mock("@calcom/lib/server/i18n", () => { return { getTranslation: (key: string) => key, }; diff --git a/apps/web/test/lib/parseZone.test.ts b/apps/web/test/lib/parseZone.test.ts index 0883283da9..b8a312f296 100644 --- a/apps/web/test/lib/parseZone.test.ts +++ b/apps/web/test/lib/parseZone.test.ts @@ -1,3 +1,5 @@ +import { expect, it } from "vitest"; + import { parseZone } from "@calcom/lib/parse-zone"; const EXPECTED_DATE_STRING = "2021-06-20T11:59:59+02:00"; diff --git a/apps/web/test/lib/slots.test.ts b/apps/web/test/lib/slots.test.ts index 4bc5f2ebc1..df07104ae9 100644 --- a/apps/web/test/lib/slots.test.ts +++ b/apps/web/test/lib/slots.test.ts @@ -1,5 +1,5 @@ -import { expect, it } from "@jest/globals"; import MockDate from "mockdate"; +import { describe, expect, it } from "vitest"; import dayjs from "@calcom/dayjs"; import { MINUTES_DAY_END, MINUTES_DAY_START } from "@calcom/lib/availability"; diff --git a/apps/web/test/lib/team-event-types.test.ts b/apps/web/test/lib/team-event-types.test.ts index d4e61bdcb6..84275f4c42 100644 --- a/apps/web/test/lib/team-event-types.test.ts +++ b/apps/web/test/lib/team-event-types.test.ts @@ -1,8 +1,10 @@ +import { expect, it } from "vitest"; + +import prismaMock from "../../../../tests/libs/__mocks__/prisma"; + import { getLuckyUser } from "@calcom/lib/server"; import { buildUser } from "@calcom/lib/test/builder"; -import { prismaMock } from "../../../../tests/config/singleton"; - it("can find lucky user with maximize availability", async () => { const user1 = buildUser({ id: 1, diff --git a/jest.config.ts b/jest.config.ts deleted file mode 100644 index 9fe67b3e5a..0000000000 --- a/jest.config.ts +++ /dev/null @@ -1,119 +0,0 @@ -import type { Config } from "jest"; - -// Added +2 to ensure we need to do some conversions in our tests -process.env.TZ = "GMT+2"; - -const config: Config = { - preset: "ts-jest", - verbose: true, - projects: [ - { - displayName: "@calcom/web", - roots: ["/apps/web"], - moduleFileExtensions: ["ts", "tsx", "js", "jsx", "json", "node"], - modulePathIgnorePatterns: [ - // - "/apps/web/test/__fixtures__", - "/apps/web/node_modules", - "/apps/web/dist", - ], - clearMocks: true, - setupFilesAfterEnv: ["/tests/config/singleton.ts"], - setupFiles: ["/apps/web/test/jest-setup.js"], - testMatch: ["**/test/lib/**/*.(spec|test).(ts|tsx|js)", "**/__tests__/**/*.(spec|test).(ts|tsx|js)"], - testPathIgnorePatterns: ["/apps/web/.next", "/apps/web/playwright/"], - transform: { - "^.+\\.(js|jsx|ts|tsx)$": ["babel-jest", { presets: ["next/babel"] }], - }, - transformIgnorePatterns: ["/node_modules/", "^.+\\.module\\.(css|sass|scss)$"], - testEnvironment: "jsdom", - resolver: `/apps/web/test/jest-resolver.js`, - moduleNameMapper: { - "^@components(.*)$": "/apps/web/components$1", - "^@lib(.*)$": "/apps/web/lib$1", - "^@server(.*)$": "/apps/web/server$1", - }, - }, - { - displayName: "@calcom/lib", - roots: ["/packages/lib"], - testEnvironment: "node", - moduleFileExtensions: ["ts", "tsx", "js", "jsx", "json", "node"], - transform: { - "^.+\\.tsx?$": "ts-jest", - }, - globals: { - "ts-jest": { - tsconfig: "/packages/lib/tsconfig.test.json", - }, - }, - }, - { - displayName: "@calcom/closecom", - roots: ["/packages/app-store/closecom"], - testMatch: ["**/test/lib/**/*.(spec|test).(ts|tsx|js)"], - transform: { - "^.+\\.ts?$": "ts-jest", - }, - transformIgnorePatterns: ["/node_modules/", "^.+\\.module\\.(css|sass|scss)$"], - testEnvironment: "jsdom", - setupFiles: ["/packages/app-store/closecom/test/globals.ts"], - }, - { - displayName: "@calcom/routing-forms", - roots: ["/packages/app-store/routing-forms"], - testMatch: ["**/test/lib/**/*.(spec|test).(ts|tsx|js)"], - transform: { - "^.+\\.ts?$": "ts-jest", - }, - transformIgnorePatterns: ["/node_modules/", "^.+\\.module\\.(css|sass|scss)$"], - testEnvironment: "jsdom", - }, - { - displayName: "@calcom/features", - roots: ["/packages/features"], - testMatch: ["**/*.(spec|test).(ts|tsx|js)"], - transform: { - "^.+\\.ts?$": "ts-jest", - }, - transformIgnorePatterns: ["/node_modules/", "^.+\\.module\\.(css|sass|scss)$"], - testEnvironment: "jsdom", - moduleDirectories: ["node_modules", ""], - globals: { - "ts-jest": { - tsconfig: "/packages/features/tsconfig.json", - }, - }, - }, - // FIXME: Prevent this breaking Jest when API module is missing - // { - // displayName: "@calcom/api", - // roots: ["/apps/api"], - // testMatch: ["**/test/lib/**/*.(spec|test).(ts|tsx|js)"], - // setupFilesAfterEnv: ["/tests/config/singleton.ts"], - // transform: { - // "^.+\\.ts?$": "ts-jest", - // }, - // globals: { - // "ts-jest": { - // tsconfig: "/apps/api/tsconfig.json", - // }, - // }, - // transformIgnorePatterns: ["/node_modules/", "^.+\\.module\\.(css|sass|scss)$"], - // testEnvironment: "node", - // clearMocks: true, - // moduleNameMapper: { - // "^@lib/(.*)$": "/apps/api/lib/$1", - // "^@api/(.*)$": "/apps/api/pages/api/$1", - // }, - // // setupFilesAfterEnv: ["/apps/api/jest.setup.ts"], // Uncomment when API becomes public - // }, - ], - watchPlugins: [ - "jest-watch-typeahead/filename", - "jest-watch-typeahead/testname", - "jest-watch-select-projects", - ], -}; - -export default config; diff --git a/package.json b/package.json index 8864cab3f3..4f37729332 100644 --- a/package.json +++ b/package.json @@ -35,9 +35,6 @@ "dev:swagger": "turbo run dev --scope=\"@calcom/api\" --scope=\"@calcom/swagger\"", "dev:website": "turbo run dev --scope=\"@calcom/web\" --scope=\"@calcom/website\"", "dev": "turbo run dev --scope=\"@calcom/web\"", - "docs-build": "turbo run build --scope=\"@calcom/docs\" --include-dependencies", - "docs-dev": "turbo run dev --scope=\"@calcom/docs\"", - "docs-start": "turbo run start --scope=\"@calcom/docs\"", "build-storybook": "turbo run build --scope=\"@calcom/storybook\"", "dx": "turbo run dx", "i-dev": "infisical run -- turbo run dev --scope=\"@calcom/web\"", @@ -59,7 +56,7 @@ "prepare": "husky install", "prisma": "yarn workspace @calcom/prisma prisma", "start": "turbo run start --scope=\"@calcom/web\"", - "tdd": "jest --watch", + "tdd": "vitest watch", "e2e": "NEXT_PUBLIC_IS_E2E=1 yarn playwright test --project=@calcom/web", "e2e:app-store": "QUICK=true yarn playwright test --project=@calcom/app-store", "e2e:embed": "QUICK=true yarn playwright test --project=@calcom/embed-core", @@ -69,7 +66,7 @@ "test-e2e:embed": "yarn db-seed && yarn e2e:embed", "test-e2e:embed-react": "yarn db-seed && yarn e2e:embed-react", "test-playwright": "yarn playwright test --config=playwright.config.ts", - "test": "jest", + "test": "vitest run", "type-check": "turbo run type-check", "type-check:ci": "turbo run type-check:ci --log-prefix=none", "web": "yarn workspace @calcom/web" @@ -80,19 +77,17 @@ "@playwright/test": "^1.31.2", "@snaplet/copycat": "^0.3.0", "@types/dompurify": "^2.4.0", - "@types/jest": "^28.1.7", + "c8": "^7.13.0", "dotenv-checker": "^1.1.5", - "husky": "^8.0.1", - "jest": "^28.1.0", - "jest-environment-jsdom": "^28.1.3", - "jest-mock-extended": "^2.0.7", - "jest-watch-select-projects": "^2.0.0", - "jest-watch-typeahead": "^2.0.0", + "husky": "^8.0.0", + "jest-diff": "^29.5.0", + "jsdom": "^22.0.0", "lint-staged": "^12.5.0", "prettier": "^2.8.6", - "ts-jest": "^28.0.8", "tsc-absolute": "^1.0.0", - "typescript": "^4.9.4" + "typescript": "^4.9.4", + "vitest": "^0.31.1", + "vitest-mock-extended": "^1.1.3" }, "dependencies": { "city-timezones": "^1.2.1", diff --git a/packages/app-store/closecom/package.json b/packages/app-store/closecom/package.json index 332a337fb6..050c6de58d 100644 --- a/packages/app-store/closecom/package.json +++ b/packages/app-store/closecom/package.json @@ -6,8 +6,8 @@ "main": "./index.ts", "description": "Close is the inside sales CRM of choice for startups and SMBs. Make more calls, send more emails and close more deals starting today.", "scripts": { - "test": "jest", - "test:coverage": "jest --coverage" + "test": "vitest", + "test:coverage": "vitest run --coverage" }, "dependencies": { "@calcom/lib": "*", diff --git a/packages/app-store/closecom/test/globals.ts b/packages/app-store/closecom/test/globals.ts index cc3469f1e5..357d308a35 100644 --- a/packages/app-store/closecom/test/globals.ts +++ b/packages/app-store/closecom/test/globals.ts @@ -1,14 +1,16 @@ -jest.mock("@calcom/lib/logger", () => ({ +import { vi } from "vitest"; + +vi.mock("@calcom/lib/logger", () => ({ default: { getChildLogger: () => ({ - debug: jest.fn(), - error: jest.fn(), - log: jest.fn(), + debug: vi.fn(), + error: vi.fn(), + log: vi.fn(), }), }, })); -jest.mock("@calcom/lib/crypto", () => ({ +vi.mock("@calcom/lib/crypto", () => ({ symmetricDecrypt: () => `{ "userApiKey": "test" }`, diff --git a/packages/app-store/closecom/test/lib/CalendarService.test.ts b/packages/app-store/closecom/test/lib/CalendarService.test.ts index ee9d6b2284..da7c598c20 100644 --- a/packages/app-store/closecom/test/lib/CalendarService.test.ts +++ b/packages/app-store/closecom/test/lib/CalendarService.test.ts @@ -1,3 +1,5 @@ +import { expect, vi, afterEach, test } from "vitest"; + import CloseCom from "@calcom/lib/CloseCom"; import { getCloseComContactIds, @@ -7,7 +9,7 @@ import { } from "@calcom/lib/CloseComeUtils"; import type { CalendarEvent } from "@calcom/types/Calendar"; -jest.mock("@calcom/lib/CloseCom", () => ({ +vi.mock("@calcom/lib/CloseCom", () => ({ default: class { constructor() { /* Mock */ @@ -16,7 +18,7 @@ jest.mock("@calcom/lib/CloseCom", () => ({ })); afterEach(() => { - jest.resetAllMocks(); + vi.resetAllMocks(); }); // getCloseComLeadId diff --git a/packages/app-store/routing-forms/test/lib/jsonLogicToPrisma.test.ts b/packages/app-store/routing-forms/test/lib/jsonLogicToPrisma.test.ts index 107c4d65c5..10407d4e12 100644 --- a/packages/app-store/routing-forms/test/lib/jsonLogicToPrisma.test.ts +++ b/packages/app-store/routing-forms/test/lib/jsonLogicToPrisma.test.ts @@ -1,9 +1,9 @@ -import { expect, it, describe } from "@jest/globals"; +import { describe, expect, it, afterEach, vi } from "vitest"; import { jsonLogicToPrisma } from "../../jsonLogicToPrisma"; afterEach(() => { - jest.resetAllMocks(); + vi.resetAllMocks(); }); describe("jsonLogicToPrisma - Single Query", () => { diff --git a/packages/emails/src/templates/AttendeeWasRequestedToRescheduleEmail.tsx b/packages/emails/src/templates/AttendeeWasRequestedToRescheduleEmail.tsx index 256e77596b..fe45ce2aca 100644 --- a/packages/emails/src/templates/AttendeeWasRequestedToRescheduleEmail.tsx +++ b/packages/emails/src/templates/AttendeeWasRequestedToRescheduleEmail.tsx @@ -3,23 +3,27 @@ import { OrganizerScheduledEmail } from "./OrganizerScheduledEmail"; export const AttendeeWasRequestedToRescheduleEmail = ( props: { metadata: { rescheduleLink: string } } & React.ComponentProps -) => ( - - {props.calEvent.organizer.language.translate("request_reschedule_subtitle", { - organizer: props.calEvent.organizer.name, - })} - - } - headerType="calendarCircle" - subject="rescheduled_event_type_subject" - callToAction={ - - - - } - {...props} - /> -); +) => { + const t = props.attendee.language.translate; + return ( + + {t("request_reschedule_subtitle", { + organizer: props.calEvent.organizer.name, + })} + + } + headerType="calendarCircle" + subject="rescheduled_event_type_subject" + callToAction={ + + + + } + {...props} + /> + ); +}; diff --git a/packages/emails/templates/attendee-was-requested-to-reschedule-email.ts b/packages/emails/templates/attendee-was-requested-to-reschedule-email.ts index 6b4ca01e82..881c9890e5 100644 --- a/packages/emails/templates/attendee-was-requested-to-reschedule-email.ts +++ b/packages/emails/templates/attendee-was-requested-to-reschedule-email.ts @@ -1,10 +1,10 @@ -import type { DateArray, Person } from "ics"; +import type { DateArray } from "ics"; import { createEvent } from "ics"; import dayjs from "@calcom/dayjs"; import { getManageLink } from "@calcom/lib/CalEventParser"; import { APP_NAME } from "@calcom/lib/constants"; -import type { CalendarEvent } from "@calcom/types/Calendar"; +import type { CalendarEvent, Person } from "@calcom/types/Calendar"; import { renderEmail } from ".."; import OrganizerScheduledEmail from "./organizer-scheduled-email"; @@ -14,6 +14,7 @@ export default class AttendeeWasRequestedToRescheduleEmail extends OrganizerSche constructor(calEvent: CalendarEvent, metadata: { rescheduleLink: string }) { super({ calEvent }); this.metadata = metadata; + this.t = this.calEvent.attendees[0].language.translate; } protected getNodeMailerPayload(): Record { const toAddresses = [this.calEvent.attendees[0].email]; @@ -31,7 +32,7 @@ export default class AttendeeWasRequestedToRescheduleEmail extends OrganizerSche })}`, html: renderEmail("AttendeeWasRequestedToRescheduleEmail", { calEvent: this.calEvent, - attendee: this.calEvent.organizer, + attendee: this.calEvent.attendees[0], metadata: this.metadata, }), text: this.getTextBody(), diff --git a/packages/embeds/embed-core/playwright/tests/action-based.test.ts b/packages/embeds/embed-core/playwright/tests/action-based.e2e.ts similarity index 100% rename from packages/embeds/embed-core/playwright/tests/action-based.test.ts rename to packages/embeds/embed-core/playwright/tests/action-based.e2e.ts diff --git a/packages/embeds/embed-react/playwright/tests/basic.test.ts b/packages/embeds/embed-react/playwright/tests/basic.e2e.ts similarity index 100% rename from packages/embeds/embed-react/playwright/tests/basic.test.ts rename to packages/embeds/embed-react/playwright/tests/basic.e2e.ts diff --git a/packages/features/bookings/components/AvailableTimes.tsx b/packages/features/bookings/components/AvailableTimes.tsx index 6d8a106638..f807aba870 100644 --- a/packages/features/bookings/components/AvailableTimes.tsx +++ b/packages/features/bookings/components/AvailableTimes.tsx @@ -96,7 +96,9 @@ export const AvailableTimes = ({ aria-hidden /> {slot.attendees ? seatsPerTimeslot - slot.attendees : seatsPerTimeslot}{" "} - {t("seats_available")} + {t("seats_available", { + count: slot.attendees ? seatsPerTimeslot - slot.attendees : seatsPerTimeslot, + })}

)} diff --git a/packages/features/bookings/lib/handleNewBooking.ts b/packages/features/bookings/lib/handleNewBooking.ts index f09e7135b8..a1a9fc73d1 100644 --- a/packages/features/bookings/lib/handleNewBooking.ts +++ b/packages/features/bookings/lib/handleNewBooking.ts @@ -304,11 +304,11 @@ const getEventTypesFromDB = async (eventTypeId: number) => { return { ...eventType, - metadata: EventTypeMetaDataSchema.parse(eventType.metadata), - recurringEvent: parseRecurringEvent(eventType.recurringEvent), - customInputs: customInputSchema.array().parse(eventType.customInputs || []), - locations: (eventType.locations ?? []) as LocationObject[], - bookingFields: getBookingFieldsWithSystemFields(eventType), + metadata: EventTypeMetaDataSchema.parse(eventType?.metadata || {}), + recurringEvent: parseRecurringEvent(eventType?.recurringEvent), + customInputs: customInputSchema.array().parse(eventType?.customInputs || []), + locations: (eventType?.locations ?? []) as LocationObject[], + bookingFields: getBookingFieldsWithSystemFields(eventType || {}), }; }; @@ -488,7 +488,7 @@ function getBookingData({ } } }); - + debugger; const reqBody = bookingDataSchema.parse(req.body); if ("customInputs" in reqBody) { if (reqBody.customInputs) { @@ -584,7 +584,7 @@ async function handler( ...eventType, bookingFields: getBookingFieldsWithSystemFields(eventType), }; - + debugger; const { recurringCount, allRecurringDates, @@ -673,7 +673,7 @@ async function handler( ...user, isFixed, })) - : eventType.users; + : eventType.users || []; // loadUsers allows type inferring let users: (Awaited>[number] & { isFixed?: boolean; diff --git a/packages/features/ee/teams/components/AddNewTeamMembers.tsx b/packages/features/ee/teams/components/AddNewTeamMembers.tsx index f83836c074..cb9b48d628 100644 --- a/packages/features/ee/teams/components/AddNewTeamMembers.tsx +++ b/packages/features/ee/teams/components/AddNewTeamMembers.tsx @@ -40,20 +40,30 @@ export const AddNewTeamMembersForm = ({ teamId: number; }) => { const { t, i18n } = useLocale(); - const [memberInviteModal, setMemberInviteModal] = useState(false); - const utils = trpc.useContext(); const router = useRouter(); + const showDialog = router.query.inviteModal === "true"; + const [memberInviteModal, setMemberInviteModal] = useState(showDialog); + const utils = trpc.useContext(); const inviteMemberMutation = trpc.viewer.teams.inviteMember.useMutation({ async onSuccess(data) { await utils.viewer.teams.get.invalidate(); setMemberInviteModal(false); if (data.sendEmailInvitation) { - showToast( - t("email_invite_team", { - email: data.usernameOrEmail, - }), - "success" - ); + if (Array.isArray(data.usernameOrEmail)) { + showToast( + t("email_invite_team_bulk", { + userCount: data.usernameOrEmail.length, + }), + "success" + ); + } else { + showToast( + t("email_invite_team", { + email: data.usernameOrEmail, + }), + "success" + ); + } } }, onError: (error) => { diff --git a/packages/features/ee/teams/components/GoogleWorkspaceInviteButton.tsx b/packages/features/ee/teams/components/GoogleWorkspaceInviteButton.tsx new file mode 100644 index 0000000000..1c14fe4659 --- /dev/null +++ b/packages/features/ee/teams/components/GoogleWorkspaceInviteButton.tsx @@ -0,0 +1,126 @@ +import { UsersIcon, XIcon } from "lucide-react"; +import { useRouter } from "next/router"; +import { useState } from "react"; +import type { PropsWithChildren } from "react"; + +import { useFlagMap } from "@calcom/features/flags/context/provider"; +import { useLocale } from "@calcom/lib/hooks/useLocale"; +import { trpc } from "@calcom/trpc"; +import { Button, Tooltip, showToast } from "@calcom/ui"; + +const GoogleIcon = () => ( + + + + + + + + + + +); + +function gotoUrl(url: string, newTab?: boolean) { + if (newTab) { + window.open(url, "_blank"); + return; + } + window.location.href = url; +} + +export function GoogleWorkspaceInviteButton( + props: PropsWithChildren<{ onSuccess: (data: string[]) => void }> +) { + const router = useRouter(); + const featureFlags = useFlagMap(); + const utils = trpc.useContext(); + const { t } = useLocale(); + const teamId = Number(router.query.id); + const [googleWorkspaceLoading, setGoogleWorkspaceLoading] = useState(false); + const { data: credential } = trpc.viewer.googleWorkspace.checkForGWorkspace.useQuery(); + const { data: hasGcalInstalled } = trpc.viewer.appsRouter.checkGlobalKeys.useQuery({ + slug: "google-calendar", + }); + const mutation = trpc.viewer.googleWorkspace.getUsersFromGWorkspace.useMutation({ + onSuccess: (data) => { + if (Array.isArray(data) && data.length !== 0) { + props.onSuccess(data); + } + }, + }); + + const removeConnectionMutation = + trpc.viewer.googleWorkspace.removeCurrentGoogleWorkspaceConnection.useMutation({ + onSuccess: () => { + showToast(t("app_removed_successfully"), "success"); + }, + }); + + if (featureFlags["google-workspace-directory"] == false || !hasGcalInstalled) { + return null; + } + + // Show populate input button if they do + if (credential && credential?.id) { + return ( +
+ + + + +
+ ); + } + + // else show invite button + return ( + + ); +} diff --git a/packages/features/ee/teams/components/MemberInvitationModal.tsx b/packages/features/ee/teams/components/MemberInvitationModal.tsx index 2b9f123a52..b2a4b4aaf3 100644 --- a/packages/features/ee/teams/components/MemberInvitationModal.tsx +++ b/packages/features/ee/teams/components/MemberInvitationModal.tsx @@ -1,10 +1,11 @@ +import { PaperclipIcon, UserIcon, Users } from "lucide-react"; import { Trans } from "next-i18next"; -import { useMemo } from "react"; +import { useMemo, useState } from "react"; import { Controller, useForm } from "react-hook-form"; import { IS_TEAM_BILLING_ENABLED } from "@calcom/lib/constants"; import { useLocale } from "@calcom/lib/hooks/useLocale"; -import type { MembershipRole } from "@calcom/prisma/enums"; +import { MembershipRole } from "@calcom/prisma/enums"; import { Button, Checkbox as CheckboxField, @@ -15,9 +16,12 @@ import { TextField, Label, ToggleGroup, + Select, + TextAreaField, } from "@calcom/ui"; import type { PendingMember } from "../lib/types"; +import { GoogleWorkspaceInviteButton } from "./GoogleWorkspaceInviteButton"; type MemberInvitationModalProps = { isOpen: boolean; @@ -32,19 +36,21 @@ type MembershipRoleOption = { }; export interface NewMemberForm { - emailOrUsername: string; + emailOrUsername: string | string[]; role: MembershipRole; sendInviteEmail: boolean; } +type ModalMode = "INDIVIDUAL" | "BULK"; + export default function MemberInvitationModal(props: MemberInvitationModalProps) { const { t } = useLocale(); - + const [modalImportMode, setModalInputMode] = useState("INDIVIDUAL"); const options: MembershipRoleOption[] = useMemo(() => { return [ - { value: "MEMBER", label: t("member") }, - { value: "ADMIN", label: t("admin") }, - { value: "OWNER", label: t("owner") }, + { value: MembershipRole.MEMBER, label: t("member") }, + { value: MembershipRole.ADMIN, label: t("admin") }, + { value: MembershipRole.OWNER, label: t("owner") }, ]; }, [t]); @@ -59,6 +65,7 @@ export default function MemberInvitationModal(props: MemberInvitationModalProps) return ( { props.onExit(); @@ -66,7 +73,7 @@ export default function MemberInvitationModal(props: MemberInvitationModalProps) }}> @@ -75,33 +82,104 @@ export default function MemberInvitationModal(props: MemberInvitationModalProps) on your subscription. - ) : ( - "" - ) + ) : null }> +
+ + setModalInputMode(val as ModalMode)} + defaultValue="INDIVIDUAL" + options={[ + { + value: "INDIVIDUAL", + label: t("invite_team_individual_segment"), + iconLeft: , + }, + { value: "BULK", label: t("invite_team_bulk_segment"), iconLeft: }, + ]} + /> +
+
props.onSubmit(values)}> -
- validateUniqueInvite(value) || t("member_already_invited"), - }} - render={({ field: { onChange }, fieldState: { error } }) => ( - <> - onChange(e.target.value.trim().toLowerCase())} - /> - {error && {error.message}} - - )} - /> +
+ {/* Indivdual Invite */} + {modalImportMode === "INDIVIDUAL" && ( + { + if (typeof value === "string") + return validateUniqueInvite(value) || t("member_already_invited"); + }, + }} + render={({ field: { onChange }, fieldState: { error } }) => ( + <> + onChange(e.target.value.trim().toLowerCase())} + /> + {error && {error.message}} + + )} + /> + )} + {/* Bulk Invite */} + {modalImportMode === "BULK" && ( +
+ ( + <> + {/* TODO: Make this a fancy email input that styles on a successful email. */} + { + const emails = e.target.value + .split(",") + .map((email) => email.trim().toLocaleLowerCase()); + + return onChange(emails); + }} + /> + {error && {error.message}} + + )} + /> + + { + newMemberFormMethods.setValue("emailOrUsername", data); + }} + /> + +
+ )} (
- { + if (val) onChange(val.value); + }} />
)} @@ -138,7 +214,7 @@ export default function MemberInvitationModal(props: MemberInvitationModalProps) )} />
- + diff --git a/packages/features/ee/teams/components/TeamListItem.tsx b/packages/features/ee/teams/components/TeamListItem.tsx index 637b257313..a1b21c1c6a 100644 --- a/packages/features/ee/teams/components/TeamListItem.tsx +++ b/packages/features/ee/teams/components/TeamListItem.tsx @@ -53,19 +53,30 @@ export default function TeamListItem(props: Props) { const { t, i18n } = useLocale(); const utils = trpc.useContext(); const team = props.team; - const [openMemberInvitationModal, setOpenMemberInvitationModal] = useState(false); + const router = useRouter(); + const showDialog = router.query.inviteModal === "true"; + const [openMemberInvitationModal, setOpenMemberInvitationModal] = useState(showDialog); const teamQuery = trpc.viewer.teams.get.useQuery({ teamId: team?.id }); const inviteMemberMutation = trpc.viewer.teams.inviteMember.useMutation({ async onSuccess(data) { await utils.viewer.teams.get.invalidate(); setOpenMemberInvitationModal(false); if (data.sendEmailInvitation) { - showToast( - t("email_invite_team", { - email: data.usernameOrEmail, - }), - "success" - ); + if (Array.isArray(data.usernameOrEmail)) { + showToast( + t("email_invite_team_bulk", { + userCount: data.usernameOrEmail.length, + }), + "success" + ); + } else { + showToast( + t("email_invite_team", { + email: data.usernameOrEmail, + }), + "success" + ); + } } }, onError: (error) => { diff --git a/packages/features/ee/teams/pages/team-members-view.tsx b/packages/features/ee/teams/pages/team-members-view.tsx index c4b03227a7..e52dfde225 100644 --- a/packages/features/ee/teams/pages/team-members-view.tsx +++ b/packages/features/ee/teams/pages/team-members-view.tsx @@ -66,7 +66,8 @@ const MembersView = () => { const router = useRouter(); const session = useSession(); const utils = trpc.useContext(); - const [showMemberInvitationModal, setShowMemberInvitationModal] = useState(false); + const showDialog = router.query.inviteModal === "true"; + const [showMemberInvitationModal, setShowMemberInvitationModal] = useState(showDialog); const teamId = Number(router.query.id); const { data: team, isLoading } = trpc.viewer.teams.get.useQuery( @@ -83,12 +84,21 @@ const MembersView = () => { await utils.viewer.teams.get.invalidate(); setShowMemberInvitationModal(false); if (data.sendEmailInvitation) { - showToast( - t("email_invite_team", { - email: data.usernameOrEmail, - }), - "success" - ); + if (Array.isArray(data.usernameOrEmail)) { + showToast( + t("email_invite_team_bulk", { + userCount: data.usernameOrEmail.length, + }), + "success" + ); + } else { + showToast( + t("email_invite_team", { + email: data.usernameOrEmail, + }), + "success" + ); + } } }, onError: (error) => { diff --git a/packages/features/flags/config.ts b/packages/features/flags/config.ts index 08dac2c626..0883a9ff98 100644 --- a/packages/features/flags/config.ts +++ b/packages/features/flags/config.ts @@ -10,4 +10,5 @@ export type AppFlags = { workflows: boolean; "v2-booking-page": boolean; "managed-event-types": boolean; + "google-workspace-directory": boolean; }; diff --git a/packages/features/settings/layouts/SettingsLayout.tsx b/packages/features/settings/layouts/SettingsLayout.tsx index 857ac8df87..258cede522 100644 --- a/packages/features/settings/layouts/SettingsLayout.tsx +++ b/packages/features/settings/layouts/SettingsLayout.tsx @@ -190,7 +190,7 @@ const SettingsSidebarContainer = ({ return tab.name !== "teams" ? (
-
+
{tab && tab.icon && ( )} @@ -201,7 +201,7 @@ const SettingsSidebarContainer = ({ alt="User Avatar" /> )} -

{t(tab.name)}

+

{t(tab.name)}

@@ -222,11 +222,11 @@ const SettingsSidebarContainer = ({
-
+
{tab && tab.icon && ( )} -

{t(tab.name)}

+

{t(tab.name)}

{teams && @@ -248,7 +248,7 @@ const SettingsSidebarContainer = ({ }>
setTeamMenuState([ ...teamMenuState, diff --git a/packages/lib/cva/cva.test.ts b/packages/lib/cva/cva.test.ts index d73a113b4e..31c29eb4ac 100644 --- a/packages/lib/cva/cva.test.ts +++ b/packages/lib/cva/cva.test.ts @@ -1,3 +1,5 @@ +import { describe, expect, it } from "vitest"; + import { applyStyleToMultipleVariants } from "./cva"; describe("CVA Utils", () => { diff --git a/packages/lib/defaultAvatarImage.test.ts b/packages/lib/defaultAvatarImage.test.ts index 6119ae5804..14d7ca2392 100644 --- a/packages/lib/defaultAvatarImage.test.ts +++ b/packages/lib/defaultAvatarImage.test.ts @@ -1,3 +1,5 @@ +import { describe, expect, it } from "vitest"; + import { defaultAvatarSrc, getPlaceholderAvatar } from "./defaultAvatarImage"; describe("Default Avatar Image tests", () => { diff --git a/packages/lib/getBrandColours.test.ts b/packages/lib/getBrandColours.test.ts index b1152a2e1c..8a9b253eee 100644 --- a/packages/lib/getBrandColours.test.ts +++ b/packages/lib/getBrandColours.test.ts @@ -1,3 +1,5 @@ +import { describe, expect, it } from "vitest"; + import { createColorMap } from "./getBrandColours"; describe("useGetBrandingColours", () => { diff --git a/packages/lib/hooks/useHasPaidPlan.ts b/packages/lib/hooks/useHasPaidPlan.ts index e0509d4d95..9111f4a43b 100644 --- a/packages/lib/hooks/useHasPaidPlan.ts +++ b/packages/lib/hooks/useHasPaidPlan.ts @@ -12,7 +12,8 @@ export function useHasPaidPlan() { const isLoading = isLoadingTeamQuery || isLoadingUserQuery; - const isCurrentUsernamePremium = user && user.metadata && hasKeyInMetadata(user, "isPremium"); + const isCurrentUsernamePremium = + user && hasKeyInMetadata(user, "isPremium") ? !!user.metadata.isPremium : false; const hasPaidPlan = hasTeamPlan?.hasTeamPlan || isCurrentUsernamePremium; diff --git a/packages/lib/random.test.ts b/packages/lib/random.test.ts index b8e02bc1af..d978b895e9 100644 --- a/packages/lib/random.test.ts +++ b/packages/lib/random.test.ts @@ -1,3 +1,5 @@ +import { describe, expect, it } from "vitest"; + import { randomString } from "./random"; describe("Random util tests", () => { diff --git a/packages/lib/test/CalEventParser.test.ts b/packages/lib/test/CalEventParser.test.ts index f146d6c363..c90a8daa15 100644 --- a/packages/lib/test/CalEventParser.test.ts +++ b/packages/lib/test/CalEventParser.test.ts @@ -1,4 +1,5 @@ import { faker } from "@faker-js/faker"; +import { describe, expect, it, vi } from "vitest"; import { getLocation, @@ -8,11 +9,11 @@ import { } from "../CalEventParser"; import { buildCalendarEvent, buildVideoCallData } from "./builder"; -jest.mock("@calcom/lib/constants", () => ({ +vi.mock("@calcom/lib/constants", () => ({ WEBAPP_URL: "http://localhost:3000", })); -jest.mock("short-uuid", () => ({ +vi.mock("short-uuid", () => ({ __esModule: true, default: () => ({ fromUUID: () => "FAKE_UUID" }), })); diff --git a/packages/lib/text.test.ts b/packages/lib/text.test.ts index 1424775365..4d60a46f14 100644 --- a/packages/lib/text.test.ts +++ b/packages/lib/text.test.ts @@ -1,3 +1,5 @@ +import { describe, expect, it } from "vitest"; + import { truncate } from "./text"; describe("Text util tests", () => { diff --git a/packages/lib/weekday.test.ts b/packages/lib/weekday.test.ts index 81f22321fc..076a618562 100644 --- a/packages/lib/weekday.test.ts +++ b/packages/lib/weekday.test.ts @@ -1,3 +1,5 @@ +import { describe, expect, it } from "vitest"; + import { nameOfDay, weekdayNames } from "./weekday"; describe("Weekday tests", () => { diff --git a/packages/prisma/migrations/20230518084145_add_feature_flag_google_workspace/migration.sql b/packages/prisma/migrations/20230518084145_add_feature_flag_google_workspace/migration.sql new file mode 100644 index 0000000000..2d9e9ba13b --- /dev/null +++ b/packages/prisma/migrations/20230518084145_add_feature_flag_google_workspace/migration.sql @@ -0,0 +1,9 @@ +INSERT INTO + "Feature" (slug, enabled, description, "type") +VALUES + ( + 'google-workspace-directory', + false, + 'Enable Google Workspace Directory integration - Syncing of users and groups from Google Workspace to users teams.', + 'OPERATIONAL' + ) ON CONFLICT (slug) DO NOTHING; diff --git a/packages/trpc/react/trpc.ts b/packages/trpc/react/trpc.ts index 01339a319d..aa023cc3ad 100644 --- a/packages/trpc/react/trpc.ts +++ b/packages/trpc/react/trpc.ts @@ -38,6 +38,7 @@ const ENDPOINTS = [ "webhook", "workflows", "appsRouter", + "googleWorkspace", ] as const; export type Endpoint = (typeof ENDPOINTS)[number]; diff --git a/packages/trpc/server/routers/viewer/_router.tsx b/packages/trpc/server/routers/viewer/_router.tsx index 762ffb5bc7..25b595570f 100644 --- a/packages/trpc/server/routers/viewer/_router.tsx +++ b/packages/trpc/server/routers/viewer/_router.tsx @@ -14,6 +14,7 @@ import { availabilityRouter } from "./availability/_router"; import { bookingsRouter } from "./bookings/_router"; import { deploymentSetupRouter } from "./deploymentSetup/_router"; import { eventTypesRouter } from "./eventTypes/_router"; +import { googleWorkspaceRouter } from "./googleWorkspace/_router"; import { paymentsRouter } from "./payments/_router"; import { slotsRouter } from "./slots/_router"; import { ssoRouter } from "./sso/_router"; @@ -46,5 +47,6 @@ export const viewerRouter = mergeRouters( features: featureFlagRouter, appsRouter, users: userAdminRouter, + googleWorkspace: googleWorkspaceRouter, }) ); diff --git a/packages/trpc/server/routers/viewer/apps/_router.tsx b/packages/trpc/server/routers/viewer/apps/_router.tsx index 7a9c633017..86fe7d84e3 100644 --- a/packages/trpc/server/routers/viewer/apps/_router.tsx +++ b/packages/trpc/server/routers/viewer/apps/_router.tsx @@ -1,5 +1,6 @@ import authedProcedure, { authedAdminProcedure } from "../../../procedures/authedProcedure"; import { router } from "../../../trpc"; +import { checkGlobalKeysSchema } from "./checkGlobalKeys.schema"; import { ZListLocalInputSchema } from "./listLocal.schema"; import { ZQueryForDependenciesInputSchema } from "./queryForDependencies.schema"; import { ZSaveKeysInputSchema } from "./saveKeys.schema"; @@ -13,6 +14,7 @@ type AppsRouterHandlerCache = { checkForGCal?: typeof import("./checkForGCal.handler").checkForGCalHandler; updateAppCredentials?: typeof import("./updateAppCredentials.handler").updateAppCredentialsHandler; queryForDependencies?: typeof import("./queryForDependencies.handler").queryForDependenciesHandler; + checkGlobalKeys?: typeof import("./checkGlobalKeys.handler").checkForGlobalKeysHandler; }; const UNSTABLE_HANDLER_CACHE: AppsRouterHandlerCache = {}; @@ -124,4 +126,21 @@ export const appsRouter = router({ input, }); }), + checkGlobalKeys: authedProcedure.input(checkGlobalKeysSchema).query(async ({ ctx, input }) => { + if (!UNSTABLE_HANDLER_CACHE.checkGlobalKeys) { + UNSTABLE_HANDLER_CACHE.checkGlobalKeys = await import("./checkGlobalKeys.handler").then( + (mod) => mod.checkForGlobalKeysHandler + ); + } + + // Unreachable code but required for type safety + if (!UNSTABLE_HANDLER_CACHE.checkGlobalKeys) { + throw new Error("Failed to load handler"); + } + + return UNSTABLE_HANDLER_CACHE.checkGlobalKeys({ + ctx, + input, + }); + }), }); diff --git a/packages/trpc/server/routers/viewer/apps/checkGlobalKeys.handler.ts b/packages/trpc/server/routers/viewer/apps/checkGlobalKeys.handler.ts new file mode 100644 index 0000000000..35610635d0 --- /dev/null +++ b/packages/trpc/server/routers/viewer/apps/checkGlobalKeys.handler.ts @@ -0,0 +1,21 @@ +import { prisma } from "@calcom/prisma"; + +import type { TrpcSessionUser } from "../../../trpc"; +import type { CheckGlobalKeysSchemaType } from "./checkGlobalKeys.schema"; + +type checkForGlobalKeys = { + ctx: { + user: NonNullable; + }; + input: CheckGlobalKeysSchemaType; +}; + +export const checkForGlobalKeysHandler = async ({ ctx, input }: checkForGlobalKeys) => { + const appIsGloballyInstalled = await prisma.app.findUnique({ + where: { + slug: input.slug, + }, + }); + + return !!appIsGloballyInstalled; +}; diff --git a/packages/trpc/server/routers/viewer/apps/checkGlobalKeys.schema.ts b/packages/trpc/server/routers/viewer/apps/checkGlobalKeys.schema.ts new file mode 100644 index 0000000000..59fc01c89f --- /dev/null +++ b/packages/trpc/server/routers/viewer/apps/checkGlobalKeys.schema.ts @@ -0,0 +1,7 @@ +import { z } from "zod"; + +export const checkGlobalKeysSchema = z.object({ + slug: z.string(), +}); + +export type CheckGlobalKeysSchemaType = z.infer; diff --git a/packages/trpc/server/routers/viewer/googleWorkspace/_router.tsx b/packages/trpc/server/routers/viewer/googleWorkspace/_router.tsx new file mode 100644 index 0000000000..b0a0f7f1c1 --- /dev/null +++ b/packages/trpc/server/routers/viewer/googleWorkspace/_router.tsx @@ -0,0 +1,61 @@ +import authedProcedure from "../../../procedures/authedProcedure"; +import { router } from "../../../trpc"; + +type GoogleWorkspaceCache = { + checkForGWorkspace?: typeof import("./googleWorkspace.handler").checkForGWorkspace; + getUsersFromGWorkspace?: typeof import("./googleWorkspace.handler").getUsersFromGWorkspace; + removeCurrentGoogleWorkspaceConnection?: typeof import("./googleWorkspace.handler").removeCurrentGoogleWorkspaceConnection; +}; + +const UNSTABLE_HANDLER_CACHE: GoogleWorkspaceCache = {}; + +export const googleWorkspaceRouter = router({ + checkForGWorkspace: authedProcedure.query(async ({ ctx }) => { + if (!UNSTABLE_HANDLER_CACHE.checkForGWorkspace) { + UNSTABLE_HANDLER_CACHE.checkForGWorkspace = await import("./googleWorkspace.handler").then( + (mod) => mod.checkForGWorkspace + ); + } + + // Unreachable code but required for type safety + if (!UNSTABLE_HANDLER_CACHE.checkForGWorkspace) { + throw new Error("Failed to load handler"); + } + + return UNSTABLE_HANDLER_CACHE.checkForGWorkspace({ + ctx, + }); + }), + getUsersFromGWorkspace: authedProcedure.mutation(async ({ ctx }) => { + if (!UNSTABLE_HANDLER_CACHE.getUsersFromGWorkspace) { + UNSTABLE_HANDLER_CACHE.getUsersFromGWorkspace = await import("./googleWorkspace.handler").then( + (mod) => mod.getUsersFromGWorkspace + ); + } + + // Unreachable code but required for type safety + if (!UNSTABLE_HANDLER_CACHE.getUsersFromGWorkspace) { + throw new Error("Failed to load handler"); + } + + return UNSTABLE_HANDLER_CACHE.getUsersFromGWorkspace({ + ctx, + }); + }), + removeCurrentGoogleWorkspaceConnection: authedProcedure.mutation(async ({ ctx }) => { + if (!UNSTABLE_HANDLER_CACHE.removeCurrentGoogleWorkspaceConnection) { + UNSTABLE_HANDLER_CACHE.removeCurrentGoogleWorkspaceConnection = await import( + "./googleWorkspace.handler" + ).then((mod) => mod.removeCurrentGoogleWorkspaceConnection); + } + + // Unreachable code but required for type safety + if (!UNSTABLE_HANDLER_CACHE.removeCurrentGoogleWorkspaceConnection) { + throw new Error("Failed to load handler"); + } + + return UNSTABLE_HANDLER_CACHE.removeCurrentGoogleWorkspaceConnection({ + ctx, + }); + }), +}); diff --git a/packages/trpc/server/routers/viewer/googleWorkspace/googleWorkspace.handler.ts b/packages/trpc/server/routers/viewer/googleWorkspace/googleWorkspace.handler.ts new file mode 100644 index 0000000000..867a21248b --- /dev/null +++ b/packages/trpc/server/routers/viewer/googleWorkspace/googleWorkspace.handler.ts @@ -0,0 +1,79 @@ +import { google } from "googleapis"; +import { z } from "zod"; + +import getAppKeysFromSlug from "@calcom/app-store/_utils/getAppKeysFromSlug"; +import { prisma } from "@calcom/prisma"; + +import type { TrpcSessionUser } from "../../../trpc"; + +type CheckForGCalOptions = { + ctx: { + user: NonNullable; + }; +}; + +const credentialsSchema = z.object({ + refresh_token: z.string().optional(), + expiry_date: z.number().optional(), + access_token: z.string().optional(), + token_type: z.string().optional(), + id_token: z.string().optional(), + scope: z.string().optional(), +}); + +export const checkForGWorkspace = async ({ ctx }: CheckForGCalOptions) => { + const gWorkspacePresent = await prisma.credential.findFirst({ + where: { + type: "google_workspace_directory", + userId: ctx.user.id, + }, + }); + + return { id: gWorkspacePresent?.id }; +}; + +export const getUsersFromGWorkspace = async ({ ctx }: CheckForGCalOptions) => { + const { client_id, client_secret } = await getAppKeysFromSlug("google-calendar"); + if (!client_id || typeof client_id !== "string") throw new Error("Google client_id missing."); + if (!client_secret || typeof client_secret !== "string") throw new Error("Google client_secret missing."); + + const hasExistingCredentials = await prisma.credential.findFirst({ + where: { + type: "google_workspace_directory", + }, + }); + if (!hasExistingCredentials) { + throw new Error("No workspace credentials found"); + } + + const credentials = credentialsSchema.parse(hasExistingCredentials.key); + + const oAuth2Client = new google.auth.OAuth2(client_id, client_secret); + + // Set users credentials instead of our app credentials - allowing us to make requests on their behalf + oAuth2Client.setCredentials(credentials); + + // Create a new instance of the Admin SDK directory API + const directory = google.admin({ version: "directory_v1", auth: oAuth2Client }); + + const { data } = await directory.users.list({ + maxResults: 200, // Up this if we ever need to get more than 200 users + customer: "my_customer", // This only works for single domain setups - we'll need to change this if we ever support multi-domain setups (unlikely we'll ever need to) + }); + + // We only want their email addresses + const emails = data.users?.map((user) => user.primaryEmail as string) ?? ([] as string[]); + return emails; +}; + +export const removeCurrentGoogleWorkspaceConnection = async ({ ctx }: CheckForGCalOptions) => { + // There should only ever be one google_workspace_directory credential per user but we delete many as we can't make type unique + const gWorkspacePresent = await prisma.credential.deleteMany({ + where: { + type: "google_workspace_directory", + userId: ctx.user.id, + }, + }); + + return { deleted: gWorkspacePresent?.count }; +}; diff --git a/packages/trpc/server/routers/viewer/teams/inviteMember.handler.ts b/packages/trpc/server/routers/viewer/teams/inviteMember.handler.ts index 97067acb7a..5e85783b6d 100644 --- a/packages/trpc/server/routers/viewer/teams/inviteMember.handler.ts +++ b/packages/trpc/server/routers/viewer/teams/inviteMember.handler.ts @@ -37,113 +37,121 @@ export const inviteMemberHandler = async ({ ctx, input }: InviteMemberOptions) = if (!team) throw new TRPCError({ code: "NOT_FOUND", message: "Team not found" }); - // A user can exist even if they have not completed onboarding - const invitee = await prisma.user.findFirst({ - where: { - OR: [{ username: input.usernameOrEmail }, { email: input.usernameOrEmail }], - }, - }); + const emailsToInvite = Array.isArray(input.usernameOrEmail) + ? input.usernameOrEmail + : [input.usernameOrEmail]; - if (!invitee) { - // liberal email match - - if (!isEmail(input.usernameOrEmail)) - throw new TRPCError({ - code: "NOT_FOUND", - message: `Invite failed because there is no corresponding user for ${input.usernameOrEmail}`, - }); - - // valid email given, create User and add to team - await prisma.user.create({ - data: { - email: input.usernameOrEmail, - invitedTo: input.teamId, - teams: { - create: { - teamId: input.teamId, - role: input.role as MembershipRole, - }, - }, + emailsToInvite.forEach(async (usernameOrEmail) => { + const invitee = await prisma.user.findFirst({ + where: { + OR: [{ username: usernameOrEmail }, { email: usernameOrEmail }], }, }); - const token: string = randomBytes(32).toString("hex"); + if (!invitee) { + // liberal email match - await prisma.verificationToken.create({ - data: { - identifier: input.usernameOrEmail, - token, - expires: new Date(new Date().setHours(168)), // +1 week - }, - }); - if (ctx?.user?.name && team?.name) { - await sendTeamInviteEmail({ - language: translation, - from: ctx.user.name, - to: input.usernameOrEmail, - teamName: team.name, - joinLink: `${WEBAPP_URL}/signup?token=${token}&callbackUrl=/getting-started`, // we know that the user has not completed onboarding yet, so we can redirect them to the onboarding flow - isCalcomMember: false, - }); - } - } else { - // create provisional membership - try { - await prisma.membership.create({ - data: { - teamId: input.teamId, - userId: invitee.id, - role: input.role as MembershipRole, - }, - }); - } catch (e) { - if (e instanceof Prisma.PrismaClientKnownRequestError) { - if (e.code === "P2002") { - throw new TRPCError({ - code: "FORBIDDEN", - message: "This user is a member of this team / has a pending invitation.", - }); - } - } else throw e; - } - - let sendTo = input.usernameOrEmail; - if (!isEmail(input.usernameOrEmail)) { - sendTo = invitee.email; - } - // inform user of membership by email - if (input.sendEmailInvitation && ctx?.user?.name && team?.name) { - const inviteTeamOptions = { - joinLink: `${WEBAPP_URL}/auth/login?callbackUrl=/settings/teams`, - isCalcomMember: true, - }; - /** - * Here we want to redirect to a differnt place if onboarding has been completed or not. This prevents the flash of going to teams -> Then to onboarding - also show a differnt email template. - * This only changes if the user is a CAL user and has not completed onboarding and has no password - */ - if (!invitee.completedOnboarding && !invitee.password && invitee.identityProvider === "CAL") { - const token = randomBytes(32).toString("hex"); - await prisma.verificationToken.create({ - data: { - identifier: input.usernameOrEmail, - token, - expires: new Date(new Date().setHours(168)), // +1 week - }, + if (!isEmail(usernameOrEmail)) + throw new TRPCError({ + code: "NOT_FOUND", + message: `Invite failed because there is no corresponding user for ${usernameOrEmail}`, }); - inviteTeamOptions.joinLink = `${WEBAPP_URL}/signup?token=${token}&callbackUrl=/getting-started`; - inviteTeamOptions.isCalcomMember = false; + // valid email given, create User and add to team + await prisma.user.create({ + data: { + email: usernameOrEmail, + invitedTo: input.teamId, + teams: { + create: { + teamId: input.teamId, + role: input.role as MembershipRole, + }, + }, + }, + }); + + const token: string = randomBytes(32).toString("hex"); + + await prisma.verificationToken.create({ + data: { + identifier: usernameOrEmail, + token, + expires: new Date(new Date().setHours(168)), // +1 week + }, + }); + if (ctx?.user?.name && team?.name) { + await sendTeamInviteEmail({ + language: translation, + from: ctx.user.name, + to: usernameOrEmail, + teamName: team.name, + joinLink: `${WEBAPP_URL}/signup?token=${token}&callbackUrl=/getting-started`, // we know that the user has not completed onboarding yet, so we can redirect them to the onboarding flow + isCalcomMember: false, + }); + } + } else { + // create provisional membership + try { + await prisma.membership.create({ + data: { + teamId: input.teamId, + userId: invitee.id, + role: input.role as MembershipRole, + }, + }); + } catch (e) { + if (e instanceof Prisma.PrismaClientKnownRequestError) { + // Don't throw an error if the user is already a member of the team when inviting multiple users + if (!Array.isArray(input.usernameOrEmail) && e.code === "P2002") { + throw new TRPCError({ + code: "FORBIDDEN", + message: "This user is a member of this team / has a pending invitation.", + }); + } else { + console.log(`User ${invitee.id} is already a member of this team.`); + } + } else throw e; } - await sendTeamInviteEmail({ - language: translation, - from: ctx.user.name, - to: sendTo, - teamName: team.name, - ...inviteTeamOptions, - }); + let sendTo = usernameOrEmail; + if (!isEmail(usernameOrEmail)) { + sendTo = invitee.email; + } + // inform user of membership by email + if (input.sendEmailInvitation && ctx?.user?.name && team?.name) { + const inviteTeamOptions = { + joinLink: `${WEBAPP_URL}/auth/login?callbackUrl=/settings/teams`, + isCalcomMember: true, + }; + /** + * Here we want to redirect to a differnt place if onboarding has been completed or not. This prevents the flash of going to teams -> Then to onboarding - also show a differnt email template. + * This only changes if the user is a CAL user and has not completed onboarding and has no password + */ + if (!invitee.completedOnboarding && !invitee.password && invitee.identityProvider === "CAL") { + const token = randomBytes(32).toString("hex"); + await prisma.verificationToken.create({ + data: { + identifier: usernameOrEmail, + token, + expires: new Date(new Date().setHours(168)), // +1 week + }, + }); + + inviteTeamOptions.joinLink = `${WEBAPP_URL}/signup?token=${token}&callbackUrl=/getting-started`; + inviteTeamOptions.isCalcomMember = false; + } + + await sendTeamInviteEmail({ + language: translation, + from: ctx.user.name, + to: sendTo, + teamName: team.name, + ...inviteTeamOptions, + }); + } } - } + }); if (IS_TEAM_BILLING_ENABLED) await updateQuantitySubscriptionFromStripe(input.teamId); return input; }; diff --git a/packages/trpc/server/routers/viewer/teams/inviteMember.schema.ts b/packages/trpc/server/routers/viewer/teams/inviteMember.schema.ts index d743203f8e..c3d712a750 100644 --- a/packages/trpc/server/routers/viewer/teams/inviteMember.schema.ts +++ b/packages/trpc/server/routers/viewer/teams/inviteMember.schema.ts @@ -4,7 +4,12 @@ import { MembershipRole } from "@calcom/prisma/enums"; export const ZInviteMemberInputSchema = z.object({ teamId: z.number(), - usernameOrEmail: z.string().transform((usernameOrEmail) => usernameOrEmail.trim().toLowerCase()), + usernameOrEmail: z.union([z.string(), z.array(z.string())]).transform((usernameOrEmail) => { + if (typeof usernameOrEmail === "string") { + return usernameOrEmail.trim().toLowerCase(); + } + return usernameOrEmail.map((item) => item.trim().toLowerCase()); + }), role: z.nativeEnum(MembershipRole), language: z.string(), sendEmailInvitation: z.boolean(), diff --git a/packages/trpc/server/routers/viewer/workflows/getWorkflowActionOptions.handler.ts b/packages/trpc/server/routers/viewer/workflows/getWorkflowActionOptions.handler.ts index ad12d6ddd6..a4159afcf3 100644 --- a/packages/trpc/server/routers/viewer/workflows/getWorkflowActionOptions.handler.ts +++ b/packages/trpc/server/routers/viewer/workflows/getWorkflowActionOptions.handler.ts @@ -17,7 +17,8 @@ type GetWorkflowActionOptionsOptions = { export const getWorkflowActionOptionsHandler = async ({ ctx }: GetWorkflowActionOptionsOptions) => { const { user } = ctx; - const isCurrentUsernamePremium = user && user.metadata && hasKeyInMetadata(user, "isPremium"); + const isCurrentUsernamePremium = + user && hasKeyInMetadata(user, "isPremium") ? !!user.metadata.isPremium : false; let isTeamsPlan = false; if (!isCurrentUsernamePremium) { diff --git a/packages/trpc/server/routers/viewer/workflows/update.handler.ts b/packages/trpc/server/routers/viewer/workflows/update.handler.ts index bb44f10f2a..64c7fe0ed9 100644 --- a/packages/trpc/server/routers/viewer/workflows/update.handler.ts +++ b/packages/trpc/server/routers/viewer/workflows/update.handler.ts @@ -66,7 +66,7 @@ export const updateHandler = async ({ ctx, input }: UpdateOptions) => { throw new TRPCError({ code: "UNAUTHORIZED" }); } - const isCurrentUsernamePremium = user && user.metadata && hasKeyInMetadata(user, "isPremium"); + const isCurrentUsernamePremium = hasKeyInMetadata(user, "isPremium") ? !!user.metadata.isPremium : false; let isTeamsPlan = false; if (!isCurrentUsernamePremium) { diff --git a/packages/ui/components/card/Card.tsx b/packages/ui/components/card/Card.tsx index 153f1325e4..b7c0dcdb2a 100644 --- a/packages/ui/components/card/Card.tsx +++ b/packages/ui/components/card/Card.tsx @@ -152,12 +152,14 @@ export function Card({ {learnMore.text} )} - + {actionButton?.child && ( + + )}
)}
diff --git a/packages/ui/components/dialog/Dialog.tsx b/packages/ui/components/dialog/Dialog.tsx index ff4bd32453..eb5222ce27 100644 --- a/packages/ui/components/dialog/Dialog.tsx +++ b/packages/ui/components/dialog/Dialog.tsx @@ -1,6 +1,6 @@ import * as DialogPrimitive from "@radix-ui/react-dialog"; import { useRouter } from "next/router"; -import type { ReactNode } from "react"; +import type { PropsWithChildren, ReactNode } from "react"; import React, { useState } from "react"; import classNames from "@calcom/lib/classNames"; @@ -61,7 +61,7 @@ type DialogContentProps = React.ComponentProps<(typeof DialogPrimitive)["Content size?: "xl" | "lg" | "md"; type?: "creation" | "confirmation"; title?: string; - description?: string | JSX.Element | undefined; + description?: string | JSX.Element | null; closeText?: string; actionDisabled?: boolean; Icon?: SVGComponent; @@ -134,8 +134,11 @@ export function DialogHeader(props: DialogHeaderProps) { ); } -export function DialogFooter(props: { children: ReactNode }) { - return
{props.children}
; +// TODO: add divider +export function DialogFooter(props: PropsWithChildren<{ showDivider?: boolean }>) { + return ( +
{props.children}
+ ); } DialogContent.displayName = "DialogContent"; diff --git a/packages/ui/components/form/checkbox/Checkbox.tsx b/packages/ui/components/form/checkbox/Checkbox.tsx index 06b2268c3b..f35022e315 100644 --- a/packages/ui/components/form/checkbox/Checkbox.tsx +++ b/packages/ui/components/form/checkbox/Checkbox.tsx @@ -1,3 +1,4 @@ +import { useId } from "@radix-ui/react-id"; import type { InputHTMLAttributes } from "react"; import React, { forwardRef } from "react"; @@ -16,6 +17,7 @@ type Props = InputHTMLAttributes & { const CheckboxField = forwardRef( ({ label, description, error, disabled, ...rest }, ref) => { const descriptionAsLabel = !label || rest.descriptionAsLabel; + const id = useId(); return (
{label && ( @@ -26,7 +28,7 @@ const CheckboxField = forwardRef( className: classNames("flex text-sm font-medium text-emphasis"), ...(!descriptionAsLabel ? { - htmlFor: rest.id, + htmlFor: rest.id ? rest.id : id, } : {}), }, @@ -52,6 +54,7 @@ const CheckboxField = forwardRef( ref={ref} type="checkbox" disabled={disabled} + id={rest.id ? rest.id : id} className={classNames( "text-primary-600 focus:ring-primary-500 border-default bg-default h-4 w-4 rounded ltr:mr-2 rtl:ml-2", !error && disabled diff --git a/packages/ui/components/form/toggleGroup/ToggleGroup.tsx b/packages/ui/components/form/toggleGroup/ToggleGroup.tsx index 08f0d7a336..dc5833302d 100644 --- a/packages/ui/components/form/toggleGroup/ToggleGroup.tsx +++ b/packages/ui/components/form/toggleGroup/ToggleGroup.tsx @@ -6,7 +6,13 @@ import { classNames } from "@calcom/lib"; import { Tooltip } from "@calcom/ui"; interface ToggleGroupProps extends Omit { - options: { value: string; label: string | ReactNode; disabled?: boolean; tooltip?: string }[]; + options: { + value: string; + label: string | ReactNode; + disabled?: boolean; + tooltip?: string; + iconLeft?: ReactNode; + }[]; isFullWidth?: boolean; } @@ -80,7 +86,10 @@ export const ToggleGroup = ({ options, onValueChange, isFullWidth, ...props }: T } return node; }}> - {option.label} +
+ {option.iconLeft && {option.iconLeft}} + {option.label} +
))} diff --git a/tests/config/singleton.ts b/tests/config/singleton.ts deleted file mode 100644 index 3fa1bd82f1..0000000000 --- a/tests/config/singleton.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { PrismaClient } from "@prisma/client"; -import type { DeepMockProxy } from "jest-mock-extended"; -import { mockDeep, mockReset } from "jest-mock-extended"; - -import * as CalendarManager from "@calcom/core/CalendarManager"; -import prisma from "@calcom/prisma"; - -jest.mock("@calcom/core/CalendarManager"); - -jest.mock("@calcom/prisma", () => ({ - __esModule: true, - default: mockDeep(), -})); - -beforeEach(() => { - mockReset(prismaMock); -}); - -export const prismaMock = prisma as unknown as DeepMockProxy; -export const CalendarManagerMock = CalendarManager as unknown as DeepMockProxy; diff --git a/tests/libs/__mocks__/CalendarManager.ts b/tests/libs/__mocks__/CalendarManager.ts new file mode 100644 index 0000000000..8a0cdd17e8 --- /dev/null +++ b/tests/libs/__mocks__/CalendarManager.ts @@ -0,0 +1,13 @@ +import { beforeEach, vi } from "vitest"; +import { mockReset, mockDeep } from "vitest-mock-extended"; + +import type * as CalendarManager from "@calcom/core/CalendarManager"; + +vi.mock("@calcom/core/CalendarManager", () => CalendarManagerMock); + +beforeEach(() => { + mockReset(CalendarManagerMock); +}); + +const CalendarManagerMock = mockDeep(); +export default CalendarManagerMock; diff --git a/tests/libs/__mocks__/prisma.ts b/tests/libs/__mocks__/prisma.ts new file mode 100644 index 0000000000..a510d2abd1 --- /dev/null +++ b/tests/libs/__mocks__/prisma.ts @@ -0,0 +1,16 @@ +import type { PrismaClient } from "@prisma/client"; +import { beforeEach, vi } from "vitest"; +import { mockDeep, mockReset } from "vitest-mock-extended"; + +vi.mock("@calcom/prisma", () => ({ + default: prisma, + availabilityUserSelect: vi.fn(), + userSelect: vi.fn(), +})); + +beforeEach(() => { + mockReset(prisma); +}); + +const prisma = mockDeep(); +export default prisma; diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 0000000000..6eea9436fc --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,9 @@ +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + coverage: { + provider: "c8", + }, + }, +}); diff --git a/vitest.workspace.ts b/vitest.workspace.ts new file mode 100644 index 0000000000..ad771f4cb8 --- /dev/null +++ b/vitest.workspace.ts @@ -0,0 +1,18 @@ +import { defineWorkspace } from "vitest/config"; + +// defineWorkspace provides a nice type hinting DX +export default defineWorkspace([ + { + test: { + include: ["packages/**/*.{test,spec}.{ts,js}", "apps/**/*.{test,spec}.{ts,js}"], + }, + }, + { + test: { + name: "@calcom/closecom", + include: ["packages/app-store/closecom/**/*.{test,spec}.{ts,js}"], + environment: "jsdom", + setupFiles: ["packages/app-store/closecom/test/globals.ts"], + }, + }, +]); diff --git a/yarn.lock b/yarn.lock index 813bbfe0c7..aaf74b59d5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1220,7 +1220,7 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.16.7": +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.16.7": version: 7.16.7 resolution: "@babel/code-frame@npm:7.16.7" dependencies: @@ -1238,6 +1238,15 @@ __metadata: languageName: node linkType: hard +"@babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.21.4": + version: 7.21.4 + resolution: "@babel/code-frame@npm:7.21.4" + dependencies: + "@babel/highlight": ^7.18.6 + checksum: e5390e6ec1ac58dcef01d4f18eaf1fd2f1325528661ff6d4a5de8979588b9f5a8e852a54a91b923846f7a5c681b217f0a45c2524eb9560553160cd963b7d592c + languageName: node + linkType: hard + "@babel/compat-data@npm:^7.13.11, @babel/compat-data@npm:^7.18.6, @babel/compat-data@npm:^7.18.8": version: 7.18.8 resolution: "@babel/compat-data@npm:7.18.8" @@ -1266,6 +1275,13 @@ __metadata: languageName: node linkType: hard +"@babel/compat-data@npm:^7.21.5": + version: 7.21.9 + resolution: "@babel/compat-data@npm:7.21.9" + checksum: df97be04955c0801f5a23846f79a100660aa98f9433cfd1fad8f53ecd9f3454538e78522e86275939aa8aa7d6f9e32f23f94bc04ae843f7246b7cd4bffe3a175 + languageName: node + linkType: hard + "@babel/core@npm:7.12.9": version: 7.12.9 resolution: "@babel/core@npm:7.12.9" @@ -1313,7 +1329,30 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.10": +"@babel/core@npm:^7.11.6": + version: 7.21.8 + resolution: "@babel/core@npm:7.21.8" + dependencies: + "@ampproject/remapping": ^2.2.0 + "@babel/code-frame": ^7.21.4 + "@babel/generator": ^7.21.5 + "@babel/helper-compilation-targets": ^7.21.5 + "@babel/helper-module-transforms": ^7.21.5 + "@babel/helpers": ^7.21.5 + "@babel/parser": ^7.21.8 + "@babel/template": ^7.20.7 + "@babel/traverse": ^7.21.5 + "@babel/types": ^7.21.5 + convert-source-map: ^1.7.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.2.2 + semver: ^6.3.0 + checksum: f28118447355af2a90bd340e2e60699f94c8020517eba9b71bf8ebff62fa9e00d63f076e033f9dfb97548053ad62ada45fafb0d96584b1a90e8aef5a3b8241b1 + languageName: node + linkType: hard + +"@babel/core@npm:^7.12.10": version: 7.18.6 resolution: "@babel/core@npm:7.18.6" dependencies: @@ -1416,7 +1455,7 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.12.11, @babel/generator@npm:^7.18.7, @babel/generator@npm:^7.7.2": +"@babel/generator@npm:^7.12.11, @babel/generator@npm:^7.18.7": version: 7.18.7 resolution: "@babel/generator@npm:7.18.7" dependencies: @@ -1494,6 +1533,18 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.21.5, @babel/generator@npm:^7.7.2": + version: 7.21.9 + resolution: "@babel/generator@npm:7.21.9" + dependencies: + "@babel/types": ^7.21.5 + "@jridgewell/gen-mapping": ^0.3.2 + "@jridgewell/trace-mapping": ^0.3.17 + jsesc: ^2.5.1 + checksum: 5bd10334ebdf7f2a30eb4a1fd99d369a57703aa2234527784449187512c254a1174fa739c9d4c31bcbb6018732012a0664bec7c314f12b5ec2458737ddbb01c7 + languageName: node + linkType: hard + "@babel/helper-annotate-as-pure@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-annotate-as-pure@npm:7.18.6" @@ -1584,6 +1635,21 @@ __metadata: languageName: node linkType: hard +"@babel/helper-compilation-targets@npm:^7.21.5": + version: 7.21.5 + resolution: "@babel/helper-compilation-targets@npm:7.21.5" + dependencies: + "@babel/compat-data": ^7.21.5 + "@babel/helper-validator-option": ^7.21.0 + browserslist: ^4.21.3 + lru-cache: ^5.1.1 + semver: ^6.3.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 0edecb9c970ddc22ebda1163e77a7f314121bef9e483e0e0d9a5802540eed90d5855b6bf9bce03419b35b2e07c323e62d0353b153fa1ca34f17dbba897a83c25 + languageName: node + linkType: hard + "@babel/helper-create-class-features-plugin@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-create-class-features-plugin@npm:7.18.6" @@ -1681,6 +1747,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-environment-visitor@npm:^7.21.5": + version: 7.21.5 + resolution: "@babel/helper-environment-visitor@npm:7.21.5" + checksum: e436af7b62956e919066448013a3f7e2cd0b51010c26c50f790124dcd350be81d5597b4e6ed0a4a42d098a27de1e38561cd7998a116a42e7899161192deac9a6 + languageName: node + linkType: hard + "@babel/helper-explode-assignable-expression@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-explode-assignable-expression@npm:7.18.6" @@ -1795,6 +1868,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-imports@npm:^7.21.4": + version: 7.21.4 + resolution: "@babel/helper-module-imports@npm:7.21.4" + dependencies: + "@babel/types": ^7.21.4 + checksum: bd330a2edaafeb281fbcd9357652f8d2666502567c0aad71db926e8499c773c9ea9c10dfaae30122452940326d90c8caff5c649ed8e1bf15b23f858758d3abc6 + languageName: node + linkType: hard + "@babel/helper-module-transforms@npm:^7.12.1": version: 7.20.11 resolution: "@babel/helper-module-transforms@npm:7.20.11" @@ -1891,6 +1973,22 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-transforms@npm:^7.21.5": + version: 7.21.5 + resolution: "@babel/helper-module-transforms@npm:7.21.5" + dependencies: + "@babel/helper-environment-visitor": ^7.21.5 + "@babel/helper-module-imports": ^7.21.4 + "@babel/helper-simple-access": ^7.21.5 + "@babel/helper-split-export-declaration": ^7.18.6 + "@babel/helper-validator-identifier": ^7.19.1 + "@babel/template": ^7.20.7 + "@babel/traverse": ^7.21.5 + "@babel/types": ^7.21.5 + checksum: 1ccfc88830675a5d485d198e918498f9683cdd46f973fdd4fe1c85b99648fb70f87fca07756c7a05dc201bd9b248c74ced06ea80c9991926ac889f53c3659675 + languageName: node + linkType: hard + "@babel/helper-optimise-call-expression@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-optimise-call-expression@npm:7.18.6" @@ -1998,6 +2096,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-simple-access@npm:^7.21.5": + version: 7.21.5 + resolution: "@babel/helper-simple-access@npm:7.21.5" + dependencies: + "@babel/types": ^7.21.5 + checksum: ad212beaa24be3864c8c95bee02f840222457ccf5419991e2d3e3e39b0f75b77e7e857e0bf4ed428b1cd97acefc87f3831bdb0b9696d5ad0557421f398334fc3 + languageName: node + linkType: hard + "@babel/helper-skip-transparent-expression-wrappers@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.18.6" @@ -2039,6 +2146,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-string-parser@npm:^7.21.5": + version: 7.21.5 + resolution: "@babel/helper-string-parser@npm:7.21.5" + checksum: 36c0ded452f3858e67634b81960d4bde1d1cd2a56b82f4ba2926e97864816021c885f111a7cf81de88a0ed025f49d84a393256700e9acbca2d99462d648705d8 + languageName: node + linkType: hard + "@babel/helper-validator-identifier@npm:^7.16.7": version: 7.16.7 resolution: "@babel/helper-validator-identifier@npm:7.16.7" @@ -2074,6 +2188,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-option@npm:^7.21.0": + version: 7.21.0 + resolution: "@babel/helper-validator-option@npm:7.21.0" + checksum: 8ece4c78ffa5461fd8ab6b6e57cc51afad59df08192ed5d84b475af4a7193fc1cb794b59e3e7be64f3cdc4df7ac78bf3dbb20c129d7757ae078e6279ff8c2f07 + languageName: node + linkType: hard + "@babel/helper-wrap-function@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-wrap-function@npm:7.18.6" @@ -2141,6 +2262,17 @@ __metadata: languageName: node linkType: hard +"@babel/helpers@npm:^7.21.5": + version: 7.21.5 + resolution: "@babel/helpers@npm:7.21.5" + dependencies: + "@babel/template": ^7.20.7 + "@babel/traverse": ^7.21.5 + "@babel/types": ^7.21.5 + checksum: a6f74b8579713988e7f5adf1a986d8b5255757632ba65b2552f0f609ead5476edb784044c7e4b18f3681ee4818ca9d08c41feb9bd4e828648c25a00deaa1f9e4 + languageName: node + linkType: hard + "@babel/highlight@npm:^7.16.7": version: 7.16.10 resolution: "@babel/highlight@npm:7.16.10" @@ -2163,12 +2295,12 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.16.7, @babel/parser@npm:^7.17.3, @babel/parser@npm:^7.17.8": - version: 7.17.8 - resolution: "@babel/parser@npm:7.17.8" +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.21.5, @babel/parser@npm:^7.21.8, @babel/parser@npm:^7.21.9": + version: 7.21.9 + resolution: "@babel/parser@npm:7.21.9" bin: parser: ./bin/babel-parser.js - checksum: 1771808491982cc47baa888a997aef6b58308e3844c8c00f730f8fd97defe57d32cdbf46075cd49aaee310fa31f3d2c80a0d41b41a4ee0ff336ee09e2ff6c222 + checksum: 985ccc311eb286a320331fd21ff54d94935df76e081abdb304cd4591ea2051a6c799c6b0d8e26d09a9dd041797d9a91ebadeb0c50699d0101bd39fc565082d5c languageName: node linkType: hard @@ -2190,6 +2322,15 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.14.7, @babel/parser@npm:^7.16.7, @babel/parser@npm:^7.17.3, @babel/parser@npm:^7.17.8": + version: 7.17.8 + resolution: "@babel/parser@npm:7.17.8" + bin: + parser: ./bin/babel-parser.js + checksum: 1771808491982cc47baa888a997aef6b58308e3844c8c00f730f8fd97defe57d32cdbf46075cd49aaee310fa31f3d2c80a0d41b41a4ee0ff336ee09e2ff6c222 + languageName: node + linkType: hard + "@babel/parser@npm:^7.17.9": version: 7.17.9 resolution: "@babel/parser@npm:7.17.9" @@ -2750,7 +2891,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-typescript@npm:^7.18.6, @babel/plugin-syntax-typescript@npm:^7.7.2": +"@babel/plugin-syntax-typescript@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-syntax-typescript@npm:7.18.6" dependencies: @@ -2761,6 +2902,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-typescript@npm:^7.7.2": + version: 7.21.4 + resolution: "@babel/plugin-syntax-typescript@npm:7.21.4" + dependencies: + "@babel/helper-plugin-utils": ^7.20.2 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a59ce2477b7ae8c8945dc37dda292fef9ce46a6507b3d76b03ce7f3a6c9451a6567438b20a78ebcb3955d04095fd1ccd767075a863f79fcc30aa34dcfa441fe0 + languageName: node + linkType: hard + "@babel/plugin-transform-arrow-functions@npm:^7.12.1, @babel/plugin-transform-arrow-functions@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-transform-arrow-functions@npm:7.18.6" @@ -3491,7 +3643,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.10.5, @babel/runtime@npm:^7.12.0, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.14.5, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.8.7": +"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.12.0, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.14.5, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.8.7": version: 7.17.8 resolution: "@babel/runtime@npm:7.17.8" dependencies: @@ -3565,7 +3717,7 @@ __metadata: languageName: node linkType: hard -"@babel/template@npm:^7.16.7, @babel/template@npm:^7.3.3": +"@babel/template@npm:^7.16.7": version: 7.16.7 resolution: "@babel/template@npm:7.16.7" dependencies: @@ -3598,6 +3750,17 @@ __metadata: languageName: node linkType: hard +"@babel/template@npm:^7.3.3": + version: 7.21.9 + resolution: "@babel/template@npm:7.21.9" + dependencies: + "@babel/code-frame": ^7.21.4 + "@babel/parser": ^7.21.9 + "@babel/types": ^7.21.5 + checksum: 6ec2c60d4d53b2a9230ab82c399ba6525df87e9a4e01e4b111e071cbad283b1362e7c99a1bc50027073f44f2de36a495a89c27112c4e7efe7ef9c8d9c84de2ec + languageName: node + linkType: hard + "@babel/traverse@npm:7.17.3, @babel/traverse@npm:^7.13.0, @babel/traverse@npm:^7.17.3": version: 7.17.3 resolution: "@babel/traverse@npm:7.17.3" @@ -3616,7 +3779,7 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.1.6, @babel/traverse@npm:^7.12.11, @babel/traverse@npm:^7.18.6, @babel/traverse@npm:^7.18.8, @babel/traverse@npm:^7.7.2": +"@babel/traverse@npm:^7.1.6, @babel/traverse@npm:^7.12.11, @babel/traverse@npm:^7.18.6, @babel/traverse@npm:^7.18.8": version: 7.18.8 resolution: "@babel/traverse@npm:7.18.8" dependencies: @@ -3742,7 +3905,25 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:7.17.0, @babel/types@npm:^7.0.0, @babel/types@npm:^7.16.7, @babel/types@npm:^7.17.0, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3": +"@babel/traverse@npm:^7.21.5, @babel/traverse@npm:^7.7.2": + version: 7.21.5 + resolution: "@babel/traverse@npm:7.21.5" + dependencies: + "@babel/code-frame": ^7.21.4 + "@babel/generator": ^7.21.5 + "@babel/helper-environment-visitor": ^7.21.5 + "@babel/helper-function-name": ^7.21.0 + "@babel/helper-hoist-variables": ^7.18.6 + "@babel/helper-split-export-declaration": ^7.18.6 + "@babel/parser": ^7.21.5 + "@babel/types": ^7.21.5 + debug: ^4.1.0 + globals: ^11.1.0 + checksum: b403733fa7d858f0c8e224f0434a6ade641bc469a4f92975363391e796629d5bf53e544761dfe85039aab92d5389ebe7721edb309d7a5bb7df2bf74f37bf9f47 + languageName: node + linkType: hard + +"@babel/types@npm:7.17.0, @babel/types@npm:^7.16.7, @babel/types@npm:^7.17.0": version: 7.17.0 resolution: "@babel/types@npm:7.17.0" dependencies: @@ -3752,6 +3933,17 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.21.4, @babel/types@npm:^7.21.5, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3": + version: 7.21.5 + resolution: "@babel/types@npm:7.21.5" + dependencies: + "@babel/helper-string-parser": ^7.21.5 + "@babel/helper-validator-identifier": ^7.19.1 + to-fast-properties: ^2.0.0 + checksum: 43242a99c612d13285ee4af46cc0f1066bcb6ffd38307daef7a76e8c70f36cfc3255eb9e75c8e768b40e761176c313aec4d5c0b9d97a21e494d49d5fd123a9f7 + languageName: node + linkType: hard + "@babel/types@npm:^7.12.11, @babel/types@npm:^7.18.6, @babel/types@npm:^7.18.7, @babel/types@npm:^7.18.8, @babel/types@npm:^7.2.0, @babel/types@npm:^7.4.4": version: 7.18.8 resolution: "@babel/types@npm:7.18.8" @@ -4196,20 +4388,6 @@ __metadata: languageName: unknown linkType: soft -"@calcom/docs@workspace:apps/docs": - version: 0.0.0-use.local - resolution: "@calcom/docs@workspace:apps/docs" - dependencies: - "@calcom/config": "*" - iframe-resizer-react: ^1.1.0 - next: ^13.2.1 - nextra: ^1.1.0 - nextra-theme-docs: ^1.2.2 - react: ^18.2.0 - react-dom: ^18.2.0 - languageName: unknown - linkType: soft - "@calcom/ee@workspace:packages/features/ee": version: 0.0.0-use.local resolution: "@calcom/ee@workspace:packages/features/ee" @@ -4984,7 +5162,6 @@ __metadata: accept-language-parser: ^1.5.0 async: ^3.2.4 autoprefixer: ^10.4.12 - babel-jest: ^28.1.0 bcryptjs: ^2.4.3 classnames: ^2.3.1 copy-webpack-plugin: ^11.0.0 @@ -5049,7 +5226,6 @@ __metadata: superjson: 1.9.1 tailwindcss: ^3.3.1 tailwindcss-radix: ^2.6.0 - ts-jest: ^28.0.8 ts-node: ^10.9.1 turndown: ^7.1.1 typescript: ^4.9.4 @@ -5798,6 +5974,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm64@npm:0.17.19": + version: 0.17.19 + resolution: "@esbuild/android-arm64@npm:0.17.19" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/android-arm@npm:0.15.18": version: 0.15.18 resolution: "@esbuild/android-arm@npm:0.15.18" @@ -5812,6 +5995,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm@npm:0.17.19": + version: 0.17.19 + resolution: "@esbuild/android-arm@npm:0.17.19" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + "@esbuild/android-x64@npm:0.16.17": version: 0.16.17 resolution: "@esbuild/android-x64@npm:0.16.17" @@ -5819,6 +6009,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-x64@npm:0.17.19": + version: 0.17.19 + resolution: "@esbuild/android-x64@npm:0.17.19" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + "@esbuild/darwin-arm64@npm:0.16.17": version: 0.16.17 resolution: "@esbuild/darwin-arm64@npm:0.16.17" @@ -5826,6 +6023,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/darwin-arm64@npm:0.17.19": + version: 0.17.19 + resolution: "@esbuild/darwin-arm64@npm:0.17.19" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/darwin-x64@npm:0.16.17": version: 0.16.17 resolution: "@esbuild/darwin-x64@npm:0.16.17" @@ -5833,6 +6037,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/darwin-x64@npm:0.17.19": + version: 0.17.19 + resolution: "@esbuild/darwin-x64@npm:0.17.19" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@esbuild/freebsd-arm64@npm:0.16.17": version: 0.16.17 resolution: "@esbuild/freebsd-arm64@npm:0.16.17" @@ -5840,6 +6051,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/freebsd-arm64@npm:0.17.19": + version: 0.17.19 + resolution: "@esbuild/freebsd-arm64@npm:0.17.19" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/freebsd-x64@npm:0.16.17": version: 0.16.17 resolution: "@esbuild/freebsd-x64@npm:0.16.17" @@ -5847,6 +6065,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/freebsd-x64@npm:0.17.19": + version: 0.17.19 + resolution: "@esbuild/freebsd-x64@npm:0.17.19" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/linux-arm64@npm:0.16.17": version: 0.16.17 resolution: "@esbuild/linux-arm64@npm:0.16.17" @@ -5854,6 +6079,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-arm64@npm:0.17.19": + version: 0.17.19 + resolution: "@esbuild/linux-arm64@npm:0.17.19" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/linux-arm@npm:0.16.17": version: 0.16.17 resolution: "@esbuild/linux-arm@npm:0.16.17" @@ -5861,6 +6093,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-arm@npm:0.17.19": + version: 0.17.19 + resolution: "@esbuild/linux-arm@npm:0.17.19" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + "@esbuild/linux-ia32@npm:0.16.17": version: 0.16.17 resolution: "@esbuild/linux-ia32@npm:0.16.17" @@ -5868,6 +6107,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-ia32@npm:0.17.19": + version: 0.17.19 + resolution: "@esbuild/linux-ia32@npm:0.17.19" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + "@esbuild/linux-loong64@npm:0.14.54": version: 0.14.54 resolution: "@esbuild/linux-loong64@npm:0.14.54" @@ -5889,6 +6135,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-loong64@npm:0.17.19": + version: 0.17.19 + resolution: "@esbuild/linux-loong64@npm:0.17.19" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + "@esbuild/linux-mips64el@npm:0.16.17": version: 0.16.17 resolution: "@esbuild/linux-mips64el@npm:0.16.17" @@ -5896,6 +6149,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-mips64el@npm:0.17.19": + version: 0.17.19 + resolution: "@esbuild/linux-mips64el@npm:0.17.19" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + "@esbuild/linux-ppc64@npm:0.16.17": version: 0.16.17 resolution: "@esbuild/linux-ppc64@npm:0.16.17" @@ -5903,6 +6163,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-ppc64@npm:0.17.19": + version: 0.17.19 + resolution: "@esbuild/linux-ppc64@npm:0.17.19" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + "@esbuild/linux-riscv64@npm:0.16.17": version: 0.16.17 resolution: "@esbuild/linux-riscv64@npm:0.16.17" @@ -5910,6 +6177,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-riscv64@npm:0.17.19": + version: 0.17.19 + resolution: "@esbuild/linux-riscv64@npm:0.17.19" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + "@esbuild/linux-s390x@npm:0.16.17": version: 0.16.17 resolution: "@esbuild/linux-s390x@npm:0.16.17" @@ -5917,6 +6191,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-s390x@npm:0.17.19": + version: 0.17.19 + resolution: "@esbuild/linux-s390x@npm:0.17.19" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + "@esbuild/linux-x64@npm:0.16.17": version: 0.16.17 resolution: "@esbuild/linux-x64@npm:0.16.17" @@ -5924,6 +6205,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-x64@npm:0.17.19": + version: 0.17.19 + resolution: "@esbuild/linux-x64@npm:0.17.19" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + "@esbuild/netbsd-x64@npm:0.16.17": version: 0.16.17 resolution: "@esbuild/netbsd-x64@npm:0.16.17" @@ -5931,6 +6219,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/netbsd-x64@npm:0.17.19": + version: 0.17.19 + resolution: "@esbuild/netbsd-x64@npm:0.17.19" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/openbsd-x64@npm:0.16.17": version: 0.16.17 resolution: "@esbuild/openbsd-x64@npm:0.16.17" @@ -5938,6 +6233,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/openbsd-x64@npm:0.17.19": + version: 0.17.19 + resolution: "@esbuild/openbsd-x64@npm:0.17.19" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/sunos-x64@npm:0.16.17": version: 0.16.17 resolution: "@esbuild/sunos-x64@npm:0.16.17" @@ -5945,6 +6247,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/sunos-x64@npm:0.17.19": + version: 0.17.19 + resolution: "@esbuild/sunos-x64@npm:0.17.19" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + "@esbuild/win32-arm64@npm:0.16.17": version: 0.16.17 resolution: "@esbuild/win32-arm64@npm:0.16.17" @@ -5952,6 +6261,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-arm64@npm:0.17.19": + version: 0.17.19 + resolution: "@esbuild/win32-arm64@npm:0.17.19" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/win32-ia32@npm:0.16.17": version: 0.16.17 resolution: "@esbuild/win32-ia32@npm:0.16.17" @@ -5959,6 +6275,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-ia32@npm:0.17.19": + version: 0.17.19 + resolution: "@esbuild/win32-ia32@npm:0.17.19" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + "@esbuild/win32-x64@npm:0.16.17": version: 0.16.17 resolution: "@esbuild/win32-x64@npm:0.16.17" @@ -5966,6 +6289,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-x64@npm:0.17.19": + version: 0.17.19 + resolution: "@esbuild/win32-x64@npm:0.17.19" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@eslint/eslintrc@npm:^1.0.5": version: 1.3.0 resolution: "@eslint/eslintrc@npm:1.3.0" @@ -7162,6 +7492,15 @@ __metadata: languageName: node linkType: hard +"@jest/schemas@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/schemas@npm:29.4.3" + dependencies: + "@sinclair/typebox": ^0.25.16 + checksum: ac754e245c19dc39e10ebd41dce09040214c96a4cd8efa143b82148e383e45128f24599195ab4f01433adae4ccfbe2db6574c90db2862ccd8551a86704b5bebd + languageName: node + linkType: hard + "@jest/source-map@npm:^28.1.2": version: 28.1.2 resolution: "@jest/source-map@npm:28.1.2" @@ -7827,12 +8166,12 @@ __metadata: linkType: hard "@jridgewell/trace-mapping@npm:^0.3.13": - version: 0.3.15 - resolution: "@jridgewell/trace-mapping@npm:0.3.15" + version: 0.3.18 + resolution: "@jridgewell/trace-mapping@npm:0.3.18" dependencies: - "@jridgewell/resolve-uri": ^3.0.3 - "@jridgewell/sourcemap-codec": ^1.4.10 - checksum: 38917e9c2b014d469a9f51c016ed506acbe44dd16ec2f6f99b553ebf3764d22abadbf992f2367b6d2b3511f3eae8ed3a8963f6c1030093fda23efd35ecab2bae + "@jridgewell/resolve-uri": 3.1.0 + "@jridgewell/sourcemap-codec": 1.4.14 + checksum: 0572669f855260808c16fe8f78f5f1b4356463b11d3f2c7c0b5580c8ba1cbf4ae53efe9f627595830856e57dbac2325ac17eb0c3dd0ec42102e6f227cc289c02 languageName: node linkType: hard @@ -8181,18 +8520,6 @@ __metadata: languageName: node linkType: hard -"@mdx-js/loader@npm:^2.0.0-next.9": - version: 2.1.1 - resolution: "@mdx-js/loader@npm:2.1.1" - dependencies: - "@mdx-js/mdx": ^2.0.0 - source-map: ^0.7.0 - peerDependencies: - webpack: ">=4" - checksum: 0834bc33e86d274a9ef55b8c5d3ad96c498779361f7daf4bc8f7e18ba3da6fbddf9ac0a2f4eb5854008daf8618932677bb4a8e0bb63dce8f09047324b917585e - languageName: node - linkType: hard - "@mdx-js/mdx@npm:^1.6.22": version: 1.6.22 resolution: "@mdx-js/mdx@npm:1.6.22" @@ -8220,32 +8547,7 @@ __metadata: languageName: node linkType: hard -"@mdx-js/mdx@npm:^2.0.0": - version: 2.1.5 - resolution: "@mdx-js/mdx@npm:2.1.5" - dependencies: - "@types/estree-jsx": ^1.0.0 - "@types/mdx": ^2.0.0 - estree-util-build-jsx: ^2.0.0 - estree-util-is-identifier-name: ^2.0.0 - estree-util-to-js: ^1.1.0 - estree-walker: ^3.0.0 - hast-util-to-estree: ^2.0.0 - markdown-extensions: ^1.0.0 - periscopic: ^3.0.0 - remark-mdx: ^2.0.0 - remark-parse: ^10.0.0 - remark-rehype: ^10.0.0 - unified: ^10.0.0 - unist-util-position-from-estree: ^1.0.0 - unist-util-stringify-position: ^3.0.0 - unist-util-visit: ^4.0.0 - vfile: ^5.0.0 - checksum: 51b8b40aafbbeee618fd289ef6e0311e28e2598c514016aefb094237fa9cdf3e1c1407267a08dc7f8da9673de354b5b946f3ceb7ba5735bdf869d18c2a49117d - languageName: node - linkType: hard - -"@mdx-js/react@npm:^1.6.16, @mdx-js/react@npm:^1.6.22": +"@mdx-js/react@npm:^1.6.22": version: 1.6.22 resolution: "@mdx-js/react@npm:1.6.22" peerDependencies: @@ -10076,33 +10378,6 @@ __metadata: languageName: node linkType: hard -"@reach/skip-nav@npm:^0.11.2": - version: 0.11.2 - resolution: "@reach/skip-nav@npm:0.11.2" - dependencies: - "@reach/utils": 0.11.2 - tslib: ^2.0.0 - peerDependencies: - react: ^16.8.0 - react-dom: ^16.8.0 - checksum: 7c28dce5eeaaf51bbb1ec5a0302f83a423c4e6819bcd1051316250069c19c4924c0d8a712e0ee5bfd9420ddfdb17b0e07e514934c268e1c0758dedfff93ef2ec - languageName: node - linkType: hard - -"@reach/utils@npm:0.11.2": - version: 0.11.2 - resolution: "@reach/utils@npm:0.11.2" - dependencies: - "@types/warning": ^3.0.0 - tslib: ^2.0.0 - warning: ^4.0.3 - peerDependencies: - react: ^16.8.0 - react-dom: ^16.8.0 - checksum: affb4dca8285965d3560bcd516a13c99afb047041f119f8bfdedab4dd64b03b969275d9abaf22a64e1e24a1f8675d148df31cddae1e74008407daa8944343d53 - languageName: node - linkType: hard - "@reach/utils@npm:0.16.0": version: 0.16.0 resolution: "@reach/utils@npm:0.16.0" @@ -10529,16 +10804,16 @@ __metadata: linkType: hard "@sinclair/typebox@npm:^0.24.1": - version: 0.24.19 - resolution: "@sinclair/typebox@npm:0.24.19" - checksum: dff2a3ebe9accc83e95fe3152f94de6ba5e4aba6833fba5436c334ba7e377b992f86228fd6f285cd6890d6419245dc89e06e17b74228289308c46224ab7ebd68 + version: 0.24.51 + resolution: "@sinclair/typebox@npm:0.24.51" + checksum: fd0d855e748ef767eb19da1a60ed0ab928e91e0f358c1dd198d600762c0015440b15755e96d1176e2a0db7e09c6a64ed487828ee10dd0c3e22f61eb09c478cd0 languageName: node linkType: hard -"@sindresorhus/is@npm:^0.7.0": - version: 0.7.0 - resolution: "@sindresorhus/is@npm:0.7.0" - checksum: decc50f6fe80b75c981bcff0a585c05259f5e04424a46a653ac9a7e065194145c463ca81001e3a229bd203f59474afadb5b1fa0af5507723f87f2dd45bd3897c +"@sinclair/typebox@npm:^0.25.16": + version: 0.25.24 + resolution: "@sinclair/typebox@npm:0.25.24" + checksum: 10219c58f40b8414c50b483b0550445e9710d4fe7b2c4dccb9b66533dd90ba8e024acc776026cebe81e87f06fa24b07fdd7bc30dd277eb9cc386ec50151a3026 languageName: node linkType: hard @@ -10550,11 +10825,11 @@ __metadata: linkType: hard "@sinonjs/commons@npm:^1.7.0": - version: 1.8.3 - resolution: "@sinonjs/commons@npm:1.8.3" + version: 1.8.6 + resolution: "@sinonjs/commons@npm:1.8.6" dependencies: type-detect: 4.0.8 - checksum: 6159726db5ce6bf9f2297f8427f7ca5b3dff45b31e5cee23496f1fa6ef0bb4eab878b23fb2c5e6446381f6a66aba4968ef2fc255c1180d753d4b8c271636a2e5 + checksum: 7d3f8c1e85f30cd4e83594fc19b7a657f14d49eb8d95a30095631ce15e906c869e0eff96c5b93dffea7490c00418b07f54582ba49c6560feb2a8c34c0b16832d languageName: node linkType: hard @@ -12686,15 +12961,6 @@ __metadata: languageName: node linkType: hard -"@types/acorn@npm:^4.0.0": - version: 4.0.6 - resolution: "@types/acorn@npm:4.0.6" - dependencies: - "@types/estree": "*" - checksum: 60e1fd28af18d6cb54a93a7231c7c18774a9a8739c9b179e9e8750dca631e10cbef2d82b02830ea3f557b1d121e6406441e9e1250bd492dc81d4b3456e76e4d4 - languageName: node - linkType: hard - "@types/aria-query@npm:^4.2.0": version: 4.2.2 resolution: "@types/aria-query@npm:4.2.2" @@ -12710,15 +12976,15 @@ __metadata: linkType: hard "@types/babel__core@npm:^7.1.14": - version: 7.1.19 - resolution: "@types/babel__core@npm:7.1.19" + version: 7.20.0 + resolution: "@types/babel__core@npm:7.20.0" dependencies: - "@babel/parser": ^7.1.0 - "@babel/types": ^7.0.0 + "@babel/parser": ^7.20.7 + "@babel/types": ^7.20.7 "@types/babel__generator": "*" "@types/babel__template": "*" "@types/babel__traverse": "*" - checksum: 8c9fa87a1c2224cbec251683a58bebb0d74c497118034166aaa0491a4e2627998a6621fc71f8a60ffd27d9c0c52097defedf7637adc6618d0331c15adb302338 + checksum: 49b601a0a7637f1f387442c8156bd086cfd10ff4b82b0e1994e73a6396643b5435366fb33d6b604eade8467cca594ef97adcbc412aede90bb112ebe88d0ad6df languageName: node linkType: hard @@ -12742,11 +13008,11 @@ __metadata: linkType: hard "@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6": - version: 7.14.2 - resolution: "@types/babel__traverse@npm:7.14.2" + version: 7.18.5 + resolution: "@types/babel__traverse@npm:7.18.5" dependencies: "@babel/types": ^7.3.0 - checksum: a797ea09c72307569e3ee08aa3900ca744ce3091114084f2dc59b67a45ee7d01df7865252790dbfa787a7915ce892cdc820c9b920f3683292765fc656b08dc63 + checksum: b9e7f39eb84626cc8f83ebf75a621d47f04b53cb085a3ea738a9633d57cf65208e503b1830db91aa5e297bc2ba761681ac0b0cbfb7a3d56afcfb2296212668ef languageName: node linkType: hard @@ -12797,6 +13063,22 @@ __metadata: languageName: node linkType: hard +"@types/chai-subset@npm:^1.3.3": + version: 1.3.3 + resolution: "@types/chai-subset@npm:1.3.3" + dependencies: + "@types/chai": "*" + checksum: 4481da7345022995f5a105e6683744f7203d2c3d19cfe88d8e17274d045722948abf55e0adfd97709e0f043dade37a4d4e98cd4c660e2e8a14f23e6ecf79418f + languageName: node + linkType: hard + +"@types/chai@npm:*, @types/chai@npm:^4.3.5": + version: 4.3.5 + resolution: "@types/chai@npm:4.3.5" + checksum: c8f26a88c6b5b53a3275c7f5ff8f107028e3cbb9ff26795fff5f3d9dea07106a54ce9e2dce5e40347f7c4cc35657900aaf0c83934a25a1ae12e61e0f5516e431 + languageName: node + linkType: hard + "@types/connect@npm:*, @types/connect@npm:^3.4.33": version: 3.4.35 resolution: "@types/connect@npm:3.4.35" @@ -12943,24 +13225,6 @@ __metadata: languageName: node linkType: hard -"@types/estree-jsx@npm:^0.0.1": - version: 0.0.1 - resolution: "@types/estree-jsx@npm:0.0.1" - dependencies: - "@types/estree": "*" - checksum: aed43dfcbcc9c881f571618847661cd69026680466657d1443c12f51d835c7a8ccf5109a800e56c8fc33ae093f096aa937e4656ce3eb71c4f914334c389cf7be - languageName: node - linkType: hard - -"@types/estree-jsx@npm:^1.0.0": - version: 1.0.0 - resolution: "@types/estree-jsx@npm:1.0.0" - dependencies: - "@types/estree": "*" - checksum: 851d7afb63a89fb9ce7822563930660433f29106d72db279ce9c99f791ec996ef21b05adc6f545325cd1745b3041cc86422f0ffa39a06734305b90cfbc871765 - languageName: node - linkType: hard - "@types/estree@npm:*, @types/estree@npm:^0.0.51": version: 0.0.51 resolution: "@types/estree@npm:0.0.51" @@ -12975,20 +13239,6 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:^0.0.46": - version: 0.0.46 - resolution: "@types/estree@npm:0.0.46" - checksum: 620f7549c8cf99fe1c91a943a42ae2684c18f6007dc1bd6a439a2bf3204022ab746ffb3be5244c70d43a822beeb3c948216be1a69cb25e79005daeca4ebe5722 - languageName: node - linkType: hard - -"@types/estree@npm:^0.0.50": - version: 0.0.50 - resolution: "@types/estree@npm:0.0.50" - checksum: 9a2b6a4a8c117f34d08fbda5e8f69b1dfb109f7d149b60b00fd7a9fb6ac545c078bc590aa4ec2f0a256d680cf72c88b3b28b60c326ee38a7bc8ee1ee95624922 - languageName: node - linkType: hard - "@types/estree@npm:^1.0.0": version: 1.0.1 resolution: "@types/estree@npm:1.0.1" @@ -13055,7 +13305,7 @@ __metadata: languageName: node linkType: hard -"@types/graceful-fs@npm:^4.1.2, @types/graceful-fs@npm:^4.1.3": +"@types/graceful-fs@npm:^4.1.2": version: 4.1.5 resolution: "@types/graceful-fs@npm:4.1.5" dependencies: @@ -13064,6 +13314,15 @@ __metadata: languageName: node linkType: hard +"@types/graceful-fs@npm:^4.1.3": + version: 4.1.6 + resolution: "@types/graceful-fs@npm:4.1.6" + dependencies: + "@types/node": "*" + checksum: c3070ccdc9ca0f40df747bced1c96c71a61992d6f7c767e8fd24bb6a3c2de26e8b84135ede000b7e79db530a23e7e88dcd9db60eee6395d0f4ce1dae91369dd4 + languageName: node + linkType: hard + "@types/gtag.js@npm:^0.0.10": version: 0.0.10 resolution: "@types/gtag.js@npm:0.0.10" @@ -13152,16 +13411,6 @@ __metadata: languageName: node linkType: hard -"@types/jest@npm:^28.1.7": - version: 28.1.7 - resolution: "@types/jest@npm:28.1.7" - dependencies: - expect: ^28.0.0 - pretty-format: ^28.0.0 - checksum: 17c9bf9667cd4f062eba5aa9eaea248927bf6479da1cc009e0b7d26d501f460f068dd23eddb67d2602264e915a30b63ae7c9cbb516723ffd18589f6f9d267d43 - languageName: node - linkType: hard - "@types/js-levenshtein@npm:^1.1.1": version: 1.1.1 resolution: "@types/js-levenshtein@npm:1.1.1" @@ -13169,17 +13418,6 @@ __metadata: languageName: node linkType: hard -"@types/jsdom@npm:^16.2.4": - version: 16.2.15 - resolution: "@types/jsdom@npm:16.2.15" - dependencies: - "@types/node": "*" - "@types/parse5": ^6.0.3 - "@types/tough-cookie": "*" - checksum: e038335321bef42ebf220aaf597e186e2eec8de6107ce7a70de1c046a84c1fbb42d454e195a20383a6870b18c7ef6fa6b73812a626f88a4a2ef1f711d2e2e13c - languageName: node - linkType: hard - "@types/jsforce@npm:^1.11.0": version: 1.11.0 resolution: "@types/jsforce@npm:1.11.0" @@ -13280,13 +13518,6 @@ __metadata: languageName: node linkType: hard -"@types/mdx@npm:^2.0.0": - version: 2.0.1 - resolution: "@types/mdx@npm:2.0.1" - checksum: 521ee9f976af45859a4dd60b159e1cc09109de49ec5570fe70f34cddb0a7b5472b87c1bea743429270398207a997821dec34fd7bd63cbc2a1e5f2f6c701dd1c2 - languageName: node - linkType: hard - "@types/memory-cache@npm:^0.2.2": version: 0.2.2 resolution: "@types/memory-cache@npm:0.2.2" @@ -13408,7 +13639,7 @@ __metadata: languageName: node linkType: hard -"@types/parse5@npm:^6.0.0, @types/parse5@npm:^6.0.3": +"@types/parse5@npm:^6.0.0": version: 6.0.3 resolution: "@types/parse5@npm:6.0.3" checksum: ddb59ee4144af5dfcc508a8dcf32f37879d11e12559561e65788756b95b33e6f03ea027d88e1f5408f9b7bfb656bf630ace31a2169edf44151daaf8dd58df1b7 @@ -13425,9 +13656,9 @@ __metadata: linkType: hard "@types/prettier@npm:^2.1.5": - version: 2.6.3 - resolution: "@types/prettier@npm:2.6.3" - checksum: e1836699ca189fff6d2a73dc22e028b6a6f693ed1180d5998ac29fa197caf8f85aa92cb38db642e4a370e616b451cb5722ad2395dab11c78e025a1455f37d1f0 + version: 2.7.2 + resolution: "@types/prettier@npm:2.7.2" + checksum: b47d76a5252265f8d25dd2fe2a5a61dc43ba0e6a96ffdd00c594cb4fd74c1982c2e346497e3472805d97915407a09423804cc2110a0b8e1b22cffcab246479b7 languageName: node linkType: hard @@ -13652,13 +13883,6 @@ __metadata: languageName: node linkType: hard -"@types/tough-cookie@npm:*": - version: 4.0.2 - resolution: "@types/tough-cookie@npm:4.0.2" - checksum: e055556ffdaa39ad85ede0af192c93f93f986f4bd9e9426efdc2948e3e2632db3a4a584d4937dbf6d7620527419bc99e6182d3daf2b08685e710f2eda5291905 - languageName: node - linkType: hard - "@types/trusted-types@npm:*, @types/trusted-types@npm:^2.0.2": version: 2.0.2 resolution: "@types/trusted-types@npm:2.0.2" @@ -13703,13 +13927,6 @@ __metadata: languageName: node linkType: hard -"@types/warning@npm:^3.0.0": - version: 3.0.0 - resolution: "@types/warning@npm:3.0.0" - checksum: 120dcf90600d583c68a60872200061eab9318ae15ea898581f8e9a6dc71b7941095dd81d8324e36d2a6006e5e12b6fc1cf8eda00cc514ee12bb39a912cc4e040 - languageName: node - linkType: hard - "@types/webidl-conversions@npm:*": version: 6.1.1 resolution: "@types/webidl-conversions@npm:6.1.1" @@ -13794,11 +14011,11 @@ __metadata: linkType: hard "@types/yargs@npm:^17.0.8": - version: 17.0.10 - resolution: "@types/yargs@npm:17.0.10" + version: 17.0.24 + resolution: "@types/yargs@npm:17.0.24" dependencies: "@types/yargs-parser": "*" - checksum: f0673cbfc08e17239dc58952a88350d6c4db04a027a28a06fbad27d87b670e909f9cd9e66f9c64cebdd5071d1096261e33454a55868395f125297e5c50992ca8 + checksum: 5f3ac4dc4f6e211c1627340160fbe2fd247ceba002190da6cf9155af1798450501d628c9165a183f30a224fc68fa5e700490d740ff4c73e2cdef95bc4e8ba7bf languageName: node linkType: hard @@ -14155,6 +14372,60 @@ __metadata: languageName: node linkType: hard +"@vitest/expect@npm:0.31.1": + version: 0.31.1 + resolution: "@vitest/expect@npm:0.31.1" + dependencies: + "@vitest/spy": 0.31.1 + "@vitest/utils": 0.31.1 + chai: ^4.3.7 + checksum: 0d1e135ae753d913231eae830da00ee42afca53d354898fb43f97e82398dcf17298c02e9989dd6b19b9b2909989248ef76d203d63f6af6f9159dc96959ea654b + languageName: node + linkType: hard + +"@vitest/runner@npm:0.31.1": + version: 0.31.1 + resolution: "@vitest/runner@npm:0.31.1" + dependencies: + "@vitest/utils": 0.31.1 + concordance: ^5.0.4 + p-limit: ^4.0.0 + pathe: ^1.1.0 + checksum: cc8702e21b799d5e941409cb2afe6d0e576b4f3ac99df4a1393a8cd11b57f6b0b06e756cc24e2739812d095fbfd0824e22e861dbd6a71769ca387d485ade6fb5 + languageName: node + linkType: hard + +"@vitest/snapshot@npm:0.31.1": + version: 0.31.1 + resolution: "@vitest/snapshot@npm:0.31.1" + dependencies: + magic-string: ^0.30.0 + pathe: ^1.1.0 + pretty-format: ^27.5.1 + checksum: de05fa9136864f26f0804baf3ae8068f67de28015f29047329c84e67fb33be7305c9e52661b016e834d30f4081c136b3b6d8d4054c024a5d52b22a7f90fc4be0 + languageName: node + linkType: hard + +"@vitest/spy@npm:0.31.1": + version: 0.31.1 + resolution: "@vitest/spy@npm:0.31.1" + dependencies: + tinyspy: ^2.1.0 + checksum: 8b06cf25fcc028c16106ec82f4ceb84d6dfa04d06f651bca4738ce2b99796d1fc4e0c10319767240755eff8ede2bff9d31d5a901fe92828d319c65001581137b + languageName: node + linkType: hard + +"@vitest/utils@npm:0.31.1": + version: 0.31.1 + resolution: "@vitest/utils@npm:0.31.1" + dependencies: + concordance: ^5.0.4 + loupe: ^2.3.6 + pretty-format: ^27.5.1 + checksum: 58016c185455e3814632cb77e37368c846bde5e342f8b4a66fa229bde64f455ca39abebc9c12e2483696ee38bc17b3c4300379f7a3b18d1087f24f474448a8d8 + languageName: node + linkType: hard + "@wagmi/core@npm:^0.5.4": version: 0.5.4 resolution: "@wagmi/core@npm:0.5.4" @@ -14822,13 +15093,6 @@ __metadata: languageName: unknown linkType: soft -"abab@npm:^2.0.5": - version: 2.0.5 - resolution: "abab@npm:2.0.5" - checksum: 0ec951b46d5418c2c2f923021ec193eaebdb4e802ffd5506286781b454be722a13a8430f98085cd3e204918401d9130ec6cc8f5ae19be315b3a0e857d83196e1 - languageName: node - linkType: hard - "abab@npm:^2.0.6": version: 2.0.6 resolution: "abab@npm:2.0.6" @@ -14885,16 +15149,6 @@ __metadata: languageName: node linkType: hard -"acorn-globals@npm:^6.0.0": - version: 6.0.0 - resolution: "acorn-globals@npm:6.0.0" - dependencies: - acorn: ^7.1.1 - acorn-walk: ^7.1.1 - checksum: 72d95e5b5e585f9acd019b993ab8bbba68bb3cbc9d9b5c1ebb3c2f1fe5981f11deababfb4949f48e6262f9c57878837f5958c0cca396f81023814680ca878042 - languageName: node - linkType: hard - "acorn-import-assertions@npm:^1.7.6": version: 1.8.0 resolution: "acorn-import-assertions@npm:1.8.0" @@ -14904,7 +15158,7 @@ __metadata: languageName: node linkType: hard -"acorn-jsx@npm:^5.0.0, acorn-jsx@npm:^5.3.1, acorn-jsx@npm:^5.3.2": +"acorn-jsx@npm:^5.3.1, acorn-jsx@npm:^5.3.2": version: 5.3.2 resolution: "acorn-jsx@npm:5.3.2" peerDependencies: @@ -14924,14 +15178,14 @@ __metadata: languageName: node linkType: hard -"acorn-walk@npm:^7.0.0, acorn-walk@npm:^7.1.1, acorn-walk@npm:^7.2.0": +"acorn-walk@npm:^7.0.0, acorn-walk@npm:^7.2.0": version: 7.2.0 resolution: "acorn-walk@npm:7.2.0" checksum: 9252158a79b9d92f1bc0dd6acc0fcfb87a67339e84bcc301bb33d6078936d27e35d606b4d35626d2962cd43c256d6f27717e70cbe15c04fff999ab0b2260b21f languageName: node linkType: hard -"acorn-walk@npm:^8.0.0, acorn-walk@npm:^8.1.1": +"acorn-walk@npm:^8.0.0, acorn-walk@npm:^8.1.1, acorn-walk@npm:^8.2.0": version: 8.2.0 resolution: "acorn-walk@npm:8.2.0" checksum: 1715e76c01dd7b2d4ca472f9c58968516a4899378a63ad5b6c2d668bba8da21a71976c14ec5f5b75f887b6317c4ae0b897ab141c831d741dc76024d8745f1ad1 @@ -14947,7 +15201,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^7.0.0, acorn@npm:^7.1.1, acorn@npm:^7.4.1": +"acorn@npm:^7.0.0, acorn@npm:^7.4.1": version: 7.4.1 resolution: "acorn@npm:7.4.1" bin: @@ -14956,7 +15210,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.0.0, acorn@npm:^8.0.4, acorn@npm:^8.4.1": +"acorn@npm:^8.0.4, acorn@npm:^8.4.1": version: 8.7.0 resolution: "acorn@npm:8.7.0" bin: @@ -14983,6 +15237,15 @@ __metadata: languageName: node linkType: hard +"acorn@npm:^8.8.2": + version: 8.8.2 + resolution: "acorn@npm:8.8.2" + bin: + acorn: bin/acorn + checksum: f790b99a1bf63ef160c967e23c46feea7787e531292bb827126334612c234ed489a0dc2c7ba33156416f0ffa8d25bf2b0fdb7f35c2ba60eb3e960572bece4001 + languageName: node + linkType: hard + "address@npm:^1.0.1": version: 1.2.0 resolution: "address@npm:1.2.0" @@ -15175,15 +15438,6 @@ __metadata: languageName: node linkType: hard -"ansi-escapes@npm:^5.0.0": - version: 5.0.0 - resolution: "ansi-escapes@npm:5.0.0" - dependencies: - type-fest: ^1.0.2 - checksum: d4b5eb8207df38367945f5dd2ef41e08c28edc192dc766ef18af6b53736682f49d8bfcfa4e4d6ecbc2e2f97c258fda084fb29a9e43b69170b71090f771afccac - languageName: node - linkType: hard - "ansi-html-community@npm:0.0.8, ansi-html-community@npm:^0.0.8": version: 0.0.8 resolution: "ansi-html-community@npm:0.0.8" @@ -15228,7 +15482,7 @@ __metadata: languageName: node linkType: hard -"ansi-styles@npm:^3.1.0, ansi-styles@npm:^3.2.0, ansi-styles@npm:^3.2.1": +"ansi-styles@npm:^3.2.0, ansi-styles@npm:^3.2.1": version: 3.2.1 resolution: "ansi-styles@npm:3.2.1" dependencies: @@ -15340,22 +15594,6 @@ __metadata: languageName: node linkType: hard -"arch@npm:^2.1.0": - version: 2.2.0 - resolution: "arch@npm:2.2.0" - checksum: e21b7635029fe8e9cdd5a026f9a6c659103e63fff423834323cdf836a1bb240a72d0c39ca8c470f84643385cf581bd8eda2cad8bf493e27e54bd9783abe9101f - languageName: node - linkType: hard - -"archive-type@npm:^4.0.0": - version: 4.0.0 - resolution: "archive-type@npm:4.0.0" - dependencies: - file-type: ^4.2.0 - checksum: 271f0d118294dd0305831f0700b635e8a9475f97693212d548eee48017f917e14349a25ad578f8e13486ba4b7cde1972d53e613d980e8738cfccea5fc626c76f - languageName: node - linkType: hard - "are-we-there-yet@npm:^2.0.0": version: 2.0.0 resolution: "are-we-there-yet@npm:2.0.0" @@ -15376,13 +15614,6 @@ __metadata: languageName: node linkType: hard -"arg@npm:1.0.0": - version: 1.0.0 - resolution: "arg@npm:1.0.0" - checksum: 0a35939e3cb59d4f18207884563e00b0f71647becccec932348e9c5bdecfe6ca41b2ed854bbb267a2e87f97f605ed3ca936f2f0b3313bf88be6d7cdbb2d0a4b1 - languageName: node - linkType: hard - "arg@npm:4.1.0": version: 4.1.0 resolution: "arg@npm:4.1.0" @@ -15730,6 +15961,13 @@ __metadata: languageName: node linkType: hard +"assertion-error@npm:^1.1.0": + version: 1.1.0 + resolution: "assertion-error@npm:1.1.0" + checksum: fd9429d3a3d4fd61782eb3962ae76b6d08aa7383123fca0596020013b3ebd6647891a85b05ce821c47d1471ed1271f00b0545cf6a4326cf2fc91efcc3b0fbecf + languageName: node + linkType: hard + "assign-symbols@npm:^1.0.0": version: 1.0.0 resolution: "assign-symbols@npm:1.0.0" @@ -15760,15 +15998,6 @@ __metadata: languageName: node linkType: hard -"astring@npm:^1.8.0": - version: 1.8.4 - resolution: "astring@npm:1.8.4" - bin: - astring: bin/astring - checksum: bc0b98087350c4a0c8a510d491d648cf8b299ec904629d5e0f5ae8d2ccc515cd27475327bb9729c7e92f4a4873adcd05cef15379d0f6f7293f1320319f0d24f0 - languageName: node - linkType: hard - "async-each@npm:^1.0.1": version: 1.0.3 resolution: "async-each@npm:1.0.3" @@ -16427,16 +16656,6 @@ __metadata: languageName: node linkType: hard -"bl@npm:^1.0.0": - version: 1.2.3 - resolution: "bl@npm:1.2.3" - dependencies: - readable-stream: ^2.3.5 - safe-buffer: ^5.1.1 - checksum: 123f097989ce2fa9087ce761cd41176aaaec864e28f7dfe5c7dab8ae16d66d9844f849c3ad688eb357e3c5e4f49b573e3c0780bb8bc937206735a3b6f8569a5f - languageName: node - linkType: hard - "bl@npm:^4.1.0": version: 4.1.0 resolution: "bl@npm:4.1.0" @@ -16482,6 +16701,13 @@ __metadata: languageName: node linkType: hard +"blueimp-md5@npm:^2.10.0": + version: 2.19.0 + resolution: "blueimp-md5@npm:2.19.0" + checksum: 28095dcbd2c67152a2938006e8d7c74c3406ba6556071298f872505432feb2c13241b0476644160ee0a5220383ba94cb8ccdac0053b51f68d168728f9c382530 + languageName: node + linkType: hard + "bmp-js@npm:^0.1.0": version: 0.1.0 resolution: "bmp-js@npm:0.1.0" @@ -16688,13 +16914,6 @@ __metadata: languageName: node linkType: hard -"browser-process-hrtime@npm:^1.0.0": - version: 1.0.0 - resolution: "browser-process-hrtime@npm:1.0.0" - checksum: e30f868cdb770b1201afb714ad1575dd86366b6e861900884665fb627109b3cc757c40067d3bfee1ff2a29c835257ea30725a8018a9afd02ac1c24b408b1e45f - languageName: node - linkType: hard - "browserify-aes@npm:^1.0.0, browserify-aes@npm:^1.0.4, browserify-aes@npm:^1.2.0": version: 1.2.0 resolution: "browserify-aes@npm:1.2.0" @@ -16851,15 +17070,6 @@ __metadata: languageName: node linkType: hard -"bs-logger@npm:0.x": - version: 0.2.6 - resolution: "bs-logger@npm:0.2.6" - dependencies: - fast-json-stable-stringify: 2.x - checksum: d34bdaf68c64bd099ab97c3ea608c9ae7d3f5faa1178b3f3f345acd94e852e608b2d4f9103fb2e503f5e69780e98293df41691b84be909b41cf5045374d54606 - languageName: node - linkType: hard - "bs58@npm:^4.0.0, bs58@npm:^4.0.1": version: 4.0.1 resolution: "bs58@npm:4.0.1" @@ -16922,13 +17132,6 @@ __metadata: languageName: node linkType: hard -"buffer-crc32@npm:~0.2.3": - version: 0.2.13 - resolution: "buffer-crc32@npm:0.2.13" - checksum: 06252347ae6daca3453b94e4b2f1d3754a3b146a111d81c68924c22d91889a40623264e95e67955b1cb4a68cbedf317abeabb5140a9766ed248973096db5ce1c - languageName: node - linkType: hard - "buffer-equal-constant-time@npm:1.0.1": version: 1.0.1 resolution: "buffer-equal-constant-time@npm:1.0.1" @@ -17006,7 +17209,7 @@ __metadata: languageName: node linkType: hard -"buffer@npm:^5.0.5, buffer@npm:^5.2.0, buffer@npm:^5.2.1, buffer@npm:^5.4.3, buffer@npm:^5.5.0, buffer@npm:^5.6.0": +"buffer@npm:^5.0.5, buffer@npm:^5.2.0, buffer@npm:^5.4.3, buffer@npm:^5.5.0, buffer@npm:^5.6.0": version: 5.7.1 resolution: "buffer@npm:5.7.1" dependencies: @@ -17071,6 +17274,28 @@ __metadata: languageName: node linkType: hard +"c8@npm:^7.13.0": + version: 7.13.0 + resolution: "c8@npm:7.13.0" + dependencies: + "@bcoe/v8-coverage": ^0.2.3 + "@istanbuljs/schema": ^0.1.3 + find-up: ^5.0.0 + foreground-child: ^2.0.0 + istanbul-lib-coverage: ^3.2.0 + istanbul-lib-report: ^3.0.0 + istanbul-reports: ^3.1.4 + rimraf: ^3.0.2 + test-exclude: ^6.0.0 + v8-to-istanbul: ^9.0.0 + yargs: ^16.2.0 + yargs-parser: ^20.2.9 + bin: + c8: bin/c8.js + checksum: 491abf4cf3097cdcfd24dbac49162f1383861c22c77fdd9280bcd38240e1e07d2c6a59da5d4df59a61a8204e2fc297d31fd526e495faf8d2f20dcc12a37b144c + languageName: node + linkType: hard + "c8@npm:^7.6.0": version: 7.11.3 resolution: "c8@npm:7.11.3" @@ -17093,6 +17318,13 @@ __metadata: languageName: node linkType: hard +"cac@npm:^6.7.14": + version: 6.7.14 + resolution: "cac@npm:6.7.14" + checksum: 45a2496a9443abbe7f52a49b22fbe51b1905eff46e03fd5e6c98e3f85077be3f8949685a1849b1a9cd2bc3e5567dfebcf64f01ce01847baf918f1b37c839791a + languageName: node + linkType: hard + "cacache@npm:^12.0.2": version: 12.0.4 resolution: "cacache@npm:12.0.4" @@ -17192,21 +17424,6 @@ __metadata: languageName: node linkType: hard -"cacheable-request@npm:^2.1.1": - version: 2.1.4 - resolution: "cacheable-request@npm:2.1.4" - dependencies: - clone-response: 1.0.2 - get-stream: 3.0.0 - http-cache-semantics: 3.8.1 - keyv: 3.0.0 - lowercase-keys: 1.0.0 - normalize-url: 2.0.1 - responselike: 1.0.2 - checksum: 69c684cb3645f75af094e3ef6e7959ca5edff33d70737498de1a068d2f719a12786efdd82fe1e2254a1f332bb88cce088273bd78fad3e57cdef5034f3ded9432 - languageName: node - linkType: hard - "cacheable-request@npm:^7.0.2": version: 7.0.2 resolution: "cacheable-request@npm:7.0.2" @@ -17231,23 +17448,21 @@ __metadata: "@playwright/test": ^1.31.2 "@snaplet/copycat": ^0.3.0 "@types/dompurify": ^2.4.0 - "@types/jest": ^28.1.7 + c8: ^7.13.0 city-timezones: ^1.2.1 dotenv-checker: ^1.1.5 eslint: ^8.34.0 - husky: ^8.0.1 - jest: ^28.1.0 - jest-environment-jsdom: ^28.1.3 - jest-mock-extended: ^2.0.7 - jest-watch-select-projects: ^2.0.0 - jest-watch-typeahead: ^2.0.0 + husky: ^8.0.0 + jest-diff: ^29.5.0 + jsdom: ^22.0.0 lint-staged: ^12.5.0 lucide-react: ^0.171.0 prettier: ^2.8.6 - ts-jest: ^28.0.8 tsc-absolute: ^1.0.0 turbo: ^1.8.3 typescript: ^4.9.4 + vitest: ^0.31.1 + vitest-mock-extended: ^1.1.3 languageName: unknown linkType: soft @@ -17423,18 +17638,22 @@ __metadata: languageName: node linkType: hard -"chalk@npm:2.3.0": - version: 2.3.0 - resolution: "chalk@npm:2.3.0" +"chai@npm:^4.3.7": + version: 4.3.7 + resolution: "chai@npm:4.3.7" dependencies: - ansi-styles: ^3.1.0 - escape-string-regexp: ^1.0.5 - supports-color: ^4.0.0 - checksum: d348fc0f4f8d27c068a6ac492e708fa35a75e273d5f0004da61ea694e958981658c96693790f4d23e7b3712f9e3e4ca0988136cb0403876de5459a4c0d13078f + assertion-error: ^1.1.0 + check-error: ^1.0.2 + deep-eql: ^4.1.2 + get-func-name: ^2.0.0 + loupe: ^2.3.1 + pathval: ^1.1.1 + type-detect: ^4.0.5 + checksum: 0bba7d267848015246a66995f044ce3f0ebc35e530da3cbdf171db744e14cbe301ab913a8d07caf7952b430257ccbb1a4a983c570a7c5748dc537897e5131f7c languageName: node linkType: hard -"chalk@npm:3.0.0, chalk@npm:^3.0.0": +"chalk@npm:3.0.0": version: 3.0.0 resolution: "chalk@npm:3.0.0" dependencies: @@ -17519,13 +17738,6 @@ __metadata: languageName: node linkType: hard -"char-regex@npm:^2.0.0": - version: 2.0.1 - resolution: "char-regex@npm:2.0.1" - checksum: 8524c03fd7e58381dccf33babe885fe62731ae20755528b19c39945b8203479184f35247210dc9eeeef279cdbdd6511cd3182e0e1db8e4549bf2586470b7c204 - languageName: node - linkType: hard - "character-entities-html4@npm:^2.0.0": version: 2.1.0 resolution: "character-entities-html4@npm:2.1.0" @@ -17568,13 +17780,6 @@ __metadata: languageName: node linkType: hard -"character-reference-invalid@npm:^2.0.0": - version: 2.0.1 - resolution: "character-reference-invalid@npm:2.0.1" - checksum: 98d3b1a52ae510b7329e6ee7f6210df14f1e318c5415975d4c9e7ee0ef4c07875d47c6e74230c64551f12f556b4a8ccc24d9f3691a2aa197019e72a95e9297ee - languageName: node - linkType: hard - "chardet@npm:^0.7.0": version: 0.7.0 resolution: "chardet@npm:0.7.0" @@ -17596,6 +17801,13 @@ __metadata: languageName: node linkType: hard +"check-error@npm:^1.0.2": + version: 1.0.2 + resolution: "check-error@npm:1.0.2" + checksum: d9d106504404b8addd1ee3f63f8c0eaa7cd962a1a28eb9c519b1c4a1dc7098be38007fc0060f045ee00f075fbb7a2a4f42abcf61d68323677e11ab98dc16042e + languageName: node + linkType: hard + "check-more-types@npm:2.24.0": version: 2.24.0 resolution: "check-more-types@npm:2.24.0" @@ -17764,7 +17976,7 @@ __metadata: languageName: node linkType: hard -"classnames@npm:^2.2.6, classnames@npm:^2.3.1": +"classnames@npm:^2.3.1": version: 2.3.1 resolution: "classnames@npm:2.3.1" checksum: 14db8889d56c267a591f08b0834989fe542d47fac659af5a539e110cc4266694e8de86e4e3bbd271157dbd831361310a8293e0167141e80b0f03a0f175c80960 @@ -17892,16 +18104,6 @@ __metadata: languageName: node linkType: hard -"clipboardy@npm:1.2.2": - version: 1.2.2 - resolution: "clipboardy@npm:1.2.2" - dependencies: - arch: ^2.1.0 - execa: ^0.8.0 - checksum: 7744a95e014e5945f17554b426fe78c6e1329ead85a61fa589dd4c3f4a596a037d45cad0bfaa3e60bdf77717f0dfda67c35454216f4dbb7832ec0eba42ba8a06 - languageName: node - linkType: hard - "cliui@npm:^5.0.0": version: 5.0.0 resolution: "cliui@npm:5.0.0" @@ -17957,7 +18159,7 @@ __metadata: languageName: node linkType: hard -"clone-response@npm:1.0.2, clone-response@npm:^1.0.2": +"clone-response@npm:^1.0.2": version: 1.0.2 resolution: "clone-response@npm:1.0.2" dependencies: @@ -18191,7 +18393,7 @@ __metadata: languageName: node linkType: hard -"commander@npm:^2.19.0, commander@npm:^2.20.0, commander@npm:^2.20.3, commander@npm:^2.7.1, commander@npm:^2.8.1, commander@npm:^2.9.0": +"commander@npm:^2.19.0, commander@npm:^2.20.0, commander@npm:^2.20.3, commander@npm:^2.7.1, commander@npm:^2.9.0": version: 2.20.3 resolution: "commander@npm:2.20.3" checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e @@ -18328,6 +18530,22 @@ __metadata: languageName: node linkType: hard +"concordance@npm:^5.0.4": + version: 5.0.4 + resolution: "concordance@npm:5.0.4" + dependencies: + date-time: ^3.1.0 + esutils: ^2.0.3 + fast-diff: ^1.2.0 + js-string-escape: ^1.0.1 + lodash: ^4.17.15 + md5-hex: ^3.0.1 + semver: ^7.3.2 + well-known-symbols: ^2.0.0 + checksum: 749153ba711492feb7c3d2f5bb04c107157440b3e39509bd5dd19ee7b3ac751d1e4cd75796d9f702e0a713312dbc661421c68aa4a2c34d5f6d91f47e3a1c64a6 + languageName: node + linkType: hard + "concurrently@npm:^7.6.0": version: 7.6.0 resolution: "concurrently@npm:7.6.0" @@ -18379,7 +18597,7 @@ __metadata: languageName: node linkType: hard -"content-disposition@npm:0.5.4, content-disposition@npm:^0.5.2, content-disposition@npm:^0.5.3": +"content-disposition@npm:0.5.4, content-disposition@npm:^0.5.3": version: 0.5.4 resolution: "content-disposition@npm:0.5.4" dependencies: @@ -18736,7 +18954,7 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:^5.0.1, cross-spawn@npm:^5.1.0": +"cross-spawn@npm:^5.1.0": version: 5.1.0 resolution: "cross-spawn@npm:5.1.0" dependencies: @@ -18934,26 +19152,12 @@ __metadata: languageName: node linkType: hard -"cssom@npm:^0.5.0": - version: 0.5.0 - resolution: "cssom@npm:0.5.0" - checksum: 823471aa30091c59e0a305927c30e7768939b6af70405808f8d2ce1ca778cddcb24722717392438329d1691f9a87cb0183b64b8d779b56a961546d54854fde01 - languageName: node - linkType: hard - -"cssom@npm:~0.3.6": - version: 0.3.8 - resolution: "cssom@npm:0.3.8" - checksum: 24beb3087c76c0d52dd458be9ee1fbc80ac771478a9baef35dd258cdeb527c68eb43204dd439692bb2b1ae5272fa5f2946d10946edab0d04f1078f85e06bc7f6 - languageName: node - linkType: hard - -"cssstyle@npm:^2.3.0": - version: 2.3.0 - resolution: "cssstyle@npm:2.3.0" +"cssstyle@npm:^3.0.0": + version: 3.0.0 + resolution: "cssstyle@npm:3.0.0" dependencies: - cssom: ~0.3.6 - checksum: 5f05e6fd2e3df0b44695c2f08b9ef38b011862b274e320665176467c0725e44a53e341bc4959a41176e83b66064ab786262e7380fd1cabeae6efee0d255bb4e3 + rrweb-cssom: ^0.6.0 + checksum: 31f694dfed9998ed93570fe539610837b878193dd8487c33cb12db8004333c53c2a3904166288bbec68388c72fb01014d46d3243ddfb02fe845989d852c06f27 languageName: node linkType: hard @@ -19141,14 +19345,14 @@ __metadata: languageName: node linkType: hard -"data-urls@npm:^3.0.1": - version: 3.0.2 - resolution: "data-urls@npm:3.0.2" +"data-urls@npm:^4.0.0": + version: 4.0.0 + resolution: "data-urls@npm:4.0.0" dependencies: abab: ^2.0.6 whatwg-mimetype: ^3.0.0 - whatwg-url: ^11.0.0 - checksum: 033fc3dd0fba6d24bc9a024ddcf9923691dd24f90a3d26f6545d6a2f71ec6956f93462f2cdf2183cc46f10dc01ed3bcb36731a8208456eb1a08147e571fe2a76 + whatwg-url: ^12.0.0 + checksum: 006e869b5bf079647949a3e9b1dd69d84b2d5d26e6b01c265485699bc96e83817d4b5aae758b2910a4c58c0601913f3a0034121c1ca2da268e9a244c57515b15 languageName: node linkType: hard @@ -19168,6 +19372,15 @@ __metadata: languageName: node linkType: hard +"date-time@npm:^3.1.0": + version: 3.1.0 + resolution: "date-time@npm:3.1.0" + dependencies: + time-zone: ^1.0.0 + checksum: f9cfcd1b15dfeabab15c0b9d18eb9e4e2d9d4371713564178d46a8f91ad577a290b5178b80050718d02d9c0cf646f8a875011e12d1ed05871e9f72c72c8a8fe6 + languageName: node + linkType: hard + "datocms-listen@npm:^0.1.9": version: 0.1.15 resolution: "datocms-listen@npm:0.1.15" @@ -19289,10 +19502,10 @@ __metadata: languageName: node linkType: hard -"decimal.js@npm:^10.3.1": - version: 10.4.0 - resolution: "decimal.js@npm:10.4.0" - checksum: 98702d9d817a9e5b3767ea6580e7f3b35544b9454e463a5dd5d3232131470f39067d02864c45cab009eb1200bc162cd26a33d34c622cd79e4657a3e25e95fb4e +"decimal.js@npm:^10.4.3": + version: 10.4.3 + resolution: "decimal.js@npm:10.4.3" + checksum: 796404dcfa9d1dbfdc48870229d57f788b48c21c603c3f6554a1c17c10195fc1024de338b0cf9e1efe0c7c167eeb18f04548979bcc5fdfabebb7cc0ae3287bae languageName: node linkType: hard @@ -19330,69 +19543,6 @@ __metadata: languageName: node linkType: hard -"decompress-tar@npm:^4.0.0, decompress-tar@npm:^4.1.0, decompress-tar@npm:^4.1.1": - version: 4.1.1 - resolution: "decompress-tar@npm:4.1.1" - dependencies: - file-type: ^5.2.0 - is-stream: ^1.1.0 - tar-stream: ^1.5.2 - checksum: 42d5360b558a28dd884e1bf809e3fea92b9910fda5151add004d4a64cc76ac124e8b3e9117e805f2349af9e49c331d873e6fc5ad86a00e575703fee632b0a225 - languageName: node - linkType: hard - -"decompress-tarbz2@npm:^4.0.0": - version: 4.1.1 - resolution: "decompress-tarbz2@npm:4.1.1" - dependencies: - decompress-tar: ^4.1.0 - file-type: ^6.1.0 - is-stream: ^1.1.0 - seek-bzip: ^1.0.5 - unbzip2-stream: ^1.0.9 - checksum: 519c81337730159a1f2d7072a6ee8523ffd76df48d34f14c27cb0a27f89b4e2acf75dad2f761838e5bc63230cea1ac154b092ecb7504be4e93f7d0e32ddd6aff - languageName: node - linkType: hard - -"decompress-targz@npm:^4.0.0": - version: 4.1.1 - resolution: "decompress-targz@npm:4.1.1" - dependencies: - decompress-tar: ^4.1.1 - file-type: ^5.2.0 - is-stream: ^1.1.0 - checksum: 22738f58eb034568dc50d370c03b346c428bfe8292fe56165847376b5af17d3c028fefca82db642d79cb094df4c0a599d40a8f294b02aad1d3ddec82f3fd45d4 - languageName: node - linkType: hard - -"decompress-unzip@npm:^4.0.1": - version: 4.0.1 - resolution: "decompress-unzip@npm:4.0.1" - dependencies: - file-type: ^3.8.0 - get-stream: ^2.2.0 - pify: ^2.3.0 - yauzl: ^2.4.2 - checksum: ba9f3204ab2415bedb18d796244928a18148ef40dbb15174d0d01e5991b39536b03d02800a8a389515a1523f8fb13efc7cd44697df758cd06c674879caefd62b - languageName: node - linkType: hard - -"decompress@npm:^4.2.1": - version: 4.2.1 - resolution: "decompress@npm:4.2.1" - dependencies: - decompress-tar: ^4.0.0 - decompress-tarbz2: ^4.0.0 - decompress-targz: ^4.0.0 - decompress-unzip: ^4.0.1 - graceful-fs: ^4.1.10 - make-dir: ^1.0.0 - pify: ^2.3.0 - strip-dirs: ^2.0.0 - checksum: 8247a31c6db7178413715fdfb35a482f019c81dfcd6e8e623d9f0382c9889ce797ce0144de016b256ed03298907a620ce81387cca0e69067a933470081436cb8 - languageName: node - linkType: hard - "dedent@npm:^0.7.0": version: 0.7.0 resolution: "dedent@npm:0.7.0" @@ -19400,6 +19550,15 @@ __metadata: languageName: node linkType: hard +"deep-eql@npm:^4.1.2": + version: 4.1.3 + resolution: "deep-eql@npm:4.1.3" + dependencies: + type-detect: ^4.0.0 + checksum: 7f6d30cb41c713973dc07eaadded848b2ab0b835e518a88b91bea72f34e08c4c71d167a722a6f302d3a6108f05afd8e6d7650689a84d5d29ec7fe6220420397f + languageName: node + linkType: hard + "deep-extend@npm:0.6.0": version: 0.6.0 resolution: "deep-extend@npm:0.6.0" @@ -19707,6 +19866,13 @@ __metadata: languageName: node linkType: hard +"diff-sequences@npm:^29.4.3": + version: 29.4.3 + resolution: "diff-sequences@npm:29.4.3" + checksum: 28b265e04fdddcf7f9f814effe102cc95a9dec0564a579b5aed140edb24fc345c611ca52d76d725a3cab55d3888b915b5e8a4702e0f6058968a90fa5f41fcde7 + languageName: node + linkType: hard + "diff@npm:^4.0.1": version: 4.0.2 resolution: "diff@npm:4.0.2" @@ -20030,25 +20196,6 @@ __metadata: languageName: node linkType: hard -"download@npm:^8.0.0": - version: 8.0.0 - resolution: "download@npm:8.0.0" - dependencies: - archive-type: ^4.0.0 - content-disposition: ^0.5.2 - decompress: ^4.2.1 - ext-name: ^5.0.0 - file-type: ^11.1.0 - filenamify: ^3.0.0 - get-stream: ^4.1.0 - got: ^8.3.1 - make-dir: ^2.1.0 - p-event: ^2.1.0 - pify: ^4.0.1 - checksum: 8a26b21eee8d23352265729dba8eea9f18cba0ebfa3e064041afffeefdfe508fc31e54a08bd0606ff8b0d548466bdb2e2e32b571a8f95227efa5b7c09c261a2f - languageName: node - linkType: hard - "downshift@npm:^6.1.9": version: 6.1.9 resolution: "downshift@npm:6.1.9" @@ -21125,6 +21272,83 @@ __metadata: languageName: node linkType: hard +"esbuild@npm:^0.17.5": + version: 0.17.19 + resolution: "esbuild@npm:0.17.19" + dependencies: + "@esbuild/android-arm": 0.17.19 + "@esbuild/android-arm64": 0.17.19 + "@esbuild/android-x64": 0.17.19 + "@esbuild/darwin-arm64": 0.17.19 + "@esbuild/darwin-x64": 0.17.19 + "@esbuild/freebsd-arm64": 0.17.19 + "@esbuild/freebsd-x64": 0.17.19 + "@esbuild/linux-arm": 0.17.19 + "@esbuild/linux-arm64": 0.17.19 + "@esbuild/linux-ia32": 0.17.19 + "@esbuild/linux-loong64": 0.17.19 + "@esbuild/linux-mips64el": 0.17.19 + "@esbuild/linux-ppc64": 0.17.19 + "@esbuild/linux-riscv64": 0.17.19 + "@esbuild/linux-s390x": 0.17.19 + "@esbuild/linux-x64": 0.17.19 + "@esbuild/netbsd-x64": 0.17.19 + "@esbuild/openbsd-x64": 0.17.19 + "@esbuild/sunos-x64": 0.17.19 + "@esbuild/win32-arm64": 0.17.19 + "@esbuild/win32-ia32": 0.17.19 + "@esbuild/win32-x64": 0.17.19 + dependenciesMeta: + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: ac11b1a5a6008e4e37ccffbd6c2c054746fc58d0ed4a2f9ee643bd030cfcea9a33a235087bc777def8420f2eaafb3486e76adb7bdb7241a9143b43a69a10afd8 + languageName: node + linkType: hard + "escalade@npm:^3.1.1": version: 3.1.1 resolution: "escalade@npm:3.1.1" @@ -21714,54 +21938,6 @@ __metadata: languageName: node linkType: hard -"estree-util-attach-comments@npm:^2.0.0": - version: 2.0.0 - resolution: "estree-util-attach-comments@npm:2.0.0" - dependencies: - "@types/estree": ^0.0.46 - checksum: 64048f336bd18dea83e9945c3f70efc51e363c5befa6bb32a417e27fc7d7303f72f63f6910a9886c2e9e369168f5c6d023755420bd76edbce07ff0b98fdc998f - languageName: node - linkType: hard - -"estree-util-build-jsx@npm:^2.0.0": - version: 2.0.0 - resolution: "estree-util-build-jsx@npm:2.0.0" - dependencies: - "@types/estree-jsx": ^0.0.1 - estree-util-is-identifier-name: ^2.0.0 - estree-walker: ^3.0.0 - checksum: 840a9d6a8d05db431da315f34c2bde9b7c7e1511f988d71d5fedbe43077ca55b4f35322256e608659adadbe944092fde9610b4c3ee207fbbbb8aa9f247cd981d - languageName: node - linkType: hard - -"estree-util-is-identifier-name@npm:^2.0.0": - version: 2.0.0 - resolution: "estree-util-is-identifier-name@npm:2.0.0" - checksum: 09305036c4e22e388686826c4f90813b25a907b7269557dd934664bac98bf2fa814c40a0e93ce9815fd7d64ff04d2a4d48ed405cb90762025cd5f80dcfd9b58e - languageName: node - linkType: hard - -"estree-util-to-js@npm:^1.1.0": - version: 1.1.0 - resolution: "estree-util-to-js@npm:1.1.0" - dependencies: - "@types/estree-jsx": ^1.0.0 - astring: ^1.8.0 - source-map: ^0.7.0 - checksum: 3ce2ef2fd78497fa7a0e5250be0f217af9060c819f7ed4f4739285e4ade4ed244536cb88e8ba1e38986af98d3a9064165122bb1622f2c6d57fe7b241b884fc47 - languageName: node - linkType: hard - -"estree-util-visit@npm:^1.0.0": - version: 1.1.0 - resolution: "estree-util-visit@npm:1.1.0" - dependencies: - "@types/estree-jsx": ^0.0.1 - "@types/unist": ^2.0.0 - checksum: 4facaa960d405f2f61978794282b3852b1c419bdf110b7f74f2b3f61c5c4ac1c08527ee30c29533b429dd246d7a0730ec398fdd8b34bbc7dd30971225bab3eca - languageName: node - linkType: hard - "estree-walker@npm:^1.0.1": version: 1.0.1 resolution: "estree-walker@npm:1.0.1" @@ -21776,14 +21952,7 @@ __metadata: languageName: node linkType: hard -"estree-walker@npm:^3.0.0": - version: 3.0.1 - resolution: "estree-walker@npm:3.0.1" - checksum: 674096950819041f1ee471e63f7aa987f2ed3a3a441cc41a5176e9ed01ea5cfd6487822c3b9c2cddd0e2c8f9d7ef52d32d06147a19b5a9ca9f8ab0c094bd43b9 - languageName: node - linkType: hard - -"esutils@npm:^2.0.2": +"esutils@npm:^2.0.2, esutils@npm:^2.0.3": version: 2.0.3 resolution: "esutils@npm:2.0.3" checksum: 22b5b08f74737379a840b8ed2036a5fb35826c709ab000683b092d9054e5c2a82c27818f12604bfc2a9a76b90b6834ef081edbc1c7ae30d1627012e067c6ec87 @@ -22165,21 +22334,6 @@ __metadata: languageName: node linkType: hard -"execa@npm:^0.8.0": - version: 0.8.0 - resolution: "execa@npm:0.8.0" - dependencies: - cross-spawn: ^5.0.1 - get-stream: ^3.0.0 - is-stream: ^1.1.0 - npm-run-path: ^2.0.0 - p-finally: ^1.0.0 - signal-exit: ^3.0.0 - strip-eof: ^1.0.0 - checksum: c2a4bf6e051737e46bee61a93ec286cb71a05f16650a1918c8d6262ba9f0bac031472252411baa8c78b7f432f10cb4c601349403774d69be2ebd864e9b1eca60 - languageName: node - linkType: hard - "execa@npm:^5.0.0, execa@npm:^5.1.1": version: 5.1.1 resolution: "execa@npm:5.1.1" @@ -22233,7 +22387,7 @@ __metadata: languageName: node linkType: hard -"expect@npm:^28.0.0, expect@npm:^28.1.3": +"expect@npm:^28.1.3": version: 28.1.3 resolution: "expect@npm:28.1.3" dependencies: @@ -22323,25 +22477,6 @@ __metadata: languageName: node linkType: hard -"ext-list@npm:^2.0.0": - version: 2.2.2 - resolution: "ext-list@npm:2.2.2" - dependencies: - mime-db: ^1.28.0 - checksum: 9b2426bea312e674eeced62c5f18407ab9a8653bbdfbde36492331c7973dab7fbf9e11d6c38605786168b42da333910314988097ca06eee61f1b9b57efae3f18 - languageName: node - linkType: hard - -"ext-name@npm:^5.0.0": - version: 5.0.0 - resolution: "ext-name@npm:5.0.0" - dependencies: - ext-list: ^2.0.0 - sort-keys-length: ^1.0.0 - checksum: f598269bd5de4295540ea7d6f8f6a01d82a7508f148b7700a05628ef6121648d26e6e5e942049e953b3051863df6b54bd8fe951e7877f185e34ace5d44370b33 - languageName: node - linkType: hard - "ext@npm:^1.1.2": version: 1.6.0 resolution: "ext@npm:1.6.0" @@ -22446,6 +22581,13 @@ __metadata: languageName: node linkType: hard +"fast-diff@npm:^1.2.0": + version: 1.3.0 + resolution: "fast-diff@npm:1.3.0" + checksum: d22d371b994fdc8cce9ff510d7b8dc4da70ac327bcba20df607dd5b9cae9f908f4d1028f5fe467650f058d1e7270235ae0b8230809a262b4df587a3b3aa216c3 + languageName: node + linkType: hard + "fast-equals@npm:^1.6.3": version: 1.6.3 resolution: "fast-equals@npm:1.6.3" @@ -22521,7 +22663,7 @@ __metadata: languageName: node linkType: hard -"fast-json-stable-stringify@npm:2.x, fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": +"fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": version: 2.1.0 resolution: "fast-json-stable-stringify@npm:2.1.0" checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb @@ -22631,15 +22773,6 @@ __metadata: languageName: node linkType: hard -"fd-slicer@npm:~1.1.0": - version: 1.1.0 - resolution: "fd-slicer@npm:1.1.0" - dependencies: - pend: ~1.2.0 - checksum: c8585fd5713f4476eb8261150900d2cb7f6ff2d87f8feb306ccc8a1122efd152f1783bdb2b8dc891395744583436bfd8081d8e63ece0ec8687eeefea394d4ff2 - languageName: node - linkType: hard - "fetch-retry@npm:^5.0.2": version: 5.0.3 resolution: "fetch-retry@npm:5.0.3" @@ -22722,41 +22855,6 @@ __metadata: languageName: node linkType: hard -"file-type@npm:^11.1.0": - version: 11.1.0 - resolution: "file-type@npm:11.1.0" - checksum: 66c2086867291fda760a245534bec1fbf12817dc6fd3426c2b41f29a37c71bb61f1091505c98f03a446703321cc1d4a8e873ce631f5763fc53178645d9eb3f85 - languageName: node - linkType: hard - -"file-type@npm:^3.8.0": - version: 3.9.0 - resolution: "file-type@npm:3.9.0" - checksum: 1db70b2485ac77c4edb4b8753c1874ee6194123533f43c2651820f96b518f505fa570b093fedd6672eb105ba9fb89c62f84b6492e46788e39c3447aed37afa2d - languageName: node - linkType: hard - -"file-type@npm:^4.2.0": - version: 4.4.0 - resolution: "file-type@npm:4.4.0" - checksum: f3e0b38bef643a330b3d98e3aa9d6f0f32d2d80cb9341f5612187bd53ac84489a4dc66b354bd0cff6b60bff053c7ef21eb8923d62e9f1196ac627b63bd7875ef - languageName: node - linkType: hard - -"file-type@npm:^5.2.0": - version: 5.2.0 - resolution: "file-type@npm:5.2.0" - checksum: b2b21c7fc3cfb3c6a3a18b0d5d7233b74d8c17d82757655766573951daf42962a5c809e5fc3637675b237c558ebc67e4958fb2cc5a4ad407bc545aaa40001c74 - languageName: node - linkType: hard - -"file-type@npm:^6.1.0": - version: 6.2.0 - resolution: "file-type@npm:6.2.0" - checksum: 749540cefcd4959121eb83e373ed84e49b2e5a510aa5d598b725bd772dd306ae41fd00d3162ae3f6563b4db5cfafbbd0df321de3f20c17e20a8c56431ae55e58 - languageName: node - linkType: hard - "file-type@npm:^9.0.0": version: 9.0.0 resolution: "file-type@npm:9.0.0" @@ -22771,24 +22869,6 @@ __metadata: languageName: node linkType: hard -"filename-reserved-regex@npm:^2.0.0": - version: 2.0.0 - resolution: "filename-reserved-regex@npm:2.0.0" - checksum: 323a0020fd7f243238ffccab9d728cbc5f3a13c84b2c10e01efb09b8324561d7a51776be76f36603c734d4f69145c39a5d12492bf6142a28b50d7f90bd6190bc - languageName: node - linkType: hard - -"filenamify@npm:^3.0.0": - version: 3.0.0 - resolution: "filenamify@npm:3.0.0" - dependencies: - filename-reserved-regex: ^2.0.0 - strip-outer: ^1.0.0 - trim-repeated: ^1.0.0 - checksum: d419eaa1b8c331ab8616e1fffe33e4af135c60b5364320bbe015bc93ded89c6c301363f69593991de18a8f9dd278324c0a0d89fd554c30250306f4c16c956673 - languageName: node - linkType: hard - "fill-range@npm:^4.0.0": version: 4.0.0 resolution: "fill-range@npm:4.0.0" @@ -22963,13 +23043,6 @@ __metadata: languageName: node linkType: hard -"focus-visible@npm:^5.1.0": - version: 5.2.0 - resolution: "focus-visible@npm:5.2.0" - checksum: 876f646ef453680d3d34e9f9b23961527ffd5ccaed8690f423d4fbfa37ff023d98a490972bc1387850e37ec2e44958c81f6096ef95b67462e5c4b5404cf1dbb9 - languageName: node - linkType: hard - "follow-redirects@npm:^1.14.0, follow-redirects@npm:^1.14.7, follow-redirects@npm:^1.14.8": version: 1.14.9 resolution: "follow-redirects@npm:1.14.9" @@ -23218,7 +23291,7 @@ __metadata: languageName: node linkType: hard -"from2@npm:^2.1.0, from2@npm:^2.1.1": +"from2@npm:^2.1.0": version: 2.3.0 resolution: "from2@npm:2.3.0" dependencies: @@ -23235,13 +23308,6 @@ __metadata: languageName: node linkType: hard -"fs-constants@npm:^1.0.0": - version: 1.0.0 - resolution: "fs-constants@npm:1.0.0" - checksum: 18f5b718371816155849475ac36c7d0b24d39a11d91348cfcb308b4494824413e03572c403c86d3a260e049465518c4f0d5bd00f0371cdfcad6d4f30a85b350d - languageName: node - linkType: hard - "fs-extra@npm:^10.1.0": version: 10.1.0 resolution: "fs-extra@npm:10.1.0" @@ -23536,6 +23602,13 @@ __metadata: languageName: node linkType: hard +"get-func-name@npm:^2.0.0": + version: 2.0.0 + resolution: "get-func-name@npm:2.0.0" + checksum: 8d82e69f3e7fab9e27c547945dfe5cc0c57fc0adf08ce135dddb01081d75684a03e7a0487466f478872b341d52ac763ae49e660d01ab83741f74932085f693c3 + languageName: node + linkType: hard + "get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.0, get-intrinsic@npm:^1.1.1": version: 1.1.1 resolution: "get-intrinsic@npm:1.1.1" @@ -23586,24 +23659,14 @@ __metadata: languageName: node linkType: hard -"get-stream@npm:3.0.0, get-stream@npm:^3.0.0": +"get-stream@npm:^3.0.0": version: 3.0.0 resolution: "get-stream@npm:3.0.0" checksum: 36142f46005ed74ce3a45c55545ec4e7da8e243554179e345a786baf144e5c4a35fb7bdc49fadfa9f18bd08000589b6fe364abdadfc4e1eb0e1b9914a6bb9c56 languageName: node linkType: hard -"get-stream@npm:^2.2.0": - version: 2.3.1 - resolution: "get-stream@npm:2.3.1" - dependencies: - object-assign: ^4.0.1 - pinkie-promise: ^2.0.0 - checksum: d82c86556e131ba7bef00233aa0aa7a51230e6deac11a971ce0f47cd43e2a5e968a3e3914cd082f07cd0d69425653b2f96735b0a7d5c5c03fef3ab857a531367 - languageName: node - linkType: hard - -"get-stream@npm:^4.0.0, get-stream@npm:^4.1.0": +"get-stream@npm:^4.0.0": version: 4.1.0 resolution: "get-stream@npm:4.1.0" dependencies: @@ -23687,7 +23750,7 @@ __metadata: languageName: node linkType: hard -"github-slugger@npm:^1.0.0, github-slugger@npm:^1.3.0": +"github-slugger@npm:^1.0.0": version: 1.4.0 resolution: "github-slugger@npm:1.4.0" checksum: 4f52e7a21f5c6a4c5328f01fe4fe13ae8881fea78bfe31f9e72c4038f97e3e70d52fb85aa7633a52c501dc2486874474d9abd22aa61cbe9b113099a495551c6b @@ -24067,38 +24130,6 @@ __metadata: languageName: node linkType: hard -"got@npm:^8.3.1": - version: 8.3.2 - resolution: "got@npm:8.3.2" - dependencies: - "@sindresorhus/is": ^0.7.0 - cacheable-request: ^2.1.1 - decompress-response: ^3.3.0 - duplexer3: ^0.1.4 - get-stream: ^3.0.0 - into-stream: ^3.1.0 - is-retry-allowed: ^1.1.0 - isurl: ^1.0.0-alpha5 - lowercase-keys: ^1.0.0 - mimic-response: ^1.0.0 - p-cancelable: ^0.4.0 - p-timeout: ^2.0.1 - pify: ^3.0.0 - safe-buffer: ^5.1.1 - timed-out: ^4.0.1 - url-parse-lax: ^3.0.0 - url-to-options: ^1.0.1 - checksum: ab05bfcb6de86dc0c3fba8d25cc51cb2b09851ff3f6f899c86cde8c63b30269f8823d69dbbc6d03f7c58bb069f55a3c5f60aba74aad6721938652d8f35fd3165 - languageName: node - linkType: hard - -"graceful-fs@npm:^4.1.10, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": - version: 4.2.9 - resolution: "graceful-fs@npm:4.2.9" - checksum: 68ea4e07ff2c041ada184f9278b830375f8e0b75154e3f080af6b70f66172fabb4108d19b3863a96b53fc068a310b9b6493d86d1291acc5f3861eb4b79d26ad6 - languageName: node - linkType: hard - "graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.2.0": version: 4.2.10 resolution: "graceful-fs@npm:4.2.10" @@ -24106,6 +24137,13 @@ __metadata: languageName: node linkType: hard +"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": + version: 4.2.9 + resolution: "graceful-fs@npm:4.2.9" + checksum: 68ea4e07ff2c041ada184f9278b830375f8e0b75154e3f080af6b70f66172fabb4108d19b3863a96b53fc068a310b9b6493d86d1291acc5f3861eb4b79d26ad6 + languageName: node + linkType: hard + "graceful-fs@npm:^4.1.5": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" @@ -24241,13 +24279,6 @@ __metadata: languageName: node linkType: hard -"has-flag@npm:^2.0.0": - version: 2.0.0 - resolution: "has-flag@npm:2.0.0" - checksum: 7d060d142ef6740c79991cb99afe5962b267e6e95538bf8b607026b9b1e7451288927bc8e7b4a9484a8b99935c0af023070f91ee49faef791ecd401dc58b2e8d - languageName: node - linkType: hard - "has-flag@npm:^3.0.0": version: 3.0.0 resolution: "has-flag@npm:3.0.0" @@ -24494,28 +24525,6 @@ __metadata: languageName: node linkType: hard -"hast-util-to-estree@npm:^2.0.0": - version: 2.0.2 - resolution: "hast-util-to-estree@npm:2.0.2" - dependencies: - "@types/estree-jsx": ^0.0.1 - "@types/hast": ^2.0.0 - "@types/unist": ^2.0.0 - comma-separated-tokens: ^2.0.0 - estree-util-attach-comments: ^2.0.0 - estree-util-is-identifier-name: ^2.0.0 - hast-util-whitespace: ^2.0.0 - mdast-util-mdx-expression: ^1.0.0 - mdast-util-mdxjs-esm: ^1.0.0 - property-information: ^6.0.0 - space-separated-tokens: ^2.0.0 - style-to-object: ^0.3.0 - unist-util-position: ^4.0.0 - zwitch: ^2.0.0 - checksum: 7ac9884c35c0a1dc96c6237f841e0bdd4410746d0a9ab7ddfaaed9cf36adb3186633782b50e45c57bc8825640c5e1db070fd5eeca5061f76fc19bf991df8a520 - languageName: node - linkType: hard - "hast-util-to-html@npm:^8.0.0": version: 8.0.4 resolution: "hast-util-to-html@npm:8.0.4" @@ -24818,13 +24827,6 @@ __metadata: languageName: node linkType: hard -"http-cache-semantics@npm:3.8.1": - version: 3.8.1 - resolution: "http-cache-semantics@npm:3.8.1" - checksum: b1108d37be478fa9b03890d4185217aac2256e9d2247ce6c6bd90bc5432687d68dc7710ba908cea6166fb983a849d902195241626cf175a3c62817a494c0f7f6 - languageName: node - linkType: hard - "http-cache-semantics@npm:^4.0.0": version: 4.1.0 resolution: "http-cache-semantics@npm:4.1.0" @@ -24952,6 +24954,16 @@ __metadata: languageName: node linkType: hard +"https-proxy-agent@npm:^5.0.1": + version: 5.0.1 + resolution: "https-proxy-agent@npm:5.0.1" + dependencies: + agent-base: 6 + debug: 4 + checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 + languageName: node + linkType: hard + "httpsnippet@npm:^2.0.0": version: 2.0.0 resolution: "httpsnippet@npm:2.0.0" @@ -24994,12 +25006,12 @@ __metadata: languageName: node linkType: hard -"husky@npm:^8.0.1": - version: 8.0.1 - resolution: "husky@npm:8.0.1" +"husky@npm:^8.0.0": + version: 8.0.3 + resolution: "husky@npm:8.0.3" bin: husky: lib/bin.js - checksum: 943a73a13d0201318fd30e83d299bb81d866bd245b69e6277804c3b462638dc1921694cb94c2b8c920a4a187060f7d6058d3365152865406352e934c5fff70dc + checksum: 837bc7e4413e58c1f2946d38fb050f5d7324c6f16b0fd66411ffce5703b294bd21429e8ba58711cd331951ee86ed529c5be4f76805959ff668a337dbfa82a1b0 languageName: node linkType: hard @@ -25418,13 +25430,6 @@ __metadata: languageName: node linkType: hard -"intersection-observer@npm:^0.12.0": - version: 0.12.0 - resolution: "intersection-observer@npm:0.12.0" - checksum: 96d2f3ea4995b7b429b79646467c975230cfbe3ede7fb08d0c022cfe6ee0c89dfa98aa4377e8b5f7bee880322eb118e6c0275607a53043f9c50921da8363c1e8 - languageName: node - linkType: hard - "intl-messageformat@npm:9.13.0": version: 9.13.0 resolution: "intl-messageformat@npm:9.13.0" @@ -25437,16 +25442,6 @@ __metadata: languageName: node linkType: hard -"into-stream@npm:^3.1.0": - version: 3.1.0 - resolution: "into-stream@npm:3.1.0" - dependencies: - from2: ^2.1.1 - p-is-promise: ^1.1.0 - checksum: e6e1a202227b20c446c251ef95348b3e8503cdc75aa2a09076f8821fc42c1b7fd43fabaeb8ed3cf9eb875942cfa4510b66949c5317997aa640921cc9bbadcd17 - languageName: node - linkType: hard - "invariant@npm:^2.2.2, invariant@npm:^2.2.4": version: 2.2.4 resolution: "invariant@npm:2.2.4" @@ -25502,13 +25497,6 @@ __metadata: languageName: node linkType: hard -"is-alphabetical@npm:^2.0.0": - version: 2.0.1 - resolution: "is-alphabetical@npm:2.0.1" - checksum: 56207db8d9de0850f0cd30f4966bf731eb82cedfe496cbc2e97e7c3bacaf66fc54a972d2d08c0d93bb679cb84976a05d24c5ad63de56fabbfc60aadae312edaa - languageName: node - linkType: hard - "is-alphanumerical@npm:^1.0.0": version: 1.0.4 resolution: "is-alphanumerical@npm:1.0.4" @@ -25519,16 +25507,6 @@ __metadata: languageName: node linkType: hard -"is-alphanumerical@npm:^2.0.0": - version: 2.0.1 - resolution: "is-alphanumerical@npm:2.0.1" - dependencies: - is-alphabetical: ^2.0.0 - is-decimal: ^2.0.0 - checksum: 87acc068008d4c9c4e9f5bd5e251041d42e7a50995c77b1499cf6ed248f971aadeddb11f239cabf09f7975ee58cac7a48ffc170b7890076d8d227b24a68663c9 - languageName: node - linkType: hard - "is-arguments@npm:^1.0.4, is-arguments@npm:^1.1.0": version: 1.1.1 resolution: "is-arguments@npm:1.1.1" @@ -25703,13 +25681,6 @@ __metadata: languageName: node linkType: hard -"is-decimal@npm:^2.0.0": - version: 2.0.1 - resolution: "is-decimal@npm:2.0.1" - checksum: 97132de7acdce77caa7b797632970a2ecd649a88e715db0e4dbc00ab0708b5e7574ba5903962c860cd4894a14fd12b100c0c4ac8aed445cf6f55c6cf747a4158 - languageName: node - linkType: hard - "is-descriptor@npm:^0.1.0": version: 0.1.6 resolution: "is-descriptor@npm:0.1.6" @@ -25857,13 +25828,6 @@ __metadata: languageName: node linkType: hard -"is-hexadecimal@npm:^2.0.0": - version: 2.0.1 - resolution: "is-hexadecimal@npm:2.0.1" - checksum: 66a2ea85994c622858f063f23eda506db29d92b52580709eb6f4c19550552d4dcf3fb81952e52f7cf972097237959e00adc7bb8c9400cd12886e15bf06145321 - languageName: node - linkType: hard - "is-interactive@npm:^1.0.0": version: 1.0.0 resolution: "is-interactive@npm:1.0.0" @@ -25911,13 +25875,6 @@ __metadata: languageName: node linkType: hard -"is-natural-number@npm:^4.0.1": - version: 4.0.1 - resolution: "is-natural-number@npm:4.0.1" - checksum: 3e5e3d52e0dfa4fea923b5d2b8a5cdbd9bf110c4598d30304b98528b02f40c9058a2abf1bae10bcbaf2bac18ace41cff7bc9673aff339f8c8297fae74ae0e75d - languageName: node - linkType: hard - "is-negative-zero@npm:^2.0.2": version: 2.0.2 resolution: "is-negative-zero@npm:2.0.2" @@ -25985,7 +25942,7 @@ __metadata: languageName: node linkType: hard -"is-plain-obj@npm:^1.0.0, is-plain-obj@npm:^1.1.0": +"is-plain-obj@npm:^1.1.0": version: 1.1.0 resolution: "is-plain-obj@npm:1.1.0" checksum: 0ee04807797aad50859652a7467481816cbb57e5cc97d813a7dcd8915da8195dc68c436010bf39d195226cde6a2d352f4b815f16f26b7bf486a5754290629931 @@ -26045,15 +26002,6 @@ __metadata: languageName: node linkType: hard -"is-reference@npm:^3.0.0": - version: 3.0.0 - resolution: "is-reference@npm:3.0.0" - dependencies: - "@types/estree": "*" - checksum: 408bb3442ff5f90a9740bf578e8fa2863f68bc07ee99b92079a358a34af58341dc7014b054e8cc51a3da5d1ab83f635b6ee1ce2982db7899a128d7a05173898f - languageName: node - linkType: hard - "is-regex@npm:^1.1.2, is-regex@npm:^1.1.4": version: 1.1.4 resolution: "is-regex@npm:1.1.4" @@ -26071,7 +26019,7 @@ __metadata: languageName: node linkType: hard -"is-retry-allowed@npm:^1.0.0, is-retry-allowed@npm:^1.1.0": +"is-retry-allowed@npm:^1.0.0": version: 1.2.0 resolution: "is-retry-allowed@npm:1.2.0" checksum: 50d700a89ae31926b1c91b3eb0104dbceeac8790d8b80d02f5c76d9a75c2056f1bb24b5268a8a018dead606bddf116b2262e5ac07401eb8b8783b266ed22558d @@ -26357,15 +26305,15 @@ __metadata: linkType: hard "istanbul-lib-instrument@npm:^5.1.0": - version: 5.2.0 - resolution: "istanbul-lib-instrument@npm:5.2.0" + version: 5.2.1 + resolution: "istanbul-lib-instrument@npm:5.2.1" dependencies: "@babel/core": ^7.12.3 "@babel/parser": ^7.14.7 "@istanbuljs/schema": ^0.1.2 istanbul-lib-coverage: ^3.2.0 semver: ^6.3.0 - checksum: 7c242ed782b6bf7b655656576afae8b6bd23dcc020e5fdc1472cca3dfb6ddb196a478385206d0df5219b9babf46ac4f21fea5d8ea9a431848b6cca6007012353 + checksum: bf16f1803ba5e51b28bbd49ed955a736488381e09375d830e42ddeb403855b2006f850711d95ad726f2ba3f1ae8e7366de7e51d2b9ac67dc4d80191ef7ddf272 languageName: node linkType: hard @@ -26582,6 +26530,18 @@ __metadata: languageName: node linkType: hard +"jest-diff@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-diff@npm:29.5.0" + dependencies: + chalk: ^4.0.0 + diff-sequences: ^29.4.3 + jest-get-type: ^29.4.3 + pretty-format: ^29.5.0 + checksum: dfd0f4a299b5d127779c76b40106c37854c89c3e0785098c717d52822d6620d227f6234c3a9291df204d619e799e3654159213bf93220f79c8e92a55475a3d39 + languageName: node + linkType: hard + "jest-docblock@npm:^28.1.1": version: 28.1.1 resolution: "jest-docblock@npm:28.1.1" @@ -26604,22 +26564,6 @@ __metadata: languageName: node linkType: hard -"jest-environment-jsdom@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-environment-jsdom@npm:28.1.3" - dependencies: - "@jest/environment": ^28.1.3 - "@jest/fake-timers": ^28.1.3 - "@jest/types": ^28.1.3 - "@types/jsdom": ^16.2.4 - "@types/node": "*" - jest-mock: ^28.1.3 - jest-util: ^28.1.3 - jsdom: ^19.0.0 - checksum: 32758f9b9a1fd04ec3ebaaa608d740a36b960d37d00bd3d4d83fdc4b527afc474c14f04fa860817e1fa22923e2dc3cd2b497db41af6a5d73e91327951612025e - languageName: node - linkType: hard - "jest-environment-node@npm:^28.1.3": version: 28.1.3 resolution: "jest-environment-node@npm:28.1.3" @@ -26641,6 +26585,13 @@ __metadata: languageName: node linkType: hard +"jest-get-type@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-get-type@npm:29.4.3" + checksum: 6ac7f2dde1c65e292e4355b6c63b3a4897d7e92cb4c8afcf6d397f2682f8080e094c8b0b68205a74d269882ec06bf696a9de6cd3e1b7333531e5ed7b112605ce + languageName: node + linkType: hard + "jest-haste-map@npm:^26.6.2": version: 26.6.2 resolution: "jest-haste-map@npm:26.6.2" @@ -26728,18 +26679,6 @@ __metadata: languageName: node linkType: hard -"jest-mock-extended@npm:^2.0.7": - version: 2.0.7 - resolution: "jest-mock-extended@npm:2.0.7" - dependencies: - ts-essentials: ^7.0.3 - peerDependencies: - jest: ^24.0.0 || ^25.0.0 || ^26.0.0 || ^27.0.0 || ^28.0.0 - typescript: ^3.0.0 || ^4.0.0 - checksum: e9928f1c1e4c9d1bb9746e0f0791e7b0c5b91474d10ed07c6f59e80294830b46b9f6f99b418e4ebcb3641db7957f2014317ab4267e56b676789f7013db72aa8e - languageName: node - linkType: hard - "jest-mock@npm:^27.0.6": version: 27.5.1 resolution: "jest-mock@npm:27.5.1" @@ -26761,14 +26700,14 @@ __metadata: linkType: hard "jest-pnp-resolver@npm:^1.2.2": - version: 1.2.2 - resolution: "jest-pnp-resolver@npm:1.2.2" + version: 1.2.3 + resolution: "jest-pnp-resolver@npm:1.2.3" peerDependencies: jest-resolve: "*" peerDependenciesMeta: jest-resolve: optional: true - checksum: bd85dcc0e76e0eb0c3d56382ec140f08d25ff4068cda9d0e360bb78fb176cb726d0beab82dc0e8694cafd09f55fee7622b8bcb240afa5fad301f4ed3eebb4f47 + checksum: db1a8ab2cb97ca19c01b1cfa9a9c8c69a143fde833c14df1fab0766f411b1148ff0df878adea09007ac6a2085ec116ba9a996a6ad104b1e58c20adbf88eed9b2 languageName: node linkType: hard @@ -26779,7 +26718,7 @@ __metadata: languageName: node linkType: hard -"jest-regex-util@npm:^28.0.0, jest-regex-util@npm:^28.0.2": +"jest-regex-util@npm:^28.0.2": version: 28.0.2 resolution: "jest-regex-util@npm:28.0.2" checksum: 0ea8c5c82ec88bc85e273c0ec82e0c0f35f7a1e2d055070e50f0cc2a2177f848eec55f73e37ae0d045c3db5014c42b2f90ac62c1ab3fdb354d2abd66a9e08add @@ -26927,7 +26866,7 @@ __metadata: languageName: node linkType: hard -"jest-util@npm:^28.0.0, jest-util@npm:^28.1.3": +"jest-util@npm:^28.1.3": version: 28.1.3 resolution: "jest-util@npm:28.1.3" dependencies: @@ -26955,35 +26894,7 @@ __metadata: languageName: node linkType: hard -"jest-watch-select-projects@npm:^2.0.0": - version: 2.0.0 - resolution: "jest-watch-select-projects@npm:2.0.0" - dependencies: - ansi-escapes: ^4.3.0 - chalk: ^3.0.0 - prompts: ^2.2.1 - checksum: 67b7a08d8e7b5ecfba67d86f02be29e4917c4416c9f169246f10cc40792b1c5fa38fcfeb25195643db080ace1f4fdf2f827bd244e7cdff7512d1ddfbc94270f0 - languageName: node - linkType: hard - -"jest-watch-typeahead@npm:^2.0.0": - version: 2.0.0 - resolution: "jest-watch-typeahead@npm:2.0.0" - dependencies: - ansi-escapes: ^5.0.0 - chalk: ^4.0.0 - jest-regex-util: ^28.0.0 - jest-watcher: ^28.0.0 - slash: ^4.0.0 - string-length: ^5.0.1 - strip-ansi: ^7.0.1 - peerDependencies: - jest: ^27.0.0 || ^28.0.0 - checksum: c25fa793e56e0a316642a714c960b29359ddc1ce3f621ffb8a42a3ccfffb67c57223597e2fb387d5f49e2b93a22fc1f4b54e900e4fa80eca6602f70a30c22ffb - languageName: node - linkType: hard - -"jest-watcher@npm:^28.0.0, jest-watcher@npm:^28.1.3": +"jest-watcher@npm:^28.1.3": version: 28.1.3 resolution: "jest-watcher@npm:28.1.3" dependencies: @@ -27221,43 +27132,39 @@ __metadata: languageName: node linkType: hard -"jsdom@npm:^19.0.0": - version: 19.0.0 - resolution: "jsdom@npm:19.0.0" +"jsdom@npm:^22.0.0": + version: 22.0.0 + resolution: "jsdom@npm:22.0.0" dependencies: - abab: ^2.0.5 - acorn: ^8.5.0 - acorn-globals: ^6.0.0 - cssom: ^0.5.0 - cssstyle: ^2.3.0 - data-urls: ^3.0.1 - decimal.js: ^10.3.1 + abab: ^2.0.6 + cssstyle: ^3.0.0 + data-urls: ^4.0.0 + decimal.js: ^10.4.3 domexception: ^4.0.0 - escodegen: ^2.0.0 form-data: ^4.0.0 html-encoding-sniffer: ^3.0.0 http-proxy-agent: ^5.0.0 - https-proxy-agent: ^5.0.0 + https-proxy-agent: ^5.0.1 is-potential-custom-element-name: ^1.0.1 - nwsapi: ^2.2.0 - parse5: 6.0.1 - saxes: ^5.0.1 + nwsapi: ^2.2.4 + parse5: ^7.1.2 + rrweb-cssom: ^0.6.0 + saxes: ^6.0.0 symbol-tree: ^3.2.4 - tough-cookie: ^4.0.0 - w3c-hr-time: ^1.0.2 - w3c-xmlserializer: ^3.0.0 + tough-cookie: ^4.1.2 + w3c-xmlserializer: ^4.0.0 webidl-conversions: ^7.0.0 whatwg-encoding: ^2.0.0 whatwg-mimetype: ^3.0.0 - whatwg-url: ^10.0.0 - ws: ^8.2.3 + whatwg-url: ^12.0.1 + ws: ^8.13.0 xml-name-validator: ^4.0.0 peerDependencies: canvas: ^2.5.0 peerDependenciesMeta: canvas: optional: true - checksum: 94b693bf4a394097dd96705550bb7b6cd3c8db3c5414e6e9c92a0995ed8b61067597da2f37fca6bed4b5a2f1ef33960ee759522156dccd0b306311988ea87cfb + checksum: 5d554ccb1637035d1c3baa832ce6f6c66549b6fa43cc7c39295250092e74a10c2e6c674cb40a208ae850d80436dd109862f95d293528345ab5d6cc5213847f8e languageName: node linkType: hard @@ -27313,13 +27220,6 @@ __metadata: languageName: node linkType: hard -"json-buffer@npm:3.0.0": - version: 3.0.0 - resolution: "json-buffer@npm:3.0.0" - checksum: 0cecacb8025370686a916069a2ff81f7d55167421b6aa7270ee74e244012650dd6bce22b0852202ea7ff8624fce50ff0ec1bdf95914ccb4553426e290d5a63fa - languageName: node - linkType: hard - "json-buffer@npm:3.0.1, json-buffer@npm:~3.0.1": version: 3.0.1 resolution: "json-buffer@npm:3.0.1" @@ -27457,6 +27357,13 @@ __metadata: languageName: node linkType: hard +"jsonc-parser@npm:^3.2.0": + version: 3.2.0 + resolution: "jsonc-parser@npm:3.2.0" + checksum: 946dd9a5f326b745aa326d48a7257e3f4a4b62c5e98ec8e49fa2bdd8d96cef7e6febf1399f5c7016114fd1f68a1c62c6138826d5d90bc650448e3cf0951c53c7 + languageName: node + linkType: hard + "jsonfile@npm:^4.0.0": version: 4.0.0 resolution: "jsonfile@npm:4.0.0" @@ -27665,15 +27572,6 @@ __metadata: languageName: node linkType: hard -"keyv@npm:3.0.0": - version: 3.0.0 - resolution: "keyv@npm:3.0.0" - dependencies: - json-buffer: 3.0.0 - checksum: 5182775e546cdbb88dc583825bc0e990164709f31904a219e3321b3bf564a301ac4e5255ba95f7fba466548eba793b356a04a0242110173b199a37192b3b565f - languageName: node - linkType: hard - "keyv@npm:^4.0.0": version: 4.3.3 resolution: "keyv@npm:4.3.3" @@ -28158,6 +28056,13 @@ __metadata: languageName: node linkType: hard +"local-pkg@npm:^0.4.3": + version: 0.4.3 + resolution: "local-pkg@npm:0.4.3" + checksum: 7825aca531dd6afa3a3712a0208697aa4a5cd009065f32e3fb732aafcc42ed11f277b5ac67229222e96f4def55197171cdf3d5522d0381b489d2e5547b407d55 + languageName: node + linkType: hard + "localforage@npm:^1.8.1": version: 1.10.0 resolution: "localforage@npm:1.10.0" @@ -28289,13 +28194,6 @@ __metadata: languageName: node linkType: hard -"lodash.memoize@npm:4.x": - version: 4.1.2 - resolution: "lodash.memoize@npm:4.1.2" - checksum: 9ff3942feeccffa4f1fafa88d32f0d24fdc62fd15ded5a74a5f950ff5f0c6f61916157246744c620173dddf38d37095a92327d5fd3861e2063e736a5c207d089 - languageName: node - linkType: hard - "lodash.merge@npm:^4.6.2": version: 4.6.2 resolution: "lodash.merge@npm:4.6.2" @@ -28374,13 +28272,6 @@ __metadata: languageName: node linkType: hard -"longest-streak@npm:^2.0.0": - version: 2.0.4 - resolution: "longest-streak@npm:2.0.4" - checksum: 28b8234a14963002c5c71035dee13a0a11e9e9d18ffa320fdc8796ed7437399204495702ed69cd2a7087b0af041a2a8b562829b7c1e2042e73a3374d1ecf6580 - languageName: node - linkType: hard - "longest-streak@npm:^3.0.0": version: 3.0.1 resolution: "longest-streak@npm:3.0.1" @@ -28428,6 +28319,15 @@ __metadata: languageName: node linkType: hard +"loupe@npm:^2.3.1, loupe@npm:^2.3.6": + version: 2.3.6 + resolution: "loupe@npm:2.3.6" + dependencies: + get-func-name: ^2.0.0 + checksum: cc83f1b124a1df7384601d72d8d1f5fe95fd7a8185469fec48bb2e4027e45243949e7a013e8d91051a138451ff0552310c32aa9786e60b6a30d1e801bdc2163f + languageName: node + linkType: hard + "lower-case-first@npm:^1.0.0": version: 1.0.2 resolution: "lower-case-first@npm:1.0.2" @@ -28453,13 +28353,6 @@ __metadata: languageName: node linkType: hard -"lowercase-keys@npm:1.0.0": - version: 1.0.0 - resolution: "lowercase-keys@npm:1.0.0" - checksum: 2370110c149967038fd5eb278f9b2d889eb427487c0e7fb417ab2ef4d93bacba1c8f226cf2ef1c2848b3191f37d84167d4342fbee72a1a122086680adecf362b - languageName: node - linkType: hard - "lowercase-keys@npm:^1.0.0": version: 1.0.1 resolution: "lowercase-keys@npm:1.0.1" @@ -28644,12 +28537,12 @@ __metadata: languageName: node linkType: hard -"make-dir@npm:^1.0.0": - version: 1.3.0 - resolution: "make-dir@npm:1.3.0" +"magic-string@npm:^0.30.0": + version: 0.30.0 + resolution: "magic-string@npm:0.30.0" dependencies: - pify: ^3.0.0 - checksum: c564f6e7bb5ace1c02ad56b3a5f5e07d074af0c0b693c55c7b2c2b148882827c8c2afc7b57e43338a9f90c125b58d604e8cf3e6990a48bf949dfea8c79668c0b + "@jridgewell/sourcemap-codec": ^1.4.13 + checksum: 7bdf22e27334d8a393858a16f5f840af63a7c05848c000fd714da5aa5eefa09a1bc01d8469362f25cc5c4a14ec01b46557b7fff8751365522acddf21e57c488d languageName: node linkType: hard @@ -28672,7 +28565,7 @@ __metadata: languageName: node linkType: hard -"make-error@npm:1.x, make-error@npm:^1.1.1": +"make-error@npm:^1.1.1": version: 1.3.6 resolution: "make-error@npm:1.3.6" checksum: b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 @@ -28779,13 +28672,6 @@ __metadata: languageName: node linkType: hard -"markdown-extensions@npm:^1.0.0": - version: 1.1.1 - resolution: "markdown-extensions@npm:1.1.1" - checksum: 8a6dd128be1c524049ea6a41a9193715c2835d3d706af4b8b714ff2043a82786dbcd4a8f1fa9ddd28facbc444426c97515aef2d1f3dd11d5e2d63749ba577b1e - languageName: node - linkType: hard - "markdown-it@npm:^13.0.1": version: 13.0.1 resolution: "markdown-it@npm:13.0.1" @@ -28801,15 +28687,6 @@ __metadata: languageName: node linkType: hard -"markdown-table@npm:^2.0.0": - version: 2.0.0 - resolution: "markdown-table@npm:2.0.0" - dependencies: - repeat-string: ^1.0.0 - checksum: 9bb634a9300016cbb41216c1eab44c74b6b7083ac07872e296f900a29449cf0e260ece03fa10c3e9784ab94c61664d1d147da0315f95e1336e2bdcc025615c90 - languageName: node - linkType: hard - "marked@npm:4.2.12": version: 4.2.12 resolution: "marked@npm:4.2.12" @@ -28819,13 +28696,12 @@ __metadata: languageName: node linkType: hard -"match-sorter@npm:^4.2.0": - version: 4.2.1 - resolution: "match-sorter@npm:4.2.1" +"md5-hex@npm:^3.0.1": + version: 3.0.1 + resolution: "md5-hex@npm:3.0.1" dependencies: - "@babel/runtime": ^7.10.5 - remove-accents: 0.4.2 - checksum: 7f3cd8f84cdb4567b7a81f66a095e418044f318f41b6c8a1640730c99e370af9e5054f5a1ed2dfa1287a23101d75a105da63e4d95e8ac2f7061a8f8b32367c7d + blueimp-md5: ^2.10.0 + checksum: 6799a19e8bdd3e0c2861b94c1d4d858a89220488d7885c1fa236797e367d0c2e5f2b789e05309307083503f85be3603a9686a5915568a473137d6b4117419cc2 languageName: node linkType: hard @@ -28880,30 +28756,6 @@ __metadata: languageName: node linkType: hard -"mdast-util-find-and-replace@npm:^1.1.0": - version: 1.1.1 - resolution: "mdast-util-find-and-replace@npm:1.1.1" - dependencies: - escape-string-regexp: ^4.0.0 - unist-util-is: ^4.0.0 - unist-util-visit-parents: ^3.0.0 - checksum: e4c9e50d9bce5ae4c728a925bd60080b94d16aaa312c27e2b70b16ddc29a5d0a0844d6e18efaef08aeb22c68303ec528f20183d1b0420504a0c2c1710cebd76f - languageName: node - linkType: hard - -"mdast-util-from-markdown@npm:^0.8.0": - version: 0.8.5 - resolution: "mdast-util-from-markdown@npm:0.8.5" - dependencies: - "@types/mdast": ^3.0.0 - mdast-util-to-string: ^2.0.0 - micromark: ~2.11.0 - parse-entities: ^2.0.0 - unist-util-stringify-position: ^2.0.0 - checksum: 5a9d0d753a42db763761e874c22365d0c7c9934a5a18b5ff76a0643610108a208a041ffdb2f3d3dd1863d3d915225a4020a0aade282af0facfd0df110601eee6 - languageName: node - linkType: hard - "mdast-util-from-markdown@npm:^1.0.0": version: 1.2.0 resolution: "mdast-util-from-markdown@npm:1.2.0" @@ -28924,113 +28776,6 @@ __metadata: languageName: node linkType: hard -"mdast-util-gfm-autolink-literal@npm:^0.1.0": - version: 0.1.3 - resolution: "mdast-util-gfm-autolink-literal@npm:0.1.3" - dependencies: - ccount: ^1.0.0 - mdast-util-find-and-replace: ^1.1.0 - micromark: ^2.11.3 - checksum: 9f7b888678631fd8c0a522b0689a750aead2b05d57361dbdf02c10381557f1ce874f746226141f3ace1e0e7952495e8d5ce8f9af423a7a66bb300d4635a918eb - languageName: node - linkType: hard - -"mdast-util-gfm-strikethrough@npm:^0.2.0": - version: 0.2.3 - resolution: "mdast-util-gfm-strikethrough@npm:0.2.3" - dependencies: - mdast-util-to-markdown: ^0.6.0 - checksum: 51aa11ca8f1a5745f1eb9ccddb0eca797b3ede6f0c7bf355d594ad57c02c98d95260f00b1c4b07504018e0b22708531eabb76037841f09ce8465444706a06522 - languageName: node - linkType: hard - -"mdast-util-gfm-table@npm:^0.1.0": - version: 0.1.6 - resolution: "mdast-util-gfm-table@npm:0.1.6" - dependencies: - markdown-table: ^2.0.0 - mdast-util-to-markdown: ~0.6.0 - checksum: eeb43faf833753315b4ccf8d7bc8a6845b31562b2d2dd12a92aa40f9cee1b1954643c7515399a98f9b2e143c95cf6b5c0aac5941a4f609d6a57335587cee99ac - languageName: node - linkType: hard - -"mdast-util-gfm-task-list-item@npm:^0.1.0": - version: 0.1.6 - resolution: "mdast-util-gfm-task-list-item@npm:0.1.6" - dependencies: - mdast-util-to-markdown: ~0.6.0 - checksum: c10480c0ae86547980b38b49fba2ecd36a50bf1f3478d3f12810a0d8e8f821585c2bd7d805dd735518e84493b5eef314afdb8d59807021e2d9aa22d077eb7588 - languageName: node - linkType: hard - -"mdast-util-gfm@npm:^0.1.0": - version: 0.1.2 - resolution: "mdast-util-gfm@npm:0.1.2" - dependencies: - mdast-util-gfm-autolink-literal: ^0.1.0 - mdast-util-gfm-strikethrough: ^0.2.0 - mdast-util-gfm-table: ^0.1.0 - mdast-util-gfm-task-list-item: ^0.1.0 - mdast-util-to-markdown: ^0.6.1 - checksum: 368ed535b2c2e0f33d0225a9e9c985468bf4825a06896815369aea585f6defaccb555ac40ba911e02c8e8c47e79f7efb4348de532de50bca2638a1e568f2d3c9 - languageName: node - linkType: hard - -"mdast-util-mdx-expression@npm:^1.0.0": - version: 1.2.0 - resolution: "mdast-util-mdx-expression@npm:1.2.0" - dependencies: - "@types/estree-jsx": ^0.0.1 - "@types/hast": ^2.0.0 - "@types/mdast": ^3.0.0 - mdast-util-from-markdown: ^1.0.0 - mdast-util-to-markdown: ^1.0.0 - checksum: 375342525db8c4e3060cf9a2ddcc2f50ac2c0878da63557695165f593b7a2e4b2d6d398f05f638a6f7ef36c2c3bdbd4c64aab85ef35d990dae17303d55635cfd - languageName: node - linkType: hard - -"mdast-util-mdx-jsx@npm:^2.0.0": - version: 2.0.1 - resolution: "mdast-util-mdx-jsx@npm:2.0.1" - dependencies: - "@types/estree-jsx": ^0.0.1 - "@types/hast": ^2.0.0 - "@types/mdast": ^3.0.0 - ccount: ^2.0.0 - mdast-util-to-markdown: ^1.3.0 - parse-entities: ^4.0.0 - stringify-entities: ^4.0.0 - unist-util-remove-position: ^4.0.0 - unist-util-stringify-position: ^3.0.0 - vfile-message: ^3.0.0 - checksum: 19825928595153eb7081275d15b40965960a2b52077913dc37469e891d91a8166a6c837646ce5b90ec1903fbfd51b276d570d1e2c89f00f18c0bfe286f1da681 - languageName: node - linkType: hard - -"mdast-util-mdx@npm:^2.0.0": - version: 2.0.0 - resolution: "mdast-util-mdx@npm:2.0.0" - dependencies: - mdast-util-mdx-expression: ^1.0.0 - mdast-util-mdx-jsx: ^2.0.0 - mdast-util-mdxjs-esm: ^1.0.0 - checksum: 4744bfbbd337c2a99a3ef339673c549a670d6496e0d3a6d747d2451e112d6fef7d27613549b0bd62a5f92ea7919e3bacd78c731e8a3d80552a09b80896554cf6 - languageName: node - linkType: hard - -"mdast-util-mdxjs-esm@npm:^1.0.0": - version: 1.2.0 - resolution: "mdast-util-mdxjs-esm@npm:1.2.0" - dependencies: - "@types/estree-jsx": ^0.0.1 - "@types/hast": ^2.0.0 - "@types/mdast": ^3.0.0 - mdast-util-from-markdown: ^1.0.0 - mdast-util-to-markdown: ^1.0.0 - checksum: be8a9bc77bc66b2a7dd9057974b30e7e8e0a37caee467ee7f22451da25e4aeb58eec78b93132672449f8714bfb5c60dc58b3822956bdc8fffbc2ff476a1e4450 - languageName: node - linkType: hard - "mdast-util-to-hast@npm:10.0.1": version: 10.0.1 resolution: "mdast-util-to-hast@npm:10.0.1" @@ -29064,39 +28809,7 @@ __metadata: languageName: node linkType: hard -"mdast-util-to-hast@npm:^12.1.0": - version: 12.1.1 - resolution: "mdast-util-to-hast@npm:12.1.1" - dependencies: - "@types/hast": ^2.0.0 - "@types/mdast": ^3.0.0 - "@types/mdurl": ^1.0.0 - mdast-util-definitions: ^5.0.0 - mdurl: ^1.0.0 - micromark-util-sanitize-uri: ^1.0.0 - unist-builder: ^3.0.0 - unist-util-generated: ^2.0.0 - unist-util-position: ^4.0.0 - unist-util-visit: ^4.0.0 - checksum: 4c5a73e0463493d5ab2c033d42f8daead24d0808969bf21c3a720786784a347cedc1d3ae26b37737dbe3ea0839bc130bf7e20f3bc02e2387e6e7b0a5f94bafe4 - languageName: node - linkType: hard - -"mdast-util-to-markdown@npm:^0.6.0, mdast-util-to-markdown@npm:^0.6.1, mdast-util-to-markdown@npm:~0.6.0": - version: 0.6.5 - resolution: "mdast-util-to-markdown@npm:0.6.5" - dependencies: - "@types/unist": ^2.0.0 - longest-streak: ^2.0.0 - mdast-util-to-string: ^2.0.0 - parse-entities: ^2.0.0 - repeat-string: ^1.0.0 - zwitch: ^1.0.0 - checksum: 7ebc47533bff6e8669f85ae124dc521ea570e9df41c0d9e4f0f43c19ef4a8c9928d741f3e4afa62fcca1927479b714582ff5fd684ef240d84ee5b75ab9d863cf - languageName: node - linkType: hard - -"mdast-util-to-markdown@npm:^1.0.0, mdast-util-to-markdown@npm:^1.3.0": +"mdast-util-to-markdown@npm:^1.0.0": version: 1.3.0 resolution: "mdast-util-to-markdown@npm:1.3.0" dependencies: @@ -29118,13 +28831,6 @@ __metadata: languageName: node linkType: hard -"mdast-util-to-string@npm:^2.0.0": - version: 2.0.0 - resolution: "mdast-util-to-string@npm:2.0.0" - checksum: 0b2113ada10e002fbccb014170506dabe2f2ddacaacbe4bc1045c33f986652c5a162732a2c057c5335cdb58419e2ad23e368e5be226855d4d4e280b81c4e9ec2 - languageName: node - linkType: hard - "mdast-util-to-string@npm:^3.0.0, mdast-util-to-string@npm:^3.1.0": version: 3.1.0 resolution: "mdast-util-to-string@npm:3.1.0" @@ -29350,7 +29056,7 @@ __metadata: languageName: node linkType: hard -"micromark-core-commonmark@npm:^1.0.0, micromark-core-commonmark@npm:^1.0.1": +"micromark-core-commonmark@npm:^1.0.1": version: 1.0.6 resolution: "micromark-core-commonmark@npm:1.0.6" dependencies: @@ -29374,136 +29080,6 @@ __metadata: languageName: node linkType: hard -"micromark-extension-gfm-autolink-literal@npm:~0.5.0": - version: 0.5.7 - resolution: "micromark-extension-gfm-autolink-literal@npm:0.5.7" - dependencies: - micromark: ~2.11.3 - checksum: 319ec793c2e374e4cc0cbbb07326c1affb78819e507c7c1577f9d14b972852a6bb55e664332ec51f7cca24bdddd43429c5dd55f11e9200b1a00bab1bf494fb2d - languageName: node - linkType: hard - -"micromark-extension-gfm-strikethrough@npm:~0.6.5": - version: 0.6.5 - resolution: "micromark-extension-gfm-strikethrough@npm:0.6.5" - dependencies: - micromark: ~2.11.0 - checksum: 67711633590d3e688759a46aaed9f9d04bcaf29b6615eec17af082eabe1059fbca4beb41ba13db418ae7be3ac90198742fbabe519a70f9b6bb615598c5d6ef1a - languageName: node - linkType: hard - -"micromark-extension-gfm-table@npm:~0.4.0": - version: 0.4.3 - resolution: "micromark-extension-gfm-table@npm:0.4.3" - dependencies: - micromark: ~2.11.0 - checksum: 12c78de985944dd66aae409871c45d801cc65704f55ea5cc8afac422042c6d3b5e777b154c079ae81298b30b83434b257b54981bda51c220a102042dd2524a63 - languageName: node - linkType: hard - -"micromark-extension-gfm-tagfilter@npm:~0.3.0": - version: 0.3.0 - resolution: "micromark-extension-gfm-tagfilter@npm:0.3.0" - checksum: 9369736a203836b2933dfdeacab863e7a4976139b9dd46fa5bd6c2feeef50c7dbbcdd641ae95f0481f577d8aa22396bfa7ed9c38515647d4cf3f2c727cc094a3 - languageName: node - linkType: hard - -"micromark-extension-gfm-task-list-item@npm:~0.3.0": - version: 0.3.3 - resolution: "micromark-extension-gfm-task-list-item@npm:0.3.3" - dependencies: - micromark: ~2.11.0 - checksum: e4ccbe6b440234c8ee05d89315e1204c78773724241af31ac328194470a8a61bc6606eab3ce2d9a83da4401b06e07936038654493da715d40522133d1556dda4 - languageName: node - linkType: hard - -"micromark-extension-gfm@npm:^0.3.0": - version: 0.3.3 - resolution: "micromark-extension-gfm@npm:0.3.3" - dependencies: - micromark: ~2.11.0 - micromark-extension-gfm-autolink-literal: ~0.5.0 - micromark-extension-gfm-strikethrough: ~0.6.5 - micromark-extension-gfm-table: ~0.4.0 - micromark-extension-gfm-tagfilter: ~0.3.0 - micromark-extension-gfm-task-list-item: ~0.3.0 - checksum: 7957a1afd8c92daa0fc165342902729334b22d59feacd85b20a0d9cc453c90bbdd5b5ba85a3d177c01802060aeb3326daf05d3e6d95932fcbc8371827c98336e - languageName: node - linkType: hard - -"micromark-extension-mdx-expression@npm:^1.0.0": - version: 1.0.3 - resolution: "micromark-extension-mdx-expression@npm:1.0.3" - dependencies: - micromark-factory-mdx-expression: ^1.0.0 - micromark-factory-space: ^1.0.0 - micromark-util-character: ^1.0.0 - micromark-util-events-to-acorn: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - uvu: ^0.5.0 - checksum: ef4b4137894624a6754b951d3cb7abb20951ca7b37f9ad8a50d2e2b95d0cf880258d71296bfac6be4ff83a8d137b6b657ae852bb6f11f4ca11e5e6d62f1b025d - languageName: node - linkType: hard - -"micromark-extension-mdx-jsx@npm:^1.0.0": - version: 1.0.3 - resolution: "micromark-extension-mdx-jsx@npm:1.0.3" - dependencies: - "@types/acorn": ^4.0.0 - estree-util-is-identifier-name: ^2.0.0 - micromark-factory-mdx-expression: ^1.0.0 - micromark-factory-space: ^1.0.0 - micromark-util-character: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - uvu: ^0.5.0 - vfile-message: ^3.0.0 - checksum: 1a5566890aabc52fe96b78e3a3a507dee03a2232e44b9360b00617734e156f934e85bc6a477fbb856c793fe33c9fb7d2207a4f50e680168c0d04ba9c9336d960 - languageName: node - linkType: hard - -"micromark-extension-mdx-md@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-extension-mdx-md@npm:1.0.0" - dependencies: - micromark-util-types: ^1.0.0 - checksum: b4f205e1d5f0946b4755541ef44ffd0b3be8c7ecfc08d8b139b6a21fbd3ff62d8fdb6b7e6d17bd9a3b610450267f43a41703dc48b341da9addd743a28cdefa64 - languageName: node - linkType: hard - -"micromark-extension-mdxjs-esm@npm:^1.0.0": - version: 1.0.2 - resolution: "micromark-extension-mdxjs-esm@npm:1.0.2" - dependencies: - micromark-core-commonmark: ^1.0.0 - micromark-util-character: ^1.0.0 - micromark-util-events-to-acorn: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - unist-util-position-from-estree: ^1.1.0 - uvu: ^0.5.0 - vfile-message: ^3.0.0 - checksum: 725b4e420f502fcc7b351781f9897a1077959006b175e0d55e11054df44ce4b1df074e9e9a661c7c092f33acf3dd91f71d4cbb0626a387b9af28594c18c57bcb - languageName: node - linkType: hard - -"micromark-extension-mdxjs@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-extension-mdxjs@npm:1.0.0" - dependencies: - acorn: ^8.0.0 - acorn-jsx: ^5.0.0 - micromark-extension-mdx-expression: ^1.0.0 - micromark-extension-mdx-jsx: ^1.0.0 - micromark-extension-mdx-md: ^1.0.0 - micromark-extension-mdxjs-esm: ^1.0.0 - micromark-util-combine-extensions: ^1.0.0 - micromark-util-types: ^1.0.0 - checksum: ba836c6d2dfc67597886e88f533ffa02f2029dbe216a0651f1066e70f8529a700bcc7fa2bc4201ee12fd3d1cd7da7093d5a442442daeb84b27df96aaffb7699c - languageName: node - linkType: hard - "micromark-factory-destination@npm:^1.0.0": version: 1.0.0 resolution: "micromark-factory-destination@npm:1.0.0" @@ -29527,22 +29103,6 @@ __metadata: languageName: node linkType: hard -"micromark-factory-mdx-expression@npm:^1.0.0": - version: 1.0.6 - resolution: "micromark-factory-mdx-expression@npm:1.0.6" - dependencies: - micromark-factory-space: ^1.0.0 - micromark-util-character: ^1.0.0 - micromark-util-events-to-acorn: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - unist-util-position-from-estree: ^1.0.0 - uvu: ^0.5.0 - vfile-message: ^3.0.0 - checksum: 7b69f0e77664e9820639cf23c4f01d43aa0e7abd88021c3db428435e3a5a1f9446f8dc5c2a6ed4ac16c6495ca51937609a5c98ff59a62c54be382c2725500b39 - languageName: node - linkType: hard - "micromark-factory-space@npm:^1.0.0": version: 1.0.0 resolution: "micromark-factory-space@npm:1.0.0" @@ -29646,20 +29206,6 @@ __metadata: languageName: node linkType: hard -"micromark-util-events-to-acorn@npm:^1.0.0": - version: 1.0.4 - resolution: "micromark-util-events-to-acorn@npm:1.0.4" - dependencies: - "@types/acorn": ^4.0.0 - "@types/estree": ^0.0.50 - estree-util-visit: ^1.0.0 - micromark-util-types: ^1.0.0 - uvu: ^0.5.0 - vfile-message: ^3.0.0 - checksum: e1e254b00474416c98b432a5f01c147e745a01a4b7886b97ada4997ac5ea88085255747d86492a3e16c3d66dbc3fc2a613fb3128fc3f3ad3987424104ffd8abe - languageName: node - linkType: hard - "micromark-util-html-tag-name@npm:^1.0.0": version: 1.0.0 resolution: "micromark-util-html-tag-name@npm:1.0.0" @@ -29722,16 +29268,6 @@ __metadata: languageName: node linkType: hard -"micromark@npm:^2.11.3, micromark@npm:~2.11.0, micromark@npm:~2.11.3": - version: 2.11.4 - resolution: "micromark@npm:2.11.4" - dependencies: - debug: ^4.0.0 - parse-entities: ^2.0.0 - checksum: f8a5477d394908a5d770227aea71657a76423d420227c67ea0699e659a5f62eb39d504c1f7d69ec525a6af5aaeb6a7bffcdba95614968c03d41d3851edecb0d6 - languageName: node - linkType: hard - "micromark@npm:^3.0.0": version: 3.0.10 resolution: "micromark@npm:3.0.10" @@ -29800,7 +29336,7 @@ __metadata: languageName: node linkType: hard -"mime-db@npm:1.52.0, mime-db@npm:>= 1.43.0 < 2, mime-db@npm:^1.28.0": +"mime-db@npm:1.52.0, mime-db@npm:>= 1.43.0 < 2": version: 1.52.0 resolution: "mime-db@npm:1.52.0" checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f @@ -30140,6 +29676,18 @@ __metadata: languageName: node linkType: hard +"mlly@npm:^1.2.0": + version: 1.2.1 + resolution: "mlly@npm:1.2.1" + dependencies: + acorn: ^8.8.2 + pathe: ^1.1.0 + pkg-types: ^1.0.3 + ufo: ^1.1.2 + checksum: 82939436ec0e1c53e400d86fd571bd005090383b3fa49d5d8b9df4b388b24bae2b7b2f0369ef0c905d29fb35377cd4724d2bf5e5cd130d922849f74948bb81f0 + languageName: node + linkType: hard + "mock-fs@npm:^4.1.0": version: 4.14.0 resolution: "mock-fs@npm:4.14.0" @@ -30464,6 +30012,15 @@ __metadata: languageName: node linkType: hard +"nanoid@npm:^3.3.6": + version: 3.3.6 + resolution: "nanoid@npm:3.3.6" + bin: + nanoid: bin/nanoid.cjs + checksum: 7d0eda657002738aa5206107bd0580aead6c95c460ef1bdd0b1a87a9c7ae6277ac2e9b945306aaa5b32c6dcb7feaf462d0f552e7f8b5718abfc6ead5c94a71b3 + languageName: node + linkType: hard + "nanomatch@npm:^1.2.9": version: 1.2.13 resolution: "nanomatch@npm:1.2.13" @@ -30629,17 +30186,6 @@ __metadata: languageName: node linkType: hard -"next-themes@npm:^0.0.8": - version: 0.0.8 - resolution: "next-themes@npm:0.0.8" - peerDependencies: - next: ^9.5.5 - react: ^16.13.1 - react-dom: ^16.13.1 - checksum: 0764d2594f81019fa7d121fa0cea47fcd4e027efe8b341c8a54127bde80795f712dab4058ee45be64e5d070725920f91b64ece0f63680130c5e5555efe6eb9bf - languageName: node - linkType: hard - "next-themes@npm:^0.2.0": version: 0.2.0 resolution: "next-themes@npm:0.2.0" @@ -30819,50 +30365,6 @@ __metadata: languageName: node linkType: hard -"nextra-theme-docs@npm:^1.2.2": - version: 1.2.6 - resolution: "nextra-theme-docs@npm:1.2.6" - dependencies: - "@mdx-js/react": ^1.6.16 - "@reach/skip-nav": ^0.11.2 - classnames: ^2.2.6 - focus-visible: ^5.1.0 - github-slugger: ^1.3.0 - grapheme-splitter: ^1.0.4 - intersection-observer: ^0.12.0 - match-sorter: ^4.2.0 - next-themes: ^0.0.8 - parse-git-url: ^1.0.1 - prism-react-renderer: ^1.1.1 - react-innertext: ^1.1.5 - title: ^3.4.2 - peerDependencies: - next: ">=9.5.3" - react: ">=16.13.1" - react-dom: ">=16.13.1" - checksum: 545f5690cc486686e86022ebc86583b3e92602f1d7532c22479a6350b7422974631f62695913cc6f3f19cadbf76688037306142fe33aa77c59e9fd0720997cb3 - languageName: node - linkType: hard - -"nextra@npm:^1.1.0": - version: 1.1.0 - resolution: "nextra@npm:1.1.0" - dependencies: - "@mdx-js/loader": ^2.0.0-next.9 - download: ^8.0.0 - graceful-fs: ^4.2.6 - gray-matter: ^4.0.3 - loader-utils: ^2.0.0 - remark: ^13.0.0 - remark-gfm: ^1.0.0 - slash: ^3.0.0 - strip-markdown: ^4.0.0 - peerDependencies: - react: ">=16.13.1" - checksum: 59afdb888068595793a2637dd071795a3a41bd43b56efa7f44f2beaf9420c6253e688289171ffad2c650189e13c984ecfa88cdf432b8d52e3ede17ad6280ce7c - languageName: node - linkType: hard - "nice-try@npm:^1.0.4": version: 1.0.5 resolution: "nice-try@npm:1.0.5" @@ -31110,17 +30612,6 @@ __metadata: languageName: node linkType: hard -"normalize-url@npm:2.0.1": - version: 2.0.1 - resolution: "normalize-url@npm:2.0.1" - dependencies: - prepend-http: ^2.0.0 - query-string: ^5.0.1 - sort-keys: ^2.0.0 - checksum: 30e337ee03fc7f360c7d2b966438657fabd2628925cc58bffc893982fe4d2c59b397ae664fa2c319cd83565af73eee88906e80bc5eec91bc32b601920e770d75 - languageName: node - linkType: hard - "normalize-url@npm:^6.0.1": version: 6.1.0 resolution: "normalize-url@npm:6.1.0" @@ -31224,10 +30715,10 @@ __metadata: languageName: node linkType: hard -"nwsapi@npm:^2.2.0": - version: 2.2.0 - resolution: "nwsapi@npm:2.2.0" - checksum: 5ef4a9bc0c1a5b7f2e014aa6a4b359a257503b796618ed1ef0eb852098f77e772305bb0e92856e4bbfa3e6c75da48c0113505c76f144555ff38867229c2400a7 +"nwsapi@npm:^2.2.4": + version: 2.2.4 + resolution: "nwsapi@npm:2.2.4" + checksum: a5eb9467158bdf255d27e9c4555e9ca02e4ba84ddce9b683856ed49de23eb1bb28ae3b8e791b7a93d156ad62b324a56f4d44cad827c2ca288c107ed6bdaff8a8 languageName: node linkType: hard @@ -31735,13 +31226,6 @@ __metadata: languageName: node linkType: hard -"p-cancelable@npm:^0.4.0": - version: 0.4.1 - resolution: "p-cancelable@npm:0.4.1" - checksum: d11144d72ee3a99f62fe595cb0e13b8585ea73c3807b4a9671744f1bf5d3ccddb049247a4ec3ceff05ca4adba9d0bb0f1862829daf20795bf528c86fa088509c - languageName: node - linkType: hard - "p-cancelable@npm:^3.0.0": version: 3.0.0 resolution: "p-cancelable@npm:3.0.0" @@ -31756,15 +31240,6 @@ __metadata: languageName: node linkType: hard -"p-event@npm:^2.1.0": - version: 2.3.1 - resolution: "p-event@npm:2.3.1" - dependencies: - p-timeout: ^2.0.1 - checksum: 7f973c4c001045bcd561202fc1b2bdf9e148182bb28a7bafa8e7b2ebfaf71a4f9ba91554222040d364290e707e3ebbb049122b8eda9d2aac413b4cf8de0b79ff - languageName: node - linkType: hard - "p-event@npm:^4.1.0": version: 4.2.0 resolution: "p-event@npm:4.2.0" @@ -31790,13 +31265,6 @@ __metadata: languageName: node linkType: hard -"p-is-promise@npm:^1.1.0": - version: 1.1.0 - resolution: "p-is-promise@npm:1.1.0" - checksum: 64d7c6cda18af2c91c04209e5856c54d1a9818662d2320b34153d446645f431307e04406969a1be00cad680288e86dcf97b9eb39edd5dc4d0b1bd714ee85e13b - languageName: node - linkType: hard - "p-limit@npm:^1.1.0": version: 1.3.0 resolution: "p-limit@npm:1.3.0" @@ -31824,6 +31292,15 @@ __metadata: languageName: node linkType: hard +"p-limit@npm:^4.0.0": + version: 4.0.0 + resolution: "p-limit@npm:4.0.0" + dependencies: + yocto-queue: ^1.0.0 + checksum: 01d9d70695187788f984226e16c903475ec6a947ee7b21948d6f597bed788e3112cc7ec2e171c1d37125057a5f45f3da21d8653e04a3a793589e12e9e80e756b + languageName: node + linkType: hard + "p-locate@npm:^2.0.0": version: 2.0.0 resolution: "p-locate@npm:2.0.0" @@ -31894,15 +31371,6 @@ __metadata: languageName: node linkType: hard -"p-timeout@npm:^2.0.1": - version: 2.0.1 - resolution: "p-timeout@npm:2.0.1" - dependencies: - p-finally: ^1.0.0 - checksum: 9205a661173f03adbeabda8e02826de876376b09c99768bdc33e5b25ae73230e3ac00e520acedbe3cf05fbd3352fb02efbd3811a9a021b148fb15eb07e7accac - languageName: node - linkType: hard - "p-timeout@npm:^3.1.0": version: 3.2.0 resolution: "p-timeout@npm:3.2.0" @@ -32044,29 +31512,6 @@ __metadata: languageName: node linkType: hard -"parse-entities@npm:^4.0.0": - version: 4.0.0 - resolution: "parse-entities@npm:4.0.0" - dependencies: - "@types/unist": ^2.0.0 - character-entities: ^2.0.0 - character-entities-legacy: ^3.0.0 - character-reference-invalid: ^2.0.0 - decode-named-character-reference: ^1.0.0 - is-alphanumerical: ^2.0.0 - is-decimal: ^2.0.0 - is-hexadecimal: ^2.0.0 - checksum: cd9fa53bc056ad8cf8a45494bfd7ce65e8bf6f1b12dcc9a6343376fa529c2012041303c5d0f86babf70afbd13b71c2f219fc3a76fb97d9d559b66578e19cdaf0 - languageName: node - linkType: hard - -"parse-git-url@npm:^1.0.1": - version: 1.0.1 - resolution: "parse-git-url@npm:1.0.1" - checksum: 764d15c50d17308dd90883337d34f6dfc68a6a1e3441d714d9434cf2b12607ee74dd51754b01d07e2fb19592357e59242a1ebdfe2d8025ac6c0998205f66d6dd - languageName: node - linkType: hard - "parse-headers@npm:^2.0.0": version: 2.0.5 resolution: "parse-headers@npm:2.0.5" @@ -32121,17 +31566,26 @@ __metadata: languageName: node linkType: hard -"parse5@npm:6.0.1, parse5@npm:^6.0.0, parse5@npm:^6.0.1": +"parse5@npm:^5.1.1": + version: 5.1.1 + resolution: "parse5@npm:5.1.1" + checksum: 613a714af4c1101d1cb9f7cece2558e35b9ae8a0c03518223a4a1e35494624d9a9ad5fad4c13eab66a0e0adccd9aa3d522fc8f5f9cc19789e0579f3fa0bdfc65 + languageName: node + linkType: hard + +"parse5@npm:^6.0.0, parse5@npm:^6.0.1": version: 6.0.1 resolution: "parse5@npm:6.0.1" checksum: 7d569a176c5460897f7c8f3377eff640d54132b9be51ae8a8fa4979af940830b2b0c296ce75e5bd8f4041520aadde13170dbdec44889975f906098ea0002f4bd languageName: node linkType: hard -"parse5@npm:^5.1.1": - version: 5.1.1 - resolution: "parse5@npm:5.1.1" - checksum: 613a714af4c1101d1cb9f7cece2558e35b9ae8a0c03518223a4a1e35494624d9a9ad5fad4c13eab66a0e0adccd9aa3d522fc8f5f9cc19789e0579f3fa0bdfc65 +"parse5@npm:^7.1.2": + version: 7.1.2 + resolution: "parse5@npm:7.1.2" + dependencies: + entities: ^4.4.0 + checksum: 59465dd05eb4c5ec87b76173d1c596e152a10e290b7abcda1aecf0f33be49646ea74840c69af975d7887543ea45564801736356c568d6b5e71792fd0f4055713 languageName: node linkType: hard @@ -32298,6 +31752,20 @@ __metadata: languageName: node linkType: hard +"pathe@npm:^1.1.0": + version: 1.1.0 + resolution: "pathe@npm:1.1.0" + checksum: 6b9be9968ea08a90c0824934799707a1c6a1ad22ac1f22080f377e3f75856d5e53a331b01d327329bfce538a14590587cfb250e8e7947f64408797c84c252056 + languageName: node + linkType: hard + +"pathval@npm:^1.1.1": + version: 1.1.1 + resolution: "pathval@npm:1.1.1" + checksum: 090e3147716647fb7fb5b4b8c8e5b55e5d0a6086d085b6cd23f3d3c01fcf0ff56fd3cc22f2f4a033bd2e46ed55d61ed8379e123b42afe7d531a2a5fc8bb556d6 + languageName: node + linkType: hard + "pause-stream@npm:0.0.11": version: 0.0.11 resolution: "pause-stream@npm:0.0.11" @@ -32320,13 +31788,6 @@ __metadata: languageName: node linkType: hard -"pend@npm:~1.2.0": - version: 1.2.0 - resolution: "pend@npm:1.2.0" - checksum: 6c72f5243303d9c60bd98e6446ba7d30ae29e3d56fdb6fae8767e8ba6386f33ee284c97efe3230a0d0217e2b1723b8ab490b1bbf34fcbb2180dbc8a9de47850d - languageName: node - linkType: hard - "performance-now@npm:^2.1.0": version: 2.1.0 resolution: "performance-now@npm:2.1.0" @@ -32334,16 +31795,6 @@ __metadata: languageName: node linkType: hard -"periscopic@npm:^3.0.0": - version: 3.0.4 - resolution: "periscopic@npm:3.0.4" - dependencies: - estree-walker: ^3.0.0 - is-reference: ^3.0.0 - checksum: 0920ea1b0294c2463b7df858d7f895d0a69f15ec5c7b93d63749e7a8f6d9c065853ebea701305f1756f70310633832cf5c90e43e9363cce51abec44cc2f5c188 - languageName: node - linkType: hard - "pg-connection-string@npm:^2.5.0": version: 2.5.0 resolution: "pg-connection-string@npm:2.5.0" @@ -32574,6 +32025,17 @@ __metadata: languageName: node linkType: hard +"pkg-types@npm:^1.0.3": + version: 1.0.3 + resolution: "pkg-types@npm:1.0.3" + dependencies: + jsonc-parser: ^3.2.0 + mlly: ^1.2.0 + pathe: ^1.1.0 + checksum: 4b305c834b912ddcc8a0fe77530c0b0321fe340396f84cbb87aecdbc126606f47f2178f23b8639e71a4870f9631c7217aef52ffed0ae17ea2dbbe7e43d116a6e + languageName: node + linkType: hard + "playwright-core@npm:1.31.2": version: 1.31.2 resolution: "playwright-core@npm:1.31.2" @@ -32910,6 +32372,17 @@ __metadata: languageName: node linkType: hard +"postcss@npm:^8.4.23": + version: 8.4.23 + resolution: "postcss@npm:8.4.23" + dependencies: + nanoid: ^3.3.6 + picocolors: ^1.0.0 + source-map-js: ^1.0.2 + checksum: 8bb9d1b2ea6e694f8987d4f18c94617971b2b8d141602725fedcc2222fdc413b776a6e1b969a25d627d7b2681ca5aabb56f59e727ef94072e1b6ac8412105a2f + languageName: node + linkType: hard + "postgres-array@npm:~2.0.0": version: 2.0.0 resolution: "postgres-array@npm:2.0.0" @@ -33016,13 +32489,6 @@ __metadata: languageName: node linkType: hard -"prepend-http@npm:^2.0.0": - version: 2.0.0 - resolution: "prepend-http@npm:2.0.0" - checksum: 7694a9525405447662c1ffd352fcb41b6410c705b739b6f4e3a3e21cf5fdede8377890088e8934436b8b17ba55365a615f153960f30877bf0d0392f9e93503ea - languageName: node - linkType: hard - "prettier-linter-helpers@npm:^1.0.0": version: 1.0.0 resolution: "prettier-linter-helpers@npm:1.0.0" @@ -33134,7 +32600,7 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^27.0.2": +"pretty-format@npm:^27.0.2, pretty-format@npm:^27.5.1": version: 27.5.1 resolution: "pretty-format@npm:27.5.1" dependencies: @@ -33145,7 +32611,7 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^28.0.0, pretty-format@npm:^28.1.3": +"pretty-format@npm:^28.1.3": version: 28.1.3 resolution: "pretty-format@npm:28.1.3" dependencies: @@ -33157,6 +32623,17 @@ __metadata: languageName: node linkType: hard +"pretty-format@npm:^29.5.0": + version: 29.5.0 + resolution: "pretty-format@npm:29.5.0" + dependencies: + "@jest/schemas": ^29.4.3 + ansi-styles: ^5.0.0 + react-is: ^18.0.0 + checksum: 4065356b558e6db25b4d41a01efb386935a6c06a0c9c104ef5ce59f2f476b8210edb8b3949b386e60ada0a6dc5ebcb2e6ccddc8c64dfd1a9943c3c3a9e7eaf89 + languageName: node + linkType: hard + "pretty-format@npm:^3.8.0": version: 3.8.0 resolution: "pretty-format@npm:3.8.0" @@ -33180,15 +32657,6 @@ __metadata: languageName: node linkType: hard -"prism-react-renderer@npm:^1.1.1": - version: 1.3.1 - resolution: "prism-react-renderer@npm:1.3.1" - peerDependencies: - react: ">=0.14.9" - checksum: 883693ea59dd6c7d821930ff232f1b28cd3f5d4a111fdb0a730f2ae34ffc7ca805ad3522c86eecbc79f9bee30279371e1fa6b33b4f72a6d3f17921b733b303b6 - languageName: node - linkType: hard - "prism-react-renderer@npm:^1.3.5": version: 1.3.5 resolution: "prism-react-renderer@npm:1.3.5" @@ -33328,7 +32796,7 @@ __metadata: languageName: node linkType: hard -"prompts@npm:^2.0.1, prompts@npm:^2.2.1, prompts@npm:^2.4.0": +"prompts@npm:^2.0.1, prompts@npm:^2.4.0": version: 2.4.2 resolution: "prompts@npm:2.4.2" dependencies: @@ -33490,6 +32958,13 @@ __metadata: languageName: node linkType: hard +"punycode@npm:^2.3.0": + version: 2.3.0 + resolution: "punycode@npm:2.3.0" + checksum: 39f760e09a2a3bbfe8f5287cf733ecdad69d6af2fe6f97ca95f24b8921858b91e9ea3c9eeec6e08cede96181b3bb33f95c6ffd8c77e63986508aa2e8159fa200 + languageName: node + linkType: hard + "q@npm:2.0.x": version: 2.0.3 resolution: "q@npm:2.0.3" @@ -34161,16 +33636,6 @@ __metadata: languageName: node linkType: hard -"react-innertext@npm:^1.1.5": - version: 1.1.5 - resolution: "react-innertext@npm:1.1.5" - peerDependencies: - "@types/react": ">=0.0.0 <=99" - react: ">=0.0.0 <=99" - checksum: 01c9c8a5a471f03965b9d69c8bee02d420fd3a607b678004f0bdee098c9bccb3e2eae8460c90b1d180d2a8d544a3ddb09b8c2a11e5aa8b3a077733e2d9c25c2c - languageName: node - linkType: hard - "react-inspector@npm:^5.1.0, react-inspector@npm:^5.1.1": version: 5.1.1 resolution: "react-inspector@npm:5.1.1" @@ -34773,7 +34238,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:1 || 2, readable-stream@npm:^2.0.0, readable-stream@npm:^2.0.1, readable-stream@npm:^2.0.2, readable-stream@npm:^2.0.5, readable-stream@npm:^2.1.0, readable-stream@npm:^2.1.5, readable-stream@npm:^2.2.2, readable-stream@npm:^2.3.0, readable-stream@npm:^2.3.3, readable-stream@npm:^2.3.5, readable-stream@npm:^2.3.6, readable-stream@npm:~2.3.6": +"readable-stream@npm:1 || 2, readable-stream@npm:^2.0.0, readable-stream@npm:^2.0.1, readable-stream@npm:^2.0.2, readable-stream@npm:^2.0.5, readable-stream@npm:^2.1.0, readable-stream@npm:^2.1.5, readable-stream@npm:^2.2.2, readable-stream@npm:^2.3.3, readable-stream@npm:^2.3.6, readable-stream@npm:~2.3.6": version: 2.3.7 resolution: "readable-stream@npm:2.3.7" dependencies: @@ -35105,16 +34570,6 @@ __metadata: languageName: node linkType: hard -"remark-gfm@npm:^1.0.0": - version: 1.0.0 - resolution: "remark-gfm@npm:1.0.0" - dependencies: - mdast-util-gfm: ^0.1.0 - micromark-extension-gfm: ^0.3.0 - checksum: 877b0f6472a90a490b5d5a1393f46d22c4ab7451b1e83ebd7362e5be9c661b6ed03e76c28f76894f460bedf23345c589d3f412c273ce0d4d442c6a4d65b0eae4 - languageName: node - linkType: hard - "remark-html@npm:^14.0.1": version: 14.0.1 resolution: "remark-html@npm:14.0.1" @@ -35144,16 +34599,6 @@ __metadata: languageName: node linkType: hard -"remark-mdx@npm:^2.0.0": - version: 2.1.1 - resolution: "remark-mdx@npm:2.1.1" - dependencies: - mdast-util-mdx: ^2.0.0 - micromark-extension-mdxjs: ^1.0.0 - checksum: cd67006499d85b73fd69ff79e3a9202ffa831bfd243eeafd53a2d335d860e7cb4956801461d752e8791a4cface9663f787ad5c828ed028cbc0f11b12846633aa - languageName: node - linkType: hard - "remark-parse@npm:8.0.3": version: 8.0.3 resolution: "remark-parse@npm:8.0.3" @@ -35189,27 +34634,6 @@ __metadata: languageName: node linkType: hard -"remark-parse@npm:^9.0.0": - version: 9.0.0 - resolution: "remark-parse@npm:9.0.0" - dependencies: - mdast-util-from-markdown: ^0.8.0 - checksum: 50104880549639b7dd7ae6f1e23c214915fe9c054f02f3328abdaee3f6de6d7282bf4357c3c5b106958fe75e644a3c248c2197755df34f9955e8e028fc74868f - languageName: node - linkType: hard - -"remark-rehype@npm:^10.0.0": - version: 10.1.0 - resolution: "remark-rehype@npm:10.1.0" - dependencies: - "@types/hast": ^2.0.0 - "@types/mdast": ^3.0.0 - mdast-util-to-hast: ^12.1.0 - unified: ^10.0.0 - checksum: b9ac8acff3383b204dfdc2599d0bdf86e6ca7e837033209584af2e6aaa6a9013e519a379afa3201299798cab7298c8f4b388de118c312c67234c133318aec084 - languageName: node - linkType: hard - "remark-slug@npm:^6.0.0": version: 6.1.0 resolution: "remark-slug@npm:6.1.0" @@ -35241,26 +34665,6 @@ __metadata: languageName: node linkType: hard -"remark-stringify@npm:^9.0.0": - version: 9.0.1 - resolution: "remark-stringify@npm:9.0.1" - dependencies: - mdast-util-to-markdown: ^0.6.0 - checksum: 93f46076f4d96ab1946d13e7dd43e83088480ac6b1dfe05a65e2c2f0e33d1f52a50175199b464a81803fc0f5b3bf182037665f89720b30515eba37bec4d63d56 - languageName: node - linkType: hard - -"remark@npm:^13.0.0": - version: 13.0.0 - resolution: "remark@npm:13.0.0" - dependencies: - remark-parse: ^9.0.0 - remark-stringify: ^9.0.0 - unified: ^9.1.0 - checksum: e3432bfa1b0029680302e99a6356c08789b3e908457a71eca37ada6a58497e302f08bd5f62fbad840082a8348c181b7f6f981aaf3cd3112207583ddf793a2429 - languageName: node - linkType: hard - "remark@npm:^14.0.2": version: 14.0.3 resolution: "remark@npm:14.0.3" @@ -35285,13 +34689,6 @@ __metadata: languageName: node linkType: hard -"remove-accents@npm:0.4.2": - version: 0.4.2 - resolution: "remove-accents@npm:0.4.2" - checksum: 84a6988555dea24115e2d1954db99509588d43fe55a1590f0b5894802776f7b488b3151c37ceb9e4f4b646f26b80b7325dcea2fae58bc3865df146e1fa606711 - languageName: node - linkType: hard - "remove-markdown@npm:^0.5.0": version: 0.5.0 resolution: "remove-markdown@npm:0.5.0" @@ -35339,7 +34736,7 @@ __metadata: languageName: node linkType: hard -"repeat-string@npm:^1.0.0, repeat-string@npm:^1.5.2, repeat-string@npm:^1.5.4, repeat-string@npm:^1.6.1": +"repeat-string@npm:^1.5.2, repeat-string@npm:^1.5.4, repeat-string@npm:^1.6.1": version: 1.6.1 resolution: "repeat-string@npm:1.6.1" checksum: 1b809fc6db97decdc68f5b12c4d1a671c8e3f65ec4a40c238bc5200e44e85bcc52a54f78268ab9c29fcf5fe4f1343e805420056d1f30fa9a9ee4c2d93e3cc6c0 @@ -35469,9 +34866,9 @@ __metadata: linkType: hard "resolve.exports@npm:^1.1.0": - version: 1.1.0 - resolution: "resolve.exports@npm:1.1.0" - checksum: 52865af8edb088f6c7759a328584a5de6b226754f004b742523adcfe398cfbc4559515104bc2ae87b8e78b1e4de46c9baec400b3fb1f7d517b86d2d48a098a2d + version: 1.1.1 + resolution: "resolve.exports@npm:1.1.1" + checksum: 485aa10082eb388a569d696e17ad7b16f4186efc97dd34eadd029d95b811f21ffee13b1b733198bb4584dbb3cb296aa6f141835221fb7613b9606b84f1386655 languageName: node linkType: hard @@ -35547,15 +34944,6 @@ __metadata: languageName: node linkType: hard -"responselike@npm:1.0.2": - version: 1.0.2 - resolution: "responselike@npm:1.0.2" - dependencies: - lowercase-keys: ^1.0.0 - checksum: 2e9e70f1dcca3da621a80ce71f2f9a9cad12c047145c6ece20df22f0743f051cf7c73505e109814915f23f9e34fb0d358e22827723ee3d56b623533cab8eafcd - languageName: node - linkType: hard - "responselike@npm:^2.0.0": version: 2.0.1 resolution: "responselike@npm:2.0.1" @@ -35756,6 +35144,20 @@ __metadata: languageName: node linkType: hard +"rollup@npm:^3.21.0": + version: 3.22.0 + resolution: "rollup@npm:3.22.0" + dependencies: + fsevents: ~2.3.2 + dependenciesMeta: + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 6da2bfe1eb16714ccd4bf56ca92430309dc71b4492a3c38502f68f645433dcc789fb79f3761fc2269aa0cf20ece7821c4d7c95b860b7343c2ed52ed1c36c9a90 + languageName: node + linkType: hard + "rootpath@npm:^0.1.2": version: 0.1.2 resolution: "rootpath@npm:0.1.2" @@ -35791,6 +35193,13 @@ __metadata: languageName: node linkType: hard +"rrweb-cssom@npm:^0.6.0": + version: 0.6.0 + resolution: "rrweb-cssom@npm:0.6.0" + checksum: 182312f6e4f41d18230ccc34f14263bc8e8a6b9d30ee3ec0d2d8e643c6f27964cd7a8d638d4a00e988d93e8dc55369f4ab5a473ccfeff7a8bab95b36d2b5499c + languageName: node + linkType: hard + "rsvp@npm:^4.8.4": version: 4.8.5 resolution: "rsvp@npm:4.8.5" @@ -36035,12 +35444,12 @@ __metadata: languageName: node linkType: hard -"saxes@npm:^5.0.1": - version: 5.0.1 - resolution: "saxes@npm:5.0.1" +"saxes@npm:^6.0.0": + version: 6.0.0 + resolution: "saxes@npm:6.0.0" dependencies: xmlchars: ^2.2.0 - checksum: 5636b55cf15f7cf0baa73f2797bf992bdcf75d1b39d82c0aa4608555c774368f6ac321cb641fd5f3d3ceb87805122cd47540da6a7b5960fe0dbdb8f8c263f000 + checksum: d3fa3e2aaf6c65ed52ee993aff1891fc47d5e47d515164b5449cbf5da2cbdc396137e55590472e64c5c436c14ae64a8a03c29b9e7389fc6f14035cf4e982ef3b languageName: node linkType: hard @@ -36164,18 +35573,6 @@ __metadata: languageName: node linkType: hard -"seek-bzip@npm:^1.0.5": - version: 1.0.6 - resolution: "seek-bzip@npm:1.0.6" - dependencies: - commander: ^2.8.1 - bin: - seek-bunzip: bin/seek-bunzip - seek-table: bin/seek-bzip-table - checksum: c2ab3291e7085558499efd4e99d1466ee6782f6c4a4e4c417aa859e1cd2f5117fb3b5444f3d27c38ec5908c0f0312e2a0bc69dff087751f97b3921b5bde4f9ed - languageName: node - linkType: hard - "semver@npm:2 || 3 || 4 || 5, semver@npm:^5.4.1, semver@npm:^5.5.0, semver@npm:^5.6.0": version: 5.7.1 resolution: "semver@npm:5.7.1" @@ -36194,17 +35591,6 @@ __metadata: languageName: node linkType: hard -"semver@npm:7.x, semver@npm:^7.3.2": - version: 7.3.5 - resolution: "semver@npm:7.3.5" - dependencies: - lru-cache: ^6.0.0 - bin: - semver: bin/semver.js - checksum: 5eafe6102bea2a7439897c1856362e31cc348ccf96efd455c8b5bc2c61e6f7e7b8250dc26b8828c1d76a56f818a7ee907a36ae9fb37a599d3d24609207001d60 - languageName: node - linkType: hard - "semver@npm:^6.0.0, semver@npm:^6.1.1, semver@npm:^6.1.2, semver@npm:^6.3.0": version: 6.3.0 resolution: "semver@npm:6.3.0" @@ -36225,6 +35611,17 @@ __metadata: languageName: node linkType: hard +"semver@npm:^7.3.2": + version: 7.3.5 + resolution: "semver@npm:7.3.5" + dependencies: + lru-cache: ^6.0.0 + bin: + semver: bin/semver.js + checksum: 5eafe6102bea2a7439897c1856362e31cc348ccf96efd455c8b5bc2c61e6f7e7b8250dc26b8828c1d76a56f818a7ee907a36ae9fb37a599d3d24609207001d60 + languageName: node + linkType: hard + "semver@npm:~2.3.1": version: 2.3.2 resolution: "semver@npm:2.3.2" @@ -36520,6 +35917,13 @@ __metadata: languageName: node linkType: hard +"siginfo@npm:^2.0.0": + version: 2.0.0 + resolution: "siginfo@npm:2.0.0" + checksum: 8aa5a98640ca09fe00d74416eca97551b3e42991614a3d1b824b115fc1401543650914f651ab1311518177e4d297e80b953f4cd4cd7ea1eabe824e8f2091de01 + languageName: node + linkType: hard + "signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" @@ -36705,33 +36109,6 @@ __metadata: languageName: node linkType: hard -"sort-keys-length@npm:^1.0.0": - version: 1.0.1 - resolution: "sort-keys-length@npm:1.0.1" - dependencies: - sort-keys: ^1.0.0 - checksum: f9acac5fb31580a9e3d43b419dc86a1b75e85b79036a084d95dd4d1062b621c9589906588ac31e370a0dd381be46d8dbe900efa306d087ca9c912d7a59b5a590 - languageName: node - linkType: hard - -"sort-keys@npm:^1.0.0": - version: 1.1.2 - resolution: "sort-keys@npm:1.1.2" - dependencies: - is-plain-obj: ^1.0.0 - checksum: 5963fd191a2a185a5ec86f06e47721e8e04713eda43bb04ae60d2a8afb21241553dd5bc9d863ed2bd7c3d541b609b0c8d0e58836b1a3eb6764c09c094bcc8b00 - languageName: node - linkType: hard - -"sort-keys@npm:^2.0.0": - version: 2.0.0 - resolution: "sort-keys@npm:2.0.0" - dependencies: - is-plain-obj: ^1.0.0 - checksum: f0fd827fa9f8f866e98588d2a38c35209afbf1e9a05bb0e4ceeeb8bbf31d923c8902b0a7e0f561590ddb65e58eba6a74f74b991c85360bcc52e83a3f0d1cffd7 - languageName: node - linkType: hard - "sorted-array-functions@npm:^1.3.0": version: 1.3.0 resolution: "sorted-array-functions@npm:1.3.0" @@ -36807,7 +36184,7 @@ __metadata: languageName: node linkType: hard -"source-map@npm:^0.7.0, source-map@npm:^0.7.3": +"source-map@npm:^0.7.3": version: 0.7.3 resolution: "source-map@npm:0.7.3" checksum: cd24efb3b8fa69b64bf28e3c1b1a500de77e84260c5b7f2b873f88284df17974157cc88d386ee9b6d081f08fdd8242f3fc05c953685a6ad81aad94c7393dedea @@ -37017,7 +36394,7 @@ __metadata: languageName: node linkType: hard -"stack-utils@npm:^2.0.2, stack-utils@npm:^2.0.3": +"stack-utils@npm:^2.0.2": version: 2.0.5 resolution: "stack-utils@npm:2.0.5" dependencies: @@ -37026,6 +36403,22 @@ __metadata: languageName: node linkType: hard +"stack-utils@npm:^2.0.3": + version: 2.0.6 + resolution: "stack-utils@npm:2.0.6" + dependencies: + escape-string-regexp: ^2.0.0 + checksum: 052bf4d25bbf5f78e06c1d5e67de2e088b06871fa04107ca8d3f0e9d9263326e2942c8bedee3545795fc77d787d443a538345eef74db2f8e35db3558c6f91ff7 + languageName: node + linkType: hard + +"stackback@npm:0.0.2": + version: 0.0.2 + resolution: "stackback@npm:0.0.2" + checksum: 2d4dc4e64e2db796de4a3c856d5943daccdfa3dd092e452a1ce059c81e9a9c29e0b9badba91b43ef0d5ff5c04ee62feb3bcc559a804e16faf447bac2d883aa99 + languageName: node + linkType: hard + "stackframe@npm:^1.3.4": version: 1.3.4 resolution: "stackframe@npm:1.3.4" @@ -37073,6 +36466,13 @@ __metadata: languageName: node linkType: hard +"std-env@npm:^3.3.2": + version: 3.3.3 + resolution: "std-env@npm:3.3.3" + checksum: 6665f6d8bd63aae432d3eb9abbd7322847ad0d902603e6dce1e8051b4f42ceeb4f7f96a4faf70bb05ce65ceee2dc982502b701575c8a58b1bfad29f3dbb19f81 + languageName: node + linkType: hard + "stoppable@npm:^1.1.0": version: 1.1.0 resolution: "stoppable@npm:1.1.0" @@ -37300,16 +36700,6 @@ __metadata: languageName: node linkType: hard -"string-length@npm:^5.0.1": - version: 5.0.1 - resolution: "string-length@npm:5.0.1" - dependencies: - char-regex: ^2.0.0 - strip-ansi: ^7.0.1 - checksum: 71f73b8c8a743e01dcd001bcf1b197db78d5e5e53b12bd898cddaf0961be09f947dfd8c429783db3694b55b05cb5a51de6406c5085ff1aaa10c4771440c8396d - languageName: node - linkType: hard - "string-range@npm:~1.2, string-range@npm:~1.2.1": version: 1.2.2 resolution: "string-range@npm:1.2.2" @@ -37565,15 +36955,6 @@ __metadata: languageName: node linkType: hard -"strip-dirs@npm:^2.0.0": - version: 2.1.0 - resolution: "strip-dirs@npm:2.1.0" - dependencies: - is-natural-number: ^4.0.1 - checksum: 9465547d71d8819daa7a5c9d4d783289ed8eac72eb06bd687bed382ce62af8ab8e6ffbda229805f5d2e71acce2ca4915e781c94190d284994cbc0b7cdc8303cc - languageName: node - linkType: hard - "strip-eof@npm:^1.0.0": version: 1.0.0 resolution: "strip-eof@npm:1.0.0" @@ -37624,19 +37005,12 @@ __metadata: languageName: node linkType: hard -"strip-markdown@npm:^4.0.0": - version: 4.2.0 - resolution: "strip-markdown@npm:4.2.0" - checksum: 85bf852685b9353791073774fa91730beb26f8e122307241f812e5731227eb01829a3979e7606b922c3a83a8a69a1e4c0218cb02ab6025e55c37a75a14472ce6 - languageName: node - linkType: hard - -"strip-outer@npm:^1.0.0": +"strip-literal@npm:^1.0.1": version: 1.0.1 - resolution: "strip-outer@npm:1.0.1" + resolution: "strip-literal@npm:1.0.1" dependencies: - escape-string-regexp: ^1.0.2 - checksum: f8d65d33ca2b49aabc66bb41d689dda7b8b9959d320e3a40a2ef4d7079ff2f67ffb72db43f179f48dbf9495c2e33742863feab7a584d180fa62505439162c191 + acorn: ^8.8.2 + checksum: ab40496820f02220390d95cdd620a997168efb69d5bd7d180bc4ef83ca562a95447843d8c7c88b8284879a29cf4eedc89d8001d1e098c1a1e23d12a9c755dff4 languageName: node linkType: hard @@ -37789,15 +37163,6 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^4.0.0": - version: 4.5.0 - resolution: "supports-color@npm:4.5.0" - dependencies: - has-flag: ^2.0.0 - checksum: 6da4f498d5c71e8619f06e4a11d16f044105faf7590b5b005fc84933fbefdf72c2b4e5b7174c66da6ddc68e7f6ef56cc960a5ebd6f2d542d910e259e61b02335 - languageName: node - linkType: hard - "supports-color@npm:^5.3.0": version: 5.5.0 resolution: "supports-color@npm:5.5.0" @@ -37833,12 +37198,12 @@ __metadata: linkType: hard "supports-hyperlinks@npm:^2.0.0": - version: 2.2.0 - resolution: "supports-hyperlinks@npm:2.2.0" + version: 2.3.0 + resolution: "supports-hyperlinks@npm:2.3.0" dependencies: has-flag: ^4.0.0 supports-color: ^7.0.0 - checksum: aef04fb41f4a67f1bc128f7c3e88a81b6cf2794c800fccf137006efe5bafde281da3e42e72bf9206c2fcf42e6438f37e3a820a389214d0a88613ca1f2d36076a + checksum: 9ee0de3c8ce919d453511b2b1588a8205bd429d98af94a01df87411391010fe22ca463f268c84b2ce2abad019dfff8452aa02806eeb5c905a8d7ad5c4f4c52b8 languageName: node linkType: hard @@ -38171,21 +37536,6 @@ __metadata: languageName: node linkType: hard -"tar-stream@npm:^1.5.2": - version: 1.6.2 - resolution: "tar-stream@npm:1.6.2" - dependencies: - bl: ^1.0.0 - buffer-alloc: ^1.2.0 - end-of-stream: ^1.0.0 - fs-constants: ^1.0.0 - readable-stream: ^2.3.0 - to-buffer: ^1.1.1 - xtend: ^4.0.0 - checksum: a5d49e232d3e33321bbd150381b6a4e5046bf12b1c2618acb95435b7871efde4d98bd1891eb2200478a7142ef7e304e033eb29bbcbc90451a2cdfa1890e05245 - languageName: node - linkType: hard - "tar@npm:^4.0.2": version: 4.4.19 resolution: "tar@npm:4.4.19" @@ -38486,6 +37836,13 @@ __metadata: languageName: node linkType: hard +"time-zone@npm:^1.0.0": + version: 1.0.0 + resolution: "time-zone@npm:1.0.0" + checksum: e46f5a69b8c236dcd8e91e29d40d4e7a3495ed4f59888c3f84ce1d9678e20461421a6ba41233509d47dd94bc18f1a4377764838b21b584663f942b3426dcbce8 + languageName: node + linkType: hard + "timed-out@npm:^4.0.0, timed-out@npm:^4.0.1": version: 4.0.1 resolution: "timed-out@npm:4.0.1" @@ -38547,6 +37904,13 @@ __metadata: languageName: node linkType: hard +"tinybench@npm:^2.5.0": + version: 2.5.0 + resolution: "tinybench@npm:2.5.0" + checksum: 284bb9428f197ec8b869c543181315e65e41ccfdad3c4b6c916bb1fdae1b5c6785661b0d90cf135b48d833b03cb84dc5357b2d33ec65a1f5971fae0ab2023821 + languageName: node + linkType: hard + "tinycolor2@npm:^1.0.0, tinycolor2@npm:^1.4.1": version: 1.4.2 resolution: "tinycolor2@npm:1.4.2" @@ -38564,6 +37928,20 @@ __metadata: languageName: node linkType: hard +"tinypool@npm:^0.5.0": + version: 0.5.0 + resolution: "tinypool@npm:0.5.0" + checksum: 4e0dfd8f28666d541c1d92304222edc4613f05d74fe2243c8520d466a2cc6596011a7072c1c41a7de7522351b82fda07e8038198e8f43673d8d69401c5903f8c + languageName: node + linkType: hard + +"tinyspy@npm:^2.1.0": + version: 2.1.0 + resolution: "tinyspy@npm:2.1.0" + checksum: cb83c1f74a79dd5934018bad94f60a304a29d98a2d909ea45fc367f7b80b21b0a7d8135a2ce588deb2b3ba56c7c607258b2a03e6001d89e4d564f9a95cc6a81f + languageName: node + linkType: hard + "title-case@npm:^1.1.0": version: 1.1.2 resolution: "title-case@npm:1.1.2" @@ -38574,27 +37952,6 @@ __metadata: languageName: node linkType: hard -"title@npm:^3.4.2": - version: 3.4.4 - resolution: "title@npm:3.4.4" - dependencies: - arg: 1.0.0 - chalk: 2.3.0 - clipboardy: 1.2.2 - titleize: 1.0.0 - bin: - title: bin/title.js - checksum: bc2a8728f1fff4fa29062c6fb9652ee37e46d13728661e1fd5197d74ebb2ebe122bf4c142828c2c86d95f135e653d3374c1918df35120b1eb68f357ad7669b5f - languageName: node - linkType: hard - -"titleize@npm:1.0.0": - version: 1.0.0 - resolution: "titleize@npm:1.0.0" - checksum: a8234b7860077f7d391d06e13c645fe2bf60431012d78ca196d4d73e4768e33cfc3a0dd881bf2f9974c8bd8beeb9d85e7842ec35d267b7c2a06f287de1c4ea7e - languageName: node - linkType: hard - "tmp@npm:^0.0.33": version: 0.0.33 resolution: "tmp@npm:0.0.33" @@ -38618,13 +37975,6 @@ __metadata: languageName: node linkType: hard -"to-buffer@npm:^1.1.1": - version: 1.1.1 - resolution: "to-buffer@npm:1.1.1" - checksum: 6c897f58c2bdd8b8b1645ea515297732fec6dafb089bf36d12370c102ff5d64abf2be9410e0b1b7cfc707bada22d9a4084558010bfc78dd7023748dc5dd9a1ce - languageName: node - linkType: hard - "to-fast-properties@npm:^2.0.0": version: 2.0.0 resolution: "to-fast-properties@npm:2.0.0" @@ -38707,7 +38057,7 @@ __metadata: languageName: node linkType: hard -"tough-cookie@npm:*": +"tough-cookie@npm:*, tough-cookie@npm:^4.1.2": version: 4.1.2 resolution: "tough-cookie@npm:4.1.2" dependencies: @@ -38719,17 +38069,6 @@ __metadata: languageName: node linkType: hard -"tough-cookie@npm:^4.0.0": - version: 4.0.0 - resolution: "tough-cookie@npm:4.0.0" - dependencies: - psl: ^1.1.33 - punycode: ^2.1.1 - universalify: ^0.1.2 - checksum: 0891b37eb7d17faa3479d47f0dce2e3007f2583094ad272f2670d120fbcc3df3b0b0a631ba96ecad49f9e2297d93ff8995ce0d3292d08dd7eabe162f5b224d69 - languageName: node - linkType: hard - "tough-cookie@npm:~2.5.0": version: 2.5.0 resolution: "tough-cookie@npm:2.5.0" @@ -38749,6 +38088,15 @@ __metadata: languageName: node linkType: hard +"tr46@npm:^4.1.1": + version: 4.1.1 + resolution: "tr46@npm:4.1.1" + dependencies: + punycode: ^2.3.0 + checksum: aeeb821ac2cd792e63ec84888b4fd6598ac6ed75d861579e21a5cf9d4ee78b2c6b94e7d45036f2ca2088bc85b9b46560ad23c4482979421063b24137349dbd96 + languageName: node + linkType: hard + "tr46@npm:~0.0.3": version: 0.0.3 resolution: "tr46@npm:0.0.3" @@ -38786,15 +38134,6 @@ __metadata: languageName: node linkType: hard -"trim-repeated@npm:^1.0.0": - version: 1.0.0 - resolution: "trim-repeated@npm:1.0.0" - dependencies: - escape-string-regexp: ^1.0.2 - checksum: e25c235305b82c43f1d64a67a71226c406b00281755e4c2c4f3b1d0b09c687a535dd3c4483327f949f28bb89dc400a0bc5e5b749054f4b99f49ebfe48ba36496 - languageName: node - linkType: hard - "trim-trailing-lines@npm:^1.0.0": version: 1.1.4 resolution: "trim-trailing-lines@npm:1.1.4" @@ -38830,12 +38169,12 @@ __metadata: languageName: node linkType: hard -"ts-essentials@npm:^7.0.3": - version: 7.0.3 - resolution: "ts-essentials@npm:7.0.3" +"ts-essentials@npm:^9.3.1": + version: 9.3.2 + resolution: "ts-essentials@npm:9.3.2" peerDependencies: - typescript: ">=3.7.0" - checksum: 74d75868acf7f8b95e447d8b3b7442ca21738c6894e576df9917a352423fde5eb43c5651da5f78997da6061458160ae1f6b279150b42f47ccc58b73e55acaa2f + typescript: ">=4.1.0" + checksum: 88726b3f9bdc8f59f9a998bb925c989268d7e2f24d29ac13545e457d3ac8ee5472c78990eaa415b4c58244d55b989985a999345d6845055f5a58bb0f098c6f44 languageName: node linkType: hard @@ -38846,39 +38185,6 @@ __metadata: languageName: node linkType: hard -"ts-jest@npm:^28.0.8": - version: 28.0.8 - resolution: "ts-jest@npm:28.0.8" - dependencies: - bs-logger: 0.x - fast-json-stable-stringify: 2.x - jest-util: ^28.0.0 - json5: ^2.2.1 - lodash.memoize: 4.x - make-error: 1.x - semver: 7.x - yargs-parser: ^21.0.1 - peerDependencies: - "@babel/core": ">=7.0.0-beta.0 <8" - "@jest/types": ^28.0.0 - babel-jest: ^28.0.0 - jest: ^28.0.0 - typescript: ">=4.3" - peerDependenciesMeta: - "@babel/core": - optional: true - "@jest/types": - optional: true - babel-jest: - optional: true - esbuild: - optional: true - bin: - ts-jest: cli.js - checksum: c72e9292709e77ce47ac7813cb24feaa9d01dc983598d29a821f224b5cc190dc7d67e17379cef089095404c00b9d582ee91c727916f9ec289cb1b723df408ae3 - languageName: node - linkType: hard - "ts-morph@npm:^13.0.2": version: 13.0.3 resolution: "ts-morph@npm:13.0.3" @@ -39259,7 +38565,7 @@ __metadata: languageName: node linkType: hard -"type-detect@npm:4.0.8": +"type-detect@npm:4.0.8, type-detect@npm:^4.0.0, type-detect@npm:^4.0.5": version: 4.0.8 resolution: "type-detect@npm:4.0.8" checksum: 62b5628bff67c0eb0b66afa371bd73e230399a8d2ad30d852716efcc4656a7516904570cd8631a49a3ce57c10225adf5d0cbdcb47f6b0255fe6557c453925a15 @@ -39329,7 +38635,7 @@ __metadata: languageName: node linkType: hard -"type-fest@npm:^1.0.2, type-fest@npm:^1.2.2": +"type-fest@npm:^1.2.2": version: 1.4.0 resolution: "type-fest@npm:1.4.0" checksum: b011c3388665b097ae6a109a437a04d6f61d81b7357f74cbcb02246f2f5bd72b888ae33631b99871388122ba0a87f4ff1c94078e7119ff22c70e52c0ff828201 @@ -39533,6 +38839,13 @@ __metadata: languageName: node linkType: hard +"ufo@npm:^1.1.2": + version: 1.1.2 + resolution: "ufo@npm:1.1.2" + checksum: 83c940a6a23b6d4fc0cd116265bb5dcf88ab34a408ad9196e413270ca607a4781c09b547dc518f43caee128a096f20fe80b5a0e62b4bcc0a868619896106d048 + languageName: node + linkType: hard + "uglify-js@npm:^3.1.4": version: 3.15.3 resolution: "uglify-js@npm:3.15.3" @@ -39573,16 +38886,6 @@ __metadata: languageName: node linkType: hard -"unbzip2-stream@npm:^1.0.9": - version: 1.4.3 - resolution: "unbzip2-stream@npm:1.4.3" - dependencies: - buffer: ^5.2.1 - through: ^2.3.8 - checksum: 0e67c4a91f4fa0fc7b4045f8b914d3498c2fc2e8c39c359977708ec85ac6d6029840e97f508675fdbdf21fcb8d276ca502043406f3682b70f075e69aae626d1d - languageName: node - linkType: hard - "unfetch@npm:^4.2.0": version: 4.2.0 resolution: "unfetch@npm:4.2.0" @@ -39670,20 +38973,6 @@ __metadata: languageName: node linkType: hard -"unified@npm:^9.1.0": - version: 9.2.2 - resolution: "unified@npm:9.2.2" - dependencies: - bail: ^1.0.0 - extend: ^3.0.0 - is-buffer: ^2.0.0 - is-plain-obj: ^2.0.0 - trough: ^1.0.0 - vfile: ^4.0.0 - checksum: 7c24461be7de4145939739ce50d18227c5fbdf9b3bc5a29dabb1ce26dd3e8bd4a1c385865f6f825f3b49230953ee8b591f23beab3bb3643e3e9dc37aa8a089d5 - languageName: node - linkType: hard - "union-value@npm:^1.0.0": version: 1.0.1 resolution: "union-value@npm:1.0.1" @@ -39776,15 +39065,6 @@ __metadata: languageName: node linkType: hard -"unist-util-position-from-estree@npm:^1.0.0, unist-util-position-from-estree@npm:^1.1.0": - version: 1.1.1 - resolution: "unist-util-position-from-estree@npm:1.1.1" - dependencies: - "@types/unist": ^2.0.0 - checksum: 63808bdcb8b49afa5231712d95b586fe877859ee03d23adb47485c30222007a5af55e95d103d4af51d1d16376aaa5a58fa985a08d63727c38b1515873df8b79b - languageName: node - linkType: hard - "unist-util-position@npm:^3.0.0": version: 3.1.0 resolution: "unist-util-position@npm:3.1.0" @@ -39810,16 +39090,6 @@ __metadata: languageName: node linkType: hard -"unist-util-remove-position@npm:^4.0.0": - version: 4.0.1 - resolution: "unist-util-remove-position@npm:4.0.1" - dependencies: - "@types/unist": ^2.0.0 - unist-util-visit: ^4.0.0 - checksum: 7d2808662ac65f2b2f615822b78060419f738fb3b074b10cec77c596ea966b8f5c47553d2d322822a5975c49d2b21cdd64c198ae9fb02a9d54d1afa6342cdd6a - languageName: node - linkType: hard - "unist-util-remove@npm:^2.0.0": version: 2.1.0 resolution: "unist-util-remove@npm:2.1.0" @@ -40078,15 +39348,6 @@ __metadata: languageName: node linkType: hard -"url-parse-lax@npm:^3.0.0": - version: 3.0.0 - resolution: "url-parse-lax@npm:3.0.0" - dependencies: - prepend-http: ^2.0.0 - checksum: 1040e357750451173132228036aff1fd04abbd43eac1fb3e4fca7495a078bcb8d33cb765fe71ad7e473d9c94d98fd67adca63bd2716c815a2da066198dd37217 - languageName: node - linkType: hard - "url-parse@npm:^1.4.3, url-parse@npm:^1.5.3, url-parse@npm:^1.5.8, url-parse@npm:^1.5.9": version: 1.5.10 resolution: "url-parse@npm:1.5.10" @@ -40384,7 +39645,7 @@ __metadata: languageName: node linkType: hard -"v8-to-istanbul@npm:^9.0.0, v8-to-istanbul@npm:^9.0.1": +"v8-to-istanbul@npm:^9.0.0": version: 9.0.1 resolution: "v8-to-istanbul@npm:9.0.1" dependencies: @@ -40395,6 +39656,17 @@ __metadata: languageName: node linkType: hard +"v8-to-istanbul@npm:^9.0.1": + version: 9.1.0 + resolution: "v8-to-istanbul@npm:9.1.0" + dependencies: + "@jridgewell/trace-mapping": ^0.3.12 + "@types/istanbul-lib-coverage": ^2.0.1 + convert-source-map: ^1.6.0 + checksum: 2069d59ee46cf8d83b4adfd8a5c1a90834caffa9f675e4360f1157ffc8578ef0f763c8f32d128334424159bb6b01f3876acd39cd13297b2769405a9da241f8d1 + languageName: node + linkType: hard + "validate-npm-package-license@npm:^3.0.1": version: 3.0.4 resolution: "validate-npm-package-license@npm:3.0.4" @@ -40520,6 +39792,22 @@ __metadata: languageName: node linkType: hard +"vite-node@npm:0.31.1": + version: 0.31.1 + resolution: "vite-node@npm:0.31.1" + dependencies: + cac: ^6.7.14 + debug: ^4.3.4 + mlly: ^1.2.0 + pathe: ^1.1.0 + picocolors: ^1.0.0 + vite: ^3.0.0 || ^4.0.0 + bin: + vite-node: vite-node.mjs + checksum: f70ffa3f6dcb4937cdc99f59bf360d42de83c556ba9a19eb1c3504ef20db4c1d1afa644d9a8e63240e851c0c95773b64c526bdb3eb4794b5e941ddcd57124aa9 + languageName: node + linkType: hard + "vite@npm:^2.9.15": version: 2.9.15 resolution: "vite@npm:2.9.15" @@ -40549,6 +39837,43 @@ __metadata: languageName: node linkType: hard +"vite@npm:^3.0.0 || ^4.0.0": + version: 4.3.8 + resolution: "vite@npm:4.3.8" + dependencies: + esbuild: ^0.17.5 + fsevents: ~2.3.2 + postcss: ^8.4.23 + rollup: ^3.21.0 + peerDependencies: + "@types/node": ">= 14" + less: "*" + sass: "*" + stylus: "*" + sugarss: "*" + terser: ^5.4.0 + dependenciesMeta: + fsevents: + optional: true + peerDependenciesMeta: + "@types/node": + optional: true + less: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + bin: + vite: bin/vite.js + checksum: 454a7c0c1bd1fd5611c9df28c62e3adbe75f48e87fc787179c5af60c4ab9a87aa0eda44be446d898851a135766d36f65f8e7d56317556aa807d30e561de369c4 + languageName: node + linkType: hard + "vite@npm:^3.2.4": version: 3.2.5 resolution: "vite@npm:3.2.5" @@ -40625,6 +39950,79 @@ __metadata: languageName: node linkType: hard +"vitest-mock-extended@npm:^1.1.3": + version: 1.1.3 + resolution: "vitest-mock-extended@npm:1.1.3" + dependencies: + ts-essentials: ^9.3.1 + peerDependencies: + typescript: 3.x || 4.x || 5.x + vitest: ">=0.29.2" + checksum: d457dc1dcbf6b0570e9845dff7423c2b88504ce6bb189e71c0984b09b4d6c5894d883706a7639262c92e12b0b4b0d5db747e1d0b93e253b4d6c189cba15c70f9 + languageName: node + linkType: hard + +"vitest@npm:^0.31.1": + version: 0.31.1 + resolution: "vitest@npm:0.31.1" + dependencies: + "@types/chai": ^4.3.5 + "@types/chai-subset": ^1.3.3 + "@types/node": "*" + "@vitest/expect": 0.31.1 + "@vitest/runner": 0.31.1 + "@vitest/snapshot": 0.31.1 + "@vitest/spy": 0.31.1 + "@vitest/utils": 0.31.1 + acorn: ^8.8.2 + acorn-walk: ^8.2.0 + cac: ^6.7.14 + chai: ^4.3.7 + concordance: ^5.0.4 + debug: ^4.3.4 + local-pkg: ^0.4.3 + magic-string: ^0.30.0 + pathe: ^1.1.0 + picocolors: ^1.0.0 + std-env: ^3.3.2 + strip-literal: ^1.0.1 + tinybench: ^2.5.0 + tinypool: ^0.5.0 + vite: ^3.0.0 || ^4.0.0 + vite-node: 0.31.1 + why-is-node-running: ^2.2.2 + peerDependencies: + "@edge-runtime/vm": "*" + "@vitest/browser": "*" + "@vitest/ui": "*" + happy-dom: "*" + jsdom: "*" + playwright: "*" + safaridriver: "*" + webdriverio: "*" + peerDependenciesMeta: + "@edge-runtime/vm": + optional: true + "@vitest/browser": + optional: true + "@vitest/ui": + optional: true + happy-dom: + optional: true + jsdom: + optional: true + playwright: + optional: true + safaridriver: + optional: true + webdriverio: + optional: true + bin: + vitest: vitest.mjs + checksum: b3f64a36102edc5b8594c085da648c838c0d275c620bd3b780624f936903b9c06579d6ef137fe9859e468f16deb8f154a50f009093119f9adb8b60ff1b7597ee + languageName: node + linkType: hard + "vm-browserify@npm:^1.0.1": version: 1.1.2 resolution: "vm-browserify@npm:1.1.2" @@ -40639,21 +40037,12 @@ __metadata: languageName: node linkType: hard -"w3c-hr-time@npm:^1.0.2": - version: 1.0.2 - resolution: "w3c-hr-time@npm:1.0.2" - dependencies: - browser-process-hrtime: ^1.0.0 - checksum: ec3c2dacbf8050d917bbf89537a101a08c2e333b4c19155f7d3bedde43529d4339db6b3d049d9610789cb915f9515f8be037e0c54c079e9d4735c50b37ed52b9 - languageName: node - linkType: hard - -"w3c-xmlserializer@npm:^3.0.0": - version: 3.0.0 - resolution: "w3c-xmlserializer@npm:3.0.0" +"w3c-xmlserializer@npm:^4.0.0": + version: 4.0.0 + resolution: "w3c-xmlserializer@npm:4.0.0" dependencies: xml-name-validator: ^4.0.0 - checksum: 0af8589942eeb11c9fe29eb31a1a09f3d5dd136aea53a9848dfbabff79ac0dd26fe13eb54d330d5555fe27bb50b28dca0715e09f9cc2bfa7670ccc8b7f919ca2 + checksum: eba070e78deb408ae8defa4d36b429f084b2b47a4741c4a9be3f27a0a3d1845e277e3072b04391a138f7e43776842627d1334e448ff13ff90ad9fb1214ee7091 languageName: node linkType: hard @@ -41332,6 +40721,13 @@ __metadata: languageName: node linkType: hard +"well-known-symbols@npm:^2.0.0": + version: 2.0.0 + resolution: "well-known-symbols@npm:2.0.0" + checksum: 4f54bbc3012371cb4d228f436891b8e7536d34ac61a57541890257e96788608e096231e0121ac24d08ef2f908b3eb2dc0adba35023eaeb2a7df655da91415402 + languageName: node + linkType: hard + "whatwg-encoding@npm:^2.0.0": version: 2.0.0 resolution: "whatwg-encoding@npm:2.0.0" @@ -41366,16 +40762,6 @@ __metadata: languageName: node linkType: hard -"whatwg-url@npm:^10.0.0": - version: 10.0.0 - resolution: "whatwg-url@npm:10.0.0" - dependencies: - tr46: ^3.0.0 - webidl-conversions: ^7.0.0 - checksum: a21ec309c5cc743fe9414509408bedf65eaf0fb5c17ac66baa08ef12fce16da4dd30ce90abefbd5a716408301c58a73666dabfd5042cf4242992eb98b954f861 - languageName: node - linkType: hard - "whatwg-url@npm:^11.0.0": version: 11.0.0 resolution: "whatwg-url@npm:11.0.0" @@ -41386,6 +40772,16 @@ __metadata: languageName: node linkType: hard +"whatwg-url@npm:^12.0.0, whatwg-url@npm:^12.0.1": + version: 12.0.1 + resolution: "whatwg-url@npm:12.0.1" + dependencies: + tr46: ^4.1.1 + webidl-conversions: ^7.0.0 + checksum: 8698993b763c1e7eda5ed16c31dab24bca6489626aca7caf8b5a2b64684dda6578194786f10ec42ceb1c175feea16d0a915096e6419e08d154ce551c43176972 + languageName: node + linkType: hard + "whatwg-url@npm:^5.0.0": version: 5.0.0 resolution: "whatwg-url@npm:5.0.0" @@ -41462,6 +40858,18 @@ __metadata: languageName: node linkType: hard +"why-is-node-running@npm:^2.2.2": + version: 2.2.2 + resolution: "why-is-node-running@npm:2.2.2" + dependencies: + siginfo: ^2.0.0 + stackback: 0.0.2 + bin: + why-is-node-running: cli.js + checksum: 50820428f6a82dfc3cbce661570bcae9b658723217359b6037b67e495255409b4c8bc7931745f5c175df71210450464517cab32b2f7458ac9c40b4925065200a + languageName: node + linkType: hard + "wide-align@npm:^1.1.2, wide-align@npm:^1.1.5": version: 1.1.5 resolution: "wide-align@npm:1.1.5" @@ -41565,12 +40973,12 @@ __metadata: linkType: hard "write-file-atomic@npm:^4.0.1": - version: 4.0.1 - resolution: "write-file-atomic@npm:4.0.1" + version: 4.0.2 + resolution: "write-file-atomic@npm:4.0.2" dependencies: imurmurhash: ^0.1.4 signal-exit: ^3.0.7 - checksum: 8f780232533ca6223c63c9b9c01c4386ca8c625ebe5017a9ed17d037aec19462ae17109e0aa155bff5966ee4ae7a27b67a99f55caf3f32ffd84155e9da3929fc + checksum: 5da60bd4eeeb935eec97ead3df6e28e5917a6bd317478e4a85a5285e8480b8ed96032bbcc6ecd07b236142a24f3ca871c924ec4a6575e623ec1b11bf8c1c253c languageName: node linkType: hard @@ -41660,6 +41068,21 @@ __metadata: languageName: node linkType: hard +"ws@npm:^8.13.0": + version: 8.13.0 + resolution: "ws@npm:8.13.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 53e991bbf928faf5dc6efac9b8eb9ab6497c69feeb94f963d648b7a3530a720b19ec2e0ec037344257e05a4f35bd9ad04d9de6f289615ffb133282031b18c61c + languageName: node + linkType: hard + "ws@npm:^8.2.3": version: 8.8.0 resolution: "ws@npm:8.8.0" @@ -41977,7 +41400,7 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:^21.0.1, yargs-parser@npm:^21.1.1": +"yargs-parser@npm:^21.1.1": version: 21.1.1 resolution: "yargs-parser@npm:21.1.1" checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c @@ -42066,16 +41489,6 @@ __metadata: languageName: node linkType: hard -"yauzl@npm:^2.4.2": - version: 2.10.0 - resolution: "yauzl@npm:2.10.0" - dependencies: - buffer-crc32: ~0.2.3 - fd-slicer: ~1.1.0 - checksum: 7f21fe0bbad6e2cb130044a5d1d0d5a0e5bf3d8d4f8c4e6ee12163ce798fee3de7388d22a7a0907f563ac5f9d40f8699a223d3d5c1718da90b0156da6904022b - languageName: node - linkType: hard - "yn@npm:3.1.1": version: 3.1.1 resolution: "yn@npm:3.1.1" @@ -42090,6 +41503,13 @@ __metadata: languageName: node linkType: hard +"yocto-queue@npm:^1.0.0": + version: 1.0.0 + resolution: "yocto-queue@npm:1.0.0" + checksum: 2cac84540f65c64ccc1683c267edce396b26b1e931aa429660aefac8fbe0188167b7aee815a3c22fa59a28a58d898d1a2b1825048f834d8d629f4c2a5d443801 + languageName: node + linkType: hard + "yoga-layout-prebuilt@npm:^1.10.0, yoga-layout-prebuilt@npm:^1.9.6": version: 1.10.0 resolution: "yoga-layout-prebuilt@npm:1.10.0"