From a6058d8e0ab301b786de39a42423246e564d4345 Mon Sep 17 00:00:00 2001 From: Frederico Estrela Date: Wed, 29 Nov 2023 12:27:35 +0100 Subject: [PATCH] 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"