From 41745461cd2fc43c10bf09dd1f09335f6483de7a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 27 Oct 2023 11:41:22 +0000 Subject: [PATCH 1/9] Bump socket.io-parser from 4.2.1 to 4.2.4 (#216) Bumps [socket.io-parser](https://github.com/socketio/socket.io-parser) from 4.2.1 to 4.2.4. - [Release notes](https://github.com/socketio/socket.io-parser/releases) - [Changelog](https://github.com/socketio/socket.io-parser/blob/main/CHANGELOG.md) - [Commits](https://github.com/socketio/socket.io-parser/compare/4.2.1...4.2.4) --- updated-dependencies: - dependency-name: socket.io-parser dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 6355c12cd..3ed89735b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4680,9 +4680,9 @@ socket.io-client@^4.4.1: socket.io-parser "~4.2.0" socket.io-parser@~4.2.0: - version "4.2.1" - resolved "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.1.tgz" - integrity sha512-V4GrkLy+HeF1F/en3SpUaM+7XxYXpuMUWLGde1kSSh5nQMN4hLrbPIkD+otwh6q9R6NOQBN4AMaOZ2zVjui82g== + version "4.2.4" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.4.tgz#c806966cf7270601e47469ddeec30fbdfda44c83" + integrity sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew== dependencies: "@socket.io/component-emitter" "~3.1.0" debug "~4.3.1" From e3dce5b2239eb0791d3c57fd15cd3adcf344ab0b Mon Sep 17 00:00:00 2001 From: Horea Porutiu Date: Tue, 31 Oct 2023 17:38:52 +0100 Subject: [PATCH 2/9] Add appcards video (#218) * add youtube video in Readme * add video description --- examples/github-appcards/README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/examples/github-appcards/README.md b/examples/github-appcards/README.md index e16bbff88..d836110d6 100644 --- a/examples/github-appcards/README.md +++ b/examples/github-appcards/README.md @@ -20,6 +20,7 @@ https://github.com/miroapp/app-examples/assets/10428517/70e7c32e-7206-42f7-b64d- - [Tools and Technologies](#tools) - [Prerequisites](#prerequisites) - [Associated Developer Tutorial](#tutorial) +- [Associated Video Tutorial](#video) - [Database Configuration](#database) - [Netlify Configuration](#netlify) - [Miro App Configuration](#miro) @@ -60,6 +61,12 @@ https://github.com/miroapp/app-examples/assets/10428517/70e7c32e-7206-42f7-b64d- > To view a more in depth developer tutorial > of this app (including code explanations) see the [GitHub app cards 2-way sync tutorial](https://developers.miro.com/docs/enable-2-way-sync-between-app-cards-and-github-cards) on Miro's Developer documentation. +# 📖 Associated Video Tutorial + +> To view a more in depth developer tutorial in video format, you can watch the YouTube video below. This video explains how to build a 2-way data sync integrations with GitHub projects (classic) and Miro. It goes through demo videos, architecture diagrams, and code examples to teach you the fundamentals around building a 2-way data sync integration. + +[![Build a 2-way sync with GitHub and Miro using App Cards](https://img.youtube.com/vi/ed_7TzPO0d4/0.jpg)](https://youtu.be/ed_7TzPO0d4) + # Database Configuration 1. Create a database in Supabase. First you may need to create an Org. From f9e8496a246f24c3a6a196710f6575ff326342be Mon Sep 17 00:00:00 2001 From: Horea Porutiu Date: Thu, 2 Nov 2023 18:33:59 +0100 Subject: [PATCH 3/9] add azure video (#221) --- examples/nextjs-oauth/README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/examples/nextjs-oauth/README.md b/examples/nextjs-oauth/README.md index 1a884124e..0ee08a393 100644 --- a/examples/nextjs-oauth/README.md +++ b/examples/nextjs-oauth/README.md @@ -37,13 +37,17 @@ https://github.com/miroapp/app-examples/assets/10428517/cdda8f44-bf25-420e-ae84- - Your development environment includes [Node.js 14.13](https://nodejs.org/en/download) or a later version. - All examples use `npm` as a package manager and `npx` as a package runner. -# ☁️ Deploy the app on AWS Amplify +# ☁️ Deploy the app on AWS or Azure -If you want to understand how to deploy the app to AWS Amplify, please watch the video below. Otherwise, +If you want to understand how to deploy the app to AWS Amplify or Azure (Static Web Apps), please watch the video below. Otherwise, skip to the next section to see how to run this locally. [![Deploy the App to AWS Amplify](https://img.youtube.com/vi/-7pPvRzvYjM/0.jpg)](https://youtu.be/-7pPvRzvYjM) +If you want to understand how to deploy the app to Microsoft Azure (Static Web Apps) please watch the video below. + +[![Deploy the App to Microsoft Azure](https://img.youtube.com/vi/5Fq9chq0t4I/0.jpg)](https://youtu.be/5Fq9chq0t4I) + # 🏃🏽‍♂️ Run the app locally 1. Run `yarn install` to install dependencies. From a92fec3be39c7873d52e4b55fad4992a3b28a120 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 15 Nov 2023 12:28:15 +0000 Subject: [PATCH 4/9] Bump vite from 3.0.3 to 3.2.7 in /examples/csv-to-mindmap (#158) * Bump vite from 3.0.3 to 3.2.7 in /examples/csv-to-mindmap Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 3.0.3 to 3.2.7. - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/v3.2.7/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v3.2.7/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-type: direct:development ... Signed-off-by: dependabot[bot] * Use personal token for dependabot-auto-merge.yml --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Kirill Sudarushkin --- .github/workflows/dependabot-auto-merge.yml | 1 + examples/csv-to-mindmap/package.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/dependabot-auto-merge.yml b/.github/workflows/dependabot-auto-merge.yml index c5d470cd2..e4999fcbd 100644 --- a/.github/workflows/dependabot-auto-merge.yml +++ b/.github/workflows/dependabot-auto-merge.yml @@ -12,4 +12,5 @@ jobs: - uses: fastify/github-action-merge-dependabot@v3 with: target: minor + github-token: ${{ secrets.ghrs_github_api_token }} use-github-auto-merge: true diff --git a/examples/csv-to-mindmap/package.json b/examples/csv-to-mindmap/package.json index 5e1e1d1f2..f546ea5be 100644 --- a/examples/csv-to-mindmap/package.json +++ b/examples/csv-to-mindmap/package.json @@ -30,6 +30,6 @@ "@types/react-dom": "^18.0.8", "@vitejs/plugin-react": "^2.2.0", "typescript": "4.8.4", - "vite": "3.0.3" + "vite": "3.2.7" } } From 9ce80bb19429dd2aee5c5e9e3a53b09eefc2ab68 Mon Sep 17 00:00:00 2001 From: Kirill Sudarushkin Date: Thu, 16 Nov 2023 08:45:07 +0100 Subject: [PATCH 5/9] Update token for dependabot-auto-merge.yml --- .github/workflows/dependabot-auto-merge.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dependabot-auto-merge.yml b/.github/workflows/dependabot-auto-merge.yml index e4999fcbd..13b53df00 100644 --- a/.github/workflows/dependabot-auto-merge.yml +++ b/.github/workflows/dependabot-auto-merge.yml @@ -12,5 +12,5 @@ jobs: - uses: fastify/github-action-merge-dependabot@v3 with: target: minor - github-token: ${{ secrets.ghrs_github_api_token }} + github-token: ${{ secrets.DEPENDABOT_GITHUB_TOKEN }} use-github-auto-merge: true From 466025f25d9eb9f09e4c8ea6a2e4719d75f36c03 Mon Sep 17 00:00:00 2001 From: Horea Porutiu Date: Mon, 20 Nov 2023 14:42:34 +0100 Subject: [PATCH 6/9] add netlify to nextjs README and update node stickies csv to use localhost (#227) --- examples/nextjs-oauth/README.md | 6 +++++- examples/node-stickies-csv/README.md | 8 +++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/examples/nextjs-oauth/README.md b/examples/nextjs-oauth/README.md index 0ee08a393..084e82d19 100644 --- a/examples/nextjs-oauth/README.md +++ b/examples/nextjs-oauth/README.md @@ -37,7 +37,7 @@ https://github.com/miroapp/app-examples/assets/10428517/cdda8f44-bf25-420e-ae84- - Your development environment includes [Node.js 14.13](https://nodejs.org/en/download) or a later version. - All examples use `npm` as a package manager and `npx` as a package runner. -# ☁️ Deploy the app on AWS or Azure +# ☁️ Deploy the app on AWS, Azure, or Netlify If you want to understand how to deploy the app to AWS Amplify or Azure (Static Web Apps), please watch the video below. Otherwise, skip to the next section to see how to run this locally. @@ -48,6 +48,10 @@ If you want to understand how to deploy the app to Microsoft Azure (Static Web A [![Deploy the App to Microsoft Azure](https://img.youtube.com/vi/5Fq9chq0t4I/0.jpg)](https://youtu.be/5Fq9chq0t4I) +If you want to understand how to deploy the app to Netlify please watch the video below. + +[![Deploy the App to Netlify](https://img.youtube.com/vi/pLsOUNfh-TU/0.jpg)](https://youtu.be/pLsOUNfh-TU) + # 🏃🏽‍♂️ Run the app locally 1. Run `yarn install` to install dependencies. diff --git a/examples/node-stickies-csv/README.md b/examples/node-stickies-csv/README.md index 8454f77c6..f91f4d1be 100644 --- a/examples/node-stickies-csv/README.md +++ b/examples/node-stickies-csv/README.md @@ -75,12 +75,14 @@ MIRO_BOARD_ID= https://github.com/miroapp/app-examples/assets/10428517/1e6862de-8617-46ef-b265-97ff1cbfe8bf -6. Go to your developer team, and open your boards. -7. Click on the plus icon from the bottom section of your left sidebar. If you hover over it, it will say `More apps`. -8. Search for your app `Node.js Stickies to CSV` or whatever you chose to name it. Click on your app to use it, as shown in the video below. +6. Go to the developer team which you installed the app on, and open the board with the board ID matching your board from the .env file: `MIRO_BOARD_ID=`. https://github.com/horeaporutiu/app-examples-template/assets/10428517/b23d9c4c-e785-43f9-a72e-fa5d82c7b019 +7. Next, go to `localhost:8000`, and click on `Authorize App`. + +8. Go through the authorization process, then click on `List Stickies` or any of the other buttons at the top to interact with the app. + # 🗂️ Folder structure ``` From a6058d8e0ab301b786de39a42423246e564d4345 Mon Sep 17 00:00:00 2001 From: Frederico Estrela Date: Wed, 29 Nov 2023 12:27:35 +0100 Subject: [PATCH 7/9] PF-1391 - Adding breakout room example app (#226) * PF-1391 - Adding breakout room example app * PF-1391 - Creating breakout rooms * PF-1391 - Initiate timer feature in breakout room * PF-1391 - Timer UI * PF-1391 - Adding TODO in styles * PF-1391 - Implementing ticking time * PF-1391 - Small adjustments in hooks * PF-1391 - Fixing session end hooks * Adding demo video * PF-1391 - Iterating on README with folder structure * Remove video from selfie * PF-1391 - Bumping @mirohq/websdk-types@2.9.9 * PF-1391 - Using multiple sessions * UX iterations * Adjusting styles * Use avatars * Minor fixes * Update README.md * Remove notes * Update README.md * Update sdk types package * PF-1391 - Update README with new folder structured * PF-1391 - Adding real-time events doc links * PF-1391 - Bumping @mirohq/sdk-types package to 2.9.10 * Update examples/breakout-rooms/src/components/BreakoutManager/BreakoutManager.tsx Co-authored-by: Mettin Parzinski * PF-1391 - Styling using class names * PF-1391 - Reorganizing styles * PF-1391 - Cleaning up imports * PF-1391 - Treat facilitator differently * Update README.md with video and note about DS * PF-1391 - Bump SDK version * PF-1391 - Runs prettier * PF-1391 - Bump package --------- Co-authored-by: Mettin Parzinski --- README.md | 1 + examples/breakout-rooms/.gitignore | 24 + examples/breakout-rooms/APP_SUBMISSION.md | 5 + examples/breakout-rooms/README.md | 121 + examples/breakout-rooms/app-manifest.yaml | 8 + examples/breakout-rooms/app.html | 15 + examples/breakout-rooms/global.d.ts | 2 + examples/breakout-rooms/index.html | 12 + examples/breakout-rooms/package.json | 38 + examples/breakout-rooms/src/app.tsx | 24 + .../src/components/Avatar/Avatar.css | 16 + .../src/components/Avatar/Avatar.tsx | 48 + .../src/components/Avatar/index.tsx | 1 + .../BreakoutManager/BreakoutManager.css | 37 + .../BreakoutManager/BreakoutManager.tsx | 278 ++ .../src/components/BreakoutManager/index.tsx | 1 + .../BreakoutStarter/BreakoutStarter.css | 31 + .../BreakoutStarter/BreakoutStarter.tsx | 30 + .../src/components/BreakoutStarter/index.tsx | 1 + .../src/components/ErrorBoundary.tsx | 41 + .../src/components/RoomConfig/RoomConfig.css | 64 + .../src/components/RoomConfig/RoomConfig.tsx | 128 + .../src/components/RoomConfig/index.tsx | 1 + .../components/RoomsManager/RoomsManager.css | 24 + .../components/RoomsManager/RoomsManager.tsx | 103 + .../src/components/RoomsManager/index.tsx | 1 + .../src/components/Timer/Timer.css | 18 + .../src/components/Timer/Timer.tsx | 128 + .../src/components/Timer/index.tsx | 1 + .../src/components/WaitingIcon.tsx | 19 + .../components/WaitingList/WaitingList.css | 16 + .../components/WaitingList/WaitingList.tsx | 36 + .../src/components/WaitingList/index.tsx | 1 + .../components/WaitingRoom/WaitingRoom.css | 22 + .../components/WaitingRoom/WaitingRoom.tsx | 34 + .../src/components/WaitingRoom/index.tsx | 1 + examples/breakout-rooms/src/hooks.tsx | 605 +++++ examples/breakout-rooms/src/index.ts | 7 + examples/breakout-rooms/src/styles.css | 24 + examples/breakout-rooms/src/types.ts | 55 + examples/breakout-rooms/src/utils.ts | 80 + examples/breakout-rooms/tsconfig.json | 25 + examples/breakout-rooms/vite.config.ts | 31 + yarn.lock | 2339 ++++++++++++++++- 44 files changed, 4495 insertions(+), 2 deletions(-) create mode 100644 examples/breakout-rooms/.gitignore create mode 100644 examples/breakout-rooms/APP_SUBMISSION.md create mode 100644 examples/breakout-rooms/README.md create mode 100644 examples/breakout-rooms/app-manifest.yaml create mode 100644 examples/breakout-rooms/app.html create mode 100644 examples/breakout-rooms/global.d.ts create mode 100644 examples/breakout-rooms/index.html create mode 100644 examples/breakout-rooms/package.json create mode 100644 examples/breakout-rooms/src/app.tsx create mode 100644 examples/breakout-rooms/src/components/Avatar/Avatar.css create mode 100644 examples/breakout-rooms/src/components/Avatar/Avatar.tsx create mode 100644 examples/breakout-rooms/src/components/Avatar/index.tsx create mode 100644 examples/breakout-rooms/src/components/BreakoutManager/BreakoutManager.css create mode 100644 examples/breakout-rooms/src/components/BreakoutManager/BreakoutManager.tsx create mode 100644 examples/breakout-rooms/src/components/BreakoutManager/index.tsx create mode 100644 examples/breakout-rooms/src/components/BreakoutStarter/BreakoutStarter.css create mode 100644 examples/breakout-rooms/src/components/BreakoutStarter/BreakoutStarter.tsx create mode 100644 examples/breakout-rooms/src/components/BreakoutStarter/index.tsx create mode 100644 examples/breakout-rooms/src/components/ErrorBoundary.tsx create mode 100644 examples/breakout-rooms/src/components/RoomConfig/RoomConfig.css create mode 100644 examples/breakout-rooms/src/components/RoomConfig/RoomConfig.tsx create mode 100644 examples/breakout-rooms/src/components/RoomConfig/index.tsx create mode 100644 examples/breakout-rooms/src/components/RoomsManager/RoomsManager.css create mode 100644 examples/breakout-rooms/src/components/RoomsManager/RoomsManager.tsx create mode 100644 examples/breakout-rooms/src/components/RoomsManager/index.tsx create mode 100644 examples/breakout-rooms/src/components/Timer/Timer.css create mode 100644 examples/breakout-rooms/src/components/Timer/Timer.tsx create mode 100644 examples/breakout-rooms/src/components/Timer/index.tsx create mode 100644 examples/breakout-rooms/src/components/WaitingIcon.tsx create mode 100644 examples/breakout-rooms/src/components/WaitingList/WaitingList.css create mode 100644 examples/breakout-rooms/src/components/WaitingList/WaitingList.tsx create mode 100644 examples/breakout-rooms/src/components/WaitingList/index.tsx create mode 100644 examples/breakout-rooms/src/components/WaitingRoom/WaitingRoom.css create mode 100644 examples/breakout-rooms/src/components/WaitingRoom/WaitingRoom.tsx create mode 100644 examples/breakout-rooms/src/components/WaitingRoom/index.tsx create mode 100644 examples/breakout-rooms/src/hooks.tsx create mode 100644 examples/breakout-rooms/src/index.ts create mode 100644 examples/breakout-rooms/src/styles.css create mode 100644 examples/breakout-rooms/src/types.ts create mode 100644 examples/breakout-rooms/src/utils.ts create mode 100644 examples/breakout-rooms/tsconfig.json create mode 100644 examples/breakout-rooms/vite.config.ts diff --git a/README.md b/README.md index c315fa893..ddf98c9c5 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,7 @@ npx create-miro-app@latest | [blob-maker](examples/blob-maker) | This example shows you how to create a drag and drop blobmaker using Miro's Web SDK. | | [youtube-room](examples/youtube-room) | This example shows you how to sync a YouTube player across multiple users through Socket.IO. | | [custom-actions](examples/custom-actions) | This example shows you how register [custom actions](https://developers.miro.com/docs/add-custom-actions-to-your-app) in the item context menu. | +| [breakout-rooms](examples/breakout-rooms) | This example shows you how use collaborative features (real-time storage, events, sessions, etc) |

 

diff --git a/examples/breakout-rooms/.gitignore b/examples/breakout-rooms/.gitignore new file mode 100644 index 000000000..b05b37f28 --- /dev/null +++ b/examples/breakout-rooms/.gitignore @@ -0,0 +1,24 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js +.next + +# testing +/coverage + +# misc +.DS_Store +*.pem +.idea + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env +dist diff --git a/examples/breakout-rooms/APP_SUBMISSION.md b/examples/breakout-rooms/APP_SUBMISSION.md new file mode 100644 index 000000000..0d3d2f0cc --- /dev/null +++ b/examples/breakout-rooms/APP_SUBMISSION.md @@ -0,0 +1,5 @@ +## Submission to Miro Marketplace + +Congrats! You have finished building your app & you'd like to publish it for +users. You can submit your app on the +[Miro Marketplace](https://developers.miro.com/docs/submit-your-app) for review. diff --git a/examples/breakout-rooms/README.md b/examples/breakout-rooms/README.md new file mode 100644 index 000000000..393d2454d --- /dev/null +++ b/examples/breakout-rooms/README.md @@ -0,0 +1,121 @@ +# Miro Breakout rooms + +This example shows you how leverage collaborative and real-time features, including sessions and real-time events and storage. + +# 👨🏻‍💻 App Demo + +https://github.com/miroapp/app-examples/assets/7162412/e03987e3-f85b-48ab-86b8-f4314c3c5e76 + +# 📒 Table of Contents + +- [Included Features](#features) +- [Tools and Technologies](#tools) +- [Prerequisites](#prerequisites) +- [Associated Developer Tutorial](#tutorial) +- [Run the app locally](#run) +- [Folder Structure](#folder) +- [License](#license) + +# ⚙️ Included Features + +- [Miro Web SDK](https://developers.miro.com/docs/web-sdk-reference) +- [Collaborative sessions](https://developers.miro.com/docs/websdk-reference-session) +- [Attention Management](https://developers.miro.com/docs/websdk-reference-collaboration) +- [Real-time events](https://developers.miro.com/docs/websdk-reference-events) +- [Real-time storage](https://developers.miro.com/docs/websdk-reference-storage) + +# 🛠️ Tools and Technologies + +- [React](https://react.dev/) +- [TypeScript](https://www.typescriptlang.org/) +- [Vite](https://vitejs.dev/) +- [Miro Design System](https://www.npmjs.com/package/@mirohq/design-system) + +**Note**: Miro Design System can be installed from [npmjs](https://www.npmjs.com/) but it is internally supported only, you can use this example as guidance, but the team is working on public documentation, but with no ETA. Feel free to use [Mirotone](https://www.mirotone.xyz/css) in the meanwhile. + +# ✅ Prerequisites + +- You have a [Miro account](https://miro.com/signup/). +- You're [signed in to Miro](https://miro.com/login/). +- Your Miro account has a [Developer team](https://developers.miro.com/docs/create-a-developer-team). +- Your development environment includes [Node.js 14.13](https://nodejs.org/en/download) or a later version. +- All examples use `npm` as a package manager and `npx` as a package runner. + +# 📖 Associated Developer Tutorial + +> To view a more in depth developer tutorial +> of this app (including code explanations) see the [custom actions tutorial](https://developers.miro.com/docs/add-custom-actions-to-your-app) on Miro's Developer documentation. + +# 🏃🏽‍♂️ Run the app locally + +1. Run `npm install` to install dependencies. +2. Run `npm start` to start developing. \ + Your URL should be similar to this example: + ``` + http://localhost:3000 + ``` +3. Open the [app manifest editor](https://developers.miro.com/docs/manually-create-an-app#step-2-configure-your-app-in-miro) by clicking **Edit in Manifest**. \ + In the app manifest editor, configure the app as follows: + + - [`sdkUri`](https://developers.miro.com/docs/app-manifest#sdkuri): assign `http://localhost:3000` as a value for this property. \ + It defines the entry point of the app, and it corresponds to the URL of the server that the app runs on. + - [`scopes`](https://developers.miro.com/docs/app-manifest#scopes): add the permission scopes that users need to grant the app when they install it. \ + To enable the app to read from and write to the board, add the following permissions: + - `boards:read` + - `boards:write` + - `identity:read` + +#### Example of app yaml + +```yaml +# See https://developers.miro.com/docs/app-manifest on how to use this +appName: Breakout rooms +sdkVersion: SDK_V2 +sdkUri: http://localhost:3000 +scopes: + - boards:read + - boards:write + - identity:read +``` + +4. Go back to your app home page, and under the `Permissions` section, you will see a blue button that says `Install app and get OAuth token`. Click that button. Then click on `Add` as shown in the video below. In the video we install a different app, but the process is the same regardless of the app. + +> ⚠️ We recommend to install your app on a [developer team](https://developers.miro.com/docs/create-a-developer-team) while you are developing or testing apps.⚠️ + +https://github.com/miroapp/app-examples/assets/10428517/1e6862de-8617-46ef-b265-97ff1cbfe8bf + +5. Go to your developer team, and open your boards. +6. Click on the app icon on the left sidebar. + +# 🗂️ Folder structure + +``` +. +├── components +│ ├── Avatar +│ │ ├── Avatar.css +│ │ ├── Avatar.tsx +│ │ └── index.tsx +│ ├── BreakoutManager <-- Main React component displayed in the panel to facilitators +│ ├── BreakoutStarter <-- Component displayed when no rooms were configured +│ ├── RoomConfig <-- Component displayed for each configured room +│ ├── Timer <-- Timer controller component +│ ├── WaitingList <-- Component with unassigned users in the sessiin. +│ ├── WaitingRoom <-- Page displayed to participants while facilitator prepares the session. +│ ├── app.tsx <-- The app typescript entrypoint used in the panel. +│ ├── hooks.tsx <-- React hooks used in the app, including useCurrentUser, useBreakout, useTimer and some others. +│ ├── index.ts <-- The app main typescript entrypoint, rendered inside the headless iframe. +│ ├── types.ts <-- The app typescript types. +│ └── utils.ts <-- General code utilities, such as formatting and converting time in different units. +├── app.html <-- The app content displayed in the content when user clicks on the app icon on Miro boards. +├── index.html <-- The app entry point. This is the value you assign to 'sdkUri' in the app manifest file. + +``` + +# 🫱🏻‍🫲🏽 Contributing + +If you want to contribute to this example, or any other Miro Open Source project, please review [Miro's contributing guide](https://github.com/miroapp/app-examples/blob/main/CONTRIBUTING.md). + +# 🪪 License + +[MIT License](https://github.com/miroapp/app-examples/blob/main/LICENSE). diff --git a/examples/breakout-rooms/app-manifest.yaml b/examples/breakout-rooms/app-manifest.yaml new file mode 100644 index 000000000..79079db7d --- /dev/null +++ b/examples/breakout-rooms/app-manifest.yaml @@ -0,0 +1,8 @@ +# See https://developers.miro.com/docs/app-manifest on how to use this +appName: Breakout rooms +sdkVersion: SDK_V2 +sdkUri: http://localhost:3000 +scopes: + - boards:read + - boards:write + - identity:read diff --git a/examples/breakout-rooms/app.html b/examples/breakout-rooms/app.html new file mode 100644 index 000000000..c8a42e0c8 --- /dev/null +++ b/examples/breakout-rooms/app.html @@ -0,0 +1,15 @@ + + + + + + + + Miro - Breakout rooms + + +
+ + + + diff --git a/examples/breakout-rooms/global.d.ts b/examples/breakout-rooms/global.d.ts new file mode 100644 index 000000000..18b40cc0f --- /dev/null +++ b/examples/breakout-rooms/global.d.ts @@ -0,0 +1,2 @@ +// https://vitejs.dev/guide/features.html#typescript-compiler-options +/// diff --git a/examples/breakout-rooms/index.html b/examples/breakout-rooms/index.html new file mode 100644 index 000000000..091ae98d9 --- /dev/null +++ b/examples/breakout-rooms/index.html @@ -0,0 +1,12 @@ + + + + + + + Miro - Breakout rooms + + + + + diff --git a/examples/breakout-rooms/package.json b/examples/breakout-rooms/package.json new file mode 100644 index 000000000..a6e671428 --- /dev/null +++ b/examples/breakout-rooms/package.json @@ -0,0 +1,38 @@ +{ + "name": "breakout-rooms", + "version": "0.0.1", + "license": "MIT", + "description": "This example shows you how leverage collaborative and real-time features, including sessions and real-time events and storage.", + "keywords": [ + "Miro SDK", + "Vite", + "React", + "TypeSript", + "Collaborative", + "Breakout rooms", + "Real-time", + "Attention Management" + ], + "scripts": { + "start": "vite", + "build": "vite build", + "serve": "vite preview" + }, + "dependencies": { + "@mirohq/design-system": "^0.18.2", + "@stitches/react": "^1.2.8", + "classnames": "^2.3.2", + "mirotone": "5", + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@mirohq/websdk-types": "latest", + "@types/node": "^18.8.2", + "@types/react": "^18.0.24", + "@types/react-dom": "^18.0.8", + "@vitejs/plugin-react": "^2.2.0", + "typescript": "4.9.5", + "vite": "3.0.3" + } +} diff --git a/examples/breakout-rooms/src/app.tsx b/examples/breakout-rooms/src/app.tsx new file mode 100644 index 000000000..f44606687 --- /dev/null +++ b/examples/breakout-rooms/src/app.tsx @@ -0,0 +1,24 @@ +"use client"; + +import * as React from "react"; +import { useBreakout } from "./hooks"; +import { BreakoutManager } from "./components/BreakoutManager"; +import { WaitingRoom } from "./components/WaitingRoom/WaitingRoom"; +import { createRoot } from "react-dom/client"; +import { ErrorBoundary } from "./components/ErrorBoundary"; + +const App: React.FC = () => { + const { isFacilitator, breakout } = useBreakout(); + + const areYouReady = isFacilitator || !breakout; + + return ( + + {areYouReady ? : } + + ); +}; + +const container = document.getElementById("root")!; +const root = createRoot(container); +root.render(); diff --git a/examples/breakout-rooms/src/components/Avatar/Avatar.css b/examples/breakout-rooms/src/components/Avatar/Avatar.css new file mode 100644 index 000000000..080f656fc --- /dev/null +++ b/examples/breakout-rooms/src/components/Avatar/Avatar.css @@ -0,0 +1,16 @@ +.avatar { + border-radius: 100%; + flex-shrink: 0; + background: #817f99; + box-shadow: 0 0 0 6px var(--color, transparent); + outline: 4px solid #fff; + width: 2.2em; + height: 2.2em; + font-size: 14px; + color: #fff; + display: flex; + justify-content: center; + align-items: center; + font-size: 12px; + font-weight: 600; +} diff --git a/examples/breakout-rooms/src/components/Avatar/Avatar.tsx b/examples/breakout-rooms/src/components/Avatar/Avatar.tsx new file mode 100644 index 000000000..b6e170d48 --- /dev/null +++ b/examples/breakout-rooms/src/components/Avatar/Avatar.tsx @@ -0,0 +1,48 @@ +import * as React from "react"; +import { OnlineUserInfo } from "@mirohq/websdk-types"; +import { initials } from "../../utils"; + +export type Props = { + user: OnlineUserInfo; + color?: string; +}; + +import "./Avatar.css"; + +const colors = [ + "var(--colors-blue-600)", + "var(--colors-green-600)", + "var(--colors-red-600)", + "var(--colors-yellow-600)", +]; +function* colorGenerator(colors: string[]) { + let index = 0; + const totalColors = colors.length; + + while (true) { + yield colors[index]; + index = (index + 1) % totalColors; + } +} + +const getNextColor = colorGenerator(colors); + +const userColors = new Map(); +const getUserColor = (user: OnlineUserInfo): string => { + let color = userColors.get(user.id); + if (!color) { + color = getNextColor.next().value ?? colors[0]; + userColors.set(user.id, color); + } + + return color; +}; + +export const Avatar: React.FC = ({ user }) => { + const style = { "--color": getUserColor(user) } as React.CSSProperties; + return ( +
+ {initials(user.name)} +
+ ); +}; diff --git a/examples/breakout-rooms/src/components/Avatar/index.tsx b/examples/breakout-rooms/src/components/Avatar/index.tsx new file mode 100644 index 000000000..8d3d546e7 --- /dev/null +++ b/examples/breakout-rooms/src/components/Avatar/index.tsx @@ -0,0 +1 @@ +export * from "./Avatar"; diff --git a/examples/breakout-rooms/src/components/BreakoutManager/BreakoutManager.css b/examples/breakout-rooms/src/components/BreakoutManager/BreakoutManager.css new file mode 100644 index 000000000..9cfcc545f --- /dev/null +++ b/examples/breakout-rooms/src/components/BreakoutManager/BreakoutManager.css @@ -0,0 +1,37 @@ +.manager-container { + display: flex; + height: 100%; + flex-direction: column; + gap: 1em; +} + +.validation-messages { + background: #f5f5f3; + padding: 1em; +} + +.validation-messages .validatino-messages-title { + font-size: 1em; + font-weight: 600; + line-height: 1em; + margin: 0; + color: #656b81; +} + +.validation-messages .validatino-messages-items { + font-size: 0.9em; +} + +.toolbar { + display: flex; + flex-direction: column; + justify-content: center; + gap: 1em; +} + +.toolbar button { + justify-content: center; + margin: 0; + width: 100%; + padding: 1em; +} diff --git a/examples/breakout-rooms/src/components/BreakoutManager/BreakoutManager.tsx b/examples/breakout-rooms/src/components/BreakoutManager/BreakoutManager.tsx new file mode 100644 index 000000000..109b9590c --- /dev/null +++ b/examples/breakout-rooms/src/components/BreakoutManager/BreakoutManager.tsx @@ -0,0 +1,278 @@ +"use client"; + +import * as React from "react"; + +import { Participant, Room } from "../../types"; +import { Frame, Json, OnlineUserInfo } from "@mirohq/websdk-types"; +import { + useBreakout, + useOnlineUsers, + useSelectedItems, + useTimer, +} from "../../hooks"; +import { formatDisplayTime, isUser } from "../../utils"; +import { DEFAULT_TIME } from "../Timer/Timer"; +import { Button } from "@mirohq/design-system"; + +import { BreakoutStarter } from "../BreakoutStarter"; +import { WaitingList } from "../WaitingList"; +import { RoomsManager } from "../RoomsManager"; + +import "./BreakoutManager.css"; + +export const BreakoutManager: React.FC = () => { + const { breakout, rooms, isFacilitator, ...service } = useBreakout(); + const onlineUsers = useOnlineUsers(); + const selectedItems = useSelectedItems({ + predicate: (item) => item.type === "frame", + }); + const [selectedRoom, setSelectedRoom] = React.useState(); + const [duration, setTimerDuration] = React.useState(); + const [currentTime, setCurrentTime] = React.useState(0); + const [canUseTimer] = React.useState(false); + + const onTimerStop = React.useCallback(() => { + service.endSession(); + }, [breakout?.id]); + + const timer = useTimer({ + duration: duration ?? DEFAULT_TIME, + onStop: onTimerStop, + onTick: (timestamp) => setCurrentTime(timestamp), + }); + + const participantIds = rooms + .map((room) => room.participants.map((p) => p.id)) + .flat() + .sort() + .join("-"); + + const unassignedUsers = React.useMemo(() => { + return onlineUsers.filter((user) => + rooms.every((room) => + room.participants.every((participant) => participant.id !== user.id), + ), + ); + }, [onlineUsers, participantIds]); + + React.useEffect(() => { + const handleSelectionUpdate = async () => { + if (!selectedItems.length || !selectedRoom) { + return; + } + + const [frame] = selectedItems; + + if (frame) { + await service.setRoomTarget(selectedRoom, frame.id); + await miro.board.notifications.showInfo( + `Frame "${frame.title}" has been selected as starting point.`, + ); + await miro.board.deselect({ id: frame.id }); + setSelectedRoom(undefined); + } else { + await miro.board.notifications.showError( + "We only support frames as starting point for now", + ); + } + }; + + handleSelectionUpdate(); + }, [selectedRoom, selectedItems]); + + React.useEffect(() => { + const boostrap = () => { + const handleNudge = async (currentUser?: Json) => { + if (isUser(currentUser)) { + await miro.board.notifications.showInfo( + `${currentUser?.name} is waiting to start the session`, + ); + } + }; + + miro.board.events.on("nudge-facilitator", handleNudge); + + return () => { + miro.board.events.off("nudge-facilitator", handleNudge); + }; + }; + + return boostrap(); + }, []); + + const handleAddGroup = async () => { + await service.addRoom(); + }; + + const handleStartSelectTarget = async (selected: Room) => { + await miro.board.deselect(); + setSelectedRoom(selected); + + await miro.board.notifications.showInfo( + `Select the frame in the board for ${selected.name}`, + ); + }; + + const handleAddParticipant = async ( + selected: Room, + participant: OnlineUserInfo, + ) => { + await service.addParticipant(selected, participant); + }; + + const handleRemoveParticipant = async ( + selected: Room, + participant: Participant, + ) => { + await service.removeParticipant(selected, participant); + }; + + const handleSplitUsers = async () => { + const count = rooms.length; + + // This needs to be only new users + const users = unassignedUsers; + const roomSize = Math.max(Math.floor(users.length / count), 1); + + const usersInRooms: OnlineUserInfo[][] = []; + + for (let i = 0; i < users.length; i += roomSize) { + usersInRooms.push(users.slice(i, i + roomSize)); + } + + for (let i = 0; i < count; ++i) { + const room = rooms[i]; + const participants = usersInRooms[i]; + for (const participant of participants) { + await service.addParticipant(room, participant); + } + } + }; + + const handleRemoveRoom = async (selected: Room) => { + await service.removeRoom(selected); + }; + + const safeTimerHandler = (cb: () => void) => { + if (canUseTimer) { + cb(); + } + }; + + const handleStartSession = async () => { + await service.startSession(); + safeTimerHandler(async () => { + if (duration && timer.state !== "started") { + await timer.start(); + } + }); + }; + + const handleReleaseFacilitator = async () => { + await service.releaseSession(); + }; + + const handleStopSession = async () => { + await service.endSession(); + safeTimerHandler(async () => { + if (timer.state === "started") { + await timer.stop(); + } + }); + }; + + const validations: string[] = []; + if (!breakout?.rooms.length) { + validations.push("Add rooms to your session"); + } + + const allRoomsWithParticipants = breakout?.rooms.every( + (room) => room.participants.length > 0, + ); + + if (!allRoomsWithParticipants) { + validations.push("Add users to each room"); + } + + const allRoomsWithTargets = breakout?.rooms.every((room) => + Boolean(room.targetId), + ); + + if (!allRoomsWithTargets) { + validations.push("Set a frame to each room"); + } + + const canStartSession = validations.length < 1; + const isEditable = breakout?.state !== "started"; + + return ( +
+ {breakout?.state !== "started" && rooms.length < 1 ? ( + + ) : ( + + )} + + {rooms.length && unassignedUsers.length ? ( + + ) : null} + + {isEditable && validations.length > 0 ? ( +
+
+ Before starting the session: +
+
    + {validations.map((message) => ( +
  • {message}
  • + ))} +
+
+ ) : ( +
+ {breakout?.state === "started" ? ( + + ) : ( + + + + )} +
+ )} +
+ ); +}; diff --git a/examples/breakout-rooms/src/components/BreakoutManager/index.tsx b/examples/breakout-rooms/src/components/BreakoutManager/index.tsx new file mode 100644 index 000000000..903bb62db --- /dev/null +++ b/examples/breakout-rooms/src/components/BreakoutManager/index.tsx @@ -0,0 +1 @@ +export * from "./BreakoutManager"; diff --git a/examples/breakout-rooms/src/components/BreakoutStarter/BreakoutStarter.css b/examples/breakout-rooms/src/components/BreakoutStarter/BreakoutStarter.css new file mode 100644 index 000000000..164ab0bd8 --- /dev/null +++ b/examples/breakout-rooms/src/components/BreakoutStarter/BreakoutStarter.css @@ -0,0 +1,31 @@ +.breakout-starter { + display: flex; + flex-direction: column; + align-items: center; + flex: 1; + justify-content: center; +} + +.breakout-starter .waiting-icon { + margin: auto; +} + +.starter-action { + background: #f2f4fc; + border-radius: 0.25em; + padding: 1em; + display: flex; + gap: 1em; + align-items: center; + align-self: flex-start; + width: 100%; +} + +.starter-action .starter-action-title { + font-size: 1em; + font-weight: 600; + line-height: 1.5em; + text-align: left; + color: #3859ff; + margin: 0; +} diff --git a/examples/breakout-rooms/src/components/BreakoutStarter/BreakoutStarter.tsx b/examples/breakout-rooms/src/components/BreakoutStarter/BreakoutStarter.tsx new file mode 100644 index 000000000..ca98966d1 --- /dev/null +++ b/examples/breakout-rooms/src/components/BreakoutStarter/BreakoutStarter.tsx @@ -0,0 +1,30 @@ +import { IconButton, IconPlus } from "@mirohq/design-system"; +import React from "react"; + +import { WaitingIcon } from "../WaitingIcon"; + +import "./BreakoutStarter.css"; + +type Props = { + onAddGroup: () => void; +}; + +export const BreakoutStarter: React.FC = ({ onAddGroup }) => { + return ( +
+
+ + + +
Create a room to get started
+
+ + +
+ ); +}; diff --git a/examples/breakout-rooms/src/components/BreakoutStarter/index.tsx b/examples/breakout-rooms/src/components/BreakoutStarter/index.tsx new file mode 100644 index 000000000..9b18a6975 --- /dev/null +++ b/examples/breakout-rooms/src/components/BreakoutStarter/index.tsx @@ -0,0 +1 @@ +export * from "./BreakoutStarter"; diff --git a/examples/breakout-rooms/src/components/ErrorBoundary.tsx b/examples/breakout-rooms/src/components/ErrorBoundary.tsx new file mode 100644 index 000000000..a8f518b04 --- /dev/null +++ b/examples/breakout-rooms/src/components/ErrorBoundary.tsx @@ -0,0 +1,41 @@ +"use client"; + +import React, { Component, ErrorInfo, ReactNode } from "react"; + +interface Props { + children?: ReactNode; +} + +interface State { + hasError: boolean; + error?: Error; + errorInfo?: ErrorInfo; +} + +export class ErrorBoundary extends Component { + public state: State = { + hasError: false, + }; + + public static getDerivedStateFromError(_: Error): State { + return { hasError: true }; + } + + public componentDidCatch(error: Error, errorInfo: ErrorInfo) { + console.error("Uncaught error:", error, errorInfo); + } + + public render() { + if (!this.state.error) { + return this.props.children; + } + + return ( +
+

Something went wrong

+
{JSON.stringify(this.state.error, null, 2)}
+
{JSON.stringify(this.state.errorInfo, null, 2)}
+
+ ); + } +} diff --git a/examples/breakout-rooms/src/components/RoomConfig/RoomConfig.css b/examples/breakout-rooms/src/components/RoomConfig/RoomConfig.css new file mode 100644 index 000000000..2fb38c70b --- /dev/null +++ b/examples/breakout-rooms/src/components/RoomConfig/RoomConfig.css @@ -0,0 +1,64 @@ +.room { + display: flex; + flex-direction: column; + justify-content: center; + background: #eeeded; + border-radius: 0.25em; + gap: 0.5em; + padding: 1em; + width: 100%; + height: 8em; +} + +.room-controls { + display: flex; + justify-content: flex-end; + align-items: center; +} + +.room .room-controls-title { + margin: 0; + margin-right: auto; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + font-size: 1em; + font-weight: 600; +} + +.button-selected { + background-color: var(--blue100); +} + +.button-active { + background-color: var(--blue300); +} + +.users { + display: flex; + align-items: center; + gap: 0.8em; +} + +.users .list { + /** Overrides DS specific tokens for dropdown **/ + --space-inset-100: 16px; + font-size: 12px; +} + +.users .list .item { + display: flex; + align-items: center; + gap: 1em; +} +.users .list .item + div { + padding-left: 3.5em; +} + +.avatars { + display: flex; +} + +.avatars .avatar:not(:first-child) { + margin-left: -0.25em; +} diff --git a/examples/breakout-rooms/src/components/RoomConfig/RoomConfig.tsx b/examples/breakout-rooms/src/components/RoomConfig/RoomConfig.tsx new file mode 100644 index 000000000..cc3e7b18a --- /dev/null +++ b/examples/breakout-rooms/src/components/RoomConfig/RoomConfig.tsx @@ -0,0 +1,128 @@ +"use client"; + +import * as React from "react"; +import { + DropdownMenu, + IconButton, + IconFrame, + IconTrash, + IconUserAdd, +} from "@mirohq/design-system"; +import { OnlineUserInfo } from "@mirohq/websdk-types"; + +import type { Participant, Room } from "../../types"; +import { Avatar } from "../Avatar"; + +import "./RoomConfig.css"; + +export type Props = { + room: Room; + isEditable: boolean; + isSelected: boolean; + unassignedUsers: OnlineUserInfo[]; + onSelectTarget: (room: Room) => void; + onRemove: (room: Room) => void; + onAddParticipant: (room: Room, user: OnlineUserInfo) => void; + onRemoveParticipant: (room: Room, participant: Participant) => void; +}; + +export const RoomConfig: React.FunctionComponent = ({ + room, + isEditable, + unassignedUsers, + onSelectTarget, + onRemove, + onAddParticipant, + onRemoveParticipant, +}) => { + return ( +
+
+

+ {room.name} +

+ onSelectTarget(room)} + > + + + + onRemove(room)} + > + + +
+ +
+ {room.participants.length ? ( +
+ {room.participants.map((participant) => ( + + ))} +
+ ) : null} + + + + + + + + + {unassignedUsers.length ? ( +
+ + Users not in the room + + {unassignedUsers.map((user) => ( + onAddParticipant(room, user)} + > +
+ + {user.name} +
+
+ ))} +
+ ) : null} + + {room.participants.length ? ( +
+ {unassignedUsers.length ? : null} + {room.participants.map((user) => ( + onRemoveParticipant(room, user)} + > +
+ + {user.name} +
+ + {user.state} + +
+ ))} +
+ ) : null} +
+
+
+
+ ); +}; diff --git a/examples/breakout-rooms/src/components/RoomConfig/index.tsx b/examples/breakout-rooms/src/components/RoomConfig/index.tsx new file mode 100644 index 000000000..3f45968a3 --- /dev/null +++ b/examples/breakout-rooms/src/components/RoomConfig/index.tsx @@ -0,0 +1 @@ +export * from "./RoomConfig"; diff --git a/examples/breakout-rooms/src/components/RoomsManager/RoomsManager.css b/examples/breakout-rooms/src/components/RoomsManager/RoomsManager.css new file mode 100644 index 000000000..a91646677 --- /dev/null +++ b/examples/breakout-rooms/src/components/RoomsManager/RoomsManager.css @@ -0,0 +1,24 @@ +.container { + display: flex; + flex-direction: column; + gap: 1em; + align-items: center; + flex: 1; +} + +.rooms-container { + display: flex; + flex-direction: column; + max-height: 24em; + min-height: 10em; + gap: 0.5em; + overflow: auto; + width: 100%; +} + +.breakout-controls { + width: 100%; + display: flex; + justify-content: space-between; + align-items: center; +} diff --git a/examples/breakout-rooms/src/components/RoomsManager/RoomsManager.tsx b/examples/breakout-rooms/src/components/RoomsManager/RoomsManager.tsx new file mode 100644 index 000000000..eee5e95aa --- /dev/null +++ b/examples/breakout-rooms/src/components/RoomsManager/RoomsManager.tsx @@ -0,0 +1,103 @@ +import * as React from "react"; +import { OnlineUserInfo } from "@mirohq/websdk-types"; +import { convertTime } from "../../utils"; +import { RoomConfig, Props as RoomConfigProps } from "../RoomConfig"; +import { + DropdownMenu, + IconButton, + IconDotsThreeVertical, + IconHandFilled, + IconPlus, +} from "@mirohq/design-system"; + +import { Timer } from "../Timer"; +import { Room } from "../../types"; + +import "./RoomsManager.css"; + +export type Props = { + rooms: Room[]; + selectedRoom?: Room; + isEditable: boolean; + isFacilitator: boolean; + canUseTimer: boolean; + unassignedUsers: OnlineUserInfo[]; + onAddParticipant: RoomConfigProps["onAddParticipant"]; + onSelectTarget: RoomConfigProps["onSelectTarget"]; + onRemove: RoomConfigProps["onRemove"]; + onRemoveParticipant: RoomConfigProps["onRemoveParticipant"]; + onAddGroup: () => void; + onReleaseFacilitator: () => void; + onSetTime: (time: number) => void; +}; + +export const RoomsManager: React.FC = ({ + rooms, + isEditable, + isFacilitator, + canUseTimer, + selectedRoom, + unassignedUsers, + onAddParticipant, + onSelectTarget, + onRemove, + onRemoveParticipant, + onAddGroup, + onSetTime, + onReleaseFacilitator, +}) => { + return ( +
+
+ {rooms.map((room) => ( + + ))} +
+
+ + + + + {canUseTimer && ( + + )} + + {isFacilitator && ( + + + + + + <> + onReleaseFacilitator()}> + + + + Release facilitator role + + + + + )} +
+
+ ); +}; diff --git a/examples/breakout-rooms/src/components/RoomsManager/index.tsx b/examples/breakout-rooms/src/components/RoomsManager/index.tsx new file mode 100644 index 000000000..26291d92f --- /dev/null +++ b/examples/breakout-rooms/src/components/RoomsManager/index.tsx @@ -0,0 +1 @@ +export * from "./RoomsManager"; diff --git a/examples/breakout-rooms/src/components/Timer/Timer.css b/examples/breakout-rooms/src/components/Timer/Timer.css new file mode 100644 index 000000000..046f80441 --- /dev/null +++ b/examples/breakout-rooms/src/components/Timer/Timer.css @@ -0,0 +1,18 @@ +.timer-container { + display: flex; + align-items: center; + gap: 0.5em; + min-height: 4em; +} + +.timer-control { + display: flex; + align-items: center; + gap: 0.5em; + padding-right: 0.5em; + border-right: 1px solid var(--indigo400); +} + +.timer-display { + font-size: 2em; +} diff --git a/examples/breakout-rooms/src/components/Timer/Timer.tsx b/examples/breakout-rooms/src/components/Timer/Timer.tsx new file mode 100644 index 000000000..c18565c17 --- /dev/null +++ b/examples/breakout-rooms/src/components/Timer/Timer.tsx @@ -0,0 +1,128 @@ +"use client"; + +import * as React from "react"; +import { + Button, + DropdownMenu, + IconMinus, + IconPlus, + IconTimer, +} from "@mirohq/design-system"; +import { convertTime, formatDisplayTime, formatTime } from "../../utils"; + +import "./Timer.css"; + +/** + * 5 mins + */ +export const DEFAULT_TIME = convertTime(5, "milliseconds", "minutes"); +/** + * 1 min + */ +export const DEFAULT_MIN_TIME = convertTime(1, "milliseconds", "minutes"); +/** + * 10 mins + */ +export const DEFAULT_MAX_TIME = convertTime(10, "milliseconds", "minutes"); +/** + * 15 seconds + */ +export const DEFAULT_STEP = convertTime(15, "milliseconds", "seconds"); + +type Props = { + /** + * Default time in milliseconds + */ + defaultTime?: number; + /** + * Min time in milliseconds + */ + minTime?: number; + /** + * Max time in milliseconds + */ + maxTime?: number; + /** + * Inc/Dec step in milliseconds + */ + step?: number; + /** + * Set chosen time in milliseconds + */ + onSet: (time: number) => void; +}; + +export const Timer: React.FunctionComponent = ({ + defaultTime = DEFAULT_TIME, + minTime = DEFAULT_MIN_TIME, + maxTime = DEFAULT_MAX_TIME, + step = DEFAULT_STEP, + onSet, +}) => { + const [time, setTime] = React.useState(defaultTime); + const [timeChanged, setTimeChanged] = React.useState(false); + + const handleAdd = () => { + setTime((time) => (time <= maxTime ? time + step : time)); + }; + + const handleDecrease = () => { + setTime((time) => (time > minTime ? time - step : time)); + }; + + const handleSetTime = () => { + onSet(time); + setTimeChanged(true); + }; + + return ( + <> + + + + + +
+
+ + +
{formatDisplayTime(time)}
+ + +
+ +
+
+
+ + ); +}; diff --git a/examples/breakout-rooms/src/components/Timer/index.tsx b/examples/breakout-rooms/src/components/Timer/index.tsx new file mode 100644 index 000000000..c8bd02797 --- /dev/null +++ b/examples/breakout-rooms/src/components/Timer/index.tsx @@ -0,0 +1 @@ +export * from "./Timer"; diff --git a/examples/breakout-rooms/src/components/WaitingIcon.tsx b/examples/breakout-rooms/src/components/WaitingIcon.tsx new file mode 100644 index 000000000..5c71a64b9 --- /dev/null +++ b/examples/breakout-rooms/src/components/WaitingIcon.tsx @@ -0,0 +1,19 @@ +import React from "react"; + +export const WaitingIcon = () => { + return ( + + + + ); +}; diff --git a/examples/breakout-rooms/src/components/WaitingList/WaitingList.css b/examples/breakout-rooms/src/components/WaitingList/WaitingList.css new file mode 100644 index 000000000..1716975ae --- /dev/null +++ b/examples/breakout-rooms/src/components/WaitingList/WaitingList.css @@ -0,0 +1,16 @@ +.waiting-list { + border: 1px solid #d4d4d9; + padding: 1em; + border-radius: 0.25em; + display: flex; + flex-direction: column; + gap: 1em; +} + +.waiting-list .waiting-list-title { + font-size: 1em; + margin: 0; + font-weight: 600; + line-height: 1.5em; + text-align: left; +} diff --git a/examples/breakout-rooms/src/components/WaitingList/WaitingList.tsx b/examples/breakout-rooms/src/components/WaitingList/WaitingList.tsx new file mode 100644 index 000000000..f62082f47 --- /dev/null +++ b/examples/breakout-rooms/src/components/WaitingList/WaitingList.tsx @@ -0,0 +1,36 @@ +import { Button, IconUserAdd } from "@mirohq/design-system"; +import { OnlineUserInfo } from "@mirohq/websdk-types"; +import React from "react"; + +import "./WaitingList.css"; + +type Props = { + unassignedUsers: OnlineUserInfo[]; + onSplitUsers: () => void; + disabled: boolean; +}; + +export const WaitingList: React.FC = ({ + unassignedUsers, + onSplitUsers, + disabled, +}) => { + return ( +
+
+ {unassignedUsers.length} user(s) not in rooms +
+ +
+ ); +}; diff --git a/examples/breakout-rooms/src/components/WaitingList/index.tsx b/examples/breakout-rooms/src/components/WaitingList/index.tsx new file mode 100644 index 000000000..044fa5f58 --- /dev/null +++ b/examples/breakout-rooms/src/components/WaitingList/index.tsx @@ -0,0 +1 @@ +export * from "./WaitingList"; diff --git a/examples/breakout-rooms/src/components/WaitingRoom/WaitingRoom.css b/examples/breakout-rooms/src/components/WaitingRoom/WaitingRoom.css new file mode 100644 index 000000000..371444a8c --- /dev/null +++ b/examples/breakout-rooms/src/components/WaitingRoom/WaitingRoom.css @@ -0,0 +1,22 @@ +.waiting-room-container { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 2em; + height: 100%; +} + +.waiting-room-message { + background: #f5f5f3; + padding: 1em; + border-radius: 0.5em; +} + +.waiting-room-message h1 { + font-size: 1.5em; +} + +.waiting-room-container .waiting-icon { + margin: auto; +} diff --git a/examples/breakout-rooms/src/components/WaitingRoom/WaitingRoom.tsx b/examples/breakout-rooms/src/components/WaitingRoom/WaitingRoom.tsx new file mode 100644 index 000000000..28c40dad2 --- /dev/null +++ b/examples/breakout-rooms/src/components/WaitingRoom/WaitingRoom.tsx @@ -0,0 +1,34 @@ +"use client"; + +import * as React from "react"; +import { Button, IconHandPointing } from "@mirohq/design-system"; + +import { useCurrentUser } from "../../hooks"; +import { WaitingIcon } from "../WaitingIcon"; +import "./WaitingRoom.css"; + +export const WaitingRoom: React.FC = () => { + const currentUser = useCurrentUser(); + + const handleNudge = () => { + if (!currentUser) { + return; + } + + miro.board.events.broadcast("nudge-facilitator", currentUser); + }; + return ( +
+
+

You facilitator is preparing the session

+ +
+ +
+ ); +}; diff --git a/examples/breakout-rooms/src/components/WaitingRoom/index.tsx b/examples/breakout-rooms/src/components/WaitingRoom/index.tsx new file mode 100644 index 000000000..8397623cc --- /dev/null +++ b/examples/breakout-rooms/src/components/WaitingRoom/index.tsx @@ -0,0 +1 @@ +export * from "./WaitingRoom"; diff --git a/examples/breakout-rooms/src/hooks.tsx b/examples/breakout-rooms/src/hooks.tsx new file mode 100644 index 000000000..049a6b430 --- /dev/null +++ b/examples/breakout-rooms/src/hooks.tsx @@ -0,0 +1,605 @@ +import * as React from "react"; + +import { + Item, + OnlineUserInfo, + SelectionUpdateEvent, + TimerEvent, + UserInfo, + Session, +} from "@mirohq/websdk-types"; + +import { + Breakout, + Participant, + Room, + SelectItemsOpts, + TimerOpts, + TimerState, + UserSessionEvent, +} from "./types"; +import { convertTime, formatDisplayTime, generateUniqueId } from "./utils"; + +const COLLECTION_NAME = "breakout-rooms"; +const ACTIVE_ITEM = "active"; + +const log = (id: string, ...args: unknown[]) => + false && console.log(id, JSON.stringify(args, null, 2)); + +export const useCurrentUser = () => { + const [userInfo, setUserInfo] = React.useState(); + + React.useEffect(() => { + const fetch = async () => { + const info = await miro.board.getUserInfo(); + setUserInfo(info); + }; + + fetch(); + }, []); + + return userInfo; +}; + +export const useOnlineUsers = () => { + const [onlineUsers, setOnlineUsers] = React.useState([]); + + React.useEffect(() => { + const fetch = async () => { + const users = await miro.board.getOnlineUsers(); + setOnlineUsers(users); + }; + + miro.board.ui.on("online_users:update", fetch); + + fetch(); + + return () => { + miro.board.ui.off("online_users:update", fetch); + }; + }, []); + + return onlineUsers; +}; + +export const useSelectedItems = ( + opts?: SelectItemsOpts, +) => { + const [items, setItems] = React.useState([]); + + React.useEffect(() => { + const subscribe = () => { + const handleSelectionUpdate = async (event: SelectionUpdateEvent) => { + let items = event.items as T[]; + if (opts?.predicate) { + items = items.filter(opts.predicate); + } + setItems(items); + }; + + miro.board.ui.on("selection:update", handleSelectionUpdate); + + return () => { + miro.board.ui.off("selection:update", handleSelectionUpdate); + }; + }; + + return subscribe(); + }, []); + + return items; +}; + +export const useBreakout = () => { + const [breakout, setBreakout] = React.useState(); + const currentUser = useCurrentUser(); + + React.useEffect(() => { + if (!currentUser) { + return; + } + + const init = () => { + const breakoutRooms = miro.board.storage.collection(COLLECTION_NAME); + + const activeValue = (activeBreakout?: Breakout) => { + log("onValue", { activeBreakout }); + setBreakout(activeBreakout?.id ? activeBreakout : undefined); + }; + + log("subscribing to onValue", { breakoutRooms }); + breakoutRooms.get(ACTIVE_ITEM).then(activeValue); + breakoutRooms.onValue(ACTIVE_ITEM, activeValue); + + return () => { + breakoutRooms.offValue(ACTIVE_ITEM, activeValue); + }; + }; + + return init(); + }, [breakout?.id, currentUser?.id]); + + const saveBreakout = async ( + breakout?: Breakout, + opts: Partial> = {}, + ) => { + if (!currentUser) { + throw new Error("Could not fetch current Miro user"); + } + + const breakoutRooms = await miro.board.storage.collection(COLLECTION_NAME); + + log("saveBreakout", { breakout, opts }); + + if (breakout?.id) { + Object.assign(breakout, { + sessionId: opts.sessionId ?? breakout.sessionId ?? "", + state: opts.state ?? breakout.state ?? "idle", + rooms: opts.rooms ?? breakout.rooms ?? [], + }); + breakoutRooms.set(ACTIVE_ITEM, breakout); + log("saveBreakout.update", { breakout, opts }); + + return breakout; + } else { + const newBreakout = { + id: generateUniqueId(), + creator: currentUser, + rooms: opts.rooms ?? [], + state: opts.state ?? "idle", + }; + + log("saveBreakout.new", { newBreakout, opts }); + breakoutRooms.set(ACTIVE_ITEM, newBreakout); + + return newBreakout; + } + }; + + const addParticipant = async (room: Room, user: OnlineUserInfo) => { + const sessionRooms = breakout?.rooms ?? []; + + const rooms = sessionRooms.map((r) => { + if (r.id === room.id) { + const participant: Participant = { + ...user, + state: "Waiting room", + }; + const participants = [...r.participants, participant].sort((a, b) => + a.name.localeCompare(b.name), + ); + return { + ...r, + participants, + }; + } + + return r; + }); + + log("addParticipant", { rooms, room, user }); + + await saveBreakout(breakout, { rooms }); + }; + + const removeParticipant = async (room: Room, participant: Participant) => { + const sessionRooms = breakout?.rooms ?? []; + + const rooms = sessionRooms.map((r) => { + if (r.id === room.id) { + return { + ...r, + participants: r.participants.filter((p) => p.id !== participant.id), + }; + } + + return r; + }); + + log("removeParticipant", { rooms, room, participant }); + + await saveBreakout(breakout, { rooms }); + }; + + const removeRoom = async (room: Room) => { + const sessionRooms = breakout?.rooms ?? []; + + const rooms = sessionRooms.filter((r) => r.id !== room.id); + + log("removeRoom", { rooms, room }); + await saveBreakout(breakout, { rooms }); + }; + + const addRoom = async (opts?: Partial) => { + const sessionRooms = breakout?.rooms ?? []; + + const room: Room = { + id: generateUniqueId(), + name: `Room ${sessionRooms.length + 1}`, + participants: [], + ...opts, + }; + + log("addRoom", { room }); + + await saveBreakout(breakout, { rooms: [...sessionRooms, room] }); + }; + + const setRoomTarget = async (room: Room, targetId: string) => { + const sessionRooms = breakout?.rooms ?? []; + + const rooms = sessionRooms.map((r) => ({ + ...r, + targetId: r.id === room.id ? targetId : r.targetId ?? "", + })); + + log("setRoomTarget", { room, rooms, targetId }); + + await saveBreakout(breakout, { rooms }); + }; + + const updateParticipant = async ( + room: Room, + participant: Participant, + data: Partial, + ) => { + const sessionRooms = breakout?.rooms ?? []; + + const rooms = sessionRooms.map((r) => { + if (r.id === room.id) { + return { + ...r, + participants: r.participants.map((p) => { + if (p.id === participant.id) { + return { + ...p, + ...data, + }; + } + + return p; + }), + }; + } + + return r; + }); + + log("updateParticipant", { rooms, room, participant, data }); + + await saveBreakout(breakout, { rooms }); + }; + + const handleUserJoined = async ({ userId, sessionId }: UserSessionEvent) => { + log("handleUserJoined", { userId, sessionId, breakout }); + if (!breakout) { + return; + } + + let participant: Participant | undefined; + let room: Room | undefined; + + breakout.rooms.some((r) => { + if (r.sessionId !== sessionId) { + return false; + } + + return r.participants.some((p) => { + if (p.id === userId) { + participant = p; + room = r; + return true; + } + + return false; + }); + }); + + log("handleUserJoined.participant", { room, participant }); + + if (!room || !participant) { + await miro.board.notifications.showError( + `User ${userId} has joined a session but no room was assigned`, + ); + return; + } + + if (!room.targetId) { + await miro.board.notifications.showError( + `Room ${room.name} has no target assigned`, + ); + return; + } + + await updateParticipant(room, participant, { state: "In Session" }); + + const frame = await miro.board.get({ type: "frame", id: room.targetId }); + if (!frame) { + await miro.board.notifications.showError( + `Could not find target with ID: "${room.targetId}"`, + ); + return; + } + + if (participant.id === currentUser?.id) { + await miro.board.viewport.zoomTo(frame); + } else { + await miro.board.collaboration.zoomTo(participant, frame); + } + }; + + const handleUserLeft = async ({ userId, sessionId }: UserSessionEvent) => { + log("handleUserLeft", { userId, sessionId, breakout }); + if (!breakout) { + return; + } + + let participant: Participant | undefined; + let room: Room | undefined; + + breakout.rooms.some((r) => { + if (r.sessionId !== sessionId) { + return false; + } + + return r.participants.some((p) => { + if (p.id === userId) { + participant = p; + room = r; + return true; + } + + return false; + }); + }); + + log("handleUserLeft.participant", { room, participant }); + + if (!room || !participant) { + return; + } + + await removeParticipant(room, participant); + }; + + const upsertSession = async (room: Room) => { + let session: Session | undefined; + if (room.sessionId) { + const sessions = await miro.board.collaboration.getSessions(); + session = sessions.find((s) => s.id === room.sessionId); + } + + if (!session) { + session = await miro.board.collaboration.startSession({ + name: room.name, + }); + + const rooms = breakout?.rooms.map((r) => { + return room.id === r.id ? { ...r, sessionId: session!.id } : r; + }); + + await saveBreakout(breakout, { + rooms, + }); + } + + log("upsertSession", { session, breakout }); + + return session; + }; + + const startSession = async () => { + if (!breakout) { + throw new Error("Invalid breakout session"); + } + + log("startSession", breakout); + await saveBreakout(breakout, { state: "started" }); + + await Promise.all( + breakout.rooms.map(async (room) => { + const session = await upsertSession(room); + + const myself = room.participants.find( + (user) => currentUser?.id === user.id, + ); + const everyoneElse = room.participants.filter( + (user) => currentUser?.id !== user.id, + ); + + if (myself) { + await session.join(); + } + await session.invite(everyoneElse); + + room.participants.map((participant) => + updateParticipant(room, participant, { state: "Invitation Pending" }), + ); + + session.on("user-joined", handleUserJoined); + session.on("user-left", handleUserLeft); + }), + ); + }; + + const endSession = async () => { + log("[TIMER:endSession]", { breakout }); + if (!breakout) { + throw new Error("Invalid breakout session"); + } + + const finishRooms = breakout.rooms.map(async (room) => { + const session = await upsertSession(room); + if (!session) { + throw new Error(`Breakout ${breakout} doesn't have a Miro session`); + } + + await session.end(); + + room.participants.map((participant) => + updateParticipant(room, participant, { state: "Waiting room" }), + ); + }); + + await Promise.all(finishRooms); + + await saveBreakout(breakout, { state: "ended" }); + await releaseSession(); + }; + + const releaseSession = async () => { + const breakoutRooms = await miro.board.storage.collection(COLLECTION_NAME); + breakoutRooms.remove(ACTIVE_ITEM); + setBreakout(undefined); + }; + + const isFacilitator = + Boolean(breakout) && breakout?.creator.id === currentUser?.id; + + const rooms = breakout?.rooms ?? []; + + return { + breakout, + isFacilitator, + rooms, + saveBreakout, + addRoom, + addParticipant, + removeParticipant, + removeRoom, + setRoomTarget, + startSession, + endSession, + releaseSession, + }; +}; + +export const useTimer = (opts: TimerOpts) => { + const [state, setState] = React.useState("idle"); + const interval = React.useRef>(); + + const tick = convertTime(opts.interval ?? 1_000, "milliseconds"); + + const start = React.useCallback(async () => { + const isStarted = await miro.board.experimental.timer.isStarted(); + if (isStarted) { + throw new Error("Timer is already running"); + } + + log("[TIMER:START]", { opts }); + await miro.board.experimental.timer.start(opts.duration); + }, [miro, opts.duration]); + + const pause = React.useCallback(async () => { + const isStarted = await miro.board.experimental.timer.isStarted(); + if (isStarted) { + await miro.board.experimental.timer.pause(); + } else { + throw new Error("Timer is not running"); + } + }, [miro]); + + const stop = React.useCallback(async () => { + const isStarted = await miro.board.experimental.timer.isStarted(); + if (isStarted) { + await miro.board.experimental.timer.stop(); + } + }, [miro]); + + const handleTimerStart = React.useCallback( + async ({ timer }: TimerEvent) => { + setState("started"); + opts.onStart?.(); + + let timeStart = timer.startedAt; + const timeEnd = + timeStart + convertTime(timer.restDuration, "milliseconds"); + + log("[TIMER:STARTED]", { + timer, + timeStart, + timeEnd, + opts, + startFormatted: new Date(timeStart).toTimeString(), + endFormatted: new Date(timeEnd).toTimeString(), + }); + + clearInterval(interval.current); + interval.current = setInterval(() => { + timeStart += tick; + const restDuration = timeEnd - timeStart; + + log("[TIMER:TICK]", { + timeStart, + tick, + restDuration, + restFormatted: formatDisplayTime(restDuration), + current: new Date(timeStart).toTimeString(), + }); + + if (timeStart >= timeEnd) { + clearInterval(interval.current); + stop(); + return; + } + + opts.onTick?.(restDuration); + }, tick); + }, + [opts.onStart, opts.onTick, stop], + ); + + const handleTimerFinish = React.useCallback( + async ({ timer }: TimerEvent) => { + log("[TIMER:FINISHED]", { timer }); + clearInterval(interval.current); + setState("ended"); + opts.onStop?.(); + }, + [interval, interval, opts.onStop], + ); + + const handleTimerUpdate = React.useCallback(async (event: TimerEvent) => { + log("[TIMER:UPDATED]", { event }); + switch (event.timer.status) { + case "STARTED": + setState("started"); + break; + case "PAUSED": + setState("paused"); + break; + case "STOPPED": + setState("ended"); + break; + } + }, []); + + React.useEffect(() => { + const fetchCurrent = async () => { + const isStarted = await miro.board.experimental.timer.isStarted(); + log("[TIMER:CURRENT]", { isStarted }); + setState(isStarted ? "started" : "idle"); + }; + + fetchCurrent(); + }, []); + + React.useEffect(() => { + miro.board.ui.on("experimental:timer:start", handleTimerStart); + miro.board.ui.on("experimental:timer:finish", handleTimerFinish); + miro.board.ui.on("experimental:timer:update", handleTimerUpdate); + + return () => { + miro.board.ui.off("experimental:timer:start", handleTimerStart); + miro.board.ui.off("experimental:timer:finish", handleTimerFinish); + miro.board.ui.off("experimental:timer:update", handleTimerUpdate); + }; + }, [handleTimerStart, handleTimerFinish, handleTimerUpdate]); + + return { + state, + start, + stop, + pause, + }; +}; diff --git a/examples/breakout-rooms/src/index.ts b/examples/breakout-rooms/src/index.ts new file mode 100644 index 000000000..ba766d049 --- /dev/null +++ b/examples/breakout-rooms/src/index.ts @@ -0,0 +1,7 @@ +export async function init() { + miro.board.ui.on("icon:click", async () => { + await miro.board.ui.openPanel({ url: "app.html" }); + }); +} + +init(); diff --git a/examples/breakout-rooms/src/styles.css b/examples/breakout-rooms/src/styles.css new file mode 100644 index 000000000..f1e02e887 --- /dev/null +++ b/examples/breakout-rooms/src/styles.css @@ -0,0 +1,24 @@ +@import "mirotone/dist/styles.css"; + +*, +*:before, +*:after { + box-sizing: border-box; +} + +#root { + overflow: auto; + padding: var(--space-medium); + /** TODO: Had to hardcode this here since it's not coming from DS for some reason **/ + --shadows-50: 0 4px 16px #05003812; + height: 100%; +} + +img { + max-width: 100%; + height: auto; +} + +.waiting-icon { + width: 2.5em; +} diff --git a/examples/breakout-rooms/src/types.ts b/examples/breakout-rooms/src/types.ts new file mode 100644 index 000000000..b356fc1f7 --- /dev/null +++ b/examples/breakout-rooms/src/types.ts @@ -0,0 +1,55 @@ +import { Item, OnlineUserInfo, UserInfo } from "@mirohq/websdk-types"; + +export type BreakoutState = "idle" | "started" | "ended"; + +export type ParticipantState = + | "Waiting room" + | "In Session" + | "Invitation Pending"; + +export type Participant = OnlineUserInfo & { + state: ParticipantState; +}; + +export type Room = { + id: string; + name: string; + targetId?: string; + participants: Participant[]; + sessionId?: string; + selected?: boolean; +}; + +export type Breakout = { + id: string; + creator: UserInfo; + sessionId?: string; + rooms: Room[]; + state: BreakoutState; +}; + +export type TimerState = "idle" | "started" | "paused" | "ended"; +export type TimeUnit = + | "milliseconds" + | "seconds" + | "minutes" + | "hours" + | "days"; + +export type TimerOpts = { + durationUnit?: TimeUnit; + duration: number; + interval?: number; + onTick?: (timestamp: number) => void; + onStop?: () => void; + onStart?: () => void; +}; + +export type SelectItemsOpts = { + predicate?: (items: Item) => boolean; +}; + +export type UserSessionEvent = { + userId: string; + sessionId: string; +}; diff --git a/examples/breakout-rooms/src/utils.ts b/examples/breakout-rooms/src/utils.ts new file mode 100644 index 000000000..406c9e4c3 --- /dev/null +++ b/examples/breakout-rooms/src/utils.ts @@ -0,0 +1,80 @@ +import { OnlineUserInfo } from "@mirohq/websdk-types"; +import { TimeUnit } from "./types"; + +export function generateUniqueId(): string { + const timestamp = new Date().getTime(); + const random = Math.floor(Math.random() * 1000); + return `${timestamp}${random}`; +} + +export const isUser = (data: unknown): data is OnlineUserInfo => + // @ts-expect-error check whether it's a user + data.id && data.name; + +const timeFactors: Record = { + milliseconds: 1, + seconds: 1000, + minutes: 60 * 1000, + hours: 60 * 60 * 1000, + days: 24 * 60 * 60 * 1000, +}; + +export const convertTime = ( + time: number, + to: TimeUnit, + from: TimeUnit = "milliseconds", +): number => { + const valueInMilliseconds = time * timeFactors[from]; + const convertedValue = valueInMilliseconds / timeFactors[to]; + + return convertedValue; +}; + +export const formatTime = ( + value: number, + unit: TimeUnit = "milliseconds", +): string => { + const formatter = new Intl.RelativeTimeFormat("en", { numeric: "auto" }); + let formattedValue = value; + let formattedUnit = unit; + + const seconds = convertTime(value, "seconds", unit); + + // Convert to the next higher unit + if (seconds >= 60) { + formattedValue = seconds / 60; + formattedUnit = "minutes"; + } + if (formattedValue >= 60) { + formattedValue = formattedValue / 60; + formattedUnit = "hours"; + } + if (formattedValue >= 24) { + formattedValue = formattedValue / 24; + formattedUnit = "days"; + } + + return formatter.format(formattedValue, formattedUnit); +}; + +export const formatDisplayTime = ( + time: number, + unit: TimeUnit = "milliseconds", +): string => { + const timestamp = convertTime(time, "seconds", unit); + + const minutes = Math.floor(timestamp / 60); + const seconds = Math.floor(timestamp % 60); + + return [minutes, seconds] + .map((unit) => unit.toString().padStart(2, "0")) + .join(":"); +}; + +export const initials = (name: string) => + name + .trim() + .split(" ") + .splice(0, 2) + .map((n) => n[0]) + .join(""); diff --git a/examples/breakout-rooms/tsconfig.json b/examples/breakout-rooms/tsconfig.json new file mode 100644 index 000000000..09013aa3b --- /dev/null +++ b/examples/breakout-rooms/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "esnext", + "lib": ["esnext", "dom"], + "jsx": "preserve", + "moduleResolution": "node", + "strict": true, + "sourceMap": true, + "resolveJsonModule": true, + "esModuleInterop": true, + "noEmit": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noImplicitReturns": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "typeRoots": ["./node_modules/@types", "./node_modules/@mirohq"], + "allowJs": true, + "incremental": true, + "isolatedModules": true + }, + "include": ["src", "pages", "*.ts"], + "exclude": ["node_modules"] +} diff --git a/examples/breakout-rooms/vite.config.ts b/examples/breakout-rooms/vite.config.ts new file mode 100644 index 000000000..6a481aeb7 --- /dev/null +++ b/examples/breakout-rooms/vite.config.ts @@ -0,0 +1,31 @@ +import path from "path"; +import fs from "fs"; +import dns from "dns"; +import { defineConfig } from "vite"; +import react from "@vitejs/plugin-react"; + +// https://vitejs.dev/config/server-options.html#server-host +dns.setDefaultResultOrder("verbatim"); + +// make sure vite picks up all html files in root, needed for vite build +const allHtmlEntries = fs + .readdirSync(".") + .filter((file) => path.extname(file) === ".html") + .reduce((acc, file) => { + acc[path.basename(file, ".html")] = path.resolve(__dirname, file); + + return acc; + }, {}); + +// https://vitejs.dev/config/ +export default defineConfig({ + build: { + rollupOptions: { + input: allHtmlEntries, + }, + }, + plugins: [react()], + server: { + port: 3000, + }, +}); diff --git a/yarn.lock b/yarn.lock index 3ed89735b..945aa782e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -284,6 +284,13 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.13.10": + version "7.23.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.2.tgz#062b0ac103261d68a966c4c7baf2ae3e62ec3885" + integrity sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/template@^7.20.7": version "7.20.7" resolved "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz" @@ -348,11 +355,21 @@ resolved "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz" integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw== +"@esbuild/android-arm@0.15.18": + version "0.15.18" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.15.18.tgz#266d40b8fdcf87962df8af05b76219bc786b4f80" + integrity sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw== + "@esbuild/linux-loong64@0.14.54": version "0.14.54" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz#de2a4be678bd4d0d1ffbb86e6de779cde5999028" integrity sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw== +"@esbuild/linux-loong64@0.15.18": + version "0.15.18" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz#128b76ecb9be48b60cf5cfc1c63a4f00691a3239" + integrity sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ== + "@eslint/eslintrc@^0.4.3": version "0.4.3" resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz" @@ -408,6 +425,72 @@ lodash.isundefined "^3.0.1" lodash.uniq "^4.5.0" +"@floating-ui/core@^1.4.2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.5.0.tgz#5c05c60d5ae2d05101c3021c1a2a350ddc027f8c" + integrity sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg== + dependencies: + "@floating-ui/utils" "^0.1.3" + +"@floating-ui/dom@^1.5.1": + version "1.5.3" + resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.5.3.tgz#54e50efcb432c06c23cd33de2b575102005436fa" + integrity sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA== + dependencies: + "@floating-ui/core" "^1.4.2" + "@floating-ui/utils" "^0.1.3" + +"@floating-ui/react-dom@^2.0.0": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.0.4.tgz#b076fafbdfeb881e1d86ae748b7ff95150e9f3ec" + integrity sha512-CF8k2rgKeh/49UrnIBs4BdxPUV6vize/Db1d/YbCLyp9GiVZ0BEwf5AiDSxJRCr6yOkGqTFHtmrULxkEfYZ7dQ== + dependencies: + "@floating-ui/dom" "^1.5.1" + +"@floating-ui/utils@^0.1.3": + version "0.1.6" + resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.1.6.tgz#22958c042e10b67463997bd6ea7115fe28cbcaf9" + integrity sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A== + +"@formatjs/ecma402-abstract@1.18.0": + version "1.18.0" + resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.18.0.tgz#e2120e7101020140661b58430a7ff4262705a2f2" + integrity sha512-PEVLoa3zBevWSCZzPIM/lvPCi8P5l4G+NXQMc/CjEiaCWgyHieUoo0nM7Bs0n/NbuQ6JpXEolivQ9pKSBHaDlA== + dependencies: + "@formatjs/intl-localematcher" "0.5.2" + tslib "^2.4.0" + +"@formatjs/fast-memoize@2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@formatjs/fast-memoize/-/fast-memoize-2.2.0.tgz#33bd616d2e486c3e8ef4e68c99648c196887802b" + integrity sha512-hnk/nY8FyrL5YxwP9e4r9dqeM6cAbo8PeU9UjyXojZMNvVad2Z06FAVHyR3Ecw6fza+0GH7vdJgiKIVXTMbSBA== + dependencies: + tslib "^2.4.0" + +"@formatjs/icu-messageformat-parser@2.7.3": + version "2.7.3" + resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.7.3.tgz#c8c95e7c9f8141bdb93bea0e92e4fcace19d3c9f" + integrity sha512-X/jy10V9S/vW+qlplqhMUxR8wErQ0mmIYSq4mrjpjDl9mbuGcCILcI1SUYkL5nlM4PJqpc0KOS0bFkkJNPxYRw== + dependencies: + "@formatjs/ecma402-abstract" "1.18.0" + "@formatjs/icu-skeleton-parser" "1.7.0" + tslib "^2.4.0" + +"@formatjs/icu-skeleton-parser@1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.7.0.tgz#796938d6d0ba8fc75bb9edee038d1350bfee32cb" + integrity sha512-Cfdo/fgbZzpN/jlN/ptQVe0lRHora+8ezrEeg2RfrNjyp+YStwBy7cqDY8k5/z2LzXg6O0AdzAV91XS0zIWv+A== + dependencies: + "@formatjs/ecma402-abstract" "1.18.0" + tslib "^2.4.0" + +"@formatjs/intl-localematcher@0.5.2": + version "0.5.2" + resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.5.2.tgz#5fcf029fd218905575e5080fa33facdcb623d532" + integrity sha512-txaaE2fiBMagLrR4jYhxzFO6wEdEG4TPMqrzBAcbr4HFUYzH/YC+lg6OIzKCHm8WgDdyQevxbAAV1OgcXctuGw== + dependencies: + tslib "^2.4.0" + "@humanwhocodes/config-array@^0.10.5": version "0.10.7" resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz" @@ -455,6 +538,35 @@ resolved "https://registry.npmjs.org/@icons/material/-/material-0.2.4.tgz" integrity sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw== +"@internationalized/date@^3.3.0", "@internationalized/date@^3.5.0": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@internationalized/date/-/date-3.5.0.tgz#67f1dd62355f05140cc80e324842e9bfb4553abe" + integrity sha512-nw0Q+oRkizBWMioseI8+2TeUPEyopJVz5YxoYVzR0W1v+2YytiYah7s/ot35F149q/xAg4F1gT/6eTd+tsUpFQ== + dependencies: + "@swc/helpers" "^0.5.0" + +"@internationalized/message@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@internationalized/message/-/message-3.1.1.tgz#0f29c5a239b5dcd457b55f21dcd38d1a44a1236a" + integrity sha512-ZgHxf5HAPIaR0th+w0RUD62yF6vxitjlprSxmLJ1tam7FOekqRSDELMg4Cr/DdszG5YLsp5BG3FgHgqquQZbqw== + dependencies: + "@swc/helpers" "^0.5.0" + intl-messageformat "^10.1.0" + +"@internationalized/number@^3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@internationalized/number/-/number-3.4.0.tgz#1c3ebf6ac40ce649d3d97bb835ff0559957f2e1f" + integrity sha512-8TvotW3qVDHC4uv/BVoN6Qx0Dm8clHY1/vpH+dh+XRiPW/9NVpKn1P8d1A+WLphWrMwyqyWXI7uWehJPviaeIw== + dependencies: + "@swc/helpers" "^0.5.0" + +"@internationalized/string@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@internationalized/string/-/string-3.1.1.tgz#2ab7372d58bbb7ffd3de62fc2a311e4690186981" + integrity sha512-fvSr6YRoVPgONiVIUhgCmIAlifMVCeej/snPZVzbzRPxGpHl3o1GRe+d/qh92D8KhgOciruDUH8I5mjdfdjzfA== + dependencies: + "@swc/helpers" "^0.5.0" + "@jridgewell/gen-mapping@^0.1.0": version "0.1.1" resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz" @@ -495,6 +607,438 @@ "@jridgewell/resolve-uri" "3.1.0" "@jridgewell/sourcemap-codec" "1.4.14" +"@mirohq/design-system-badge@^0.3.26": + version "0.3.26" + resolved "https://registry.yarnpkg.com/@mirohq/design-system-badge/-/design-system-badge-0.3.26.tgz#f727aba5c86c40a6cb88a82c922e6363e0ba1dae" + integrity sha512-vgiHOIwWANUECI+vCciOyPr3ct3FKAr6mL++/BpRzAUIrcRDphF/q/htS1KrLhXUrmiRUV9Gs72m180Fb2Al8w== + dependencies: + "@mirohq/design-system-primitive" "^1.1.1" + "@mirohq/design-system-stitches" "^2.4.1" + "@mirohq/design-system-types" "^0.6.2" + +"@mirohq/design-system-base-button@^0.4.28": + version "0.4.28" + resolved "https://registry.yarnpkg.com/@mirohq/design-system-base-button/-/design-system-base-button-0.4.28.tgz#5eafdcbf74e1ba8ed9eedc7903b85abf7ffe522a" + integrity sha512-uygauti6RazZ3dOs0uBnBnLB++DiYx1xu3XTpsbrwXBYFLuNzaiZP5gV4SiVfEdh/QN2FBwkkc+2iBks9Zfm5A== + dependencies: + "@mirohq/design-system-primitive" "^1.1.1" + "@mirohq/design-system-stitches" "^2.4.1" + "@mirohq/design-system-types" "^0.6.2" + "@react-aria/interactions" "^3.13.0" + "@react-aria/utils" "^3.13.0" + "@react-types/shared" "^3.16.0" + +"@mirohq/design-system-base-icon@^0.1.17": + version "0.1.17" + resolved "https://registry.yarnpkg.com/@mirohq/design-system-base-icon/-/design-system-base-icon-0.1.17.tgz#bf775e180c4bb548e611b072db5bc79003a366e5" + integrity sha512-AF+qLCvNPR66vNF80yt9fmNOJWPAjje+u5wu1NSwia2sehAeGGcDrMvTj/XDR0NgqDEGhaJbo+NqEQMoqjnDzg== + dependencies: + "@mirohq/design-system-primitive" "^1.1.1" + "@mirohq/design-system-stitches" "^2.4.1" + +"@mirohq/design-system-base-input@^0.0.1": + version "0.0.1" + resolved "https://registry.yarnpkg.com/@mirohq/design-system-base-input/-/design-system-base-input-0.0.1.tgz#9f94bb3d04174d48eb69c9f7264df8a53c612a93" + integrity sha512-hlgt6uvJ6cNFzhk51HzEth0RvZmOg8Wg70P2Z18Crmy+StABLcDoHXcwr0eq1CIoupqFtEgO9Jr8JjBw3BLs2w== + +"@mirohq/design-system-base-switch@^0.1.16": + version "0.1.16" + resolved "https://registry.yarnpkg.com/@mirohq/design-system-base-switch/-/design-system-base-switch-0.1.16.tgz#434008f124a4b27f98c2e12288456feabe4e1a71" + integrity sha512-Iod4f0h2mk7eaynqs6r9oDkBZsxrH0rDKwafxXb1ShKbMisXq0q2rWJSO8wGEZiuQF3emeFi4Vj0lkL4HU0I6A== + dependencies: + "@mirohq/design-system-primitive" "^1.1.1" + "@mirohq/design-system-stitches" "^2.4.1" + +"@mirohq/design-system-box@^2.1.27": + version "2.1.27" + resolved "https://registry.yarnpkg.com/@mirohq/design-system-box/-/design-system-box-2.1.27.tgz#4820ff3406f7d538acbaf4b571a360216142eae6" + integrity sha512-zAbqyQCkWW7BIOIU02XpA2jC9SPiZNzSLnDiXR0HkpFKIlb5n3LF3ekrpOryl+XnTlLhIHgRVhMNKoy3QuNwVA== + dependencies: + "@mirohq/design-system-primitive" "^1.1.1" + "@mirohq/design-system-stitches" "^2.4.1" + +"@mirohq/design-system-button@^3.1.28": + version "3.1.28" + resolved "https://registry.yarnpkg.com/@mirohq/design-system-button/-/design-system-button-3.1.28.tgz#52f94e5a2a7c6147799ffa67c0b1ec1e679032c8" + integrity sha512-vQdQH6TdXVzLJppYNPQoeSIarsKG4oszjPEXULP4yAQyXOjnH/5OtRFbE5SRy9NJu5bcd4/2HA3b+tPIZcD48w== + dependencies: + "@mirohq/design-system-base-button" "^0.4.28" + "@mirohq/design-system-primitive" "^1.1.1" + "@mirohq/design-system-spinner" "^1.1.30" + "@mirohq/design-system-stitches" "^2.4.1" + "@mirohq/design-system-styles" "^1.1.16" + "@mirohq/design-system-types" "^0.6.2" + "@mirohq/design-system-utils" "^0.14.3" + "@react-aria/utils" "^3.13.0" + +"@mirohq/design-system-calendar@^0.1.43": + version "0.1.43" + resolved "https://registry.yarnpkg.com/@mirohq/design-system-calendar/-/design-system-calendar-0.1.43.tgz#26a3eb11f8bf6374ed01c16bc61d82e8664303a4" + integrity sha512-dxpv41jZy2VIpqLxPIQklY+PkSZGpOHys7HAGbSIOGzlH05IAh9LP0TvOFu3hpNA1jZhE6fd/Mtkbk6RKEyvbA== + dependencies: + "@internationalized/date" "^3.3.0" + "@mirohq/design-system-button" "^3.1.28" + "@mirohq/design-system-flex" "^2.1.31" + "@mirohq/design-system-icons" "^0.32.4" + "@mirohq/design-system-primitive" "^1.1.1" + "@mirohq/design-system-stitches" "^2.4.1" + "@react-types/datepicker" "^3.4.0" + react-aria "^3.25.0" + react-stately "^3.23.0" + +"@mirohq/design-system-checkbox@^1.1.60": + version "1.1.60" + resolved "https://registry.yarnpkg.com/@mirohq/design-system-checkbox/-/design-system-checkbox-1.1.60.tgz#d032a6ed4fb89557dd3ce1528a74d87126f7bd93" + integrity sha512-PUItmlCpnCgeZR8tGvxfJg8fyF8PCxIZ4WjFbOdGQ7BAdeL7+erk8DekIAAdrhy4pWNaA+ZOrUwtYkSEp/Lf3w== + dependencies: + "@mirohq/design-system-icons" "^0.32.4" + "@mirohq/design-system-primitive" "^1.1.1" + "@mirohq/design-system-stitches" "^2.4.1" + "@mirohq/design-system-types" "^0.6.2" + "@radix-ui/react-checkbox" "^1.0.0" + +"@mirohq/design-system-dropdown-menu@^3.5.23": + version "3.5.23" + resolved "https://registry.yarnpkg.com/@mirohq/design-system-dropdown-menu/-/design-system-dropdown-menu-3.5.23.tgz#94f5102d2a8a36f4f8bae120444b58e8a32bd0d3" + integrity sha512-IsJ5gS4pYqAs3eASRMTFuV7CFN70tm8KjL12IOs48u/NxFaz6ei906SwYqtsg9GZNmb0PL99kpVTGuoty4MZeg== + dependencies: + "@mirohq/design-system-base-icon" "^0.1.17" + "@mirohq/design-system-base-switch" "^0.1.16" + "@mirohq/design-system-primitive" "^1.1.1" + "@mirohq/design-system-scroll-area" "^0.1.18" + "@mirohq/design-system-stitches" "^2.4.1" + "@mirohq/design-system-styles" "^1.1.16" + "@mirohq/design-system-types" "^0.6.2" + "@mirohq/design-system-use-layout-effect" "^0.2.1" + "@mirohq/design-system-utils" "^0.14.3" + "@radix-ui/react-dropdown-menu" "^2.0.5" + "@react-aria/utils" "^3.13.0" + +"@mirohq/design-system-flex@^2.1.31": + version "2.1.31" + resolved "https://registry.yarnpkg.com/@mirohq/design-system-flex/-/design-system-flex-2.1.31.tgz#65b249d266646b235c0bc1a3830a5f5ea93bffb0" + integrity sha512-ZQSA12Cevh09xSrwEfiEFcLqEDdPyRiWqGi/Xv9pBXPb1cs1LfNTV11OMH5GAxkbCs6kcw2Q9/PDL7x62S17dQ== + dependencies: + "@mirohq/design-system-primitive" "^1.1.1" + "@mirohq/design-system-stitches" "^2.4.1" + "@mirohq/design-system-utils" "^0.14.3" + +"@mirohq/design-system-grid@^2.1.30": + version "2.1.30" + resolved "https://registry.yarnpkg.com/@mirohq/design-system-grid/-/design-system-grid-2.1.30.tgz#d18b9e201ca3617ef19227f56da331f3c138cc89" + integrity sha512-j72kaKHUE8+HuUukYG69CFyRugTa8+cDBTRoVjShmawTfOdgRh2rSKP288ws9E6q6VseDY5kH6KmmI9UjibyEg== + dependencies: + "@mirohq/design-system-primitive" "^1.1.1" + "@mirohq/design-system-stitches" "^2.4.1" + "@mirohq/design-system-utils" "^0.14.3" + +"@mirohq/design-system-icon-button@^1.3.22": + version "1.3.22" + resolved "https://registry.yarnpkg.com/@mirohq/design-system-icon-button/-/design-system-icon-button-1.3.22.tgz#4ba46c2d4a29acadae4c07b52918e5ad3b3bae53" + integrity sha512-Qs5N+PetyB1hsEMzJAdK/77GQWBr5n1yi8ra8VKEOWlDGxLwi+OR1qvIkxGVDAHBAb4U4CNPn0oM1148gVsR/g== + dependencies: + "@mirohq/design-system-badge" "^0.3.26" + "@mirohq/design-system-base-button" "^0.4.28" + "@mirohq/design-system-stitches" "^2.4.1" + "@mirohq/design-system-tooltip" "^3.2.34" + +"@mirohq/design-system-icons@^0.32.4": + version "0.32.4" + resolved "https://registry.yarnpkg.com/@mirohq/design-system-icons/-/design-system-icons-0.32.4.tgz#e54595be6684d53ea018d7eaa2f540ebdad48219" + integrity sha512-vh4XR2rTRiNFfrKvp34/xHkMk5zy8BBAVugpf+Gghv6bFuyvYBnuUMZtBHRuZNRgDgr5+3MY4poINJ+FkHtFqA== + dependencies: + "@mirohq/design-system-base-icon" "^0.1.17" + "@mirohq/design-system-link" "^1.3.9" + "@mirohq/design-system-primitive" "^1.1.1" + "@mirohq/design-system-stitches" "^2.4.1" + "@mirohq/design-system-utils" "^0.14.3" + +"@mirohq/design-system-input@^0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@mirohq/design-system-input/-/design-system-input-0.0.3.tgz#0271c74d28c50c0d5527cbe2bae706ea2d7f9637" + integrity sha512-jNftlerEVpnyJgIujcBJ3mR+iaKq3v4X6vGv7ap55+sRd/najjD8ClZ7+WuUDMPDSifFlIFSJbmLIhbIXifXdw== + dependencies: + "@mirohq/design-system-base-button" "^0.4.28" + "@mirohq/design-system-base-icon" "^0.1.17" + "@mirohq/design-system-base-input" "^0.0.1" + "@mirohq/design-system-icon-button" "^1.3.22" + "@mirohq/design-system-icons" "^0.32.4" + "@mirohq/design-system-styles" "^1.1.16" + "@mirohq/design-system-tooltip" "^3.2.34" + "@react-aria/interactions" "^3.13.0" + "@react-aria/utils" "^3.13.0" + "@react-types/shared" "^3.16.0" + +"@mirohq/design-system-link@^1.3.9": + version "1.3.9" + resolved "https://registry.yarnpkg.com/@mirohq/design-system-link/-/design-system-link-1.3.9.tgz#7bd5bbb906c8fa40e80368a0adb243d72d5ca575" + integrity sha512-vGR01CZhMahZKg87epr8gWze4UOqBVslVnFNlTuCuq0PzOlSQwfD5vFKzuBvYA3dik62+9uUz56UCxZmNizb/Q== + dependencies: + "@mirohq/design-system-primitive" "^1.1.1" + "@mirohq/design-system-stitches" "^2.4.1" + "@mirohq/design-system-styles" "^1.1.16" + "@mirohq/design-system-utils" "^0.14.3" + "@react-aria/interactions" "^3.13.0" + "@react-aria/utils" "^3.13.0" + "@react-types/shared" "^3.16.0" + +"@mirohq/design-system-popover@^5.1.8": + version "5.1.8" + resolved "https://registry.yarnpkg.com/@mirohq/design-system-popover/-/design-system-popover-5.1.8.tgz#662079944f65beb7435f9d8bcf3d3596e77cc4d0" + integrity sha512-Ja/mdLtrn+Akt7u8BJmOsViSFbFSvWJz+4Hqt3/ZyvxY7uhWzKlpcFZo6eulIiIMD/nKF3pSWZ55r75X2AsREQ== + dependencies: + "@mirohq/design-system-icons" "^0.32.4" + "@mirohq/design-system-primitive" "^1.1.1" + "@mirohq/design-system-stitches" "^2.4.1" + "@mirohq/design-system-styles" "^1.1.16" + "@radix-ui/react-popover" "^1.0.0" + "@radix-ui/react-use-size" "^1.0.1" + +"@mirohq/design-system-primitive@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@mirohq/design-system-primitive/-/design-system-primitive-1.1.1.tgz#69b84ed8de5e83c674b9c98a4668118b2c1e8fc6" + integrity sha512-v+WEPMiZqM5xbfJuUqcY8fbxfH8RgJi69+pUrCD6mnxtpzN5epyKXPjUN86xzOQCLaHuSzES95FrNliTe9+5KQ== + dependencies: + "@radix-ui/react-slot" "^1.0.0" + +"@mirohq/design-system-scroll-area@^0.1.18": + version "0.1.18" + resolved "https://registry.yarnpkg.com/@mirohq/design-system-scroll-area/-/design-system-scroll-area-0.1.18.tgz#41100c98ef918c8036e1f4dcc3d50fec47a8f1f2" + integrity sha512-eiUnGSnPufN8VSxd+VAcqiDN+FI9LsgANRQkN23e6lMSBJAO0tQc8EoCrMKNSuDyd3SSUwCe93P+nHpQza3OSw== + dependencies: + "@mirohq/design-system-stitches" "^2.4.1" + "@radix-ui/react-scroll-area" "^1.0.4" + +"@mirohq/design-system-select@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@mirohq/design-system-select/-/design-system-select-0.2.3.tgz#886157eb618530948eec1dcae973e837d721cd6e" + integrity sha512-EU3cTIOQ9B+KdXSu0yRjFkrnGTpW6nulvzU14uIB16YeIgAYQylluiqoa5N9qcTjrzTShcK4LNFYxbKtP6JMfg== + dependencies: + "@mirohq/design-system-icons" "^0.32.4" + "@mirohq/design-system-primitive" "^1.1.1" + "@mirohq/design-system-scroll-area" "^0.1.18" + "@mirohq/design-system-stitches" "^2.4.1" + "@mirohq/design-system-types" "^0.6.2" + "@mirohq/design-system-utils" "^0.14.3" + "@radix-ui/react-select" "^2.0.0" + "@react-aria/interactions" "^3.13.0" + "@react-types/shared" "^3.16.0" + +"@mirohq/design-system-spinner@^1.1.30": + version "1.1.30" + resolved "https://registry.yarnpkg.com/@mirohq/design-system-spinner/-/design-system-spinner-1.1.30.tgz#d7bd9cc2bf9842ba1c6db2a1a6e01ef1ef0d62ef" + integrity sha512-1meE9AReZCin+QEAdU9t5F7jKf7JrUmdhGtWjq6uNkXf55GiChiLT0zA8KrngIZsNcFBgcVl7M2ErZVrjCGeHA== + dependencies: + "@mirohq/design-system-primitive" "^1.1.1" + "@mirohq/design-system-stitches" "^2.4.1" + "@mirohq/design-tokens" "^3.6.0" + +"@mirohq/design-system-stitches@^2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@mirohq/design-system-stitches/-/design-system-stitches-2.4.1.tgz#0b51c9eda368019665b2af5046de805d54bd12d7" + integrity sha512-jUJuDK0oc4FmUvA7IKUBEW5P3xX5fws3YTgNx6sKVxTN1lTO5AU7vKNKv4nU40ix7TgMLHUi0XiJRgPk2FnKlA== + dependencies: + "@mirohq/design-system-themes" "^0.5.4" + "@mirohq/design-system-types" "^0.6.2" + "@mirohq/design-tokens" "^3.6.0" + lodash.merge "^4.6.2" + +"@mirohq/design-system-styles@^1.1.16": + version "1.1.16" + resolved "https://registry.yarnpkg.com/@mirohq/design-system-styles/-/design-system-styles-1.1.16.tgz#8d4e66bcd2a601ebd56312a701e8084d27dbd67a" + integrity sha512-qOoRx69dltu6AsZk3JSgXLXob4pxtv28SJyMdxPqzqdhvaGnlU6hqMHifh7vylNzOCQB9z/i6K5GRe0HGNhcWw== + dependencies: + "@mirohq/design-system-stitches" "^2.4.1" + "@mirohq/design-tokens" "^3.6.0" + what-input "^5.2.11" + +"@mirohq/design-system-switch@^3.0.25": + version "3.0.25" + resolved "https://registry.yarnpkg.com/@mirohq/design-system-switch/-/design-system-switch-3.0.25.tgz#e30a3e989a7e379b19adca6a0ca3dd44921acc52" + integrity sha512-405WBus8nRBa+xRXuSy5LbROvIyQkTeRqYQrkI7slEDuNiMSSn6azu5rGLAn6HdZ5BF9txflCIL2/aC7SUkUCQ== + dependencies: + "@mirohq/design-system-base-switch" "^0.1.16" + "@mirohq/design-system-stitches" "^2.4.1" + "@mirohq/design-system-styles" "^1.1.16" + "@mirohq/design-system-types" "^0.6.2" + "@mirohq/design-system-utils" "^0.14.3" + "@radix-ui/react-switch" "^1.0.0" + +"@mirohq/design-system-theme-provider@^0.3.8": + version "0.3.8" + resolved "https://registry.yarnpkg.com/@mirohq/design-system-theme-provider/-/design-system-theme-provider-0.3.8.tgz#da40008060a87a23a18615b6fc3460dc7c7c084a" + integrity sha512-VCb9iFTP9mt6Af06TiL39L4KqA/Zh4qqqIA8WAXicez/ifDDj+J/ryafrYww+PcShBsLNzoFH0oWNUfftAkmSg== + dependencies: + "@mirohq/design-system-stitches" "^2.4.1" + "@mirohq/design-system-themes" "^0.5.4" + "@mirohq/design-system-types" "^0.6.2" + "@mirohq/design-system-use-theme" "^0.2.10" + +"@mirohq/design-system-themes@^0.5.4": + version "0.5.4" + resolved "https://registry.yarnpkg.com/@mirohq/design-system-themes/-/design-system-themes-0.5.4.tgz#af165a1cacba662ed8339dbc106f31ce4c94382a" + integrity sha512-KwNY76sGcutXxSlay+jlOTS16wmsaWQgOhZGa/Mq24FsMTvrDFVejXRrZFe6/9f5uyD+N+GXaICVtE9HQVtUeg== + dependencies: + "@mirohq/design-tokens" "^3.6.0" + +"@mirohq/design-system-toolbar@^2.4.9": + version "2.4.9" + resolved "https://registry.yarnpkg.com/@mirohq/design-system-toolbar/-/design-system-toolbar-2.4.9.tgz#841861d1633418893ce8503be876efdb86583647" + integrity sha512-a42YXB1ecC5ntuNG0fTVs3mu8fuKeyehZ+nLlv7qmbx8cGNkXI0AZkfNY7Yx42/FCburUFqvCp3+VG2MkWCSsg== + dependencies: + "@mirohq/design-system-stitches" "^2.4.1" + "@mirohq/design-system-styles" "^1.1.16" + "@radix-ui/react-toolbar" "^1.0.0" + "@react-aria/interactions" "^3.13.0" + "@react-aria/utils" "^3.13.0" + "@react-types/shared" "^3.16.0" + +"@mirohq/design-system-tooltip@^3.2.34": + version "3.2.34" + resolved "https://registry.yarnpkg.com/@mirohq/design-system-tooltip/-/design-system-tooltip-3.2.34.tgz#af362a6ed017ba786b1b6accf10af69773425428" + integrity sha512-fHHOIp3OwajDP8dTQcI7INXmRLKveov1WahV/quEC5AKkcMlRuHC0YM9Sqa0MEJNO+cGGlKnSIuLrClxkKKyjg== + dependencies: + "@mirohq/design-system-stitches" "^2.4.1" + "@mirohq/design-system-styles" "^1.1.16" + "@mirohq/design-system-utils" "^0.14.3" + "@mirohq/design-tokens" "^3.6.0" + "@radix-ui/react-tooltip" "^1.0.3" + +"@mirohq/design-system-types@^0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@mirohq/design-system-types/-/design-system-types-0.6.2.tgz#72af4e196803932e57e51db8db39d16bd3da940d" + integrity sha512-e/2LJPswOBVCHbV08jIuCXYlb9gTpEGcqH2TQIGikSVCle1vQkQds1lbOF/Xf5vV+mz1fPLTm5UW5jkviESqNw== + +"@mirohq/design-system-typography@^0.4.6": + version "0.4.6" + resolved "https://registry.yarnpkg.com/@mirohq/design-system-typography/-/design-system-typography-0.4.6.tgz#c949df9a523cd23a446c2782f1933b2d1d1b155e" + integrity sha512-dZLUO/JIK/4AnF8MHDyUwb38uF79dIV4uihLFjHO8L987pY0+S8wfxoj5nuA5qBqlIQ5kHVu2cAVkVBo63RNBQ== + dependencies: + "@mirohq/design-system-primitive" "^1.1.1" + "@mirohq/design-system-stitches" "^2.4.1" + +"@mirohq/design-system-use-clipboard@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@mirohq/design-system-use-clipboard/-/design-system-use-clipboard-0.1.1.tgz#78aea3f2f42097b87503dde4a0b4e6d32ac8b536" + integrity sha512-z66Hrut4LORXfyKibt1q/Za2jQ1LwwqIVG0u8OAOZ50PqWzCYmCPFxy9Y0g8L5J0mIYsYtgh8QC6Xu0BFDUl1g== + dependencies: + "@mirohq/design-system-use-event" "^0.2.1" + +"@mirohq/design-system-use-event-listener@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@mirohq/design-system-use-event-listener/-/design-system-use-event-listener-0.3.1.tgz#e26be8805357d91c6b4cd61b7a03226e42b9eab9" + integrity sha512-WgTGpTSc+/TbOKxEIcLte/ddfJ41DtsOXojGvjkoCN+wFKuaxRMbhLs/EsU/BWjhZb8GSkqxADq51FppuHefRQ== + dependencies: + "@mirohq/design-system-use-layout-effect" "^0.2.1" + +"@mirohq/design-system-use-event@^0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@mirohq/design-system-use-event/-/design-system-use-event-0.2.1.tgz#1c97fb1a54f8b6855b33ecceee7c85b26531995b" + integrity sha512-+VC5TiqMmD2THA13a097ZT2jsF0Mqo+4L4bSFFzsmsVNLtad5oo4ltQMCxoE0wWc4QAzdhZLR9833qP4yOtbmw== + dependencies: + "@mirohq/design-system-use-layout-effect" "^0.2.1" + +"@mirohq/design-system-use-layout-effect@^0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@mirohq/design-system-use-layout-effect/-/design-system-use-layout-effect-0.2.1.tgz#a377388162021cd5f292ff77f76e9327ef0d11f7" + integrity sha512-hKoyGc7drQAoHWdJOW39VqOTGxVT9ilDV3NrtFXN1fCEDgnhg5+Ytx18jAqH9I7TVXptiKkPo03LupdIAQOlLA== + +"@mirohq/design-system-use-listeners@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@mirohq/design-system-use-listeners/-/design-system-use-listeners-0.1.1.tgz#f2ccd9c04610630f23846568a081658f2da7d598" + integrity sha512-aP4GlBs6lOj5/3oMh9h38/gH6BNHHEZqwKXPkS1xTNbr/VC4sVcxdl/tjybzOjEuE5qvy4zW4Ve/8pf4S1xs2g== + +"@mirohq/design-system-use-local-storage@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@mirohq/design-system-use-local-storage/-/design-system-use-local-storage-0.3.5.tgz#a9bed0b1a752c3e3441193f60061f19603101c32" + integrity sha512-4BE5iEwC5CBm1piDkBBr9tOxFxVqcV9I61IrWAfLlSXxGfWpEXwg5iQYsd/qLuNpSqeUWwPCpQQY1gCRlPNPJA== + dependencies: + "@mirohq/design-system-types" "^0.6.2" + "@mirohq/design-system-use-event" "^0.2.1" + "@mirohq/design-system-use-event-listener" "^0.3.1" + +"@mirohq/design-system-use-logger@^0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@mirohq/design-system-use-logger/-/design-system-use-logger-0.1.5.tgz#74d8b91b0d562727af22bb57388be2e61c1e9e61" + integrity sha512-dPXwi/mWjSC5Et0VKvXNzIHzcEjRpQ4PTOjgLa9ITtQWEL5q5RsTUlUX2TTYp01iGfv/Q9q9FvnIPN23tx2YJw== + dependencies: + "@mirohq/design-system-types" "^0.6.2" + "@mirohq/design-system-use-local-storage" "^0.3.5" + "@mirohq/design-system-utils" "^0.14.3" + +"@mirohq/design-system-use-press@^0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@mirohq/design-system-use-press/-/design-system-use-press-0.2.1.tgz#3e5d9f1496d10337070c136e795612bcea5d58ac" + integrity sha512-hbCpU4rbJbyzT5TTWogDCbcFiEv5lWFBCyASulv97cFM1kyg/ELehvIOQlAp4Iv7Sdfgm0ob1c2m9LSpmU/jMQ== + dependencies: + "@mirohq/design-system-use-listeners" "^0.1.1" + "@mirohq/design-system-use-logger" "^0.1.5" + "@mirohq/design-system-utils" "^0.14.3" + "@react-aria/utils" "^3.14.2" + +"@mirohq/design-system-use-theme@^0.2.10": + version "0.2.10" + resolved "https://registry.yarnpkg.com/@mirohq/design-system-use-theme/-/design-system-use-theme-0.2.10.tgz#e901c81fd022c9f9ba1fc94e4283af415a2853ff" + integrity sha512-FmbpEMuHBfGXs/F3XBby4311LgYDR9qd6BKE00qNx66y6AOzciuFlkoOwy/T0w5jn5DMc/lGnkdOiA2AsxLsHQ== + dependencies: + "@mirohq/design-system-types" "^0.6.2" + "@mirohq/design-system-use-local-storage" "^0.3.5" + +"@mirohq/design-system-utils@^0.14.3": + version "0.14.3" + resolved "https://registry.yarnpkg.com/@mirohq/design-system-utils/-/design-system-utils-0.14.3.tgz#3f4e1b26b62876c34b4b066835d6b864002ac914" + integrity sha512-o7e39TUkSEPZqCBb35NJJHWpF64Wa/7IQe6wOeK0UtXt3zUSns/0M1su1opoN5u2r25APPLSF/igdIEg8ncoLg== + dependencies: + "@mirohq/design-system-types" "^0.6.2" + +"@mirohq/design-system@^0.18.2": + version "0.18.2" + resolved "https://registry.yarnpkg.com/@mirohq/design-system/-/design-system-0.18.2.tgz#923d2b9809f24e6f66c29be864ef74cc7d14b694" + integrity sha512-+Rv5O22DDhU5dhBPgqvy9KsSeGSrzReeYj2XKKMyA5B0d7DKlZTWKPx6hVi7vLB/IWn5C8axqVTf4mnBxBf5ig== + dependencies: + "@mirohq/design-system-badge" "^0.3.26" + "@mirohq/design-system-box" "^2.1.27" + "@mirohq/design-system-button" "^3.1.28" + "@mirohq/design-system-calendar" "^0.1.43" + "@mirohq/design-system-checkbox" "^1.1.60" + "@mirohq/design-system-dropdown-menu" "^3.5.23" + "@mirohq/design-system-flex" "^2.1.31" + "@mirohq/design-system-grid" "^2.1.30" + "@mirohq/design-system-icon-button" "^1.3.22" + "@mirohq/design-system-icons" "^0.32.4" + "@mirohq/design-system-input" "^0.0.3" + "@mirohq/design-system-link" "^1.3.9" + "@mirohq/design-system-popover" "^5.1.8" + "@mirohq/design-system-primitive" "^1.1.1" + "@mirohq/design-system-scroll-area" "^0.1.18" + "@mirohq/design-system-select" "^0.2.3" + "@mirohq/design-system-spinner" "^1.1.30" + "@mirohq/design-system-stitches" "^2.4.1" + "@mirohq/design-system-styles" "^1.1.16" + "@mirohq/design-system-switch" "^3.0.25" + "@mirohq/design-system-theme-provider" "^0.3.8" + "@mirohq/design-system-themes" "^0.5.4" + "@mirohq/design-system-toolbar" "^2.4.9" + "@mirohq/design-system-tooltip" "^3.2.34" + "@mirohq/design-system-types" "^0.6.2" + "@mirohq/design-system-typography" "^0.4.6" + "@mirohq/design-system-use-clipboard" "^0.1.1" + "@mirohq/design-system-use-event" "^0.2.1" + "@mirohq/design-system-use-event-listener" "^0.3.1" + "@mirohq/design-system-use-layout-effect" "^0.2.1" + "@mirohq/design-system-use-listeners" "^0.1.1" + "@mirohq/design-system-use-local-storage" "^0.3.5" + "@mirohq/design-system-use-logger" "^0.1.5" + "@mirohq/design-system-use-press" "^0.2.1" + "@mirohq/design-system-use-theme" "^0.2.10" + "@mirohq/design-system-utils" "^0.14.3" + "@mirohq/design-tokens" "^3.6.0" + +"@mirohq/design-tokens@^3.6.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@mirohq/design-tokens/-/design-tokens-3.6.0.tgz#1bf6988bad249be0eb853ee666e6729358e379b3" + integrity sha512-p4AQPmkpn+T0vtn5wNQRgNeCTcN3C8YqfcWYtXaztmdJQ12j2wZp8oF2ld/iTpFcSO87cbQvx6oKzbTQDWavBw== + "@mirohq/miro-api@1.0.2", "@mirohq/miro-api@^1.0.2": version "1.0.2" resolved "https://registry.npmjs.org/@mirohq/miro-api/-/miro-api-1.0.2.tgz" @@ -520,6 +1064,13 @@ node-fetch "^2.6.9" typedoc "0.23.24" +"@mirohq/websdk-types@2.9.10": + version "2.9.10" + resolved "https://registry.yarnpkg.com/@mirohq/websdk-types/-/websdk-types-2.9.10.tgz#b85c8097b27aa6885642bb957a2c14faf133690c" + integrity sha512-1uLw/SykIoTZf7Pl9eSgzE13puaMtNlVKuB/wRBUEAWAAUkcT3ppSoCHod7EemntDDJhcKEscwRigEmTCJftsw== + dependencies: + typescript ">=4.6.3 || ~5" + "@mirohq/websdk-types@^2.0.0": version "2.3.0" resolved "https://registry.npmjs.org/@mirohq/websdk-types/-/websdk-types-2.3.0.tgz" @@ -812,6 +1363,1436 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@radix-ui/number@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/number/-/number-1.0.1.tgz#644161a3557f46ed38a042acf4a770e826021674" + integrity sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/primitive@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-1.0.1.tgz#e46f9958b35d10e9f6dc71c497305c22e3e55dbd" + integrity sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-arrow@1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-arrow/-/react-arrow-1.0.3.tgz#c24f7968996ed934d57fe6cde5d6ec7266e1d25d" + integrity sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-primitive" "1.0.3" + +"@radix-ui/react-checkbox@^1.0.0": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-checkbox/-/react-checkbox-1.0.4.tgz#98f22c38d5010dd6df4c5744cac74087e3275f4b" + integrity sha512-CBuGQa52aAYnADZVt/KBQzXrwx6TqnlwtcIPGtVt5JkkzQwMOLJjPukimhfKEr4GQNd43C+djUh5Ikopj8pSLg== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/primitive" "1.0.1" + "@radix-ui/react-compose-refs" "1.0.1" + "@radix-ui/react-context" "1.0.1" + "@radix-ui/react-presence" "1.0.1" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-use-controllable-state" "1.0.1" + "@radix-ui/react-use-previous" "1.0.1" + "@radix-ui/react-use-size" "1.0.1" + +"@radix-ui/react-collection@1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-collection/-/react-collection-1.0.3.tgz#9595a66e09026187524a36c6e7e9c7d286469159" + integrity sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-compose-refs" "1.0.1" + "@radix-ui/react-context" "1.0.1" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-slot" "1.0.2" + +"@radix-ui/react-compose-refs@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz#7ed868b66946aa6030e580b1ffca386dd4d21989" + integrity sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-context@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.0.1.tgz#fe46e67c96b240de59187dcb7a1a50ce3e2ec00c" + integrity sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-direction@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-direction/-/react-direction-1.0.1.tgz#9cb61bf2ccf568f3421422d182637b7f47596c9b" + integrity sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-dismissable-layer@1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.5.tgz#3f98425b82b9068dfbab5db5fff3df6ebf48b9d4" + integrity sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/primitive" "1.0.1" + "@radix-ui/react-compose-refs" "1.0.1" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-use-callback-ref" "1.0.1" + "@radix-ui/react-use-escape-keydown" "1.0.3" + +"@radix-ui/react-dropdown-menu@^2.0.5": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.0.6.tgz#cdf13c956c5e263afe4e5f3587b3071a25755b63" + integrity sha512-i6TuFOoWmLWq+M/eCLGd/bQ2HfAX1RJgvrBQ6AQLmzfvsLdefxbWu8G9zczcPFfcSPehz9GcpF6K9QYreFV8hA== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/primitive" "1.0.1" + "@radix-ui/react-compose-refs" "1.0.1" + "@radix-ui/react-context" "1.0.1" + "@radix-ui/react-id" "1.0.1" + "@radix-ui/react-menu" "2.0.6" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-use-controllable-state" "1.0.1" + +"@radix-ui/react-focus-guards@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.1.tgz#1ea7e32092216b946397866199d892f71f7f98ad" + integrity sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-focus-scope@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.4.tgz#2ac45fce8c5bb33eb18419cdc1905ef4f1906525" + integrity sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-compose-refs" "1.0.1" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-use-callback-ref" "1.0.1" + +"@radix-ui/react-id@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-id/-/react-id-1.0.1.tgz#73cdc181f650e4df24f0b6a5b7aa426b912c88c0" + integrity sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-use-layout-effect" "1.0.1" + +"@radix-ui/react-menu@2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@radix-ui/react-menu/-/react-menu-2.0.6.tgz#2c9e093c1a5d5daa87304b2a2f884e32288ae79e" + integrity sha512-BVkFLS+bUC8HcImkRKPSiVumA1VPOOEC5WBMiT+QAVsPzW1FJzI9KnqgGxVDPBcql5xXrHkD3JOVoXWEXD8SYA== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/primitive" "1.0.1" + "@radix-ui/react-collection" "1.0.3" + "@radix-ui/react-compose-refs" "1.0.1" + "@radix-ui/react-context" "1.0.1" + "@radix-ui/react-direction" "1.0.1" + "@radix-ui/react-dismissable-layer" "1.0.5" + "@radix-ui/react-focus-guards" "1.0.1" + "@radix-ui/react-focus-scope" "1.0.4" + "@radix-ui/react-id" "1.0.1" + "@radix-ui/react-popper" "1.1.3" + "@radix-ui/react-portal" "1.0.4" + "@radix-ui/react-presence" "1.0.1" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-roving-focus" "1.0.4" + "@radix-ui/react-slot" "1.0.2" + "@radix-ui/react-use-callback-ref" "1.0.1" + aria-hidden "^1.1.1" + react-remove-scroll "2.5.5" + +"@radix-ui/react-popover@^1.0.0": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@radix-ui/react-popover/-/react-popover-1.0.7.tgz#23eb7e3327330cb75ec7b4092d685398c1654e3c" + integrity sha512-shtvVnlsxT6faMnK/a7n0wptwBD23xc1Z5mdrtKLwVEfsEMXodS0r5s0/g5P0hX//EKYZS2sxUjqfzlg52ZSnQ== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/primitive" "1.0.1" + "@radix-ui/react-compose-refs" "1.0.1" + "@radix-ui/react-context" "1.0.1" + "@radix-ui/react-dismissable-layer" "1.0.5" + "@radix-ui/react-focus-guards" "1.0.1" + "@radix-ui/react-focus-scope" "1.0.4" + "@radix-ui/react-id" "1.0.1" + "@radix-ui/react-popper" "1.1.3" + "@radix-ui/react-portal" "1.0.4" + "@radix-ui/react-presence" "1.0.1" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-slot" "1.0.2" + "@radix-ui/react-use-controllable-state" "1.0.1" + aria-hidden "^1.1.1" + react-remove-scroll "2.5.5" + +"@radix-ui/react-popper@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-popper/-/react-popper-1.1.3.tgz#24c03f527e7ac348fabf18c89795d85d21b00b42" + integrity sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w== + dependencies: + "@babel/runtime" "^7.13.10" + "@floating-ui/react-dom" "^2.0.0" + "@radix-ui/react-arrow" "1.0.3" + "@radix-ui/react-compose-refs" "1.0.1" + "@radix-ui/react-context" "1.0.1" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-use-callback-ref" "1.0.1" + "@radix-ui/react-use-layout-effect" "1.0.1" + "@radix-ui/react-use-rect" "1.0.1" + "@radix-ui/react-use-size" "1.0.1" + "@radix-ui/rect" "1.0.1" + +"@radix-ui/react-portal@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-1.0.4.tgz#df4bfd353db3b1e84e639e9c63a5f2565fb00e15" + integrity sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-primitive" "1.0.3" + +"@radix-ui/react-presence@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-presence/-/react-presence-1.0.1.tgz#491990ba913b8e2a5db1b06b203cb24b5cdef9ba" + integrity sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-compose-refs" "1.0.1" + "@radix-ui/react-use-layout-effect" "1.0.1" + +"@radix-ui/react-primitive@1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz#d49ea0f3f0b2fe3ab1cb5667eb03e8b843b914d0" + integrity sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-slot" "1.0.2" + +"@radix-ui/react-roving-focus@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.4.tgz#e90c4a6a5f6ac09d3b8c1f5b5e81aab2f0db1974" + integrity sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/primitive" "1.0.1" + "@radix-ui/react-collection" "1.0.3" + "@radix-ui/react-compose-refs" "1.0.1" + "@radix-ui/react-context" "1.0.1" + "@radix-ui/react-direction" "1.0.1" + "@radix-ui/react-id" "1.0.1" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-use-callback-ref" "1.0.1" + "@radix-ui/react-use-controllable-state" "1.0.1" + +"@radix-ui/react-scroll-area@^1.0.4": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@radix-ui/react-scroll-area/-/react-scroll-area-1.0.5.tgz#01160c6893f24a2ddb5aa399ae5b3ba84ad4d3cc" + integrity sha512-b6PAgH4GQf9QEn8zbT2XUHpW5z8BzqEc7Kl11TwDrvuTrxlkcjTD5qa/bxgKr+nmuXKu4L/W5UZ4mlP/VG/5Gw== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/number" "1.0.1" + "@radix-ui/primitive" "1.0.1" + "@radix-ui/react-compose-refs" "1.0.1" + "@radix-ui/react-context" "1.0.1" + "@radix-ui/react-direction" "1.0.1" + "@radix-ui/react-presence" "1.0.1" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-use-callback-ref" "1.0.1" + "@radix-ui/react-use-layout-effect" "1.0.1" + +"@radix-ui/react-select@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-select/-/react-select-2.0.0.tgz#a3511792a51a7018d6559357323a7f52e0e38887" + integrity sha512-RH5b7af4oHtkcHS7pG6Sgv5rk5Wxa7XI8W5gvB1N/yiuDGZxko1ynvOiVhFM7Cis2A8zxF9bTOUVbRDzPepe6w== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/number" "1.0.1" + "@radix-ui/primitive" "1.0.1" + "@radix-ui/react-collection" "1.0.3" + "@radix-ui/react-compose-refs" "1.0.1" + "@radix-ui/react-context" "1.0.1" + "@radix-ui/react-direction" "1.0.1" + "@radix-ui/react-dismissable-layer" "1.0.5" + "@radix-ui/react-focus-guards" "1.0.1" + "@radix-ui/react-focus-scope" "1.0.4" + "@radix-ui/react-id" "1.0.1" + "@radix-ui/react-popper" "1.1.3" + "@radix-ui/react-portal" "1.0.4" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-slot" "1.0.2" + "@radix-ui/react-use-callback-ref" "1.0.1" + "@radix-ui/react-use-controllable-state" "1.0.1" + "@radix-ui/react-use-layout-effect" "1.0.1" + "@radix-ui/react-use-previous" "1.0.1" + "@radix-ui/react-visually-hidden" "1.0.3" + aria-hidden "^1.1.1" + react-remove-scroll "2.5.5" + +"@radix-ui/react-separator@1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-separator/-/react-separator-1.0.3.tgz#be5a931a543d5726336b112f465f58585c04c8aa" + integrity sha512-itYmTy/kokS21aiV5+Z56MZB54KrhPgn6eHDKkFeOLR34HMN2s8PaN47qZZAGnvupcjxHaFZnW4pQEh0BvvVuw== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-primitive" "1.0.3" + +"@radix-ui/react-slot@1.0.2", "@radix-ui/react-slot@^1.0.0": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.0.2.tgz#a9ff4423eade67f501ffb32ec22064bc9d3099ab" + integrity sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-compose-refs" "1.0.1" + +"@radix-ui/react-switch@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-switch/-/react-switch-1.0.3.tgz#6119f16656a9eafb4424c600fdb36efa5ec5837e" + integrity sha512-mxm87F88HyHztsI7N+ZUmEoARGkC22YVW5CaC+Byc+HRpuvCrOBPTAnXgf+tZ/7i0Sg/eOePGdMhUKhPaQEqow== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/primitive" "1.0.1" + "@radix-ui/react-compose-refs" "1.0.1" + "@radix-ui/react-context" "1.0.1" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-use-controllable-state" "1.0.1" + "@radix-ui/react-use-previous" "1.0.1" + "@radix-ui/react-use-size" "1.0.1" + +"@radix-ui/react-toggle-group@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-toggle-group/-/react-toggle-group-1.0.4.tgz#f5b5c8c477831b013bec3580c55e20a68179d6ec" + integrity sha512-Uaj/M/cMyiyT9Bx6fOZO0SAG4Cls0GptBWiBmBxofmDbNVnYYoyRWj/2M/6VCi/7qcXFWnHhRUfdfZFvvkuu8A== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/primitive" "1.0.1" + "@radix-ui/react-context" "1.0.1" + "@radix-ui/react-direction" "1.0.1" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-roving-focus" "1.0.4" + "@radix-ui/react-toggle" "1.0.3" + "@radix-ui/react-use-controllable-state" "1.0.1" + +"@radix-ui/react-toggle@1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-toggle/-/react-toggle-1.0.3.tgz#aecb2945630d1dc5c512997556c57aba894e539e" + integrity sha512-Pkqg3+Bc98ftZGsl60CLANXQBBQ4W3mTFS9EJvNxKMZ7magklKV69/id1mlAlOFDDfHvlCms0fx8fA4CMKDJHg== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/primitive" "1.0.1" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-use-controllable-state" "1.0.1" + +"@radix-ui/react-toolbar@^1.0.0": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-toolbar/-/react-toolbar-1.0.4.tgz#3211a105567fa016e89921b5b514877f833de559" + integrity sha512-tBgmM/O7a07xbaEkYJWYTXkIdU/1pW4/KZORR43toC/4XWyBCURK0ei9kMUdp+gTPPKBgYLxXmRSH1EVcIDp8Q== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/primitive" "1.0.1" + "@radix-ui/react-context" "1.0.1" + "@radix-ui/react-direction" "1.0.1" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-roving-focus" "1.0.4" + "@radix-ui/react-separator" "1.0.3" + "@radix-ui/react-toggle-group" "1.0.4" + +"@radix-ui/react-tooltip@^1.0.3": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@radix-ui/react-tooltip/-/react-tooltip-1.0.7.tgz#8f55070f852e7e7450cc1d9210b793d2e5a7686e" + integrity sha512-lPh5iKNFVQ/jav/j6ZrWq3blfDJ0OH9R6FlNUHPMqdLuQ9vwDgFsRxvl8b7Asuy5c8xmoojHUxKHQSOAvMHxyw== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/primitive" "1.0.1" + "@radix-ui/react-compose-refs" "1.0.1" + "@radix-ui/react-context" "1.0.1" + "@radix-ui/react-dismissable-layer" "1.0.5" + "@radix-ui/react-id" "1.0.1" + "@radix-ui/react-popper" "1.1.3" + "@radix-ui/react-portal" "1.0.4" + "@radix-ui/react-presence" "1.0.1" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-slot" "1.0.2" + "@radix-ui/react-use-controllable-state" "1.0.1" + "@radix-ui/react-visually-hidden" "1.0.3" + +"@radix-ui/react-use-callback-ref@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz#f4bb1f27f2023c984e6534317ebc411fc181107a" + integrity sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-use-controllable-state@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz#ecd2ced34e6330caf89a82854aa2f77e07440286" + integrity sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-use-callback-ref" "1.0.1" + +"@radix-ui/react-use-escape-keydown@1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz#217b840c250541609c66f67ed7bab2b733620755" + integrity sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-use-callback-ref" "1.0.1" + +"@radix-ui/react-use-layout-effect@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz#be8c7bc809b0c8934acf6657b577daf948a75399" + integrity sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-use-previous@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-previous/-/react-use-previous-1.0.1.tgz#b595c087b07317a4f143696c6a01de43b0d0ec66" + integrity sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-use-rect@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-rect/-/react-use-rect-1.0.1.tgz#fde50b3bb9fd08f4a1cd204572e5943c244fcec2" + integrity sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/rect" "1.0.1" + +"@radix-ui/react-use-size@1.0.1", "@radix-ui/react-use-size@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-size/-/react-use-size-1.0.1.tgz#1c5f5fea940a7d7ade77694bb98116fb49f870b2" + integrity sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-use-layout-effect" "1.0.1" + +"@radix-ui/react-visually-hidden@1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.3.tgz#51aed9dd0fe5abcad7dee2a234ad36106a6984ac" + integrity sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-primitive" "1.0.3" + +"@radix-ui/rect@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/rect/-/rect-1.0.1.tgz#bf8e7d947671996da2e30f4904ece343bc4a883f" + integrity sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ== + dependencies: + "@babel/runtime" "^7.13.10" + +"@react-aria/breadcrumbs@^3.5.8": + version "3.5.8" + resolved "https://registry.yarnpkg.com/@react-aria/breadcrumbs/-/breadcrumbs-3.5.8.tgz#243a25621066443e42f2a6a1cb82fe3c558f6dea" + integrity sha512-jeek23igeqXct7S3ShW2jtFUc5g3fS9ZEBZkF64FWBrwfCiaZwb8TcKkK/xFw36/q5mxEt+seNiqnNzvsICJuQ== + dependencies: + "@react-aria/i18n" "^3.9.0" + "@react-aria/link" "^3.6.2" + "@react-aria/utils" "^3.22.0" + "@react-types/breadcrumbs" "^3.7.2" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/button@^3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@react-aria/button/-/button-3.9.0.tgz#df59e0628917b320c4d1655e23547eb41a9a0f08" + integrity sha512-Jri4OCN+4YmpJDPNQvk1DJoskKD9sdTxZaWWWJdAwoSIunZk3IEBXVvRfKzsEAVtI+UJN25zC2kyjXbVPS2XAA== + dependencies: + "@react-aria/focus" "^3.15.0" + "@react-aria/interactions" "^3.20.0" + "@react-aria/utils" "^3.22.0" + "@react-stately/toggle" "^3.7.0" + "@react-types/button" "^3.9.1" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/calendar@^3.5.3": + version "3.5.3" + resolved "https://registry.yarnpkg.com/@react-aria/calendar/-/calendar-3.5.3.tgz#225014e7ef3124bdbc915b7283f7c5d378e1a2a9" + integrity sha512-jW48jk0TIe0HAJS+z8zqd8M86FEuqrk1qEIjMWnf8rFnA7hPPpjdjUrY9vSIeC95NcbyZbFnr1bHzQjAIzosQw== + dependencies: + "@internationalized/date" "^3.5.0" + "@react-aria/i18n" "^3.9.0" + "@react-aria/interactions" "^3.20.0" + "@react-aria/live-announcer" "^3.3.1" + "@react-aria/utils" "^3.22.0" + "@react-stately/calendar" "^3.4.2" + "@react-types/button" "^3.9.1" + "@react-types/calendar" "^3.4.2" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/checkbox@^3.12.0": + version "3.12.0" + resolved "https://registry.yarnpkg.com/@react-aria/checkbox/-/checkbox-3.12.0.tgz#a965e975975404ecf1ff867284511e4490a69c21" + integrity sha512-CyFZoI+z9hhyB3wb7IBsZxE30vXfYO2vSyET16zlkJ4qiFMqMiVLE4ekq034MHltCdpAczgP5yfKgNnJOmj7vQ== + dependencies: + "@react-aria/form" "^3.0.0" + "@react-aria/label" "^3.7.3" + "@react-aria/toggle" "^3.9.0" + "@react-aria/utils" "^3.22.0" + "@react-stately/checkbox" "^3.6.0" + "@react-stately/form" "^3.0.0" + "@react-stately/toggle" "^3.7.0" + "@react-types/checkbox" "^3.6.0" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/combobox@^3.8.0": + version "3.8.0" + resolved "https://registry.yarnpkg.com/@react-aria/combobox/-/combobox-3.8.0.tgz#1806cd5ea6c11c90802d7c0a0807d93271265c1c" + integrity sha512-lInzzZrH4vFlxmvDpXgQRkkREm7YIx258IRpQqll8Bny2vKMmZoF06zWMbcHP0CjFqYxExQeTjSYx0OTRRxkCQ== + dependencies: + "@react-aria/i18n" "^3.9.0" + "@react-aria/listbox" "^3.11.2" + "@react-aria/live-announcer" "^3.3.1" + "@react-aria/menu" "^3.11.2" + "@react-aria/overlays" "^3.19.0" + "@react-aria/selection" "^3.17.2" + "@react-aria/textfield" "^3.13.0" + "@react-aria/utils" "^3.22.0" + "@react-stately/collections" "^3.10.3" + "@react-stately/combobox" "^3.8.0" + "@react-stately/form" "^3.0.0" + "@react-types/button" "^3.9.1" + "@react-types/combobox" "^3.9.0" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/datepicker@^3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@react-aria/datepicker/-/datepicker-3.9.0.tgz#281d351b36a3cd186e39f587437d9a3ce9d8986d" + integrity sha512-FIpiJxwBNOM8a6hLOqQJ4JrvRiGL6Zr44E1mHtAWStp2kBEJ6+O2JRm4PQ5Pzvdw6xnCpOBdfESdNdlXN7lVqQ== + dependencies: + "@internationalized/date" "^3.5.0" + "@internationalized/number" "^3.4.0" + "@internationalized/string" "^3.1.1" + "@react-aria/focus" "^3.15.0" + "@react-aria/form" "^3.0.0" + "@react-aria/i18n" "^3.9.0" + "@react-aria/interactions" "^3.20.0" + "@react-aria/label" "^3.7.3" + "@react-aria/spinbutton" "^3.6.0" + "@react-aria/utils" "^3.22.0" + "@react-stately/datepicker" "^3.9.0" + "@react-stately/form" "^3.0.0" + "@react-types/button" "^3.9.1" + "@react-types/calendar" "^3.4.2" + "@react-types/datepicker" "^3.7.0" + "@react-types/dialog" "^3.5.7" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/dialog@^3.5.8": + version "3.5.8" + resolved "https://registry.yarnpkg.com/@react-aria/dialog/-/dialog-3.5.8.tgz#3b52ff145b16e0f47b04364239bd91d39968e3c2" + integrity sha512-KIc1FORdHhZ3bWom4qHO0hmlL4e5Hup6N25EY8HP5I7Ftv9EBBGaO5grtxZ2fX8kiCJNI4y+k67ZZ71wKJvMiA== + dependencies: + "@react-aria/focus" "^3.15.0" + "@react-aria/overlays" "^3.19.0" + "@react-aria/utils" "^3.22.0" + "@react-types/dialog" "^3.5.7" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/dnd@^3.5.0": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@react-aria/dnd/-/dnd-3.5.0.tgz#de803fa390e73205b600933c7fe45ac888a62f3c" + integrity sha512-6IuqmXwnfgRfeXDbfsPZzScapCmtRIkphTBPoLT575uEbZC7ROLgRJ/4NIKxvtTA6IIBqUGcvaqU9Mpg8j4U5Q== + dependencies: + "@internationalized/string" "^3.1.1" + "@react-aria/i18n" "^3.9.0" + "@react-aria/interactions" "^3.20.0" + "@react-aria/live-announcer" "^3.3.1" + "@react-aria/overlays" "^3.19.0" + "@react-aria/utils" "^3.22.0" + "@react-stately/dnd" "^3.2.6" + "@react-types/button" "^3.9.1" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/focus@^3.15.0": + version "3.15.0" + resolved "https://registry.yarnpkg.com/@react-aria/focus/-/focus-3.15.0.tgz#acca3cfe94e0ba0c00276e74c6cca06975f75f87" + integrity sha512-nnxRyfqHuAjRwdQ4BpQyZPtGFKZmRU6cnaIb3pqWFCqEyJQensV7MA3TJ4Jhadq67cy1Ji5SYSlr1duBwjoYvw== + dependencies: + "@react-aria/interactions" "^3.20.0" + "@react-aria/utils" "^3.22.0" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + clsx "^1.1.1" + +"@react-aria/form@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@react-aria/form/-/form-3.0.0.tgz#d4e892687331a9cba1cfc48be5754100ab736dec" + integrity sha512-APeGph9oTO8nro4ZObuy1hk+0hpF/ji9O3odPGhLkzP/HvW2J7NI9pjKJOINfgtYr2yvVUZf/MbTMxPwtAxhaQ== + dependencies: + "@react-aria/interactions" "^3.20.0" + "@react-aria/utils" "^3.22.0" + "@react-stately/form" "^3.0.0" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/grid@^3.8.5": + version "3.8.5" + resolved "https://registry.yarnpkg.com/@react-aria/grid/-/grid-3.8.5.tgz#92682b36b230920d507e3ed4fb7e9564f96c9f02" + integrity sha512-0p+Bbs9rpQeOy8b75DamlzVPKylBoe/z0XwkeeTChHP2TK3TwPXh6J5EmisQx6K8zsb3iZULQRcP4QibvnMbrg== + dependencies: + "@react-aria/focus" "^3.15.0" + "@react-aria/i18n" "^3.9.0" + "@react-aria/interactions" "^3.20.0" + "@react-aria/live-announcer" "^3.3.1" + "@react-aria/selection" "^3.17.2" + "@react-aria/utils" "^3.22.0" + "@react-stately/collections" "^3.10.3" + "@react-stately/grid" "^3.8.3" + "@react-stately/selection" "^3.14.1" + "@react-stately/virtualizer" "^3.6.5" + "@react-types/checkbox" "^3.6.0" + "@react-types/grid" "^3.2.3" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/gridlist@^3.7.2": + version "3.7.2" + resolved "https://registry.yarnpkg.com/@react-aria/gridlist/-/gridlist-3.7.2.tgz#80a1399eba438df9d8d8e721eb98b3bf1acdbe52" + integrity sha512-9keGYZz0yILVqAnFzF6hGRtHm1vfSD1mNnH8oyn7mKjyr7qOln7s5f8Nl85ueMolfrV3H2rCZgM2itNQ+Ezzgg== + dependencies: + "@react-aria/focus" "^3.15.0" + "@react-aria/grid" "^3.8.5" + "@react-aria/i18n" "^3.9.0" + "@react-aria/interactions" "^3.20.0" + "@react-aria/selection" "^3.17.2" + "@react-aria/utils" "^3.22.0" + "@react-stately/list" "^3.10.1" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/i18n@^3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@react-aria/i18n/-/i18n-3.9.0.tgz#7aa74e02e74e348de3a34b7599e71ff6920b73ee" + integrity sha512-ebGP/sVG0ZtNF4RNFzs/W01tl7waYpBManh1kKWgA4roDPFt/odkgkDBzKGl+ggBb7TQRHsfUFHuqKsrsMy9TA== + dependencies: + "@internationalized/date" "^3.5.0" + "@internationalized/message" "^3.1.1" + "@internationalized/number" "^3.4.0" + "@internationalized/string" "^3.1.1" + "@react-aria/ssr" "^3.9.0" + "@react-aria/utils" "^3.22.0" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/interactions@^3.13.0", "@react-aria/interactions@^3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@react-aria/interactions/-/interactions-3.20.0.tgz#8db350541004f50c0479cc52b82597d8248ac5db" + integrity sha512-JCCEyK2Nb4mEHucrgmqhTHTNAEqhsiM07jJmmY22eikxnCQnsEfdwXyg9cgZLG79D5V7jyqVRqOp2OsG7Qx7kQ== + dependencies: + "@react-aria/ssr" "^3.9.0" + "@react-aria/utils" "^3.22.0" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/label@^3.7.3": + version "3.7.3" + resolved "https://registry.yarnpkg.com/@react-aria/label/-/label-3.7.3.tgz#37cb12d2a9495534205b6266aa5174c2fd861368" + integrity sha512-v1zuqbpYyYaPjrBWpceGjMpwP4ne6fLoOXdoIZoKLux2jkAcyIF2kIJFiyYoPQYQJWGRNo7q1oSwamxmng4xJw== + dependencies: + "@react-aria/utils" "^3.22.0" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/link@^3.6.2": + version "3.6.2" + resolved "https://registry.yarnpkg.com/@react-aria/link/-/link-3.6.2.tgz#4d7fb00000219aa3ff4bd02f59d5d3bd08be0da8" + integrity sha512-v9gXgQ3Gev0JOlg2MAXcubDMgX+0BlJ+hTyFYFMuN/4jVBlAe426WKbjg+6MMzxwukWg9C3Q08JzqdFTi4cBng== + dependencies: + "@react-aria/focus" "^3.15.0" + "@react-aria/interactions" "^3.20.0" + "@react-aria/utils" "^3.22.0" + "@react-types/link" "^3.5.2" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/listbox@^3.11.2": + version "3.11.2" + resolved "https://registry.yarnpkg.com/@react-aria/listbox/-/listbox-3.11.2.tgz#5d1d841987c1fbe300fa5d4bf5071f660b2a625b" + integrity sha512-FXdoqYLUTJn16OxodyS518PIcwzFkCfW5bxQepoy88NDMGtqp6u8fvEPpAoZbomvw/pV9MuEaMAw9qLyfkD4DA== + dependencies: + "@react-aria/interactions" "^3.20.0" + "@react-aria/label" "^3.7.3" + "@react-aria/selection" "^3.17.2" + "@react-aria/utils" "^3.22.0" + "@react-stately/collections" "^3.10.3" + "@react-stately/list" "^3.10.1" + "@react-types/listbox" "^3.4.6" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/live-announcer@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@react-aria/live-announcer/-/live-announcer-3.3.1.tgz#bf864b8820fb02daaeefc1c972782a0174fd60b9" + integrity sha512-hsc77U7S16trM86d+peqJCOCQ7/smO1cybgdpOuzXyiwcHQw8RQ4GrXrS37P4Ux/44E9nMZkOwATQRT2aK8+Ew== + dependencies: + "@swc/helpers" "^0.5.0" + +"@react-aria/menu@^3.11.2": + version "3.11.2" + resolved "https://registry.yarnpkg.com/@react-aria/menu/-/menu-3.11.2.tgz#bf6dbf751acc09ace12d35bb034a3790f9006720" + integrity sha512-I4R5FOvRtwIQW+0naXav5giZBp935X2tXB2xBg/cSAYDXgfLmFPLHkyPbO77hR6FwazfFfJoKdn0pVcRox3lrQ== + dependencies: + "@react-aria/focus" "^3.15.0" + "@react-aria/i18n" "^3.9.0" + "@react-aria/interactions" "^3.20.0" + "@react-aria/overlays" "^3.19.0" + "@react-aria/selection" "^3.17.2" + "@react-aria/utils" "^3.22.0" + "@react-stately/collections" "^3.10.3" + "@react-stately/menu" "^3.5.7" + "@react-stately/tree" "^3.7.4" + "@react-types/button" "^3.9.1" + "@react-types/menu" "^3.9.6" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/meter@^3.4.8": + version "3.4.8" + resolved "https://registry.yarnpkg.com/@react-aria/meter/-/meter-3.4.8.tgz#af30df03a4c35b13a873ca0847cfa705902b918d" + integrity sha512-u/pNisFs8UottonYlwqaS2i/NhHIw9LcApHo55XP7XMFCnaHPlq3mJzpSsr0zuCTvat2djoKelj41jT6Fhuw+A== + dependencies: + "@react-aria/progress" "^3.4.8" + "@react-types/meter" "^3.3.6" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/numberfield@^3.10.0": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@react-aria/numberfield/-/numberfield-3.10.0.tgz#07d9be63346a0b8e9177a4ca9e4363e03f04afa9" + integrity sha512-ixkvkPTn18RNPnbaT726CHA+Wpr/qTYWboq8hSaJK0LiAtiEWCKg0pmVtJ4lFntAQ5GNp02xudTwhQdLN5WRig== + dependencies: + "@react-aria/i18n" "^3.9.0" + "@react-aria/interactions" "^3.20.0" + "@react-aria/spinbutton" "^3.6.0" + "@react-aria/textfield" "^3.13.0" + "@react-aria/utils" "^3.22.0" + "@react-stately/form" "^3.0.0" + "@react-stately/numberfield" "^3.7.0" + "@react-types/button" "^3.9.1" + "@react-types/numberfield" "^3.7.0" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/overlays@^3.19.0": + version "3.19.0" + resolved "https://registry.yarnpkg.com/@react-aria/overlays/-/overlays-3.19.0.tgz#0568d808c61e923174e896fc342a1529538da545" + integrity sha512-VN5GkB8+uZ2cfXljBtkqmrsAhBdGoj4un/agH0Qyihi2dazsMeafczSNnqzbpVgB4Zt2UHPJUkKwihgzXRxJJA== + dependencies: + "@react-aria/focus" "^3.15.0" + "@react-aria/i18n" "^3.9.0" + "@react-aria/interactions" "^3.20.0" + "@react-aria/ssr" "^3.9.0" + "@react-aria/utils" "^3.22.0" + "@react-aria/visually-hidden" "^3.8.7" + "@react-stately/overlays" "^3.6.4" + "@react-types/button" "^3.9.1" + "@react-types/overlays" "^3.8.4" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/progress@^3.4.8": + version "3.4.8" + resolved "https://registry.yarnpkg.com/@react-aria/progress/-/progress-3.4.8.tgz#3776ebeecc27c5b03db7a260ab39a92dbf722a21" + integrity sha512-Nah3aj5BNRa0+urQZimzb0vuKQK7lsc8BrUwJuHTwGRBSWUjCADExrJYdhDIR/nLUV2TCmAQl+GJtTgbEEj0DQ== + dependencies: + "@react-aria/i18n" "^3.9.0" + "@react-aria/label" "^3.7.3" + "@react-aria/utils" "^3.22.0" + "@react-types/progress" "^3.5.1" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/radio@^3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@react-aria/radio/-/radio-3.9.0.tgz#529b796ed3c5731c808af0a3da29e5535fa553b2" + integrity sha512-kr3+OQ1YU/3mURZfCsYaQmJ/c15qOm8uScaDRC39qz97bLNASakQqMImIaS+GluPKx1PEW3y2ErAgLplH28zZw== + dependencies: + "@react-aria/focus" "^3.15.0" + "@react-aria/form" "^3.0.0" + "@react-aria/i18n" "^3.9.0" + "@react-aria/interactions" "^3.20.0" + "@react-aria/label" "^3.7.3" + "@react-aria/utils" "^3.22.0" + "@react-stately/radio" "^3.10.0" + "@react-types/radio" "^3.6.0" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/searchfield@^3.6.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@react-aria/searchfield/-/searchfield-3.6.0.tgz#dc40310c875ba4edd288392ada7223186c5fd1eb" + integrity sha512-mHaN+sx2SLqluvF0/YIBQ9WA5LakSWl79FgC0sOWEaOZhDswAbJ9tESdi/M/ahtOnVwblE0cpHRlUKV0Oz4gOw== + dependencies: + "@react-aria/i18n" "^3.9.0" + "@react-aria/textfield" "^3.13.0" + "@react-aria/utils" "^3.22.0" + "@react-stately/searchfield" "^3.5.0" + "@react-types/button" "^3.9.1" + "@react-types/searchfield" "^3.5.2" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/select@^3.14.0": + version "3.14.0" + resolved "https://registry.yarnpkg.com/@react-aria/select/-/select-3.14.0.tgz#81c7a3db9fec6d55f4b2820913207afc39b1600d" + integrity sha512-ulVFH8K1yr8CxQE7pzhlM3aWBltWfSbWdJV3FXDqM0kA+GHqqPwZVJcqPuegtaiju1z6nRk4q789kJa4o+4M9g== + dependencies: + "@react-aria/form" "^3.0.0" + "@react-aria/i18n" "^3.9.0" + "@react-aria/interactions" "^3.20.0" + "@react-aria/label" "^3.7.3" + "@react-aria/listbox" "^3.11.2" + "@react-aria/menu" "^3.11.2" + "@react-aria/selection" "^3.17.2" + "@react-aria/utils" "^3.22.0" + "@react-aria/visually-hidden" "^3.8.7" + "@react-stately/select" "^3.6.0" + "@react-types/button" "^3.9.1" + "@react-types/select" "^3.9.0" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/selection@^3.17.2": + version "3.17.2" + resolved "https://registry.yarnpkg.com/@react-aria/selection/-/selection-3.17.2.tgz#74b798344df1eb90e3fdae9bc880c0488468ae3b" + integrity sha512-AXXY3eOIWnITabMn6c0bpLPXkSX7040LOZU+7pQgtZJwDdZorLuKw4i7WS5i71LcV71ywG4mtqc9mOb/GfhUbg== + dependencies: + "@react-aria/focus" "^3.15.0" + "@react-aria/i18n" "^3.9.0" + "@react-aria/interactions" "^3.20.0" + "@react-aria/utils" "^3.22.0" + "@react-stately/selection" "^3.14.1" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/separator@^3.3.8": + version "3.3.8" + resolved "https://registry.yarnpkg.com/@react-aria/separator/-/separator-3.3.8.tgz#de209f8158c4dd5d4d66f0a57525bbfdb5b00b15" + integrity sha512-u15HgH2IVKN/mx7Hp9dfNiFpPU/mq2EA7l0e2fsVSjA77nhSctUFBAqaR7FAI/y86RUhq3zplIz4BJek1/3Dvw== + dependencies: + "@react-aria/utils" "^3.22.0" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/slider@^3.7.3": + version "3.7.3" + resolved "https://registry.yarnpkg.com/@react-aria/slider/-/slider-3.7.3.tgz#799b47e8559acf63d9c1195fac88bd4d5ca7cad0" + integrity sha512-AbrTD9UzMn0CwxFjOhJHz2ms2zdJlBL3XnbvqkpsmpXUl0u8WT1QAEaMnS5+792gnSGZs/ARDmse53o+IO8wTA== + dependencies: + "@react-aria/focus" "^3.15.0" + "@react-aria/i18n" "^3.9.0" + "@react-aria/interactions" "^3.20.0" + "@react-aria/label" "^3.7.3" + "@react-aria/utils" "^3.22.0" + "@react-stately/slider" "^3.4.5" + "@react-types/shared" "^3.22.0" + "@react-types/slider" "^3.7.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/spinbutton@^3.6.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@react-aria/spinbutton/-/spinbutton-3.6.0.tgz#b881ffd6780f90972879334268634740297197c9" + integrity sha512-I7f1gfwVRcjguEXZijk0z5g8njZ2YWnQzVzcwGf8ocLPxfw1CnSivNCzwVj2ChXPX10uXewXVMLWVCz+BRC9uQ== + dependencies: + "@react-aria/i18n" "^3.9.0" + "@react-aria/live-announcer" "^3.3.1" + "@react-aria/utils" "^3.22.0" + "@react-types/button" "^3.9.1" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/ssr@^3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@react-aria/ssr/-/ssr-3.9.0.tgz#457310129e1447b09d2f4aa2fdd62ab0e668d88c" + integrity sha512-Bz6BqP6ZorCme9tSWHZVmmY+s7AU8l6Vl2NUYmBzezD//fVHHfFo4lFBn5tBuAaJEm3AuCLaJQ6H2qhxNSb7zg== + dependencies: + "@swc/helpers" "^0.5.0" + +"@react-aria/switch@^3.5.7": + version "3.5.7" + resolved "https://registry.yarnpkg.com/@react-aria/switch/-/switch-3.5.7.tgz#b543ac69b5d5dca70c75fc6c80b9c2c9d8191403" + integrity sha512-zBEsB071zzhQ82RwAA42pFLXHgrpya0OoRAsTO6jHZwiaYMsyqJI2eiXd7F6rqklpgyO6k7jOQklGUuoSJW4pA== + dependencies: + "@react-aria/toggle" "^3.9.0" + "@react-stately/toggle" "^3.7.0" + "@react-types/switch" "^3.5.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/table@^3.13.2": + version "3.13.2" + resolved "https://registry.yarnpkg.com/@react-aria/table/-/table-3.13.2.tgz#ef73709facdd005d7d0f6051dc9bedb85eb4e58a" + integrity sha512-bJgMx2SZ8SFmTosbv6k1lZ1a0Yw3f8tzWhpIQodCaMHhtI7izA6YqDNx47NeBNYpVm9DFfAoWbb79HFJ+OKIJA== + dependencies: + "@react-aria/focus" "^3.15.0" + "@react-aria/grid" "^3.8.5" + "@react-aria/i18n" "^3.9.0" + "@react-aria/interactions" "^3.20.0" + "@react-aria/live-announcer" "^3.3.1" + "@react-aria/utils" "^3.22.0" + "@react-aria/visually-hidden" "^3.8.7" + "@react-stately/collections" "^3.10.3" + "@react-stately/flags" "^3.0.0" + "@react-stately/table" "^3.11.3" + "@react-stately/virtualizer" "^3.6.5" + "@react-types/checkbox" "^3.6.0" + "@react-types/grid" "^3.2.3" + "@react-types/shared" "^3.22.0" + "@react-types/table" "^3.9.1" + "@swc/helpers" "^0.5.0" + +"@react-aria/tabs@^3.8.2": + version "3.8.2" + resolved "https://registry.yarnpkg.com/@react-aria/tabs/-/tabs-3.8.2.tgz#ab11e77e6e9afaebb7549983c0aa0d66ae5d96bf" + integrity sha512-zDfeEEyJmcnH9TFvJECWIrJpxX4SmREFV1/P8hN6ZUJPYoeiGMXYYFvjcRb1r3LN8XKlbwR37AQ3Cn1/yhrUwQ== + dependencies: + "@react-aria/focus" "^3.15.0" + "@react-aria/i18n" "^3.9.0" + "@react-aria/selection" "^3.17.2" + "@react-aria/utils" "^3.22.0" + "@react-stately/tabs" "^3.6.2" + "@react-types/shared" "^3.22.0" + "@react-types/tabs" "^3.3.4" + "@swc/helpers" "^0.5.0" + +"@react-aria/tag@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@react-aria/tag/-/tag-3.3.0.tgz#ba7b5e2fc3c65f9a37c4737cb96897313174b9f2" + integrity sha512-mANJTcPyut98O4D3cAKaNEV6QFfoljZCDAgC+uJkV/Zn8cU4JOFeNLAyNoLRlPvYw+msqr6wUyPkWNERuO+1Uw== + dependencies: + "@react-aria/gridlist" "^3.7.2" + "@react-aria/i18n" "^3.9.0" + "@react-aria/interactions" "^3.20.0" + "@react-aria/label" "^3.7.3" + "@react-aria/selection" "^3.17.2" + "@react-aria/utils" "^3.22.0" + "@react-stately/list" "^3.10.1" + "@react-types/button" "^3.9.1" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/textfield@^3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@react-aria/textfield/-/textfield-3.13.0.tgz#bc8a027f93598a1ebd5013d027549a03d7b8dd04" + integrity sha512-sUlinDE+k/WhbskyqVOkuffuhiQpjgvp+iGRoralStVgb8Tcb+POxgAlw5jS4tNjdivCb3IjVJemUNJM7xsxxA== + dependencies: + "@react-aria/focus" "^3.15.0" + "@react-aria/form" "^3.0.0" + "@react-aria/label" "^3.7.3" + "@react-aria/utils" "^3.22.0" + "@react-stately/form" "^3.0.0" + "@react-stately/utils" "^3.9.0" + "@react-types/shared" "^3.22.0" + "@react-types/textfield" "^3.9.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/toggle@^3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@react-aria/toggle/-/toggle-3.9.0.tgz#c1b253d2fc05f2a673abd9fe4d62bc01a8781a92" + integrity sha512-2YMWYQUEmcoAXtrAE86QXBS9XlmJyV6IFRlMTBNaeLTdH3AmACExgsyU66Tt0sKl6LMDMI376ItMFqAz27BBdQ== + dependencies: + "@react-aria/focus" "^3.15.0" + "@react-aria/interactions" "^3.20.0" + "@react-aria/utils" "^3.22.0" + "@react-stately/toggle" "^3.7.0" + "@react-types/checkbox" "^3.6.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/tooltip@^3.6.5": + version "3.6.5" + resolved "https://registry.yarnpkg.com/@react-aria/tooltip/-/tooltip-3.6.5.tgz#aeb4c71db46f2c9ad0ff0b6810002bdacc07fea1" + integrity sha512-hXw4Z8nYLOWz3QOQ807wWZdvDwR3gofsmZhAehg2HPRwdRfCQK+1cjVKeUd9cKCAxs0Cay7dV0oUdilLbCQ2Gg== + dependencies: + "@react-aria/focus" "^3.15.0" + "@react-aria/interactions" "^3.20.0" + "@react-aria/utils" "^3.22.0" + "@react-stately/tooltip" "^3.4.6" + "@react-types/shared" "^3.22.0" + "@react-types/tooltip" "^3.4.6" + "@swc/helpers" "^0.5.0" + +"@react-aria/utils@^3.13.0", "@react-aria/utils@^3.14.2", "@react-aria/utils@^3.22.0": + version "3.22.0" + resolved "https://registry.yarnpkg.com/@react-aria/utils/-/utils-3.22.0.tgz#962a45ae95fdc21de7f22dda68253b0fb2470d06" + integrity sha512-Qi/m65GFFljXA/ayj1m5g3KZdgbZY3jacSSqD5vNUOEGiKsn4OQcsw8RfC2c0SgtLV1hLzsfvFI1OiryPlGCcw== + dependencies: + "@react-aria/ssr" "^3.9.0" + "@react-stately/utils" "^3.9.0" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + clsx "^1.1.1" + +"@react-aria/visually-hidden@^3.8.7": + version "3.8.7" + resolved "https://registry.yarnpkg.com/@react-aria/visually-hidden/-/visually-hidden-3.8.7.tgz#059699c70cc354ccb3699151b09071b3fc43fa82" + integrity sha512-OuIGMVQIt7GC43h4x35BgkZid8lhoPu7Xz4TQRP8nvOJWb1lH7ehrRRuGdUsK3y90nwpxTdNdg4DILblg+VaLw== + dependencies: + "@react-aria/interactions" "^3.20.0" + "@react-aria/utils" "^3.22.0" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-stately/calendar@^3.4.2": + version "3.4.2" + resolved "https://registry.yarnpkg.com/@react-stately/calendar/-/calendar-3.4.2.tgz#7dd55cd2f0689bd0a5825326507dcb6b3d7f3d05" + integrity sha512-RfH40rVa2EhUnQgqH3HTZL+YhL+6tZ8T9GbN1K3AbIM5BBEtkb3P8qGhcaI7WpwNy1rlRFFFXGcqFAMUncDg2Q== + dependencies: + "@internationalized/date" "^3.5.0" + "@react-stately/utils" "^3.9.0" + "@react-types/calendar" "^3.4.2" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-stately/checkbox@^3.6.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@react-stately/checkbox/-/checkbox-3.6.0.tgz#448da0b07710a120959985fb081ad3855232fdc9" + integrity sha512-e1ChMwGovcOEDcdizqXDT6eDZixIMiPQOzNV5wPQ91SlGaIry9b0lQnK18tHg3yv2iiS6Ipj96cGBUKLJqQ+cQ== + dependencies: + "@react-stately/form" "^3.0.0" + "@react-stately/utils" "^3.9.0" + "@react-types/checkbox" "^3.6.0" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-stately/collections@^3.10.3": + version "3.10.3" + resolved "https://registry.yarnpkg.com/@react-stately/collections/-/collections-3.10.3.tgz#c80bd30df3bf5d2a9c6fdf25f6313c5187d0154d" + integrity sha512-fA28HIApAIz9sNGeOVXZJPgV5Kig6M72KI1t9sUbnRUr9Xq9OMJTR6ElDMXNe0iTeZffRFDOPYyqnX9zkxof6Q== + dependencies: + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-stately/combobox@^3.8.0": + version "3.8.0" + resolved "https://registry.yarnpkg.com/@react-stately/combobox/-/combobox-3.8.0.tgz#6bd9b23ade552f04e8ebc0eeb80e077efed17d6d" + integrity sha512-F74Avf7+8ruRqEB+3Lh6/C5jXc3ESJbRf9ovUxhmNAzBGeFKesPn5HpEpo87C+3OukGb+/Buvi3Rhib9+HVBKA== + dependencies: + "@react-stately/collections" "^3.10.3" + "@react-stately/form" "^3.0.0" + "@react-stately/list" "^3.10.1" + "@react-stately/menu" "^3.5.7" + "@react-stately/select" "^3.6.0" + "@react-stately/utils" "^3.9.0" + "@react-types/combobox" "^3.9.0" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-stately/data@^3.11.0": + version "3.11.0" + resolved "https://registry.yarnpkg.com/@react-stately/data/-/data-3.11.0.tgz#d744d868ee810126aef4a0a827ab394e3059d33a" + integrity sha512-0BlPT58WrAtUvpiEfUuyvIsGFTzp/9vA5y+pk53kGJhOdc5tqBGHi9cg40pYE/i1vdHJGMpyHGRD9nkQb8wN3Q== + dependencies: + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-stately/datepicker@^3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@react-stately/datepicker/-/datepicker-3.9.0.tgz#0771c66df937806f812392f8a512a2e72bebbaf0" + integrity sha512-p6BuxPbDxjIgBZmskdv2dR6XIdPEftCjS7kYe/+iLZxfz1vYiDqpJVb3ascLyBjl84bDDyr4z2vWcKhdDwyhEA== + dependencies: + "@internationalized/date" "^3.5.0" + "@internationalized/string" "^3.1.1" + "@react-stately/form" "^3.0.0" + "@react-stately/overlays" "^3.6.4" + "@react-stately/utils" "^3.9.0" + "@react-types/datepicker" "^3.7.0" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-stately/dnd@^3.2.6": + version "3.2.6" + resolved "https://registry.yarnpkg.com/@react-stately/dnd/-/dnd-3.2.6.tgz#683649dce4183890528d8bea08c30f2b11c812f0" + integrity sha512-ex3Pjn+9uIoqsBb9F4ZFJb3fB0YadN8uYBOEiBb9N4UXWyANibGUYJ2FvIbvq1nFDU7On7MW1J9e3vkGglX4FQ== + dependencies: + "@react-stately/selection" "^3.14.1" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-stately/flags@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@react-stately/flags/-/flags-3.0.0.tgz#c5a73965f8c90e8bf5981adddb4bdbb0ba2f5690" + integrity sha512-e3i2ItHbIa0eEwmSXAnPdD7K8syW76JjGe8ENxwFJPW/H1Pu9RJfjkCb/Mq0WSPN/TpxBb54+I9TgrGhbCoZ9w== + dependencies: + "@swc/helpers" "^0.4.14" + +"@react-stately/form@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@react-stately/form/-/form-3.0.0.tgz#584af339a128045c357c1b8ca440c87460a41b0f" + integrity sha512-C8wkfFmtx1escizibhdka5JvTy9/Vp173CS9cakjvWTmnjYYC1nOlzwp7BsYWTgerCFbRY/BU/Cf/bJDxPiUKQ== + dependencies: + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-stately/grid@^3.8.3": + version "3.8.3" + resolved "https://registry.yarnpkg.com/@react-stately/grid/-/grid-3.8.3.tgz#42420724084a023c74e50d9c82efd8074179680d" + integrity sha512-JceGSJcuO6Zv+Aq5s2NZvmbMjdPjTtGNQR9kTgXKC/pOfM6FJ58bJiOmEllyN6oawqh4Ey8Xdqk9NuW4l2ctuw== + dependencies: + "@react-stately/collections" "^3.10.3" + "@react-stately/selection" "^3.14.1" + "@react-types/grid" "^3.2.3" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-stately/list@^3.10.1": + version "3.10.1" + resolved "https://registry.yarnpkg.com/@react-stately/list/-/list-3.10.1.tgz#1d926d4aef5764096ec357da8081ef09081fe5cc" + integrity sha512-iVarLMd7FmMT0H20dRWsFOHHX5+c4gK51AXP2BSr1VtDSfbL4dgaGgu7IaAMVc/rO0au1e1tPM2hutiIFvPcnA== + dependencies: + "@react-stately/collections" "^3.10.3" + "@react-stately/selection" "^3.14.1" + "@react-stately/utils" "^3.9.0" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-stately/menu@^3.5.7": + version "3.5.7" + resolved "https://registry.yarnpkg.com/@react-stately/menu/-/menu-3.5.7.tgz#3232598399b4baebfc577d5f56b4bd5570f400c2" + integrity sha512-bzTmAqzcMNatvyruWlvOdZSmMhz3+mkdxtqaZzYHq+DpR6ka57lIRj8dBnZWQGwV3RypMZfz+X6aIX4kruGVbw== + dependencies: + "@react-stately/overlays" "^3.6.4" + "@react-types/menu" "^3.9.6" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-stately/numberfield@^3.7.0": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@react-stately/numberfield/-/numberfield-3.7.0.tgz#a0fd05da980dbe510d1d99ea7cf21ce4f9bac1bb" + integrity sha512-DOz4jL7T30KGUXpGh/z80aHf+DEOQfvCHVDfll+IU7p3sd+bbM5uj7JdwXpZgIYUK8KTf2N49sL6lq5uCoxh8w== + dependencies: + "@internationalized/number" "^3.4.0" + "@react-stately/form" "^3.0.0" + "@react-stately/utils" "^3.9.0" + "@react-types/numberfield" "^3.7.0" + "@swc/helpers" "^0.5.0" + +"@react-stately/overlays@^3.6.4": + version "3.6.4" + resolved "https://registry.yarnpkg.com/@react-stately/overlays/-/overlays-3.6.4.tgz#1d0d974413fa3f13d97eec2cac5b48c49978d1a0" + integrity sha512-tHEaoAGpE9dSnsskqLPVKum59yGteoSqsniTopodM+miQozbpPlSjdiQnzGLroy5Afx5OZYClE616muNHUILXA== + dependencies: + "@react-stately/utils" "^3.9.0" + "@react-types/overlays" "^3.8.4" + "@swc/helpers" "^0.5.0" + +"@react-stately/radio@^3.10.0": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@react-stately/radio/-/radio-3.10.0.tgz#01750b861bfdbb048c6e1bbfb6a97a4f42c29c25" + integrity sha512-d8IgZtUq/4vhE7YhyBVg1QdVoFS0caIcvPumXqtp/5vlDgpUsVy9jSeWtbk0H4FyUcmJlQhRcTylKB9THXY1YQ== + dependencies: + "@react-stately/form" "^3.0.0" + "@react-stately/utils" "^3.9.0" + "@react-types/radio" "^3.6.0" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-stately/searchfield@^3.5.0": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@react-stately/searchfield/-/searchfield-3.5.0.tgz#8493eefd684bc85117b42c7c714f6541afe54816" + integrity sha512-SStjChkn/33pEn40slKQPnBnmQYyxVazVwPjiBkdeVejC42lUVairUTrGJgF0PNoZTbxn0so2/XzjqTC9T8iCw== + dependencies: + "@react-stately/utils" "^3.9.0" + "@react-types/searchfield" "^3.5.2" + "@swc/helpers" "^0.5.0" + +"@react-stately/select@^3.6.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@react-stately/select/-/select-3.6.0.tgz#e77464f3e0367d652866806c1ab61c132c31c49a" + integrity sha512-GvSE4DXmcvdRNUc+ciPU7gedt7LfRO8FFFIzhB/bCQhUlK6/xihUPrGXayzqxLeTQKttMH323LuYFKfwpJRhsA== + dependencies: + "@react-stately/form" "^3.0.0" + "@react-stately/list" "^3.10.1" + "@react-stately/menu" "^3.5.7" + "@react-types/select" "^3.9.0" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-stately/selection@^3.14.1": + version "3.14.1" + resolved "https://registry.yarnpkg.com/@react-stately/selection/-/selection-3.14.1.tgz#798b4fbfda940778ae1dc1f2d2390cee97cce2c6" + integrity sha512-96/CerrB6yH4Ad9FkzBzyVerSPjcIj1NBTWTFHo1N+oHECvyGsDxZl7Y4LQR++teFK66FhX5KjCJQGae4IZd6A== + dependencies: + "@react-stately/collections" "^3.10.3" + "@react-stately/utils" "^3.9.0" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-stately/slider@^3.4.5": + version "3.4.5" + resolved "https://registry.yarnpkg.com/@react-stately/slider/-/slider-3.4.5.tgz#46d4a7e0a1644894e91b12003fa1ba8e0787f4ca" + integrity sha512-lJPZC8seYbnZDqAlZm3/QC95I5iluG8ouwkPMmvtWCz1baayV/jJtfxA/74zR7Vcob9Fe7O57g8Edhz/hv9xOQ== + dependencies: + "@react-stately/utils" "^3.9.0" + "@react-types/shared" "^3.22.0" + "@react-types/slider" "^3.7.0" + "@swc/helpers" "^0.5.0" + +"@react-stately/table@^3.11.3": + version "3.11.3" + resolved "https://registry.yarnpkg.com/@react-stately/table/-/table-3.11.3.tgz#0d9e547fc2e30df174ac4ba3728402f62fb2fc0a" + integrity sha512-r0rzSKbtMG4tjFpCGtXb8p6hOuek03c6rheJE88z4I/ujZ5EmEO6Ps8q0JMNEDCY2qigvKM+ODisMBeZCEkIJg== + dependencies: + "@react-stately/collections" "^3.10.3" + "@react-stately/flags" "^3.0.0" + "@react-stately/grid" "^3.8.3" + "@react-stately/selection" "^3.14.1" + "@react-stately/utils" "^3.9.0" + "@react-types/grid" "^3.2.3" + "@react-types/shared" "^3.22.0" + "@react-types/table" "^3.9.1" + "@swc/helpers" "^0.5.0" + +"@react-stately/tabs@^3.6.2": + version "3.6.2" + resolved "https://registry.yarnpkg.com/@react-stately/tabs/-/tabs-3.6.2.tgz#a9825d560af58c4f876e7b619c7e8cb29b071887" + integrity sha512-f+U4D1FAVfVVcNRbtKIv4GrO37CLFClYQlXx9zIuSXjHsviapVD2IQSyAmpKo/CbgXhYRMdGwENZdOsmF/Ns7g== + dependencies: + "@react-stately/list" "^3.10.1" + "@react-types/shared" "^3.22.0" + "@react-types/tabs" "^3.3.4" + "@swc/helpers" "^0.5.0" + +"@react-stately/toggle@^3.7.0": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@react-stately/toggle/-/toggle-3.7.0.tgz#abe2f08f37a0f41e6513d4fde3d46f49500bb5cc" + integrity sha512-TRksHkCJk/Xogq4181g3CYgJf+EfsJCqX5UZDSw1Z1Kgpvonjmdf6FAfQfCh9QR2OuXUL6hOLUDVLte5OPI+5g== + dependencies: + "@react-stately/utils" "^3.9.0" + "@react-types/checkbox" "^3.6.0" + "@swc/helpers" "^0.5.0" + +"@react-stately/tooltip@^3.4.6": + version "3.4.6" + resolved "https://registry.yarnpkg.com/@react-stately/tooltip/-/tooltip-3.4.6.tgz#e240184dedc35018f7b1e2d46eaca20a90d919bb" + integrity sha512-uL93bmsXf+OOgpKLPEKfpDH4z+MK2CuqlqVxx7rshN0vjWOSoezE5nzwgee90+RpDrLNNNWTNa7n+NkDRpI1jA== + dependencies: + "@react-stately/overlays" "^3.6.4" + "@react-types/tooltip" "^3.4.6" + "@swc/helpers" "^0.5.0" + +"@react-stately/tree@^3.7.4": + version "3.7.4" + resolved "https://registry.yarnpkg.com/@react-stately/tree/-/tree-3.7.4.tgz#57cc57863837092f13b7a3887e1b5c56330b5cac" + integrity sha512-0yvVODBS8WnSivLFX5ccEjCl2NA/8lbEt1E48wVcY1xcXgISNpw5MSGK5jC6YrtJPIqVolQIkNSbMreXGBktIg== + dependencies: + "@react-stately/collections" "^3.10.3" + "@react-stately/selection" "^3.14.1" + "@react-stately/utils" "^3.9.0" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-stately/utils@^3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@react-stately/utils/-/utils-3.9.0.tgz#9cb2c8eea5dd1b58256ecb436b963c01526bae37" + integrity sha512-yPKFY1F88HxuZ15BG2qwAYxtpE4HnIU0Ofi4CuBE0xC6I8mwo4OQjDzi+DZjxQngM9D6AeTTD6F1V8gkozA0Gw== + dependencies: + "@swc/helpers" "^0.5.0" + +"@react-stately/virtualizer@^3.6.5": + version "3.6.5" + resolved "https://registry.yarnpkg.com/@react-stately/virtualizer/-/virtualizer-3.6.5.tgz#45891ac24b6aed0aa168e26c61a39d235d204a70" + integrity sha512-v0cZeNCGPMeo3LP4UrGuDo3Xpq7ufNaZyGObgSvdrIW49qK5F02kczcKy6NKg+QfOgC/+Nc9Tof/2S8dcxDrCA== + dependencies: + "@react-aria/utils" "^3.22.0" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-types/breadcrumbs@^3.7.2": + version "3.7.2" + resolved "https://registry.yarnpkg.com/@react-types/breadcrumbs/-/breadcrumbs-3.7.2.tgz#3dc0c8ccebf75844efc56ac8e53dc072df083d5f" + integrity sha512-esl6RucDW2CNMsApJxNYfMtDaUcfLlwKMPH/loYsOBbKxGl2HsgVLMcdpjEkTRs2HCTNCbBXWpeU8AY77t+bsw== + dependencies: + "@react-types/link" "^3.5.2" + "@react-types/shared" "^3.22.0" + +"@react-types/button@^3.9.1": + version "3.9.1" + resolved "https://registry.yarnpkg.com/@react-types/button/-/button-3.9.1.tgz#eb54745133bdaad345d8d589021b67ef2882e1c5" + integrity sha512-bf9iTar3PtqnyV9rA+wyFyrskZKhwmOuOd/ifYIjPs56YNVXWH5Wfqj6Dx3xdFBgtKx8mEVQxVhoX+WkHX+rtw== + dependencies: + "@react-types/shared" "^3.22.0" + +"@react-types/calendar@^3.4.2": + version "3.4.2" + resolved "https://registry.yarnpkg.com/@react-types/calendar/-/calendar-3.4.2.tgz#a184851c2c891e8baa06e3d11173bb4bf101a48b" + integrity sha512-tCZ21un/8OAhpNtmSXDkOVvS5Pzp+y/JwNr6VGFi8HBC5F/c8SzuwV0jKN8ymsZSWbDQ68xXGNWxFaG43Bw8Pg== + dependencies: + "@internationalized/date" "^3.5.0" + "@react-types/shared" "^3.22.0" + +"@react-types/checkbox@^3.6.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@react-types/checkbox/-/checkbox-3.6.0.tgz#ba702be25555c1520f78be39c8260354638792b6" + integrity sha512-vgbuJzQpVCNT5AZWV0OozXCnihqrXxoZKfJFIw0xro47pT2sn3t5UC4RA9wfjDGMoK4frw1K/4HQLsQIOsPBkw== + dependencies: + "@react-types/shared" "^3.22.0" + +"@react-types/combobox@^3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@react-types/combobox/-/combobox-3.9.0.tgz#f671da0357cfe3a06a24a239fcfacc5b3e5125d0" + integrity sha512-VAQWM2jrIWROgcTKxj4k37WWpK/1zRjj1HfGeuenAQyOQwImqDwCHx5YxQR1GiUEFne4v1yXe2khT0T5Kt2vDg== + dependencies: + "@react-types/shared" "^3.22.0" + +"@react-types/datepicker@^3.4.0", "@react-types/datepicker@^3.7.0": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@react-types/datepicker/-/datepicker-3.7.0.tgz#f44632994a0cdd20f350b40910f61a7c89091810" + integrity sha512-Uh+p6pZpMFc5ZBOns5TXCBbUvJp1KVROLBn2gk5dMEFVq78Qs1VFuAt4lwr9gQBOJrX5I/l65pRTwwWwAKxYtQ== + dependencies: + "@internationalized/date" "^3.5.0" + "@react-types/calendar" "^3.4.2" + "@react-types/overlays" "^3.8.4" + "@react-types/shared" "^3.22.0" + +"@react-types/dialog@^3.5.7": + version "3.5.7" + resolved "https://registry.yarnpkg.com/@react-types/dialog/-/dialog-3.5.7.tgz#3fd93875ff317d6014e814b6e1a2abb87272a1ef" + integrity sha512-geYoqAyQaTLG43AaXdMUVqZXYgkSifrD9cF7lR2kPAT0uGFv0YREi6ieU+aui8XJ83EW0xcxP+EPWd2YkN4D4w== + dependencies: + "@react-types/overlays" "^3.8.4" + "@react-types/shared" "^3.22.0" + +"@react-types/grid@^3.2.3": + version "3.2.3" + resolved "https://registry.yarnpkg.com/@react-types/grid/-/grid-3.2.3.tgz#20b19b73315343630145ff9e43138e7f2855d946" + integrity sha512-GQM4RDmYhstcYZ0Odjq+xUwh1fhLmRebG6qMM8OXHTPQ77nhl3wc1UTGRhZm6mzEionplSRx4GCpEMEHMJIU0w== + dependencies: + "@react-types/shared" "^3.22.0" + +"@react-types/link@^3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@react-types/link/-/link-3.5.2.tgz#b363abca3365adc64b49c47163ce00235c01c667" + integrity sha512-/s51/WejmpLiyxOgP89s4txgxYoGaPe8pVDItVo1h4+BhU1Puyvgv/Jx8t9dPvo6LUXbraaN+SgKk/QDxaiirw== + dependencies: + "@react-types/shared" "^3.22.0" + +"@react-types/listbox@^3.4.6": + version "3.4.6" + resolved "https://registry.yarnpkg.com/@react-types/listbox/-/listbox-3.4.6.tgz#da0887dbb89a868d53b87486111bf0a51042da7b" + integrity sha512-XOQvrTqNh5WIPDvKiWiep8T07RAsMfjAXTjDbnjxVlKACUXkcwpts9kFaLnJ9LJRFt6DwItfP+WMkzvmx63/NQ== + dependencies: + "@react-types/shared" "^3.22.0" + +"@react-types/menu@^3.9.6": + version "3.9.6" + resolved "https://registry.yarnpkg.com/@react-types/menu/-/menu-3.9.6.tgz#1b36842cbdb4590dfff78437316aec4a3f47b1f6" + integrity sha512-w/RbFInOf4nNayQDv5c2L8IMJbcFOkBhsT3xvvpTy+CHvJcQdjggwaV1sRiw7eF/PwB81k2CwigmidUzHJhKDg== + dependencies: + "@react-types/overlays" "^3.8.4" + "@react-types/shared" "^3.22.0" + +"@react-types/meter@^3.3.6": + version "3.3.6" + resolved "https://registry.yarnpkg.com/@react-types/meter/-/meter-3.3.6.tgz#ae5960b27012f52ca33970f2ff416af71dad274d" + integrity sha512-1XYp1fA9UU0lO6kjf3TwVE8mppOJa64mBKAcLWtTyq1e/cYIAbx5o6CsuUx0YDpXKF6gdtvIWvfmxeWsmqJ1jQ== + dependencies: + "@react-types/progress" "^3.5.1" + +"@react-types/numberfield@^3.7.0": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@react-types/numberfield/-/numberfield-3.7.0.tgz#a029bf2a8a07049c96ea5ffe1f7533ab2305bcf4" + integrity sha512-gaGi+vqm1Y8LCWRsWYUjcGftPIzl+8W2VOfkgKMLM8y76nnwTPtmAqs+Ap1cg7sEJSfsiKMq93e9yvP3udrC2w== + dependencies: + "@react-types/shared" "^3.22.0" + +"@react-types/overlays@^3.8.4": + version "3.8.4" + resolved "https://registry.yarnpkg.com/@react-types/overlays/-/overlays-3.8.4.tgz#a538f6f2fb9826f1da78d3b4f0f6326a709ce37d" + integrity sha512-pfgNlQnbF6RB/R2oSxyqAP3Uzz0xE/k5q4n5gUeCDNLjY5qxFHGE8xniZZ503nZYw6VBa9XMN1efDOKQyeiO0w== + dependencies: + "@react-types/shared" "^3.22.0" + +"@react-types/progress@^3.5.1": + version "3.5.1" + resolved "https://registry.yarnpkg.com/@react-types/progress/-/progress-3.5.1.tgz#b988cd2d2ff194c7652d74f714b230f26ab73c6c" + integrity sha512-CqsUjczUK/SfuFzDcajBBaXRTW0D3G9S/yqLDj9e8E0ii+lGDLt1PHj24t1J7E88U2rVYqmM9VL4NHTt8o3IYA== + dependencies: + "@react-types/shared" "^3.22.0" + +"@react-types/radio@^3.6.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@react-types/radio/-/radio-3.6.0.tgz#519e4aa40dbb2a13852a5a6f36299a84639376a5" + integrity sha512-VOZzegxxZS55gHRVyWu278Q4y/rEQGiAVQCUqi25GmpbMe4MlHrzg16c76RiZMUK9PPoyv+XNUgAaPmxebkn7g== + dependencies: + "@react-types/shared" "^3.22.0" + +"@react-types/searchfield@^3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@react-types/searchfield/-/searchfield-3.5.2.tgz#e663899f42344243ea7b4cd6f0ab0bfe6020151e" + integrity sha512-JAK2/Kg4Dr393FYfbRw0TlXKnJPX77sq1x/ZBxtO6p64+MuuIYKqw0i9PwDlo1PViw2QI5u8GFhKA2TgemY9uA== + dependencies: + "@react-types/shared" "^3.22.0" + "@react-types/textfield" "^3.9.0" + +"@react-types/select@^3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@react-types/select/-/select-3.9.0.tgz#ddc1238194776ef161260547d25038409885ced8" + integrity sha512-0nalGmcoma4jreICLSJae/uKAuMiVyWgqWjGrGiUGGcdDchH4limKVEqNDaBwLvxVT6NB5LLsaipCTCAEEl4Rg== + dependencies: + "@react-types/shared" "^3.22.0" + +"@react-types/shared@^3.16.0", "@react-types/shared@^3.22.0": + version "3.22.0" + resolved "https://registry.yarnpkg.com/@react-types/shared/-/shared-3.22.0.tgz#70f85aad46cd225f7fcb29f1c2b5213163605074" + integrity sha512-yVOekZWbtSmmiThGEIARbBpnmUIuePFlLyctjvCbgJgGhz8JnEJOipLQ/a4anaWfzAgzSceQP8j/K+VOOePleA== + +"@react-types/slider@^3.7.0": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@react-types/slider/-/slider-3.7.0.tgz#d9e4dbe1b2109c7accfcc0e2e330ff10cd3a837c" + integrity sha512-uyQXUVFfqc9SPUW0LZLMan2n232F/OflRafiHXz9viLFa9tVOupVa7GhASRAoHojwkjoJ1LjFlPih7g5dOZ0/Q== + dependencies: + "@react-types/shared" "^3.22.0" + +"@react-types/switch@^3.5.0": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@react-types/switch/-/switch-3.5.0.tgz#8ebf07c60aef22b181eb4ab884cf3d2abddd66c6" + integrity sha512-/wNmUGjk69bP6t5k2QkAdrNN5Eb9Rz4dOyp0pCPmoeE+5haW6sV5NmtkvWX1NSc4DQz1xL/a5b+A0vxPCP22Jw== + dependencies: + "@react-types/shared" "^3.22.0" + +"@react-types/table@^3.9.1": + version "3.9.1" + resolved "https://registry.yarnpkg.com/@react-types/table/-/table-3.9.1.tgz#5d1304d412bc7e637e832e86fcb8724e61c20735" + integrity sha512-3e+Oouw9jGqNDg+JRg7v7fgPqDZd6DtST9S/UPp81f32ntnQ8Wsu7S/J4eyLHu5CVQDqcHkf4xPeeXBgPx4qmw== + dependencies: + "@react-types/grid" "^3.2.3" + "@react-types/shared" "^3.22.0" + +"@react-types/tabs@^3.3.4": + version "3.3.4" + resolved "https://registry.yarnpkg.com/@react-types/tabs/-/tabs-3.3.4.tgz#43fa93a4a67dcc53031afc56a8ad3bf5f44473a8" + integrity sha512-4mCTtFrwMRypyGTZCvNYVT9CkknexO/UYvqwDm2jMYb8JgjRvxnomu776Yh7uyiYKWyql2upm20jqasEOm620w== + dependencies: + "@react-types/shared" "^3.22.0" + +"@react-types/textfield@^3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@react-types/textfield/-/textfield-3.9.0.tgz#ad29f0a70421f9d2cd6cf2795df10a7712954e69" + integrity sha512-D/DiwzsfkwlAg3uv8hoIfwju+zhB/hWDEdTvxQbPkntDr0kmN/QfI17NMSzbOBCInC4ABX87ViXLGxr940ykGA== + dependencies: + "@react-types/shared" "^3.22.0" + +"@react-types/tooltip@^3.4.6": + version "3.4.6" + resolved "https://registry.yarnpkg.com/@react-types/tooltip/-/tooltip-3.4.6.tgz#1f1eb22873a5d5ad355e0de1be46f48759b55f6f" + integrity sha512-RaZewdER7ZcsNL99RhVHs8kSLyzIBkwc0W6eFZrxST2MD9J5GzkVWRhIiqtFOd5U1aYnxdJ6woq72Ef+le6Vfw== + dependencies: + "@react-types/overlays" "^3.8.4" + "@react-types/shared" "^3.22.0" + "@remix-run/router@1.0.1": version "1.0.1" resolved "https://registry.npmjs.org/@remix-run/router/-/router-1.0.1.tgz" @@ -835,6 +2816,11 @@ resolved "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz" integrity sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg== +"@stitches/react@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@stitches/react/-/react-1.2.8.tgz#954f8008be8d9c65c4e58efa0937f32388ce3a38" + integrity sha512-9g9dWI4gsSVe8bNLlb+lMkBYsnIKCZTmvqvDG+Avnn69XfmHZKiaMrx7cgTaddq7aTPPmXiTsbFcUy0xgI4+wA== + "@stripe/react-stripe-js@^2.1.0": version "2.1.0" resolved "https://registry.npmjs.org/@stripe/react-stripe-js/-/react-stripe-js-2.1.0.tgz" @@ -910,6 +2896,21 @@ dependencies: tslib "^2.4.0" +"@swc/helpers@^0.4.14": + version "0.4.36" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.36.tgz#fcfff76ed52c214f357e8e9d3f37b568908072d9" + integrity sha512-5lxnyLEYFskErRPenYItLRSge5DjrJngYKdVjRSrWfza9G6KkgHEXi0vUZiyUeMU5JfXH1YnvXZzSp8ul88o2Q== + dependencies: + legacy-swc-helpers "npm:@swc/helpers@=0.4.14" + tslib "^2.4.0" + +"@swc/helpers@^0.5.0": + version "0.5.3" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.3.tgz#98c6da1e196f5f08f977658b80d6bd941b5f294f" + integrity sha512-FaruWX6KdudYloq1AHD/4nU+UsMTdNE8CKyrseXWEcgjDAbvkwJg2QGPAnfIJLIWsjZOSPLOAykK6fuYp4vp4A== + dependencies: + tslib "^2.4.0" + "@types/cookie@^0.4.1": version "0.4.1" resolved "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz" @@ -1341,6 +3342,13 @@ argparse@^2.0.1: resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== +aria-hidden@^1.1.1: + version "1.2.3" + resolved "https://registry.yarnpkg.com/aria-hidden/-/aria-hidden-1.2.3.tgz#14aeb7fb692bbb72d69bebfa47279c1fd725e954" + integrity sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ== + dependencies: + tslib "^2.0.0" + aria-query@^4.2.2: version "4.2.2" resolved "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz" @@ -1612,6 +3620,11 @@ chokidar@^3.5.2: optionalDependencies: fsevents "~2.3.2" +classnames@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" + integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== + clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" @@ -1645,6 +3658,11 @@ client-only@0.0.1: resolved "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz" integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== +clsx@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" + integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== + color-convert@^1.9.0: version "1.9.3" resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" @@ -1873,6 +3891,11 @@ destroy@1.2.0: resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== +detect-node-es@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/detect-node-es/-/detect-node-es-1.1.0.tgz#163acdf643330caa0b4cd7c21e7ee7755d6fa493" + integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ== + dicer@0.2.5: version "0.2.5" resolved "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz" @@ -2061,101 +4084,201 @@ esbuild-android-64@0.14.54: resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz#505f41832884313bbaffb27704b8bcaa2d8616be" integrity sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ== +esbuild-android-64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz#20a7ae1416c8eaade917fb2453c1259302c637a5" + integrity sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA== + esbuild-android-arm64@0.14.54: version "0.14.54" resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz#8ce69d7caba49646e009968fe5754a21a9871771" integrity sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg== +esbuild-android-arm64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz#9cc0ec60581d6ad267568f29cf4895ffdd9f2f04" + integrity sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ== + esbuild-darwin-64@0.14.54: version "0.14.54" resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz#24ba67b9a8cb890a3c08d9018f887cc221cdda25" integrity sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug== +esbuild-darwin-64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz#428e1730ea819d500808f220fbc5207aea6d4410" + integrity sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg== + esbuild-darwin-arm64@0.14.54: version "0.14.54" resolved "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz" integrity sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw== +esbuild-darwin-arm64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz#b6dfc7799115a2917f35970bfbc93ae50256b337" + integrity sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA== + esbuild-freebsd-64@0.14.54: version "0.14.54" resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz#09250f997a56ed4650f3e1979c905ffc40bbe94d" integrity sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg== +esbuild-freebsd-64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz#4e190d9c2d1e67164619ae30a438be87d5eedaf2" + integrity sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA== + esbuild-freebsd-arm64@0.14.54: version "0.14.54" resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz#bafb46ed04fc5f97cbdb016d86947a79579f8e48" integrity sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q== +esbuild-freebsd-arm64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz#18a4c0344ee23bd5a6d06d18c76e2fd6d3f91635" + integrity sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA== + esbuild-linux-32@0.14.54: version "0.14.54" resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz#e2a8c4a8efdc355405325033fcebeb941f781fe5" integrity sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw== +esbuild-linux-32@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz#9a329731ee079b12262b793fb84eea762e82e0ce" + integrity sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg== + esbuild-linux-64@0.14.54: version "0.14.54" resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz#de5fdba1c95666cf72369f52b40b03be71226652" integrity sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg== +esbuild-linux-64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz#532738075397b994467b514e524aeb520c191b6c" + integrity sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw== + esbuild-linux-arm64@0.14.54: version "0.14.54" resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz#dae4cd42ae9787468b6a5c158da4c84e83b0ce8b" integrity sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig== +esbuild-linux-arm64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz#5372e7993ac2da8f06b2ba313710d722b7a86e5d" + integrity sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug== + esbuild-linux-arm@0.14.54: version "0.14.54" resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz#a2c1dff6d0f21dbe8fc6998a122675533ddfcd59" integrity sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw== +esbuild-linux-arm@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz#e734aaf259a2e3d109d4886c9e81ec0f2fd9a9cc" + integrity sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA== + esbuild-linux-mips64le@0.14.54: version "0.14.54" resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz#d9918e9e4cb972f8d6dae8e8655bf9ee131eda34" integrity sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw== +esbuild-linux-mips64le@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz#c0487c14a9371a84eb08fab0e1d7b045a77105eb" + integrity sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ== + esbuild-linux-ppc64le@0.14.54: version "0.14.54" resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz#3f9a0f6d41073fb1a640680845c7de52995f137e" integrity sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ== +esbuild-linux-ppc64le@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz#af048ad94eed0ce32f6d5a873f7abe9115012507" + integrity sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w== + esbuild-linux-riscv64@0.14.54: version "0.14.54" resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz#618853c028178a61837bc799d2013d4695e451c8" integrity sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg== +esbuild-linux-riscv64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz#423ed4e5927bd77f842bd566972178f424d455e6" + integrity sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg== + esbuild-linux-s390x@0.14.54: version "0.14.54" resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz#d1885c4c5a76bbb5a0fe182e2c8c60eb9e29f2a6" integrity sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA== +esbuild-linux-s390x@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz#21d21eaa962a183bfb76312e5a01cc5ae48ce8eb" + integrity sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ== + esbuild-netbsd-64@0.14.54: version "0.14.54" resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz#69ae917a2ff241b7df1dbf22baf04bd330349e81" integrity sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w== +esbuild-netbsd-64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz#ae75682f60d08560b1fe9482bfe0173e5110b998" + integrity sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg== + esbuild-openbsd-64@0.14.54: version "0.14.54" resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz#db4c8495287a350a6790de22edea247a57c5d47b" integrity sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw== +esbuild-openbsd-64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz#79591a90aa3b03e4863f93beec0d2bab2853d0a8" + integrity sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ== + esbuild-sunos-64@0.14.54: version "0.14.54" resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz#54287ee3da73d3844b721c21bc80c1dc7e1bf7da" integrity sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw== +esbuild-sunos-64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz#fd528aa5da5374b7e1e93d36ef9b07c3dfed2971" + integrity sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw== + esbuild-windows-32@0.14.54: version "0.14.54" resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz#f8aaf9a5667630b40f0fb3aa37bf01bbd340ce31" integrity sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w== +esbuild-windows-32@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz#0e92b66ecdf5435a76813c4bc5ccda0696f4efc3" + integrity sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ== + esbuild-windows-64@0.14.54: version "0.14.54" resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz#bf54b51bd3e9b0f1886ffdb224a4176031ea0af4" integrity sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ== +esbuild-windows-64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz#0fc761d785414284fc408e7914226d33f82420d0" + integrity sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw== + esbuild-windows-arm64@0.14.54: version "0.14.54" resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz#937d15675a15e4b0e4fafdbaa3a01a776a2be982" integrity sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg== +esbuild-windows-arm64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz#5b5bdc56d341d0922ee94965c89ee120a6a86eb7" + integrity sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ== + esbuild@^0.14.27, esbuild@^0.14.47: version "0.14.54" resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.14.54.tgz" @@ -2183,6 +4306,34 @@ esbuild@^0.14.27, esbuild@^0.14.47: esbuild-windows-64 "0.14.54" esbuild-windows-arm64 "0.14.54" +esbuild@^0.15.9: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.15.18.tgz#ea894adaf3fbc036d32320a00d4d6e4978a2f36d" + integrity sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q== + optionalDependencies: + "@esbuild/android-arm" "0.15.18" + "@esbuild/linux-loong64" "0.15.18" + esbuild-android-64 "0.15.18" + esbuild-android-arm64 "0.15.18" + esbuild-darwin-64 "0.15.18" + esbuild-darwin-arm64 "0.15.18" + esbuild-freebsd-64 "0.15.18" + esbuild-freebsd-arm64 "0.15.18" + esbuild-linux-32 "0.15.18" + esbuild-linux-64 "0.15.18" + esbuild-linux-arm "0.15.18" + esbuild-linux-arm64 "0.15.18" + esbuild-linux-mips64le "0.15.18" + esbuild-linux-ppc64le "0.15.18" + esbuild-linux-riscv64 "0.15.18" + esbuild-linux-s390x "0.15.18" + esbuild-netbsd-64 "0.15.18" + esbuild-openbsd-64 "0.15.18" + esbuild-sunos-64 "0.15.18" + esbuild-windows-32 "0.15.18" + esbuild-windows-64 "0.15.18" + esbuild-windows-arm64 "0.15.18" + escalade@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" @@ -2891,6 +5042,11 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@ has "^1.0.3" has-symbols "^1.0.3" +get-nonce@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-nonce/-/get-nonce-1.0.1.tgz#fdf3f0278073820d2ce9426c18f07481b1e0cdf3" + integrity sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q== + get-stream@^6.0.0: version "6.0.1" resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" @@ -3163,6 +5319,23 @@ internal-slot@^1.0.3: has "^1.0.3" side-channel "^1.0.4" +intl-messageformat@^10.1.0: + version "10.5.8" + resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-10.5.8.tgz#7184da425f360a53a5483a6194e16d666b011fc0" + integrity sha512-NRf0jpBWV0vd671G5b06wNofAN8tp7WWDogMZyaU8GUAsmbouyvgwmFJI7zLjfAMpm3zK+vSwRP3jzaoIcMbaA== + dependencies: + "@formatjs/ecma402-abstract" "1.18.0" + "@formatjs/fast-memoize" "2.2.0" + "@formatjs/icu-messageformat-parser" "2.7.3" + tslib "^2.4.0" + +invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + ipaddr.js@1.9.1: version "1.9.1" resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" @@ -3413,6 +5586,13 @@ language-tags@^1.0.5: dependencies: language-subtag-registry "~0.3.2" +"legacy-swc-helpers@npm:@swc/helpers@=0.4.14": + version "0.4.14" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.14.tgz#1352ac6d95e3617ccb7c1498ff019654f1e12a74" + integrity sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw== + dependencies: + tslib "^2.4.0" + levn@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" @@ -3537,7 +5717,7 @@ log-update@^4.0.0: slice-ansi "^4.0.0" wrap-ansi "^6.2.0" -loose-envify@^1.1.0, loose-envify@^1.4.0: +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -3735,6 +5915,11 @@ nanoid@^3.3.4: resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz" integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== +nanoid@^3.3.6: + version "3.3.7" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" @@ -4157,6 +6342,15 @@ postcss@^8.4.13: picocolors "^1.0.0" source-map-js "^1.0.2" +postcss@^8.4.18: + version "8.4.31" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" + integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== + dependencies: + nanoid "^3.3.6" + picocolors "^1.0.0" + source-map-js "^1.0.2" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" @@ -4260,6 +6454,48 @@ raw-body@2.5.1: iconv-lite "0.4.24" unpipe "1.0.0" +react-aria@^3.25.0: + version "3.30.0" + resolved "https://registry.yarnpkg.com/react-aria/-/react-aria-3.30.0.tgz#dd53d2103050e7279ec8f3faacce5ae8521f61ce" + integrity sha512-ULMlmH68/jXzkDaMjuM9O8dKCxnAYviW4E5sywfLX4J6mC6eGsQzoqtwWeQgr1M9SJqLfgKaVoDP1dLvb4XzEA== + dependencies: + "@react-aria/breadcrumbs" "^3.5.8" + "@react-aria/button" "^3.9.0" + "@react-aria/calendar" "^3.5.3" + "@react-aria/checkbox" "^3.12.0" + "@react-aria/combobox" "^3.8.0" + "@react-aria/datepicker" "^3.9.0" + "@react-aria/dialog" "^3.5.8" + "@react-aria/dnd" "^3.5.0" + "@react-aria/focus" "^3.15.0" + "@react-aria/gridlist" "^3.7.2" + "@react-aria/i18n" "^3.9.0" + "@react-aria/interactions" "^3.20.0" + "@react-aria/label" "^3.7.3" + "@react-aria/link" "^3.6.2" + "@react-aria/listbox" "^3.11.2" + "@react-aria/menu" "^3.11.2" + "@react-aria/meter" "^3.4.8" + "@react-aria/numberfield" "^3.10.0" + "@react-aria/overlays" "^3.19.0" + "@react-aria/progress" "^3.4.8" + "@react-aria/radio" "^3.9.0" + "@react-aria/searchfield" "^3.6.0" + "@react-aria/select" "^3.14.0" + "@react-aria/selection" "^3.17.2" + "@react-aria/separator" "^3.3.8" + "@react-aria/slider" "^3.7.3" + "@react-aria/ssr" "^3.9.0" + "@react-aria/switch" "^3.5.7" + "@react-aria/table" "^3.13.2" + "@react-aria/tabs" "^3.8.2" + "@react-aria/tag" "^3.3.0" + "@react-aria/textfield" "^3.13.0" + "@react-aria/tooltip" "^3.6.5" + "@react-aria/utils" "^3.22.0" + "@react-aria/visually-hidden" "^3.8.7" + "@react-types/shared" "^3.22.0" + react-color@^2.19.3: version "2.19.3" resolved "https://registry.npmjs.org/react-color/-/react-color-2.19.3.tgz" @@ -4319,6 +6555,25 @@ react-refresh@^0.14.0: resolved "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz" integrity sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ== +react-remove-scroll-bar@^2.3.3: + version "2.3.4" + resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz#53e272d7a5cb8242990c7f144c44d8bd8ab5afd9" + integrity sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A== + dependencies: + react-style-singleton "^2.2.1" + tslib "^2.0.0" + +react-remove-scroll@2.5.5: + version "2.5.5" + resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz#1e31a1260df08887a8a0e46d09271b52b3a37e77" + integrity sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw== + dependencies: + react-remove-scroll-bar "^2.3.3" + react-style-singleton "^2.2.1" + tslib "^2.1.0" + use-callback-ref "^1.3.0" + use-sidecar "^1.1.2" + react-router-dom@^6.3.0: version "6.4.1" resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.4.1.tgz" @@ -4334,6 +6589,44 @@ react-router@6.4.1: dependencies: "@remix-run/router" "1.0.1" +react-stately@^3.23.0: + version "3.28.0" + resolved "https://registry.yarnpkg.com/react-stately/-/react-stately-3.28.0.tgz#f2831e50b70b0dcec7e3d7e3787f9dc1df42d9c3" + integrity sha512-owEHRGS1zRMwtiR/jeXUjUWyqk8oe53wNtedMvg9+8+NNhDKL4/DXHcIp2A13q08v09xYWgVPtnu8fsF53x2PQ== + dependencies: + "@react-stately/calendar" "^3.4.2" + "@react-stately/checkbox" "^3.6.0" + "@react-stately/collections" "^3.10.3" + "@react-stately/combobox" "^3.8.0" + "@react-stately/data" "^3.11.0" + "@react-stately/datepicker" "^3.9.0" + "@react-stately/dnd" "^3.2.6" + "@react-stately/form" "^3.0.0" + "@react-stately/list" "^3.10.1" + "@react-stately/menu" "^3.5.7" + "@react-stately/numberfield" "^3.7.0" + "@react-stately/overlays" "^3.6.4" + "@react-stately/radio" "^3.10.0" + "@react-stately/searchfield" "^3.5.0" + "@react-stately/select" "^3.6.0" + "@react-stately/selection" "^3.14.1" + "@react-stately/slider" "^3.4.5" + "@react-stately/table" "^3.11.3" + "@react-stately/tabs" "^3.6.2" + "@react-stately/toggle" "^3.7.0" + "@react-stately/tooltip" "^3.4.6" + "@react-stately/tree" "^3.7.4" + "@react-types/shared" "^3.22.0" + +react-style-singleton@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.2.1.tgz#f99e420492b2d8f34d38308ff660b60d0b1205b4" + integrity sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g== + dependencies: + get-nonce "^1.0.0" + invariant "^2.2.4" + tslib "^2.0.0" + react@17.0.2, react@^17.0.2: version "17.0.2" resolved "https://registry.npmjs.org/react/-/react-17.0.2.tgz" @@ -4391,6 +6684,11 @@ regenerator-runtime@^0.13.4: resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz" integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== +regenerator-runtime@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" + integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== + regexp.prototype.flags@^1.4.1, regexp.prototype.flags@^1.4.3: version "1.4.3" resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz" @@ -4465,7 +6763,7 @@ rimraf@^3.0.2: optionalDependencies: fsevents "~2.3.2" -rollup@^2.59.0, rollup@^2.75.6: +rollup@^2.59.0, rollup@^2.75.6, rollup@^2.79.1: version "2.79.1" resolved "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz" integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== @@ -4974,6 +7272,11 @@ tslib@^1.8.1: resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@^2.0.0: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0: version "2.4.0" resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" @@ -5167,6 +7470,21 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +use-callback-ref@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.0.tgz#772199899b9c9a50526fedc4993fc7fa1f7e32d5" + integrity sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w== + dependencies: + tslib "^2.0.0" + +use-sidecar@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.1.2.tgz#2f43126ba2d7d7e117aa5855e5d8f0276dfe73c2" + integrity sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw== + dependencies: + detect-node-es "^1.1.0" + tslib "^2.0.0" + use-sync-external-store@1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz" @@ -5223,6 +7541,18 @@ vite@3.0.3: optionalDependencies: fsevents "~2.3.2" +vite@3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/vite/-/vite-3.2.7.tgz#35a62826bd4d6b778ae5db8766d023bcd4e7bef3" + integrity sha512-29pdXjk49xAP0QBr0xXqu2s5jiQIXNvE/xwd0vUizYT2Hzqe4BksNNoWllFVXJf4eLZ+UlVQmXfB4lWrc+t18g== + dependencies: + esbuild "^0.15.9" + postcss "^8.4.18" + resolve "^1.22.1" + rollup "^2.79.1" + optionalDependencies: + fsevents "~2.3.2" + vite@^2.9.13: version "2.9.15" resolved "https://registry.npmjs.org/vite/-/vite-2.9.15.tgz" @@ -5280,6 +7610,11 @@ websocket@^1.0.34: utf-8-validate "^5.0.2" yaeti "^0.0.6" +what-input@^5.2.11: + version "5.2.12" + resolved "https://registry.yarnpkg.com/what-input/-/what-input-5.2.12.tgz#6eb5b5d39ebff4e2273df8bf69d8d2fc9a6e060a" + integrity sha512-3yrSa7nGSXGJS6wZeSkO6VNm95pB1mZ9i3wFzC1hhY7mn4/afue/MvXz04OXNdBC8bfo4AB4RRd3Dem9jXM58Q== + whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" From 8a0b0a19df8674580277d64318c299664265a32d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Nov 2023 08:45:17 +0000 Subject: [PATCH 8/9] Bump vite from 3.0.3 to 3.2.7 in /examples/breakout-rooms (#228) Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 3.0.3 to 3.2.7. - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/v3.2.7/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v3.2.7/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-type: direct:development ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- examples/breakout-rooms/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/breakout-rooms/package.json b/examples/breakout-rooms/package.json index a6e671428..ae848ee47 100644 --- a/examples/breakout-rooms/package.json +++ b/examples/breakout-rooms/package.json @@ -33,6 +33,6 @@ "@types/react-dom": "^18.0.8", "@vitejs/plugin-react": "^2.2.0", "typescript": "4.9.5", - "vite": "3.0.3" + "vite": "3.2.7" } } From d567227bb08fa8bb85b24327cb0aa073875a9d30 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Nov 2023 09:46:15 +0100 Subject: [PATCH 9/9] Bump vite from 2.9.13 to 2.9.16 in /examples/asset-search (#160) Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 2.9.13 to 2.9.16. - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/v2.9.16/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v2.9.16/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-type: direct:development ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- examples/asset-search/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/asset-search/package.json b/examples/asset-search/package.json index 6f04a88f5..c4a4967d4 100644 --- a/examples/asset-search/package.json +++ b/examples/asset-search/package.json @@ -14,7 +14,7 @@ "@types/react-dom": "^17.0.10", "@vitejs/plugin-react": "^1.0.7", "typescript": "^4.4.4", - "vite": "^2.9.13" + "vite": "^2.9.16" }, "dependencies": { "react": "^17.0.2",