From 9f6c4d724987f2f5a1d1ce5ab1af4bfc6afe626d Mon Sep 17 00:00:00 2001
From: anujsb <141896390+anujsb@users.noreply.github.com>
Date: Sun, 23 Feb 2025 17:32:31 +0530
Subject: [PATCH 01/19] Fix : LiveKit call redesign - Bottom bar
---
.env.example | 30 ----
app/custom/CustomControlBar.tsx | 123 +++++++++++++
app/rooms/[roomName]/PageClientImpl.tsx | 228 +++++++++++++++---------
package.json | 1 +
pnpm-lock.yaml | 105 +++++++----
styles/CustomControlBar.css | 186 +++++++++++++++++++
6 files changed, 524 insertions(+), 149 deletions(-)
delete mode 100644 .env.example
create mode 100644 app/custom/CustomControlBar.tsx
create mode 100644 styles/CustomControlBar.css
diff --git a/.env.example b/.env.example
deleted file mode 100644
index f961fa04..00000000
--- a/.env.example
+++ /dev/null
@@ -1,30 +0,0 @@
-# 1. Copy this file and rename it to .env.local
-# 2. Update the enviroment variables below.
-
-# REQUIRED SETTINGS
-# #################
-# If you are using LiveKit Cloud, the API key and secret can be generated from the Cloud Dashboard.
-LIVEKIT_API_KEY=
-LIVEKIT_API_SECRET=
-# URL pointing to the LiveKit server. (example: `wss://my-livekit-project.livekit.cloud`)
-LIVEKIT_URL=
-
-
-# OPTIONAL SETTINGS
-# #################
-# Recording
-# S3_KEY_ID=
-# S3_KEY_SECRET=
-# S3_ENDPOINT=
-# S3_BUCKET=
-# S3_REGION=
-
-# PUBLIC
-# Uncomment settings menu when using a LiveKit Cloud, it'll enable Krisp noise filters.
-# NEXT_PUBLIC_SHOW_SETTINGS_MENU=true
-# NEXT_PUBLIC_LK_RECORD_ENDPOINT=/api/record
-
-# Optional, to pipe logs to datadog
-# NEXT_PUBLIC_DATADOG_CLIENT_TOKEN=client-token
-# NEXT_PUBLIC_DATADOG_SITE=datadog-site
-
diff --git a/app/custom/CustomControlBar.tsx b/app/custom/CustomControlBar.tsx
new file mode 100644
index 00000000..4269dba7
--- /dev/null
+++ b/app/custom/CustomControlBar.tsx
@@ -0,0 +1,123 @@
+// // import React from 'react';
+// // import { TrackToggle, DisconnectButton } from '@livekit/components-react';
+// // import SettingsMenu from '@/lib/SettingsMenu';
+// // import { MaterialSymbol } from 'material-symbols';
+// // import '../../styles/CustomControlBar.css';
+
+
+// // const CustomControlBar = ({ roomName, room }) => {
+// // const [recording, setRecording] = React.useState(false);
+// // const [showSettings, setShowSettings] = React.useState(false);
+
+// // React.useEffect(() => {
+// // if (room) {
+// // room.on('recordedStatusChanged', () => {
+// // setRecording(room.isRecording);
+// // });
+// // return () => {
+// // room.off('recordedStatusChanged');
+// // };
+// // }
+// // }, [room]);
+
+// // const handleCopyLink = () => {
+// // navigator.clipboard.writeText(window.location.href);
+// // };
+
+// // return (
+// //
+// //
+// //
+// // {roomName}
+// //
+// //
+// //
+// //
+// //
+// //
+// // {recording && (
+// //
+// // {/* */}
+// //
+// // )}
+// //
+// //
+// //
+// //
+// //
+// // {showSettings && setShowSettings(false)} />}
+// //
+// //
+// // );
+// // };
+
+// // export default CustomControlBar;
+
+
+// import { TrackToggle, DisconnectButton, RoomAudioRenderer, GridLayout } from '@livekit/components-react';
+// import { useState, useEffect } from 'react';
+
+// function CustomControlBar({ room, roomName }) {
+// const [recording, setRecording] = useState(false);
+
+// // Update recording status
+// useEffect(() => {
+// if (room) {
+// const updateRecordingStatus = () => setRecording(room.isRecording);
+// room.on(RoomEvent.RecordingStarted, updateRecordingStatus);
+// room.on(RoomEvent.RecordingStopped, updateRecordingStatus);
+// return () => {
+// room.off(RoomEvent.RecordingStarted, updateRecordingStatus);
+// room.off(RoomEvent.RecordingStopped, updateRecordingStatus);
+// };
+// }
+// }, [room]);
+
+// // Copy room link to clipboard
+// const handleCopyLink = () => {
+// navigator.clipboard.writeText(window.location.href)
+// .then(() => alert('Link copied to clipboard!'))
+// .catch((err) => console.error('Failed to copy link:', err));
+// };
+
+// return (
+//
+// {/* Left: Room Name Box */}
+//
+// {roomName}
+//
+//
+
+// {/* Center: Control Buttons */}
+//
+//
+//
+// {recording && (
+//
+// radio_button_checked
+//
+// )}
+//
+//
+// call_end
+//
+//
+
+// {/* Right: Settings Button */}
+//
+// {SHOW_SETTINGS_MENU && (
+//
+// )}
+//
+//
+// );
+// }
\ No newline at end of file
diff --git a/app/rooms/[roomName]/PageClientImpl.tsx b/app/rooms/[roomName]/PageClientImpl.tsx
index daf17f96..063d7a00 100644
--- a/app/rooms/[roomName]/PageClientImpl.tsx
+++ b/app/rooms/[roomName]/PageClientImpl.tsx
@@ -1,36 +1,38 @@
+
'use client';
import { decodePassphrase } from '@/lib/client-utils';
import Transcript from '@/lib/Transcript';
-import { RecordingIndicator } from '@/lib/RecordingIndicator';
import { SettingsMenu } from '@/lib/SettingsMenu';
import { ConnectionDetails } from '@/lib/types';
import {
- formatChatMessageLinks,
- LiveKitRoom,
LocalUserChoices,
PreJoin,
- VideoConference,
+ LiveKitRoom,
+ TrackToggle,
+ DisconnectButton,
+ RoomAudioRenderer,
+ GridLayout,
+ useTracks,
+ TrackReferenceOrPlaceholder,
} from '@livekit/components-react';
import {
ExternalE2EEKeyProvider,
RoomOptions,
RoomEvent,
- TranscriptionSegment,
VideoCodec,
VideoPresets,
Room,
DeviceUnsupportedError,
RoomConnectOptions,
+ Track,
} from 'livekit-client';
-import { setLazyProp } from 'next/dist/server/api-utils';
import { useRouter } from 'next/navigation';
-import React from 'react';
-
+import React, { useEffect, useRef, useState } from 'react';
+import '../../../styles/CustomControlBar.css';
const CONN_DETAILS_ENDPOINT =
process.env.NEXT_PUBLIC_CONN_DETAILS_ENDPOINT ?? '/api/connection-details';
const SHOW_SETTINGS_MENU = process.env.NEXT_PUBLIC_SHOW_SETTINGS_MENU == 'true';
-console.log('SHOW_SETTINGS_MENU', SHOW_SETTINGS_MENU);
export function PageClientImpl(props: {
roomName: string;
@@ -38,9 +40,7 @@ export function PageClientImpl(props: {
hq: boolean;
codec: VideoCodec;
}) {
- const [preJoinChoices, setPreJoinChoices] = React.useState(
- undefined,
- );
+ const [preJoinChoices, setPreJoinChoices] = React.useState(undefined);
const preJoinDefaults = React.useMemo(() => {
return {
username: '',
@@ -48,9 +48,7 @@ export function PageClientImpl(props: {
audioEnabled: true,
};
}, []);
- const [connectionDetails, setConnectionDetails] = React.useState(
- undefined,
- );
+ const [connectionDetails, setConnectionDetails] = React.useState(undefined);
const handlePreJoinSubmit = React.useCallback(async (values: LocalUserChoices) => {
setPreJoinChoices(values);
@@ -63,7 +61,8 @@ export function PageClientImpl(props: {
const connectionDetailsResp = await fetch(url.toString());
const connectionDetailsData = await connectionDetailsResp.json();
setConnectionDetails(connectionDetailsData);
- }, []);
+ }, [props.roomName, props.region]);
+
const handlePreJoinError = React.useCallback((e: any) => console.error(e), []);
return (
@@ -90,14 +89,10 @@ export function PageClientImpl(props: {
function VideoConferenceComponent(props: {
userChoices: LocalUserChoices;
connectionDetails: ConnectionDetails;
- options: {
- hq: boolean;
- codec: VideoCodec;
- };
+ options: { hq: boolean; codec: VideoCodec };
}) {
const e2eePassphrase =
typeof window !== 'undefined' && decodePassphrase(location.hash.substring(1));
-
const worker =
typeof window !== 'undefined' &&
e2eePassphrase &&
@@ -129,17 +124,12 @@ function VideoConferenceComponent(props: {
adaptiveStream: { pixelDensity: 'screen' },
dynacast: true,
e2ee: e2eeEnabled
- ? {
- keyProvider,
- worker,
- }
+ ? { keyProvider, worker }
: undefined,
};
- // @ts-ignore
- setLogLevel('debug', 'lk-e2ee');
}, [props.userChoices, props.options.hq, props.options.codec]);
- const room = React.useMemo(() => new Room(roomOptions), []);
+ const room = React.useMemo(() => new Room(roomOptions), [roomOptions]);
if (e2eeEnabled) {
keyProvider.setKey(decodePassphrase(e2eePassphrase));
@@ -152,65 +142,143 @@ function VideoConferenceComponent(props: {
}
});
}
+
const connectOptions = React.useMemo((): RoomConnectOptions => {
- return {
- autoSubscribe: true,
- };
+ return { autoSubscribe: true };
}, []);
- const [transcriptions, setTranscriptions] = React.useState<{
- [id: string]: TranscriptionSegment;
- }>({});
- const [latestText, setLatestText] = React.useState('');
- React.useEffect(() => {
- if (!room) {
- return;
+ const router = useRouter();
+ const handleOnLeave = React.useCallback(() => router.push('/'), [router]);
+
+ const tracks = useTracks(
+ [{ source: Track.Source.Camera, withPlaceholder: true }],
+ { room }
+ );
+
+ return (
+
+ {tracks.length > 0 ? (
+
+ {(trackRef: TrackReferenceOrPlaceholder) => (
+
+
+
+ )}
+
+ ) : (
+
+
No participants with video yet
+
+ )}
+
+
+
+
+ );
+}
+
+function VideoTrack({ ref: trackRef }: { ref: TrackReferenceOrPlaceholder }) {
+ const videoRef = useRef(null);
+
+ useEffect(() => {
+ const videoEl = videoRef.current;
+ const track = trackRef.publication?.track;
+
+ if (videoEl && track) {
+ track.attach(videoEl);
+ return () => {
+ track.detach(videoEl);
+ };
+ }
+ }, [trackRef.publication?.track]);
+
+ return (
+
+ );
+}
+
+interface CustomControlBarProps {
+ room: Room;
+ roomName: string;
+}
+interface CustomControlBarProps {
+ room: Room;
+ roomName: string;
+}
+
+function CustomControlBar({ room, roomName }: CustomControlBarProps) {
+ const [recording, setRecording] = useState(false);
+
+ useEffect(() => {
+ if (room) {
+ const updateRecordingStatus = () => setRecording(room.isRecording);
+ room.on(RoomEvent.LocalTrackPublished, updateRecordingStatus);
+ room.on(RoomEvent.LocalTrackUnpublished, updateRecordingStatus);
+ return () => {
+ room.off(RoomEvent.LocalTrackPublished, updateRecordingStatus);
+ room.off(RoomEvent.LocalTrackUnpublished, updateRecordingStatus);
+ };
}
- const updateTranscriptions = (
- segments: TranscriptionSegment[],
- participant: any,
- publication: any,
- ) => {
- if (segments.length > 0) {
- setLatestText(segments[0].text);
- }
- // setTranscriptions((prev) => {
- // const newTranscriptions = { ...prev };
- // for (const segment of segments) {
- // newTranscriptions[segment.id] = segment;
- // }
- // console.log('===>', newTranscriptions);
- // return newTranscriptions;
- // });
- };
- room.on(RoomEvent.TranscriptionReceived, updateTranscriptions);
- return () => {
- room.off(RoomEvent.TranscriptionReceived, updateTranscriptions);
- };
}, [room]);
- const router = useRouter();
- const handleOnLeave = React.useCallback(() => router.push('/'), [router]);
+ const handleCopyLink = () => {
+ navigator.clipboard.writeText(window.location.href)
+ .then(() => alert('Link copied to clipboard!'))
+ .catch((err) => console.error('Failed to copy link:', err));
+ };
return (
- <>
-
-
- {/* */}
-
-
-
- >
+
+ {/* Left: Room Name Box */}
+
+ {roomName}
+
+
+
+ {/* Center: Control Buttons */}
+
+
+
+ {recording ? (
+
+ radio_button_checked
+
+ ) : (
+
+ radio_button_checked
+
+ )}
+
+
+ call_end
+
+
+
+ {/* Right: Settings Button */}
+
+ {SHOW_SETTINGS_MENU && (
+
+ )}
+
+
);
}
+
diff --git a/package.json b/package.json
index 13413d7e..aaf098e8 100644
--- a/package.json
+++ b/package.json
@@ -15,6 +15,7 @@
"@livekit/krisp-noise-filter": "^0.2.8",
"livekit-client": "2.8.1",
"livekit-server-sdk": "2.9.7",
+ "material-symbols": "^0.28.2",
"next": "14.2.12",
"react": "18.3.1",
"react-dom": "18.3.1",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 7b2137e1..f0f82629 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -13,19 +13,22 @@ importers:
version: 5.26.0
'@livekit/components-react':
specifier: 2.6.0
- version: 2.6.0(@livekit/protocol@1.20.1)(livekit-client@2.5.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tslib@2.7.0)
+ version: 2.6.0(@livekit/protocol@1.34.0)(livekit-client@2.8.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tslib@2.8.1)
'@livekit/components-styles':
specifier: 1.1.2
version: 1.1.2
'@livekit/krisp-noise-filter':
specifier: ^0.2.8
- version: 0.2.8(livekit-client@2.5.2)
+ version: 0.2.8(livekit-client@2.8.1)
livekit-client:
- specifier: 2.5.2
- version: 2.5.2
+ specifier: 2.8.1
+ version: 2.8.1
livekit-server-sdk:
- specifier: 2.6.2
- version: 2.6.2
+ specifier: 2.9.7
+ version: 2.9.7
+ material-symbols:
+ specifier: ^0.28.2
+ version: 0.28.2
next:
specifier: 14.2.12
version: 14.2.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -43,8 +46,8 @@ importers:
specifier: 20.16.3
version: 20.16.3
'@types/react':
- specifier: 18.3.5
- version: 18.3.5
+ specifier: 18.3.8
+ version: 18.3.8
'@types/react-dom':
specifier: 18.3.0
version: 18.3.0
@@ -172,8 +175,14 @@ packages:
peerDependencies:
livekit-client: ^2.0.8
- '@livekit/protocol@1.20.1':
- resolution: {integrity: sha512-TgyuwOx+XJn9inEYT9OKfFNs9YIPS4BdLa4pF5FDf9MhWRnahKwPe7jxr/+sVdWxYbZmy9hRrH58jSAFu0ONHw==}
+ '@livekit/mutex@1.1.1':
+ resolution: {integrity: sha512-EsshAucklmpuUAfkABPxJNhzj9v2sG7JuzFDL4ML1oJQSV14sqrpTYnsaOudMAw9yOaW53NU3QQTlUQoRs4czw==}
+
+ '@livekit/protocol@1.30.0':
+ resolution: {integrity: sha512-SDI9ShVKj8N3oOSinr8inaxD3FXgmgoJlqN35uU/Yx1sdoDeQbzAuBFox7bYjM+VhnZ1V22ivIDjAsKr00H+XQ==}
+
+ '@livekit/protocol@1.34.0':
+ resolution: {integrity: sha512-bU7pCLAMRVTVZb1KSxA46q55bhOc4iATrY/gccy2/oX1D57tiZEI+8wGRWHeDwBb0UwnABu6JXzC4tTFkdsaOg==}
'@next/env@14.2.12':
resolution: {integrity: sha512-3fP29GIetdwVIfIRyLKM7KrvJaqepv+6pVodEbx0P5CaMLYBtx+7eEg8JYO5L9sveJO87z9eCReceZLi0hxO1Q==}
@@ -282,8 +291,8 @@ packages:
'@types/react-dom@18.3.0':
resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==}
- '@types/react@18.3.5':
- resolution: {integrity: sha512-WeqMfGJLGuLCqHGYRGHxnKrXcTitc6L/nBUWfWPcTarG3t9PsquqUMuVeXZeca+mglY4Vo5GZjCi0A3Or2lnxA==}
+ '@types/react@18.3.8':
+ resolution: {integrity: sha512-syBUrW3/XpnW4WJ41Pft+I+aPoDVbrBVQGEnbD7NijDGlVC+8gV/XKRY+7vMDlfPpbwYt0l1vd/Sj8bJGMbs9Q==}
'@typescript-eslint/parser@7.2.0':
resolution: {integrity: sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==}
@@ -1101,12 +1110,12 @@ packages:
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
engines: {node: '>= 0.8.0'}
- livekit-client@2.5.2:
- resolution: {integrity: sha512-rzWFH02UznHxpnbj+WEEoHxL1ZSo9BdFK+7ltSZWniTt2llnNckdqeXNsjkBH6k+C9agHTF4XikmxKcpWa4YrQ==}
+ livekit-client@2.8.1:
+ resolution: {integrity: sha512-HPv9iHNrnBANI9ucK7CKZspx0sBZK3hjR2EbwaV08+J3RM9+tNGL2ob2n76nxJLEZG7LzdWlLZdbr4fQBP6Hkg==}
- livekit-server-sdk@2.6.2:
- resolution: {integrity: sha512-3fFzHu7sAynUaUFTCKtRP9lgQCU0Qe/x7XA99GpT1ro7fTy1ZVzaWq34WcXEyUGBBMFxG19LlSIAQBcGZVStWQ==}
- engines: {node: '>=19'}
+ livekit-server-sdk@2.9.7:
+ resolution: {integrity: sha512-uIkFOaqBCJnVgYOidZdanPWQH5G0LMxe0+Qp5zbx7MZCkJ7lGiju//yonfEvFofriJBKACjMq/KQHBex96QpeA==}
+ engines: {node: '>=18'}
loader-runner@4.3.0:
resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==}
@@ -1137,6 +1146,9 @@ packages:
resolution: {integrity: sha512-2L3MIgJynYrZ3TYMriLDLWocz15okFakV6J12HXvMXDHui2x/zgChzg1u9mFFGbbGWE+GsLpQByt4POb9Or+uA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ material-symbols@0.28.2:
+ resolution: {integrity: sha512-JLK+Bgtfg5Dn9V2WYk6lSwmxciNNF2zmqc/V8MLmH0K9LttUhPCaauJzrS1Vw3mJPs/Tyfi/tszynNRX6nWQOA==}
+
merge-stream@2.0.0:
resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
@@ -1577,6 +1589,9 @@ packages:
tslib@2.7.0:
resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==}
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
type-check@0.4.0:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
engines: {node: '>= 0.8.0'}
@@ -1777,33 +1792,39 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.0
- '@livekit/components-core@0.11.5(@livekit/protocol@1.20.1)(livekit-client@2.5.2)(tslib@2.7.0)':
+ '@livekit/components-core@0.11.5(@livekit/protocol@1.34.0)(livekit-client@2.8.1)(tslib@2.8.1)':
dependencies:
'@floating-ui/dom': 1.6.11
- '@livekit/protocol': 1.20.1
- livekit-client: 2.5.2
+ '@livekit/protocol': 1.34.0
+ livekit-client: 2.8.1
loglevel: 1.9.1
rxjs: 7.8.1
- tslib: 2.7.0
+ tslib: 2.8.1
- '@livekit/components-react@2.6.0(@livekit/protocol@1.20.1)(livekit-client@2.5.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tslib@2.7.0)':
+ '@livekit/components-react@2.6.0(@livekit/protocol@1.34.0)(livekit-client@2.8.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tslib@2.8.1)':
dependencies:
- '@livekit/components-core': 0.11.5(@livekit/protocol@1.20.1)(livekit-client@2.5.2)(tslib@2.7.0)
- '@livekit/protocol': 1.20.1
+ '@livekit/components-core': 0.11.5(@livekit/protocol@1.34.0)(livekit-client@2.8.1)(tslib@2.8.1)
+ '@livekit/protocol': 1.34.0
clsx: 2.1.1
- livekit-client: 2.5.2
+ livekit-client: 2.8.1
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
- tslib: 2.7.0
+ tslib: 2.8.1
usehooks-ts: 3.1.0(react@18.3.1)
'@livekit/components-styles@1.1.2': {}
- '@livekit/krisp-noise-filter@0.2.8(livekit-client@2.5.2)':
+ '@livekit/krisp-noise-filter@0.2.8(livekit-client@2.8.1)':
dependencies:
- livekit-client: 2.5.2
+ livekit-client: 2.8.1
+
+ '@livekit/mutex@1.1.1': {}
- '@livekit/protocol@1.20.1':
+ '@livekit/protocol@1.30.0':
+ dependencies:
+ '@bufbuild/protobuf': 1.10.0
+
+ '@livekit/protocol@1.34.0':
dependencies:
'@bufbuild/protobuf': 1.10.0
@@ -1880,9 +1901,9 @@ snapshots:
'@types/react-dom@18.3.0':
dependencies:
- '@types/react': 18.3.5
+ '@types/react': 18.3.8
- '@types/react@18.3.5':
+ '@types/react@18.3.8':
dependencies:
'@types/prop-types': 15.7.12
csstype: 3.1.3
@@ -2403,7 +2424,7 @@ snapshots:
eslint: 9.9.1
eslint-import-resolver-node: 0.3.9
eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.2.0(eslint@9.9.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(eslint@9.9.1))(eslint@9.9.1)
- eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@9.9.1)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@9.9.1)
+ eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@9.9.1)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@9.9.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(eslint@9.9.1))(eslint@9.9.1))(eslint@9.9.1)
eslint-plugin-jsx-a11y: 6.9.0(eslint@9.9.1)
eslint-plugin-react: 7.35.0(eslint@9.9.1)
eslint-plugin-react-hooks: 4.6.2(eslint@9.9.1)
@@ -2434,7 +2455,7 @@ snapshots:
is-bun-module: 1.1.0
is-glob: 4.0.3
optionalDependencies:
- eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@9.9.1)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@9.9.1)
+ eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@9.9.1)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@9.9.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(eslint@9.9.1))(eslint@9.9.1))(eslint@9.9.1)
transitivePeerDependencies:
- '@typescript-eslint/parser'
- eslint-import-resolver-node
@@ -2452,7 +2473,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.2.0(eslint@9.9.1)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@9.9.1):
+ eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.2.0(eslint@9.9.1)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@9.9.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(eslint@9.9.1))(eslint@9.9.1))(eslint@9.9.1):
dependencies:
array-includes: 3.1.8
array.prototype.findlastindex: 1.2.5
@@ -2924,20 +2945,22 @@ snapshots:
prelude-ls: 1.2.1
type-check: 0.4.0
- livekit-client@2.5.2:
+ livekit-client@2.8.1:
dependencies:
- '@livekit/protocol': 1.20.1
+ '@livekit/mutex': 1.1.1
+ '@livekit/protocol': 1.30.0
events: 3.3.0
loglevel: 1.9.1
sdp-transform: 2.14.2
ts-debounce: 4.0.0
- tslib: 2.7.0
+ tslib: 2.8.1
typed-emitter: 2.1.0
webrtc-adapter: 9.0.1
- livekit-server-sdk@2.6.2:
+ livekit-server-sdk@2.9.7:
dependencies:
- '@livekit/protocol': 1.20.1
+ '@bufbuild/protobuf': 1.10.0
+ '@livekit/protocol': 1.34.0
camelcase-keys: 9.1.3
jose: 5.8.0
@@ -2961,6 +2984,8 @@ snapshots:
map-obj@5.0.0: {}
+ material-symbols@0.28.2: {}
+
merge-stream@2.0.0: {}
merge2@1.4.1: {}
@@ -3408,6 +3433,8 @@ snapshots:
tslib@2.7.0: {}
+ tslib@2.8.1: {}
+
type-check@0.4.0:
dependencies:
prelude-ls: 1.2.1
diff --git a/styles/CustomControlBar.css b/styles/CustomControlBar.css
new file mode 100644
index 00000000..bc719a90
--- /dev/null
+++ b/styles/CustomControlBar.css
@@ -0,0 +1,186 @@
+@import url('https://fonts.googleapis.com/icon?family=Material+Symbols+Outlined');
+@import url('https://fonts.googleapis.com/css2?family=Roboto&display=swap');
+
+.custom-control-bar {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 10px;
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ background: rgba(0, 0, 0, 0.8);
+ z-index: 1000;
+ backdrop-filter: blur(5px);
+}
+
+.room-name-box {
+ background: rgba(144, 155, 170, 0.1);
+ border-radius: 8px;
+ padding: 5px 10px;
+ display: flex;
+ align-items: center;
+ gap: 5px;
+}
+
+.room-name {
+ font-family: 'Roboto', sans-serif;
+ font-size: 14px;
+ color: #909baa;
+}
+
+.copy-link-button {
+ background: none;
+ border: none;
+ cursor: pointer;
+ margin-left: 5px;
+ padding: 0;
+}
+
+.copy-link-button .material-symbols-outlined {
+ font-size: 20px;
+ color: #909baa;
+}
+
+.control-buttons {
+ display: flex;
+ gap: 10px;
+ justify-content: center;
+ flex-grow: 1;
+}
+
+.control-button {
+ width: 40px;
+ height: 40px;
+ background: rgba(144, 155, 170, 0.1);
+ border-radius: 8px;
+ border: none;
+ cursor: pointer;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 24px;
+}
+
+.mic-button[data-lk-audio-enabled="false"] {
+ background: #ff5252;
+ opacity: 0.8;
+}
+
+.mic-button[data-lk-audio-enabled="true"] .material-symbols-outlined {
+ content: 'mic';
+ color: #ffffff;
+}
+
+.mic-button[data-lk-audio-enabled="false"] .material-symbols-outlined {
+ content: 'mic_off';
+ color: #ffffff;
+}
+
+.camera-button[data-lk-video-enabled="false"] {
+ background: #ff5252;
+ opacity: 0.8;
+}
+
+.camera-button[data-lk-video-enabled="true"] .material-symbols-outlined {
+ content: 'videocam';
+ color: #ffffff;
+}
+
+.camera-button[data-lk-video-enabled="false"] .material-symbols-outlined {
+ content: 'videocam_off';
+ color: #ffffff;
+}
+
+.screen-share-button[data-lk-screen-share-enabled="true"] .material-symbols-outlined {
+ content: 'screen_share';
+ color: #49c998;
+}
+
+.screen-share-button[data-lk-screen-share-enabled="false"] .material-symbols-outlined {
+ content: 'screen_share';
+ color: #ffffff;
+}
+
+.record-sign {
+ background: rgba(144, 155, 170, 0.1);
+}
+
+.record-sign.disabled {
+ background: rgba(144, 155, 170, 0.1);
+}
+
+.record-sign .material-symbols-outlined,
+.record-sign.disabled .material-symbols-outlined {
+ font-size: 24px;
+}
+
+.record-sign .material-symbols-outlined {
+ color: #ff6f6f;
+ animation: pulse 1s infinite;
+}
+
+.record-sign.disabled .material-symbols-outlined {
+ color: #ffffff;
+}
+
+@keyframes pulse {
+ 0% { opacity: 1; }
+ 50% { opacity: 0.5; }
+ 100% { opacity: 1; }
+}
+
+.end-call-button {
+ width: 64px;
+ height: 40px;
+ background: #ff5252;
+ border-radius: 8px;
+ border: none;
+ cursor: pointer;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.end-call-button .material-symbols-outlined {
+ font-size: 24px;
+ color: #ffffff;
+}
+
+.settings-section {
+ position: relative;
+}
+
+.settings-button {
+ width: 40px;
+ height: 40px;
+ background: rgba(144, 155, 170, 0.1);
+ border-radius: 8px;
+ border: none;
+ cursor: pointer;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.settings-button .material-symbols-outlined {
+ font-size: 24px;
+ color: #ffffff;
+}
+
+
+.lk-grid-layout {
+ height: calc(100vh - 60px) !important;
+ width: 100% !important;
+}
+
+.lk-grid-layout > div {
+ position: relative !important;
+ overflow: hidden !important;
+}
+
+.lk-video {
+ object-fit: cover !important;
+ background-color: #000 !important;
+}
\ No newline at end of file
From e6f9cf9a433666cd13cec5d88bdb7ffb479029d4 Mon Sep 17 00:00:00 2001
From: anujsb <141896390+anujsb@users.noreply.github.com>
Date: Tue, 25 Feb 2025 23:08:30 +0530
Subject: [PATCH 02/19] fix : added settings and Participants button
---
app/custom/CustomControlBar.tsx | 208 +++++++++++-----------
app/custom/VideoTrack.tsx | 27 +++
app/rooms/[roomName]/PageClientImpl.tsx | 225 ++++++++----------------
styles/CustomControlBar.css | 110 ++++++------
styles/PageClientImpl.css | 25 +++
styles/VideoTrack.css | 5 +
6 files changed, 282 insertions(+), 318 deletions(-)
create mode 100644 app/custom/VideoTrack.tsx
create mode 100644 styles/PageClientImpl.css
create mode 100644 styles/VideoTrack.css
diff --git a/app/custom/CustomControlBar.tsx b/app/custom/CustomControlBar.tsx
index 4269dba7..9b3d4fef 100644
--- a/app/custom/CustomControlBar.tsx
+++ b/app/custom/CustomControlBar.tsx
@@ -1,123 +1,111 @@
-// // import React from 'react';
-// // import { TrackToggle, DisconnectButton } from '@livekit/components-react';
-// // import SettingsMenu from '@/lib/SettingsMenu';
-// // import { MaterialSymbol } from 'material-symbols';
-// // import '../../styles/CustomControlBar.css';
+'use client';
+import React, { useState, useEffect } from 'react';
+import {
+ TrackToggle,
+ DisconnectButton
+} from '@livekit/components-react';
+import {
+ Room,
+ RoomEvent,
+ Track
+} from 'livekit-client';
+import '../../styles/CustomControlBar.css';
-// // const CustomControlBar = ({ roomName, room }) => {
-// // const [recording, setRecording] = React.useState(false);
-// // const [showSettings, setShowSettings] = React.useState(false);
-// // React.useEffect(() => {
-// // if (room) {
-// // room.on('recordedStatusChanged', () => {
-// // setRecording(room.isRecording);
-// // });
-// // return () => {
-// // room.off('recordedStatusChanged');
-// // };
-// // }
-// // }, [room]);
+interface CustomControlBarProps {
+ room: Room;
+ roomName: string;
+}
-// // const handleCopyLink = () => {
-// // navigator.clipboard.writeText(window.location.href);
-// // };
+export function CustomControlBar({ room, roomName }: CustomControlBarProps) {
+ const [recording, setRecording] = useState(false);
+ const [participantCount, setParticipantCount] = useState(1);
-// // return (
-// //
-// //
-// //
-// // {roomName}
-// //
-// //
-// //
-// //
-// //
-// //
-// // {recording && (
-// //
-// // {/* */}
-// //
-// // )}
-// //
-// //
-// //
-// //
-// //
-// // {showSettings && setShowSettings(false)} />}
-// //
-// //
-// // );
-// // };
+ useEffect(() => {
+ if (room) {
-// // export default CustomControlBar;
+ const updateRecordingStatus = () => setRecording(room.isRecording);
+
+ const updateParticipantCount = () => {
+ if (room && room.participants) {
+ setParticipantCount(room.participants.size + 1);
+ }
+ };
+
-// import { TrackToggle, DisconnectButton, RoomAudioRenderer, GridLayout } from '@livekit/components-react';
-// import { useState, useEffect } from 'react';
+ if (room.state === 'connected') {
+ updateParticipantCount();
+ }
+
+ room.on(RoomEvent.Connected, updateParticipantCount);
+ room.on(RoomEvent.ParticipantConnected, updateParticipantCount);
+ room.on(RoomEvent.ParticipantDisconnected, updateParticipantCount);
+ room.on(RoomEvent.RecordingStatusChanged, updateRecordingStatus);
+
+ return () => {
+ room.off(RoomEvent.Connected, updateParticipantCount);
+ room.off(RoomEvent.ParticipantConnected, updateParticipantCount);
+ room.off(RoomEvent.ParticipantDisconnected, updateParticipantCount);
+ room.off(RoomEvent.RecordingStatusChanged, updateRecordingStatus);
+ };
+ }
+ }, [room]);
-// function CustomControlBar({ room, roomName }) {
-// const [recording, setRecording] = useState(false);
+ const handleCopyLink = () => {
+ navigator.clipboard.writeText(window.location.href)
+ .then(() => alert('Link copied to clipboard!'))
+ .catch((err) => console.error('Failed to copy link:', err));
+ };
-// // Update recording status
-// useEffect(() => {
-// if (room) {
-// const updateRecordingStatus = () => setRecording(room.isRecording);
-// room.on(RoomEvent.RecordingStarted, updateRecordingStatus);
-// room.on(RoomEvent.RecordingStopped, updateRecordingStatus);
-// return () => {
-// room.off(RoomEvent.RecordingStarted, updateRecordingStatus);
-// room.off(RoomEvent.RecordingStopped, updateRecordingStatus);
-// };
-// }
-// }, [room]);
+ return (
+
-// // Copy room link to clipboard
-// const handleCopyLink = () => {
-// navigator.clipboard.writeText(window.location.href)
-// .then(() => alert('Link copied to clipboard!'))
-// .catch((err) => console.error('Failed to copy link:', err));
-// };
+
+ {roomName}
+
+
-// return (
-//
-// {/* Left: Room Name Box */}
-//
-// {roomName}
-//
-//
+ {/* Center: Control Buttons */}
+
+
+ {/* mic
+ mic_off */}
+
+
+
+ {/* videocam
+ videocam_off */}
+
+
+
+ radio_button_checked
+
+
+
+ {/* screen_share
+ screen_share */}
+
+
+
+ call_end
+
+
-// {/* Center: Control Buttons */}
-//
-//
-//
-// {recording && (
-//
-// radio_button_checked
-//
-// )}
-//
-//
-// call_end
-//
-//
-
-// {/* Right: Settings Button */}
-//
-// {SHOW_SETTINGS_MENU && (
-//
-// )}
-//
-//
-// );
-// }
\ No newline at end of file
+ {/* Participants, Settings btn */}
+
+
+ people
+ {participantCount}
+
+
+
+ settings
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/app/custom/VideoTrack.tsx b/app/custom/VideoTrack.tsx
new file mode 100644
index 00000000..9fc9fb69
--- /dev/null
+++ b/app/custom/VideoTrack.tsx
@@ -0,0 +1,27 @@
+'use client';
+
+import React, { useRef, useEffect } from 'react';
+import { TrackReferenceOrPlaceholder } from '@livekit/components-react';
+import '../../styles/VideoTrack.css';
+
+interface VideoTrackProps {
+ ref: TrackReferenceOrPlaceholder;
+}
+
+export function VideoTrack({ ref: trackRef }: VideoTrackProps) {
+ const videoRef = useRef(null);
+
+ useEffect(() => {
+ const videoEl = videoRef.current;
+ const track = trackRef.publication?.track;
+
+ if (videoEl && track) {
+ track.attach(videoEl);
+ return () => {
+ track.detach(videoEl);
+ };
+ }
+ }, [trackRef.publication?.track]);
+
+ return ;
+}
\ No newline at end of file
diff --git a/app/rooms/[roomName]/PageClientImpl.tsx b/app/rooms/[roomName]/PageClientImpl.tsx
index 063d7a00..88819001 100644
--- a/app/rooms/[roomName]/PageClientImpl.tsx
+++ b/app/rooms/[roomName]/PageClientImpl.tsx
@@ -1,25 +1,23 @@
+
'use client';
+import React, { useEffect, useState, useMemo } from 'react';
import { decodePassphrase } from '@/lib/client-utils';
import Transcript from '@/lib/Transcript';
-import { SettingsMenu } from '@/lib/SettingsMenu';
import { ConnectionDetails } from '@/lib/types';
import {
LocalUserChoices,
PreJoin,
LiveKitRoom,
- TrackToggle,
- DisconnectButton,
- RoomAudioRenderer,
- GridLayout,
useTracks,
TrackReferenceOrPlaceholder,
+ GridLayout,
+ RoomAudioRenderer,
} from '@livekit/components-react';
import {
ExternalE2EEKeyProvider,
RoomOptions,
- RoomEvent,
VideoCodec,
VideoPresets,
Room,
@@ -28,11 +26,12 @@ import {
Track,
} from 'livekit-client';
import { useRouter } from 'next/navigation';
-import React, { useEffect, useRef, useState } from 'react';
-import '../../../styles/CustomControlBar.css';
+import { VideoTrack } from '@/app/custom/VideoTrack';
+import { CustomControlBar } from '@/app/custom/CustomControlBar';
+import '../../../styles/PageClientImpl.css';
+
const CONN_DETAILS_ENDPOINT =
process.env.NEXT_PUBLIC_CONN_DETAILS_ENDPOINT ?? '/api/connection-details';
-const SHOW_SETTINGS_MENU = process.env.NEXT_PUBLIC_SHOW_SETTINGS_MENU == 'true';
export function PageClientImpl(props: {
roomName: string;
@@ -40,17 +39,18 @@ export function PageClientImpl(props: {
hq: boolean;
codec: VideoCodec;
}) {
- const [preJoinChoices, setPreJoinChoices] = React.useState(undefined);
- const preJoinDefaults = React.useMemo(() => {
+ const [preJoinChoices, setPreJoinChoices] = useState(undefined);
+ const [connectionDetails, setConnectionDetails] = useState(undefined);
+
+ const preJoinDefaults = useMemo(() => {
return {
username: '',
videoEnabled: true,
audioEnabled: true,
};
}, []);
- const [connectionDetails, setConnectionDetails] = React.useState(undefined);
- const handlePreJoinSubmit = React.useCallback(async (values: LocalUserChoices) => {
+ const handlePreJoinSubmit = async (values: LocalUserChoices) => {
setPreJoinChoices(values);
const url = new URL(CONN_DETAILS_ENDPOINT, window.location.origin);
url.searchParams.append('roomName', props.roomName);
@@ -61,14 +61,14 @@ export function PageClientImpl(props: {
const connectionDetailsResp = await fetch(url.toString());
const connectionDetailsData = await connectionDetailsResp.json();
setConnectionDetails(connectionDetailsData);
- }, [props.roomName, props.region]);
+ };
- const handlePreJoinError = React.useCallback((e: any) => console.error(e), []);
+ const handlePreJoinError = (e: any) => console.error(e);
return (
-
+
{connectionDetails === undefined || preJoinChoices === undefined ? (
-
+
{
+ const [isClient, setIsClient] = useState(false);
+
+ useEffect(() => {
+ setIsClient(true);
+ }, []);
+
+
+ const getE2EEConfig = () => {
+ if (typeof window === 'undefined') return { enabled: false };
+
+ const e2eePassphrase = decodePassphrase(location.hash.substring(1));
+ const worker = e2eePassphrase &&
+ new Worker(new URL('livekit-client/e2ee-worker', import.meta.url));
+ const e2eeEnabled = !!(e2eePassphrase && worker);
+
+ return {
+ enabled: e2eeEnabled,
+ passphrase: e2eePassphrase,
+ worker
+ };
+ };
+
+ const e2eeConfig = useMemo(() => getE2EEConfig(), []);
+ const keyProvider = useMemo(() => new ExternalE2EEKeyProvider(), []);
+
+ const roomOptions = useMemo((): RoomOptions => {
let videoCodec: VideoCodec | undefined = props.options.codec ? props.options.codec : 'vp9';
- if (e2eeEnabled && (videoCodec === 'av1' || videoCodec === 'vp9')) {
+ if (e2eeConfig.enabled && (videoCodec === 'av1' || videoCodec === 'vp9')) {
videoCodec = undefined;
}
return {
@@ -115,7 +132,7 @@ function VideoConferenceComponent(props: {
videoSimulcastLayers: props.options.hq
? [VideoPresets.h1080, VideoPresets.h720]
: [VideoPresets.h540, VideoPresets.h216],
- red: !e2eeEnabled,
+ red: !e2eeConfig.enabled,
videoCodec,
},
audioCaptureDefaults: {
@@ -123,37 +140,37 @@ function VideoConferenceComponent(props: {
},
adaptiveStream: { pixelDensity: 'screen' },
dynacast: true,
- e2ee: e2eeEnabled
- ? { keyProvider, worker }
- : undefined,
+ e2ee: e2eeConfig.enabled ? { keyProvider, worker: e2eeConfig.worker } : undefined,
};
- }, [props.userChoices, props.options.hq, props.options.codec]);
+ }, [props.userChoices, props.options.hq, props.options.codec, e2eeConfig]);
- const room = React.useMemo(() => new Room(roomOptions), [roomOptions]);
+ const room = useMemo(() => new Room(roomOptions), [roomOptions]);
- if (e2eeEnabled) {
- keyProvider.setKey(decodePassphrase(e2eePassphrase));
- room.setE2EEEnabled(true).catch((e) => {
- if (e instanceof DeviceUnsupportedError) {
- alert(
- `You're trying to join an encrypted meeting, but your browser does not support it. Please update it to the latest version and try again.`,
- );
- console.error(e);
- }
- });
- }
+ useEffect(() => {
+ if (e2eeConfig.enabled && e2eeConfig.passphrase) {
+ keyProvider.setKey(decodePassphrase(e2eeConfig.passphrase));
+ room.setE2EEEnabled(true).catch((e) => {
+ if (e instanceof DeviceUnsupportedError) {
+ alert(
+ `You're trying to join an encrypted meeting, but your browser does not support it. Please update it to the latest version and try again.`,
+ );
+ console.error(e);
+ }
+ });
+ }
+ }, [room, e2eeConfig, keyProvider]);
- const connectOptions = React.useMemo((): RoomConnectOptions => {
+ const connectOptions = useMemo((): RoomConnectOptions => {
return { autoSubscribe: true };
}, []);
const router = useRouter();
- const handleOnLeave = React.useCallback(() => router.push('/'), [router]);
+ const handleOnLeave = () => router.push('/');
- const tracks = useTracks(
- [{ source: Track.Source.Camera, withPlaceholder: true }],
- { room }
- );
+ const tracks = useTracks([{ source: Track.Source.Camera, withPlaceholder: true }], { room });
+
+ // Return null during SSR to prevent hydration errors
+ if (!isClient) return null;
return (
{tracks.length > 0 ? (
-
+
{(trackRef: TrackReferenceOrPlaceholder) => (
)}
) : (
-
+
No participants with video yet
)}
@@ -186,99 +206,4 @@ function VideoConferenceComponent(props: {
);
-}
-
-function VideoTrack({ ref: trackRef }: { ref: TrackReferenceOrPlaceholder }) {
- const videoRef = useRef
(null);
-
- useEffect(() => {
- const videoEl = videoRef.current;
- const track = trackRef.publication?.track;
-
- if (videoEl && track) {
- track.attach(videoEl);
- return () => {
- track.detach(videoEl);
- };
- }
- }, [trackRef.publication?.track]);
-
- return (
-
- );
-}
-
-interface CustomControlBarProps {
- room: Room;
- roomName: string;
-}
-interface CustomControlBarProps {
- room: Room;
- roomName: string;
-}
-
-function CustomControlBar({ room, roomName }: CustomControlBarProps) {
- const [recording, setRecording] = useState(false);
-
- useEffect(() => {
- if (room) {
- const updateRecordingStatus = () => setRecording(room.isRecording);
- room.on(RoomEvent.LocalTrackPublished, updateRecordingStatus);
- room.on(RoomEvent.LocalTrackUnpublished, updateRecordingStatus);
- return () => {
- room.off(RoomEvent.LocalTrackPublished, updateRecordingStatus);
- room.off(RoomEvent.LocalTrackUnpublished, updateRecordingStatus);
- };
- }
- }, [room]);
-
- const handleCopyLink = () => {
- navigator.clipboard.writeText(window.location.href)
- .then(() => alert('Link copied to clipboard!'))
- .catch((err) => console.error('Failed to copy link:', err));
- };
-
- return (
-
- {/* Left: Room Name Box */}
-
- {roomName}
-
-
-
- {/* Center: Control Buttons */}
-
-
-
- {recording ? (
-
- radio_button_checked
-
- ) : (
-
- radio_button_checked
-
- )}
-
-
- call_end
-
-
-
- {/* Right: Settings Button */}
-
- {SHOW_SETTINGS_MENU && (
-
- )}
-
-
- );
-}
-
+}
\ No newline at end of file
diff --git a/styles/CustomControlBar.css b/styles/CustomControlBar.css
index bc719a90..f7c9e590 100644
--- a/styles/CustomControlBar.css
+++ b/styles/CustomControlBar.css
@@ -12,7 +12,8 @@
right: 0;
background: rgba(0, 0, 0, 0.8);
z-index: 1000;
- backdrop-filter: blur(5px);
+ backdrop-filter: blur(5px);
+ -webkit-backdrop-filter: blur(5px); /* Added for Safari compatibility */
}
.room-name-box {
@@ -60,69 +61,52 @@
display: flex;
align-items: center;
justify-content: center;
- font-size: 24px;
}
+/* Mic button */
.mic-button[data-lk-audio-enabled="false"] {
- background: #ff5252;
- opacity: 0.8;
+ background: rgba(255, 82, 82, 0.2);
}
.mic-button[data-lk-audio-enabled="true"] .material-symbols-outlined {
- content: 'mic';
color: #ffffff;
}
.mic-button[data-lk-audio-enabled="false"] .material-symbols-outlined {
- content: 'mic_off';
- color: #ffffff;
+ color: #ff6f6f;
}
+/* Camera btn */
.camera-button[data-lk-video-enabled="false"] {
- background: #ff5252;
- opacity: 0.8;
+ background: rgba(255, 82, 82, 0.2);
}
.camera-button[data-lk-video-enabled="true"] .material-symbols-outlined {
- content: 'videocam';
- color: #ffffff;
+ color: #ffffff;
}
.camera-button[data-lk-video-enabled="false"] .material-symbols-outlined {
- content: 'videocam_off';
- color: #ffffff;
+ color: #ff6f6f;
}
+/* Screen share btn */
.screen-share-button[data-lk-screen-share-enabled="true"] .material-symbols-outlined {
- content: 'screen_share';
- color: #49c998;
+ color: #49c998;
}
.screen-share-button[data-lk-screen-share-enabled="false"] .material-symbols-outlined {
- content: 'screen_share';
- color: #ffffff;
-}
-
-.record-sign {
- background: rgba(144, 155, 170, 0.1);
-}
-
-.record-sign.disabled {
- background: rgba(144, 155, 170, 0.1);
-}
-
-.record-sign .material-symbols-outlined,
-.record-sign.disabled .material-symbols-outlined {
- font-size: 24px;
+ color: #ffffff;
}
+/* Record */
.record-sign .material-symbols-outlined {
- color: #ff6f6f;
- animation: pulse 1s infinite;
+ color: #ff6f6f;
+ animation: pulse 1.5s infinite;
}
.record-sign.disabled .material-symbols-outlined {
color: #ffffff;
+ animation: none;
}
@keyframes pulse {
@@ -131,56 +115,66 @@
100% { opacity: 1; }
}
+/* End call */
.end-call-button {
width: 64px;
height: 40px;
- background: #ff5252;
+ background: #ff5252;
border-radius: 8px;
- border: none;
- cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
}
.end-call-button .material-symbols-outlined {
- font-size: 24px;
- color: #ffffff;
+ color: #ffffff;
}
-.settings-section {
- position: relative;
+
+.top-right-controls {
+ display: flex;
+ gap: 10px;
+ align-items: center;
}
-.settings-button {
- width: 40px;
- height: 40px;
- background: rgba(144, 155, 170, 0.1);
+.participant-box {
+ background-color: rgba(144, 155, 170, 0.1);
border-radius: 8px;
- border: none;
- cursor: pointer;
display: flex;
align-items: center;
- justify-content: center;
+ padding: 5px 10px;
+ gap: 8px;
}
-.settings-button .material-symbols-outlined {
- font-size: 24px;
- color: #ffffff;
+.participant-box .material-symbols-outlined {
+ font-size: 20px;
+ color: white;
}
+.participant-count {
+ font-size: 16px;
+ font-weight: 500;
+ color: white;
+ font-family: 'Roboto', sans-serif;
+}
-.lk-grid-layout {
- height: calc(100vh - 60px) !important;
- width: 100% !important;
+.settings-box {
+ background-color: rgba(144, 155, 170, 0.1);
+ border-radius: 8px;
+ width: 40px;
+ height: 40px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ cursor: pointer;
}
-.lk-grid-layout > div {
- position: relative !important;
- overflow: hidden !important;
+.settings-box .material-symbols-outlined {
+ font-size: 20px;
+ color: white;
}
-.lk-video {
- object-fit: cover !important;
- background-color: #000 !important;
+/* Fix for video layout */
+.lk-grid-layout {
+ height: calc(100vh - 60px) !important;
}
\ No newline at end of file
diff --git a/styles/PageClientImpl.css b/styles/PageClientImpl.css
new file mode 100644
index 00000000..67a47ed2
--- /dev/null
+++ b/styles/PageClientImpl.css
@@ -0,0 +1,25 @@
+.main-container {
+ height: 100%;
+ }
+
+ .pre-join-container {
+ display: grid;
+ place-items: center;
+ height: 100%;
+ }
+
+ .video-grid {
+ height: calc(100vh - 60px) !important;
+ }
+
+ .video-container {
+ position: relative;
+ width: 100%;
+ height: 100%;
+ }
+
+ .empty-video-container {
+ height: calc(100vh - 60px);
+ display: grid;
+ place-items: center;
+ }
\ No newline at end of file
diff --git a/styles/VideoTrack.css b/styles/VideoTrack.css
new file mode 100644
index 00000000..be088925
--- /dev/null
+++ b/styles/VideoTrack.css
@@ -0,0 +1,5 @@
+.video-element {
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+ }
\ No newline at end of file
From c8974552658e570674fd2754a866bd62a325e184 Mon Sep 17 00:00:00 2001
From: aliraza556
Date: Mon, 3 Mar 2025 21:01:38 +0500
Subject: [PATCH 03/19] feat: implement Sphinx-style participant tiles in video
conference
---
app/layout.tsx | 11 ++
app/rooms/[roomName]/PageClientImpl.tsx | 14 +--
lib/CustomVideoLayout.tsx | 110 ++++++++++++++++++
lib/ParticipantTile.tsx | 144 ++++++++++++++++++++++++
styles/participant-tile.css | 103 +++++++++++++++++
5 files changed, 375 insertions(+), 7 deletions(-)
create mode 100644 lib/CustomVideoLayout.tsx
create mode 100644 lib/ParticipantTile.tsx
create mode 100644 styles/participant-tile.css
diff --git a/app/layout.tsx b/app/layout.tsx
index 984b4ec3..cd7a2981 100644
--- a/app/layout.tsx
+++ b/app/layout.tsx
@@ -1,6 +1,7 @@
import '../styles/globals.css';
import '@livekit/components-styles';
import '@livekit/components-styles/prefabs';
+import '../styles/participant-tile.css';
import type { Metadata, Viewport } from 'next';
export const metadata: Metadata = {
@@ -32,6 +33,16 @@ export const viewport: Viewport = {
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
+
+
+
+
{children}
);
diff --git a/app/rooms/[roomName]/PageClientImpl.tsx b/app/rooms/[roomName]/PageClientImpl.tsx
index daf17f96..ad0aed50 100644
--- a/app/rooms/[roomName]/PageClientImpl.tsx
+++ b/app/rooms/[roomName]/PageClientImpl.tsx
@@ -27,6 +27,7 @@ import { setLazyProp } from 'next/dist/server/api-utils';
import { useRouter } from 'next/navigation';
import React from 'react';
+import { CustomVideoLayout } from '@/lib/CustomVideoLayout';
const CONN_DETAILS_ENDPOINT =
process.env.NEXT_PUBLIC_CONN_DETAILS_ENDPOINT ?? '/api/connection-details';
const SHOW_SETTINGS_MENU = process.env.NEXT_PUBLIC_SHOW_SETTINGS_MENU == 'true';
@@ -203,13 +204,12 @@ function VideoConferenceComponent(props: {
audio={props.userChoices.audioEnabled}
onDisconnected={handleOnLeave}
>
-
- {/* */}
-
-
+
+
+ {/* */}
+
+
+
>
);
diff --git a/lib/CustomVideoLayout.tsx b/lib/CustomVideoLayout.tsx
new file mode 100644
index 00000000..7492c487
--- /dev/null
+++ b/lib/CustomVideoLayout.tsx
@@ -0,0 +1,110 @@
+import React from 'react';
+import {
+ GridLayout,
+ ControlBar,
+ useTracks,
+ RoomAudioRenderer,
+ LayoutContextProvider,
+ Chat,
+} from '@livekit/components-react';
+import { Track } from 'livekit-client';
+import { ParticipantTile } from './ParticipantTile';
+
+export const CustomVideoLayout: React.FC = () => {
+ const [showChat, setShowChat] = React.useState(false);
+
+ const tracks = useTracks(
+ [
+ { source: Track.Source.Camera, withPlaceholder: true },
+ { source: Track.Source.ScreenShare, withPlaceholder: false },
+ ],
+ { onlySubscribed: false },
+ );
+
+ return (
+ {},
+ },
+ widget: {
+ state: {
+ showChat,
+ unreadMessages: 0,
+ },
+ dispatch: (action: any) => {
+ if ('msg' in action && action.msg === 'toggle_chat') {
+ setShowChat((prev) => !prev);
+ }
+ },
+ },
+ }}
+ >
+
+
+
+ {showChat && (
+
+
+
+ )}
+
+
+
+
+ );
+};
+
+export default CustomVideoLayout;
diff --git a/lib/ParticipantTile.tsx b/lib/ParticipantTile.tsx
new file mode 100644
index 00000000..f31a1466
--- /dev/null
+++ b/lib/ParticipantTile.tsx
@@ -0,0 +1,144 @@
+import React, { useEffect, useState } from 'react';
+import { AudioTrack, useTracks, VideoTrack, useTrackRefContext } from '@livekit/components-react';
+import { Track, Participant } from 'livekit-client';
+
+function getAvatarColor(identity: string): string {
+ const colors = [
+ '#4CAF50',
+ '#8BC34A',
+ '#CDDC39',
+ '#FFC107',
+ '#FF9800',
+ '#FF5722',
+ '#F44336',
+ '#E91E63',
+ '#9C27B0',
+ '#673AB7',
+ '#3F51B5',
+ '#2196F3',
+ '#03A9F4',
+ '#00BCD4',
+ '#009688',
+ ];
+
+ let hash = 0;
+ for (let i = 0; i < identity.length; i++) {
+ hash = identity.charCodeAt(i) + ((hash << 5) - hash);
+ }
+
+ const index = Math.abs(hash) % colors.length;
+ return colors[index];
+}
+
+function getInitials(name: string): string {
+ if (!name) return '?';
+
+ const parts = name.split(' ');
+ if (parts.length === 1) {
+ return parts[0].charAt(0).toUpperCase();
+ }
+
+ return (parts[0].charAt(0) + parts[parts.length - 1].charAt(0)).toUpperCase();
+}
+
+export interface ParticipantTileProps {
+ participant?: Participant;
+}
+
+export const ParticipantTile: React.FC = ({
+ participant: propParticipant,
+}) => {
+ const trackRef = useTrackRefContext();
+ const participant = propParticipant || trackRef?.participant;
+
+ if (!participant) return null;
+
+ const [profilePictureUrl, setProfilePictureUrl] = useState(null);
+
+ const isValidTrackRef =
+ trackRef && 'publication' in trackRef && trackRef.publication !== undefined;
+
+ const cameraTrack =
+ isValidTrackRef && trackRef.source === Track.Source.Camera
+ ? trackRef
+ : useTracks([Track.Source.Camera], { onlySubscribed: false }).filter(
+ (track) => track.participant.identity === participant.identity,
+ )[0];
+
+ const microphoneTrack = useTracks([Track.Source.Microphone], { onlySubscribed: false }).filter(
+ (track) => track.participant.identity === participant.identity,
+ )[0];
+
+ const isSpeaking = participant.isSpeaking;
+
+ useEffect(() => {
+ if (participant.metadata) {
+ try {
+ const metadata = JSON.parse(participant.metadata);
+ if (metadata.profilePictureUrl) {
+ setProfilePictureUrl(metadata.profilePictureUrl);
+ }
+ } catch (e) {
+ console.error('Failed to parse participant metadata', e);
+ }
+ }
+ }, [participant.metadata]);
+
+ const hasCamera = !!cameraTrack;
+ const isCameraEnabled = hasCamera && !cameraTrack.publication?.isMuted;
+
+ const hasMicrophone = !!microphoneTrack;
+ const isMicrophoneEnabled = hasMicrophone && !microphoneTrack.publication?.isMuted;
+
+ const avatarColor = getAvatarColor(participant.identity);
+ const initials = getInitials(participant.name || participant.identity);
+
+ return (
+
+ {isCameraEnabled ? (
+
+
+
+ ) : (
+
+ {profilePictureUrl ? (
+

+ ) : (
+
{initials}
+ )}
+
+ )}
+
+
+ {isMicrophoneEnabled ? (
+ isSpeaking ? (
+
+ graphic_eq
+
+ ) : (
+ mic
+ )
+ ) : (
+ mic_off
+ )}
+ {participant.name || participant.identity}
+
+
+ {hasMicrophone && microphoneTrack &&
}
+
+ );
+};
+
+export default ParticipantTile;
diff --git a/styles/participant-tile.css b/styles/participant-tile.css
new file mode 100644
index 00000000..7720b0a7
--- /dev/null
+++ b/styles/participant-tile.css
@@ -0,0 +1,103 @@
+.participant-tile {
+ position: relative;
+ background-color: #1a242e;
+ border-radius: 5px;
+ overflow: hidden;
+ width: 100%;
+ height: 100%;
+}
+
+.participant-tile.speaking {
+ border: 2px solid #618aff;
+}
+
+.participant-info {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ display: flex;
+ align-items: center;
+ padding: 8px;
+ z-index: 10;
+}
+
+.participant-name {
+ font-family: 'Roboto', sans-serif;
+ font-weight: 500;
+ font-size: 14px;
+ color: white;
+ margin-left: 5px;
+}
+
+.mic-icon {
+ font-family: 'Material Symbols Outlined';
+ font-size: 18px;
+}
+
+.mic-on {
+ color: #ffffff;
+}
+
+.mic-off {
+ color: #ff5252;
+}
+
+.speaking-indicator {
+ position: absolute;
+ top: 10px;
+ right: 10px;
+ background-color: #618aff;
+ border-radius: 50%;
+ width: 24px;
+ height: 24px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ z-index: 10;
+}
+
+.speaking-icon {
+ font-family: 'Material Symbols Outlined';
+ color: white;
+ font-size: 16px;
+}
+
+.avatar-container {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ width: 100px;
+ height: 100px;
+ border-radius: 50%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ z-index: 5;
+}
+
+.avatar-initials {
+ font-family: 'Roboto', sans-serif;
+ font-weight: 500;
+ font-size: 50px;
+ color: white;
+}
+
+.avatar-image {
+ width: 100%;
+ height: 100%;
+ border-radius: 50%;
+ object-fit: cover;
+}
+
+.video-container {
+ width: 100%;
+ height: 100%;
+}
+
+.custom-control-bar.lk-control-bar {
+ padding: 6px !important;
+ border-top: 1px solid rgba(255, 255, 255, 0.1);
+ margin-right: -10px;
+ width: calc(100% + 10px);
+}
From 3676fb5543e8c1cf87a51a37af82d1c2d4f05ffe Mon Sep 17 00:00:00 2001
From: SujithThirumalaisamy
Date: Mon, 17 Mar 2025 21:18:15 +0530
Subject: [PATCH 04/19] Refactored Custom Layout
---
.eslintrc.json | 1 -
app/custom/CustomControlBar.tsx | 168 +-
app/custom/VideoTrack.tsx | 2 +-
app/layout.tsx | 2 +-
app/rooms/[roomName]/PageClientImpl.tsx | 66 +-
assetlinks.json | 34 +-
dev.yaml | 7 +-
lib/CustomVideoLayout.tsx | 211 +-
lib/ParticipantTile.tsx | 276 ++-
lib/client-utils.ts | 43 +
package.json | 1 +
pnpm-lock.yaml | 2538 +++++++++++++++++------
prod.yaml | 9 +-
styles/CustomControlBar.css | 53 +-
styles/PageClientImpl.css | 48 +-
styles/ParticipantTile.css | 103 +
styles/Transcript.module.css | 21 +-
styles/VideoTrack.css | 8 +-
styles/globals.css | 82 +
styles/participant-tile.css | 198 +-
20 files changed, 2688 insertions(+), 1183 deletions(-)
delete mode 100644 .eslintrc.json
create mode 100644 styles/ParticipantTile.css
diff --git a/.eslintrc.json b/.eslintrc.json
deleted file mode 100644
index 0967ef42..00000000
--- a/.eslintrc.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/app/custom/CustomControlBar.tsx b/app/custom/CustomControlBar.tsx
index 9b3d4fef..467ffd77 100644
--- a/app/custom/CustomControlBar.tsx
+++ b/app/custom/CustomControlBar.tsx
@@ -1,18 +1,12 @@
'use client';
import React, { useState, useEffect } from 'react';
-import {
- TrackToggle,
- DisconnectButton
-} from '@livekit/components-react';
-import {
- Room,
- RoomEvent,
- Track
-} from 'livekit-client';
+import { DisconnectButton, useRoomContext } from '@livekit/components-react';
+import { Room, RoomEvent, Track } from 'livekit-client';
+import { mergeClasses } from '@/lib/client-utils';
+import { ToggleSource } from '@livekit/components-core';
import '../../styles/CustomControlBar.css';
-
interface CustomControlBarProps {
room: Room;
roomName: string;
@@ -20,30 +14,24 @@ interface CustomControlBarProps {
export function CustomControlBar({ room, roomName }: CustomControlBarProps) {
const [recording, setRecording] = useState(false);
- const [participantCount, setParticipantCount] = useState(1);
+ const [participantCount, setParticipantCount] = useState(1);
useEffect(() => {
if (room) {
-
const updateRecordingStatus = () => setRecording(room.isRecording);
-
-
const updateParticipantCount = () => {
- if (room && room.participants) {
- setParticipantCount(room.participants.size + 1);
- }
+ setParticipantCount(room.numParticipants);
};
-
if (room.state === 'connected') {
- updateParticipantCount();
+ updateParticipantCount();
}
-
+
room.on(RoomEvent.Connected, updateParticipantCount);
room.on(RoomEvent.ParticipantConnected, updateParticipantCount);
room.on(RoomEvent.ParticipantDisconnected, updateParticipantCount);
room.on(RoomEvent.RecordingStatusChanged, updateRecordingStatus);
-
+
return () => {
room.off(RoomEvent.Connected, updateParticipantCount);
room.off(RoomEvent.ParticipantConnected, updateParticipantCount);
@@ -54,14 +42,14 @@ export function CustomControlBar({ room, roomName }: CustomControlBarProps) {
}, [room]);
const handleCopyLink = () => {
- navigator.clipboard.writeText(window.location.href)
+ navigator.clipboard
+ .writeText(window.location.href)
.then(() => alert('Link copied to clipboard!'))
.catch((err) => console.error('Failed to copy link:', err));
};
return (
-
{roomName}
{/* Center: Control Buttons */}
-
-
- {/* mic
- mic_off */}
-
-
-
- {/* videocam
- videocam_off */}
-
-
+
+
+
+
radio_button_checked
-
-
- {/* screen_share
- screen_share */}
-
-
+
+
call_end
@@ -101,11 +78,118 @@ export function CustomControlBar({ room, roomName }: CustomControlBarProps) {
people
{participantCount}
-
+
settings
);
-}
\ No newline at end of file
+}
+
+interface ControlButtonProps {
+ enabled?: boolean;
+ icon: React.ReactNode;
+ className?: string;
+ onClick?: () => void;
+}
+
+function ControlButton({ enabled = true, icon, className, onClick }: ControlButtonProps) {
+ return (
+
+ );
+}
+
+function TrackToggle({ source }: { source: ToggleSource }) {
+ const { enabled, toggle } = useTrackToggle({ source });
+ const isScreenShare = source === Track.Source.ScreenShare;
+
+ return (
+ }
+ />
+ );
+}
+
+interface TrackIconProps {
+ trackSource: ToggleSource;
+ enabled: boolean;
+}
+
+function TrackIcon({ trackSource, enabled }: TrackIconProps) {
+ switch (trackSource) {
+ case Track.Source.Camera:
+ return enabled ? (
+ videocam
+ ) : (
+
+ videocam_off
+
+ );
+ case Track.Source.Microphone:
+ return enabled ? (
+ mic
+ ) : (
+
+ mic_off
+
+ );
+ case Track.Source.ScreenShare:
+ return enabled ? (
+ screen_share
+ ) : (
+
+ stop_screen_share
+
+ );
+ }
+}
+
+// Custom hook for track toggle
+function useTrackToggle({ source }: { source: ToggleSource }) {
+ const { localParticipant } = useRoomContext();
+
+ const toggle = () => {
+ switch (source) {
+ case Track.Source.Camera:
+ return localParticipant.setCameraEnabled(!enabled);
+ case Track.Source.Microphone:
+ return localParticipant.setMicrophoneEnabled(!enabled);
+ case Track.Source.ScreenShare:
+ return localParticipant.setScreenShareEnabled(!enabled);
+ }
+ };
+
+ const enabled = (() => {
+ switch (source) {
+ case Track.Source.Camera:
+ return localParticipant.isCameraEnabled;
+ case Track.Source.Microphone:
+ return localParticipant.isMicrophoneEnabled;
+ case Track.Source.ScreenShare:
+ return localParticipant.isScreenShareEnabled;
+ }
+ })();
+
+ return { enabled, toggle };
+}
diff --git a/app/custom/VideoTrack.tsx b/app/custom/VideoTrack.tsx
index 9fc9fb69..338d83e8 100644
--- a/app/custom/VideoTrack.tsx
+++ b/app/custom/VideoTrack.tsx
@@ -24,4 +24,4 @@ export function VideoTrack({ ref: trackRef }: VideoTrackProps) {
}, [trackRef.publication?.track]);
return ;
-}
\ No newline at end of file
+}
diff --git a/app/layout.tsx b/app/layout.tsx
index cd7a2981..0c93c4f9 100644
--- a/app/layout.tsx
+++ b/app/layout.tsx
@@ -1,7 +1,7 @@
-import '../styles/globals.css';
import '@livekit/components-styles';
import '@livekit/components-styles/prefabs';
import '../styles/participant-tile.css';
+import '../styles/globals.css';
import type { Metadata, Viewport } from 'next';
export const metadata: Metadata = {
diff --git a/app/rooms/[roomName]/PageClientImpl.tsx b/app/rooms/[roomName]/PageClientImpl.tsx
index ce418f56..ece57ea6 100644
--- a/app/rooms/[roomName]/PageClientImpl.tsx
+++ b/app/rooms/[roomName]/PageClientImpl.tsx
@@ -1,18 +1,12 @@
-
-
'use client';
import React, { useEffect, useState, useMemo } from 'react';
import { decodePassphrase } from '@/lib/client-utils';
-import Transcript from '@/lib/Transcript';
import { ConnectionDetails } from '@/lib/types';
import {
LocalUserChoices,
PreJoin,
LiveKitRoom,
- useTracks,
- TrackReferenceOrPlaceholder,
- GridLayout,
RoomAudioRenderer,
} from '@livekit/components-react';
import {
@@ -23,14 +17,13 @@ import {
Room,
DeviceUnsupportedError,
RoomConnectOptions,
- Track,
+ E2EEOptions,
} from 'livekit-client';
import { useRouter } from 'next/navigation';
-import { VideoTrack } from '@/app/custom/VideoTrack';
-import { CustomControlBar } from '@/app/custom/CustomControlBar';
import '../../../styles/PageClientImpl.css';
import { CustomVideoLayout } from '@/lib/CustomVideoLayout';
+import { RecordingIndicator } from '@/lib/RecordingIndicator';
const CONN_DETAILS_ENDPOINT =
process.env.NEXT_PUBLIC_CONN_DETAILS_ENDPOINT ?? '/api/connection-details';
@@ -41,8 +34,10 @@ export function PageClientImpl(props: {
codec: VideoCodec;
}) {
const [preJoinChoices, setPreJoinChoices] = useState(undefined);
- const [connectionDetails, setConnectionDetails] = useState(undefined);
-
+ const [connectionDetails, setConnectionDetails] = useState(
+ undefined,
+ );
+
const preJoinDefaults = useMemo(() => {
return {
username: '',
@@ -92,26 +87,28 @@ function VideoConferenceComponent(props: {
connectionDetails: ConnectionDetails;
options: { hq: boolean; codec: VideoCodec };
}) {
-
const [isClient, setIsClient] = useState(false);
-
+
useEffect(() => {
setIsClient(true);
}, []);
-
const getE2EEConfig = () => {
- if (typeof window === 'undefined') return { enabled: false };
+ if (typeof window === 'undefined')
+ return {
+ enabled: false,
+ passphrase: undefined,
+ worker: undefined,
+ };
const e2eePassphrase = decodePassphrase(location.hash.substring(1));
- const worker = e2eePassphrase &&
- new Worker(new URL('livekit-client/e2ee-worker', import.meta.url));
+ const worker = new Worker(new URL('livekit-client/e2ee-worker', import.meta.url));
const e2eeEnabled = !!(e2eePassphrase && worker);
-
+
return {
enabled: e2eeEnabled,
passphrase: e2eePassphrase,
- worker
+ worker,
};
};
@@ -141,7 +138,9 @@ function VideoConferenceComponent(props: {
},
adaptiveStream: { pixelDensity: 'screen' },
dynacast: true,
- e2ee: e2eeConfig.enabled ? { keyProvider, worker: e2eeConfig.worker } : undefined,
+ ...(e2eeConfig.enabled && e2eeConfig.worker
+ ? { e2ee: { keyProvider, worker: e2eeConfig.worker } }
+ : null),
};
}, [props.userChoices, props.options.hq, props.options.codec, e2eeConfig]);
@@ -168,9 +167,6 @@ function VideoConferenceComponent(props: {
const router = useRouter();
const handleOnLeave = () => router.push('/');
- const tracks = useTracks([{ source: Track.Source.Camera, withPlaceholder: true }], { room });
-
- // Return null during SSR to prevent hydration errors
if (!isClient) return null;
return (
@@ -183,29 +179,9 @@ function VideoConferenceComponent(props: {
audio={props.userChoices.audioEnabled}
onDisconnected={handleOnLeave}
>
- {tracks.length > 0 ? (
-
- {(trackRef: TrackReferenceOrPlaceholder) => (
-
-
-
- )}
-
- ) : (
-
-
No participants with video yet
-
- )}
+
-
-
);
-}
\ No newline at end of file
+}
diff --git a/assetlinks.json b/assetlinks.json
index 6d349925..17c71e8d 100644
--- a/assetlinks.json
+++ b/assetlinks.json
@@ -1,2 +1,32 @@
-[{"relation": ["delegate_permission/common.handle_all_urls"],"target": {"namespace": "android_app","package_name": "chat.sphinx.v2","sha256_cert_fingerprints":["26:10:D3:CB:C0:BF:28:0D:8C:CB:07:74:85:46:5D:44:58:03:B6:09:87:1D:11:CE:95:41:FB:AD:47:39:EE:4B"]}},{"relation": ["delegate_permission/common.handle_all_urls"],"target": {"namespace": "android_app","package_name": "chat.sphinx.v2","sha256_cert_fingerprints":["64:CF:11:B5:30:12:2F:C3:00:58:28:65:4F:24:41:97:98:EA:C1:74:51:39:CE:92:1E:86:A9:B5:64:FE:E1:DC"]}},{"relation": ["delegate_permission/common.handle_all_urls"],"target": {"namespace": "android_app","package_name": "chat.sphinx.v2.debug","sha256_cert_fingerprints":
- ["B8:FE:7D:3A:D5:E4:46:CF:54:A6:45:15:17:D7:1D:06:0A:78:D1:27:68:FC:D8:7D:94:58:DD:17:DE:A4:8B:9F"]}}]
+[
+ {
+ "relation": ["delegate_permission/common.handle_all_urls"],
+ "target": {
+ "namespace": "android_app",
+ "package_name": "chat.sphinx.v2",
+ "sha256_cert_fingerprints": [
+ "26:10:D3:CB:C0:BF:28:0D:8C:CB:07:74:85:46:5D:44:58:03:B6:09:87:1D:11:CE:95:41:FB:AD:47:39:EE:4B"
+ ]
+ }
+ },
+ {
+ "relation": ["delegate_permission/common.handle_all_urls"],
+ "target": {
+ "namespace": "android_app",
+ "package_name": "chat.sphinx.v2",
+ "sha256_cert_fingerprints": [
+ "64:CF:11:B5:30:12:2F:C3:00:58:28:65:4F:24:41:97:98:EA:C1:74:51:39:CE:92:1E:86:A9:B5:64:FE:E1:DC"
+ ]
+ }
+ },
+ {
+ "relation": ["delegate_permission/common.handle_all_urls"],
+ "target": {
+ "namespace": "android_app",
+ "package_name": "chat.sphinx.v2.debug",
+ "sha256_cert_fingerprints": [
+ "B8:FE:7D:3A:D5:E4:46:CF:54:A6:45:15:17:D7:1D:06:0A:78:D1:27:68:FC:D8:7D:94:58:DD:17:DE:A4:8B:9F"
+ ]
+ }
+ }
+]
diff --git a/dev.yaml b/dev.yaml
index 19080e34..3cf4b3fb 100644
--- a/dev.yaml
+++ b/dev.yaml
@@ -1,15 +1,10 @@
services:
-
livekit:
image: sphinx-livekit
- command: ["node", "server.js"]
+ command: ['node', 'server.js']
restart: on-failure
container_name: livekit.sphinx
environment:
- HOSTNAME=0.0.0.0
ports:
- 3000:3000
-
-
-
-
diff --git a/lib/CustomVideoLayout.tsx b/lib/CustomVideoLayout.tsx
index 7492c487..50e945b0 100644
--- a/lib/CustomVideoLayout.tsx
+++ b/lib/CustomVideoLayout.tsx
@@ -1,110 +1,101 @@
-import React from 'react';
-import {
- GridLayout,
- ControlBar,
- useTracks,
- RoomAudioRenderer,
- LayoutContextProvider,
- Chat,
-} from '@livekit/components-react';
-import { Track } from 'livekit-client';
-import { ParticipantTile } from './ParticipantTile';
-
-export const CustomVideoLayout: React.FC = () => {
- const [showChat, setShowChat] = React.useState(false);
-
- const tracks = useTracks(
- [
- { source: Track.Source.Camera, withPlaceholder: true },
- { source: Track.Source.ScreenShare, withPlaceholder: false },
- ],
- { onlySubscribed: false },
- );
-
- return (
- {},
- },
- widget: {
- state: {
- showChat,
- unreadMessages: 0,
- },
- dispatch: (action: any) => {
- if ('msg' in action && action.msg === 'toggle_chat') {
- setShowChat((prev) => !prev);
- }
- },
- },
- }}
- >
-
-
-
- {showChat && (
-
-
-
- )}
-
-
-
-
- );
-};
-
-export default CustomVideoLayout;
+import React from 'react';
+import {
+ GridLayout,
+ useTracks,
+ RoomAudioRenderer,
+ LayoutContextProvider,
+ Chat,
+} from '@livekit/components-react';
+import { Track, Room } from 'livekit-client';
+import { ParticipantTile } from './ParticipantTile';
+import { CustomControlBar } from '@/app/custom/CustomControlBar';
+
+interface CustomVideoLayoutProps {
+ room: Room;
+ roomName: string;
+}
+
+export const CustomVideoLayout: React.FC = ({ room, roomName }) => {
+ const [showChat, setShowChat] = React.useState(false);
+
+ const tracks = useTracks(
+ [
+ { source: Track.Source.Camera, withPlaceholder: true },
+ { source: Track.Source.ScreenShare, withPlaceholder: false },
+ ],
+ { onlySubscribed: false },
+ );
+
+ return (
+ {},
+ },
+ widget: {
+ state: {
+ showChat,
+ unreadMessages: 0,
+ },
+ dispatch: (action: any) => {
+ if ('msg' in action && action.msg === 'toggle_chat') {
+ setShowChat((prev) => !prev);
+ }
+ },
+ },
+ }}
+ >
+
+
+
+ {showChat && (
+
+
+
+ )}
+
+
+
+
+ );
+};
+
+export default CustomVideoLayout;
diff --git a/lib/ParticipantTile.tsx b/lib/ParticipantTile.tsx
index f31a1466..596c1ca8 100644
--- a/lib/ParticipantTile.tsx
+++ b/lib/ParticipantTile.tsx
@@ -1,144 +1,132 @@
-import React, { useEffect, useState } from 'react';
-import { AudioTrack, useTracks, VideoTrack, useTrackRefContext } from '@livekit/components-react';
-import { Track, Participant } from 'livekit-client';
-
-function getAvatarColor(identity: string): string {
- const colors = [
- '#4CAF50',
- '#8BC34A',
- '#CDDC39',
- '#FFC107',
- '#FF9800',
- '#FF5722',
- '#F44336',
- '#E91E63',
- '#9C27B0',
- '#673AB7',
- '#3F51B5',
- '#2196F3',
- '#03A9F4',
- '#00BCD4',
- '#009688',
- ];
-
- let hash = 0;
- for (let i = 0; i < identity.length; i++) {
- hash = identity.charCodeAt(i) + ((hash << 5) - hash);
- }
-
- const index = Math.abs(hash) % colors.length;
- return colors[index];
-}
-
-function getInitials(name: string): string {
- if (!name) return '?';
-
- const parts = name.split(' ');
- if (parts.length === 1) {
- return parts[0].charAt(0).toUpperCase();
- }
-
- return (parts[0].charAt(0) + parts[parts.length - 1].charAt(0)).toUpperCase();
-}
-
-export interface ParticipantTileProps {
- participant?: Participant;
-}
-
-export const ParticipantTile: React.FC = ({
- participant: propParticipant,
-}) => {
- const trackRef = useTrackRefContext();
- const participant = propParticipant || trackRef?.participant;
-
- if (!participant) return null;
-
- const [profilePictureUrl, setProfilePictureUrl] = useState(null);
-
- const isValidTrackRef =
- trackRef && 'publication' in trackRef && trackRef.publication !== undefined;
-
- const cameraTrack =
- isValidTrackRef && trackRef.source === Track.Source.Camera
- ? trackRef
- : useTracks([Track.Source.Camera], { onlySubscribed: false }).filter(
- (track) => track.participant.identity === participant.identity,
- )[0];
-
- const microphoneTrack = useTracks([Track.Source.Microphone], { onlySubscribed: false }).filter(
- (track) => track.participant.identity === participant.identity,
- )[0];
-
- const isSpeaking = participant.isSpeaking;
-
- useEffect(() => {
- if (participant.metadata) {
- try {
- const metadata = JSON.parse(participant.metadata);
- if (metadata.profilePictureUrl) {
- setProfilePictureUrl(metadata.profilePictureUrl);
- }
- } catch (e) {
- console.error('Failed to parse participant metadata', e);
- }
- }
- }, [participant.metadata]);
-
- const hasCamera = !!cameraTrack;
- const isCameraEnabled = hasCamera && !cameraTrack.publication?.isMuted;
-
- const hasMicrophone = !!microphoneTrack;
- const isMicrophoneEnabled = hasMicrophone && !microphoneTrack.publication?.isMuted;
-
- const avatarColor = getAvatarColor(participant.identity);
- const initials = getInitials(participant.name || participant.identity);
-
- return (
-
- {isCameraEnabled ? (
-
-
-
- ) : (
-
- {profilePictureUrl ? (
-

- ) : (
-
{initials}
- )}
-
- )}
-
-
- {isMicrophoneEnabled ? (
- isSpeaking ? (
-
- graphic_eq
-
- ) : (
- mic
- )
- ) : (
- mic_off
- )}
- {participant.name || participant.identity}
-
-
- {hasMicrophone && microphoneTrack &&
}
-
- );
-};
-
-export default ParticipantTile;
+import React, { useEffect, useState } from 'react';
+import { AudioTrack, useTracks, VideoTrack, useTrackRefContext } from '@livekit/components-react';
+import { Track, Participant } from 'livekit-client';
+
+function getAvatarColor(identity: string): string {
+ const colors = [
+ '#4CAF50',
+ '#8BC34A',
+ '#CDDC39',
+ '#FFC107',
+ '#FF9800',
+ '#FF5722',
+ '#F44336',
+ '#E91E63',
+ '#9C27B0',
+ '#673AB7',
+ '#3F51B5',
+ '#2196F3',
+ '#03A9F4',
+ '#00BCD4',
+ '#009688',
+ ];
+
+ let hash = 0;
+ for (let i = 0; i < identity.length; i++) {
+ hash = identity.charCodeAt(i) + ((hash << 5) - hash);
+ }
+
+ const index = Math.abs(hash) % colors.length;
+ return colors[index];
+}
+
+function getInitials(name: string): string {
+ if (!name) return '?';
+
+ const parts = name.split(' ');
+ if (parts.length === 1) {
+ return parts[0].charAt(0).toUpperCase();
+ }
+
+ return (parts[0].charAt(0) + parts[parts.length - 1].charAt(0)).toUpperCase();
+}
+
+export interface ParticipantTileProps {
+ participant?: Participant;
+}
+
+export const ParticipantTile: React.FC = ({
+ participant: propParticipant,
+}) => {
+ const trackRef = useTrackRefContext();
+ const participant = propParticipant || trackRef?.participant;
+
+ if (!participant) return null;
+
+ const [profilePictureUrl, setProfilePictureUrl] = useState(null);
+
+ const isValidTrackRef =
+ trackRef && 'publication' in trackRef && trackRef.publication !== undefined;
+
+ const cameraTrack =
+ isValidTrackRef && trackRef.source === Track.Source.Camera
+ ? trackRef
+ : useTracks([Track.Source.Camera], { onlySubscribed: false }).filter(
+ (track) => track.participant.identity === participant.identity,
+ )[0];
+
+ const microphoneTrack = useTracks([Track.Source.Microphone], { onlySubscribed: false }).filter(
+ (track) => track.participant.identity === participant.identity,
+ )[0];
+
+ const isSpeaking = participant.isSpeaking;
+
+ useEffect(() => {
+ if (participant.metadata) {
+ try {
+ const metadata = JSON.parse(participant.metadata);
+ if (metadata.profilePictureUrl) {
+ setProfilePictureUrl(metadata.profilePictureUrl);
+ }
+ } catch (e) {
+ console.error('Failed to parse participant metadata', e);
+ }
+ }
+ }, [participant.metadata]);
+
+ const hasCamera = !!cameraTrack;
+ const isCameraEnabled = hasCamera && !cameraTrack.publication?.isMuted;
+
+ const hasMicrophone = !!microphoneTrack;
+ const isMicrophoneEnabled = hasMicrophone && !microphoneTrack.publication?.isMuted;
+
+ const avatarColor = getAvatarColor(participant.identity);
+ const initials = getInitials(participant.name || participant.identity);
+
+ return (
+
+ {isCameraEnabled ? (
+
+
+
+ ) : (
+
+ {profilePictureUrl ? (
+

+ ) : (
+
{initials}
+ )}
+
+ )}
+
+
+ {isMicrophoneEnabled ? (
+ <>
+ {isSpeaking ? (
+ graphic_eq
+ ) : (
+ mic
+ )}
+ >
+ ) : (
+ mic_off
+ )}
+ {participant.name || participant.identity}
+
+
+ {hasMicrophone && microphoneTrack &&
}
+
+ );
+};
+
+export default ParticipantTile;
diff --git a/lib/client-utils.ts b/lib/client-utils.ts
index b37257fa..5b797d3d 100644
--- a/lib/client-utils.ts
+++ b/lib/client-utils.ts
@@ -19,3 +19,46 @@ export function randomString(length: number): string {
}
return result;
}
+
+export function mergeClasses(...classes: (string | undefined | null | false)[]): string {
+ return classes.filter(Boolean).join(' ');
+}
+
+export function getAvatarColor(identity: string): string {
+ const colors = [
+ '#4CAF50',
+ '#8BC34A',
+ '#CDDC39',
+ '#FFC107',
+ '#FF9800',
+ '#FF5722',
+ '#F44336',
+ '#E91E63',
+ '#9C27B0',
+ '#673AB7',
+ '#3F51B5',
+ '#2196F3',
+ '#03A9F4',
+ '#00BCD4',
+ '#009688',
+ ];
+
+ let hash = 0;
+ for (let i = 0; i < identity.length; i++) {
+ hash = identity.charCodeAt(i) + ((hash << 5) - hash);
+ }
+
+ const index = Math.abs(hash) % colors.length;
+ return colors[index];
+}
+
+export function getInitials(name: string): string {
+ if (!name) return '?';
+
+ const parts = name.split(' ');
+ if (parts.length === 1) {
+ return parts[0].charAt(0).toUpperCase();
+ }
+
+ return (parts[0].charAt(0) + parts[parts.length - 1].charAt(0)).toUpperCase();
+}
diff --git a/package.json b/package.json
index aaf098e8..77900480 100644
--- a/package.json
+++ b/package.json
@@ -10,6 +10,7 @@
},
"dependencies": {
"@datadog/browser-logs": "^5.23.3",
+ "@livekit/components-core": "^0.12.1",
"@livekit/components-react": "2.6.0",
"@livekit/components-styles": "1.1.2",
"@livekit/krisp-noise-filter": "^0.2.8",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index f0f82629..1ab5ba1d 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -5,12 +5,14 @@ settings:
excludeLinksFromLockfile: false
importers:
-
.:
dependencies:
'@datadog/browser-logs':
specifier: ^5.23.3
version: 5.26.0
+ '@livekit/components-core':
+ specifier: ^0.12.1
+ version: 0.12.1(livekit-client@2.8.1)(tslib@2.8.1)
'@livekit/components-react':
specifier: 2.6.0
version: 2.6.0(@livekit/protocol@1.34.0)(livekit-client@2.8.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tslib@2.8.1)
@@ -65,15 +67,23 @@ importers:
version: 5.5.4
packages:
-
'@bufbuild/protobuf@1.10.0':
- resolution: {integrity: sha512-QDdVFLoN93Zjg36NoQPZfsVH9tZew7wKDKyV5qRdj8ntT4wQCOradQjRaTdwMhWUYsgKsvCINKKm87FdEk96Ag==}
+ resolution:
+ {
+ integrity: sha512-QDdVFLoN93Zjg36NoQPZfsVH9tZew7wKDKyV5qRdj8ntT4wQCOradQjRaTdwMhWUYsgKsvCINKKm87FdEk96Ag==,
+ }
'@datadog/browser-core@5.26.0':
- resolution: {integrity: sha512-/UAS6q7xkc9bsjn5ziPC6PDs3B0Fyd+4PM/hxmXIvOxMFkJa1KmgWcqlkxq3i7TW/i2k2tOgtgTFUtjp4SyEmg==}
+ resolution:
+ {
+ integrity: sha512-/UAS6q7xkc9bsjn5ziPC6PDs3B0Fyd+4PM/hxmXIvOxMFkJa1KmgWcqlkxq3i7TW/i2k2tOgtgTFUtjp4SyEmg==,
+ }
'@datadog/browser-logs@5.26.0':
- resolution: {integrity: sha512-udyBI3+XoqN2zbTEGZjig1rfk5phwwkvb3W2Fqd4JWZiTrlct/bJ2BNV6yrzaSLtTHabOaoebaQCQ87jcq+XpA==}
+ resolution:
+ {
+ integrity: sha512-udyBI3+XoqN2zbTEGZjig1rfk5phwwkvb3W2Fqd4JWZiTrlct/bJ2BNV6yrzaSLtTHabOaoebaQCQ87jcq+XpA==,
+ }
peerDependencies:
'@datadog/browser-rum': 5.26.0
peerDependenciesMeta:
@@ -81,84 +91,154 @@ packages:
optional: true
'@eslint-community/eslint-utils@4.4.0':
- resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ resolution:
+ {
+ integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==,
+ }
+ engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 }
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
'@eslint-community/regexpp@4.11.0':
- resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==}
- engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+ resolution:
+ {
+ integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==,
+ }
+ engines: { node: ^12.0.0 || ^14.0.0 || >=16.0.0 }
'@eslint/config-array@0.18.0':
- resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ resolution:
+ {
+ integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==,
+ }
+ engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 }
'@eslint/eslintrc@3.1.0':
- resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ resolution:
+ {
+ integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==,
+ }
+ engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 }
'@eslint/js@9.9.1':
- resolution: {integrity: sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ resolution:
+ {
+ integrity: sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==,
+ }
+ engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 }
'@eslint/object-schema@2.1.4':
- resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ resolution:
+ {
+ integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==,
+ }
+ engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 }
'@floating-ui/core@1.6.7':
- resolution: {integrity: sha512-yDzVT/Lm101nQ5TCVeK65LtdN7Tj4Qpr9RTXJ2vPFLqtLxwOrpoxAHAJI8J3yYWUc40J0BDBheaitK5SJmno2g==}
+ resolution:
+ {
+ integrity: sha512-yDzVT/Lm101nQ5TCVeK65LtdN7Tj4Qpr9RTXJ2vPFLqtLxwOrpoxAHAJI8J3yYWUc40J0BDBheaitK5SJmno2g==,
+ }
'@floating-ui/dom@1.6.11':
- resolution: {integrity: sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ==}
+ resolution:
+ {
+ integrity: sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ==,
+ }
'@floating-ui/utils@0.2.8':
- resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==}
+ resolution:
+ {
+ integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==,
+ }
'@humanwhocodes/module-importer@1.0.1':
- resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
- engines: {node: '>=12.22'}
+ resolution:
+ {
+ integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==,
+ }
+ engines: { node: '>=12.22' }
'@humanwhocodes/retry@0.3.0':
- resolution: {integrity: sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==}
- engines: {node: '>=18.18'}
+ resolution:
+ {
+ integrity: sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==,
+ }
+ engines: { node: '>=18.18' }
'@isaacs/cliui@8.0.2':
- resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
- engines: {node: '>=12'}
+ resolution:
+ {
+ integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==,
+ }
+ engines: { node: '>=12' }
'@jridgewell/gen-mapping@0.3.5':
- resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
- engines: {node: '>=6.0.0'}
+ resolution:
+ {
+ integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==,
+ }
+ engines: { node: '>=6.0.0' }
'@jridgewell/resolve-uri@3.1.2':
- resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
- engines: {node: '>=6.0.0'}
+ resolution:
+ {
+ integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==,
+ }
+ engines: { node: '>=6.0.0' }
'@jridgewell/set-array@1.2.1':
- resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
- engines: {node: '>=6.0.0'}
+ resolution:
+ {
+ integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==,
+ }
+ engines: { node: '>=6.0.0' }
'@jridgewell/source-map@0.3.6':
- resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==}
+ resolution:
+ {
+ integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==,
+ }
'@jridgewell/sourcemap-codec@1.5.0':
- resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
+ resolution:
+ {
+ integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==,
+ }
'@jridgewell/trace-mapping@0.3.25':
- resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
+ resolution:
+ {
+ integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==,
+ }
'@livekit/components-core@0.11.5':
- resolution: {integrity: sha512-aaWPQJEfbY5tUND+diB7sW/6dRWN/H9lwqVy7L3nt15MszN1lX7ZlM9gA4ODquv+wUyFhxYfjRm7jVuV/g234g==}
- engines: {node: '>=18'}
+ resolution:
+ {
+ integrity: sha512-aaWPQJEfbY5tUND+diB7sW/6dRWN/H9lwqVy7L3nt15MszN1lX7ZlM9gA4ODquv+wUyFhxYfjRm7jVuV/g234g==,
+ }
+ engines: { node: '>=18' }
peerDependencies:
'@livekit/protocol': ^1.20.1
livekit-client: ^2.4.0
tslib: ^2.6.2
+ '@livekit/components-core@0.12.1':
+ resolution:
+ {
+ integrity: sha512-R7qWoVzPckOYxEHZgP3Kp8u+amu+isnTptgoZV7+bpmLRBHI7mWnaD+0uDWlyIMjI1pBbK3wHg0ILKa5UytI+A==,
+ }
+ engines: { node: '>=18' }
+ peerDependencies:
+ livekit-client: ^2.8.1
+ tslib: ^2.6.2
+
'@livekit/components-react@2.6.0':
- resolution: {integrity: sha512-02J4qhgetAyBs4+vNOsdLDuocufHKujT9L9W2yNnHQFE9SO/JVxxpN5OXzupBnPNh5U2f37VkTsp1lAtxJM2Hg==}
- engines: {node: '>=18'}
+ resolution:
+ {
+ integrity: sha512-02J4qhgetAyBs4+vNOsdLDuocufHKujT9L9W2yNnHQFE9SO/JVxxpN5OXzupBnPNh5U2f37VkTsp1lAtxJM2Hg==,
+ }
+ engines: { node: '>=18' }
peerDependencies:
'@livekit/protocol': ^1.20.1
livekit-client: ^2.4.0
@@ -167,136 +247,232 @@ packages:
tslib: ^2.6.2
'@livekit/components-styles@1.1.2':
- resolution: {integrity: sha512-6ghL+JQWPnD3AYK+Zfcd100Kvh5YrrG2z23REyXUjtHpQjPRgg7F/lmHNa7Jz55afCv0L0BQFYpfo5Z4Kdc+tw==}
- engines: {node: '>=18'}
+ resolution:
+ {
+ integrity: sha512-6ghL+JQWPnD3AYK+Zfcd100Kvh5YrrG2z23REyXUjtHpQjPRgg7F/lmHNa7Jz55afCv0L0BQFYpfo5Z4Kdc+tw==,
+ }
+ engines: { node: '>=18' }
'@livekit/krisp-noise-filter@0.2.8':
- resolution: {integrity: sha512-WPlQOwm4bC3jxtCFxlc+l0Ai44NbfeSXwQ0MGnv4gC3TVam+imHU5agFHdc+6TFRsQAaq7wRtLjAbt7shrpzaw==}
+ resolution:
+ {
+ integrity: sha512-WPlQOwm4bC3jxtCFxlc+l0Ai44NbfeSXwQ0MGnv4gC3TVam+imHU5agFHdc+6TFRsQAaq7wRtLjAbt7shrpzaw==,
+ }
peerDependencies:
livekit-client: ^2.0.8
'@livekit/mutex@1.1.1':
- resolution: {integrity: sha512-EsshAucklmpuUAfkABPxJNhzj9v2sG7JuzFDL4ML1oJQSV14sqrpTYnsaOudMAw9yOaW53NU3QQTlUQoRs4czw==}
+ resolution:
+ {
+ integrity: sha512-EsshAucklmpuUAfkABPxJNhzj9v2sG7JuzFDL4ML1oJQSV14sqrpTYnsaOudMAw9yOaW53NU3QQTlUQoRs4czw==,
+ }
'@livekit/protocol@1.30.0':
- resolution: {integrity: sha512-SDI9ShVKj8N3oOSinr8inaxD3FXgmgoJlqN35uU/Yx1sdoDeQbzAuBFox7bYjM+VhnZ1V22ivIDjAsKr00H+XQ==}
+ resolution:
+ {
+ integrity: sha512-SDI9ShVKj8N3oOSinr8inaxD3FXgmgoJlqN35uU/Yx1sdoDeQbzAuBFox7bYjM+VhnZ1V22ivIDjAsKr00H+XQ==,
+ }
'@livekit/protocol@1.34.0':
- resolution: {integrity: sha512-bU7pCLAMRVTVZb1KSxA46q55bhOc4iATrY/gccy2/oX1D57tiZEI+8wGRWHeDwBb0UwnABu6JXzC4tTFkdsaOg==}
+ resolution:
+ {
+ integrity: sha512-bU7pCLAMRVTVZb1KSxA46q55bhOc4iATrY/gccy2/oX1D57tiZEI+8wGRWHeDwBb0UwnABu6JXzC4tTFkdsaOg==,
+ }
'@next/env@14.2.12':
- resolution: {integrity: sha512-3fP29GIetdwVIfIRyLKM7KrvJaqepv+6pVodEbx0P5CaMLYBtx+7eEg8JYO5L9sveJO87z9eCReceZLi0hxO1Q==}
+ resolution:
+ {
+ integrity: sha512-3fP29GIetdwVIfIRyLKM7KrvJaqepv+6pVodEbx0P5CaMLYBtx+7eEg8JYO5L9sveJO87z9eCReceZLi0hxO1Q==,
+ }
'@next/eslint-plugin-next@14.2.7':
- resolution: {integrity: sha512-+7xh142AdhZGjY9/L0iFo7mqRBMJHe+q+uOL+hto1Lfo9DeWCGcR6no4StlFbVSVcA6fQLKEX6y6qhMsSKbgNQ==}
+ resolution:
+ {
+ integrity: sha512-+7xh142AdhZGjY9/L0iFo7mqRBMJHe+q+uOL+hto1Lfo9DeWCGcR6no4StlFbVSVcA6fQLKEX6y6qhMsSKbgNQ==,
+ }
'@next/swc-darwin-arm64@14.2.12':
- resolution: {integrity: sha512-crHJ9UoinXeFbHYNok6VZqjKnd8rTd7K3Z2zpyzF1ch7vVNKmhjv/V7EHxep3ILoN8JB9AdRn/EtVVyG9AkCXw==}
- engines: {node: '>= 10'}
+ resolution:
+ {
+ integrity: sha512-crHJ9UoinXeFbHYNok6VZqjKnd8rTd7K3Z2zpyzF1ch7vVNKmhjv/V7EHxep3ILoN8JB9AdRn/EtVVyG9AkCXw==,
+ }
+ engines: { node: '>= 10' }
cpu: [arm64]
os: [darwin]
'@next/swc-darwin-x64@14.2.12':
- resolution: {integrity: sha512-JbEaGbWq18BuNBO+lCtKfxl563Uw9oy2TodnN2ioX00u7V1uzrsSUcg3Ep9ce+P0Z9es+JmsvL2/rLphz+Frcw==}
- engines: {node: '>= 10'}
+ resolution:
+ {
+ integrity: sha512-JbEaGbWq18BuNBO+lCtKfxl563Uw9oy2TodnN2ioX00u7V1uzrsSUcg3Ep9ce+P0Z9es+JmsvL2/rLphz+Frcw==,
+ }
+ engines: { node: '>= 10' }
cpu: [x64]
os: [darwin]
'@next/swc-linux-arm64-gnu@14.2.12':
- resolution: {integrity: sha512-qBy7OiXOqZrdp88QEl2H4fWalMGnSCrr1agT/AVDndlyw2YJQA89f3ttR/AkEIP9EkBXXeGl6cC72/EZT5r6rw==}
- engines: {node: '>= 10'}
+ resolution:
+ {
+ integrity: sha512-qBy7OiXOqZrdp88QEl2H4fWalMGnSCrr1agT/AVDndlyw2YJQA89f3ttR/AkEIP9EkBXXeGl6cC72/EZT5r6rw==,
+ }
+ engines: { node: '>= 10' }
cpu: [arm64]
os: [linux]
'@next/swc-linux-arm64-musl@14.2.12':
- resolution: {integrity: sha512-EfD9L7o9biaQxjwP1uWXnk3vYZi64NVcKUN83hpVkKocB7ogJfyH2r7o1pPnMtir6gHZiGCeHKagJ0yrNSLNHw==}
- engines: {node: '>= 10'}
+ resolution:
+ {
+ integrity: sha512-EfD9L7o9biaQxjwP1uWXnk3vYZi64NVcKUN83hpVkKocB7ogJfyH2r7o1pPnMtir6gHZiGCeHKagJ0yrNSLNHw==,
+ }
+ engines: { node: '>= 10' }
cpu: [arm64]
os: [linux]
'@next/swc-linux-x64-gnu@14.2.12':
- resolution: {integrity: sha512-iQ+n2pxklJew9IpE47hE/VgjmljlHqtcD5UhZVeHICTPbLyrgPehaKf2wLRNjYH75udroBNCgrSSVSVpAbNoYw==}
- engines: {node: '>= 10'}
+ resolution:
+ {
+ integrity: sha512-iQ+n2pxklJew9IpE47hE/VgjmljlHqtcD5UhZVeHICTPbLyrgPehaKf2wLRNjYH75udroBNCgrSSVSVpAbNoYw==,
+ }
+ engines: { node: '>= 10' }
cpu: [x64]
os: [linux]
'@next/swc-linux-x64-musl@14.2.12':
- resolution: {integrity: sha512-rFkUkNwcQ0ODn7cxvcVdpHlcOpYxMeyMfkJuzaT74xjAa5v4fxP4xDk5OoYmPi8QNLDs3UgZPMSBmpBuv9zKWA==}
- engines: {node: '>= 10'}
+ resolution:
+ {
+ integrity: sha512-rFkUkNwcQ0ODn7cxvcVdpHlcOpYxMeyMfkJuzaT74xjAa5v4fxP4xDk5OoYmPi8QNLDs3UgZPMSBmpBuv9zKWA==,
+ }
+ engines: { node: '>= 10' }
cpu: [x64]
os: [linux]
'@next/swc-win32-arm64-msvc@14.2.12':
- resolution: {integrity: sha512-PQFYUvwtHs/u0K85SG4sAdDXYIPXpETf9mcEjWc0R4JmjgMKSDwIU/qfZdavtP6MPNiMjuKGXHCtyhR/M5zo8g==}
- engines: {node: '>= 10'}
+ resolution:
+ {
+ integrity: sha512-PQFYUvwtHs/u0K85SG4sAdDXYIPXpETf9mcEjWc0R4JmjgMKSDwIU/qfZdavtP6MPNiMjuKGXHCtyhR/M5zo8g==,
+ }
+ engines: { node: '>= 10' }
cpu: [arm64]
os: [win32]
'@next/swc-win32-ia32-msvc@14.2.12':
- resolution: {integrity: sha512-FAj2hMlcbeCV546eU2tEv41dcJb4NeqFlSXU/xL/0ehXywHnNpaYajOUvn3P8wru5WyQe6cTZ8fvckj/2XN4Vw==}
- engines: {node: '>= 10'}
+ resolution:
+ {
+ integrity: sha512-FAj2hMlcbeCV546eU2tEv41dcJb4NeqFlSXU/xL/0ehXywHnNpaYajOUvn3P8wru5WyQe6cTZ8fvckj/2XN4Vw==,
+ }
+ engines: { node: '>= 10' }
cpu: [ia32]
os: [win32]
'@next/swc-win32-x64-msvc@14.2.12':
- resolution: {integrity: sha512-yu8QvV53sBzoIVRHsxCHqeuS8jYq6Lrmdh0briivuh+Brsp6xjg80MAozUsBTAV9KNmY08KlX0KYTWz1lbPzEg==}
- engines: {node: '>= 10'}
+ resolution:
+ {
+ integrity: sha512-yu8QvV53sBzoIVRHsxCHqeuS8jYq6Lrmdh0briivuh+Brsp6xjg80MAozUsBTAV9KNmY08KlX0KYTWz1lbPzEg==,
+ }
+ engines: { node: '>= 10' }
cpu: [x64]
os: [win32]
'@nodelib/fs.scandir@2.1.5':
- resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
- engines: {node: '>= 8'}
+ resolution:
+ {
+ integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==,
+ }
+ engines: { node: '>= 8' }
'@nodelib/fs.stat@2.0.5':
- resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
- engines: {node: '>= 8'}
+ resolution:
+ {
+ integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==,
+ }
+ engines: { node: '>= 8' }
'@nodelib/fs.walk@1.2.8':
- resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
- engines: {node: '>= 8'}
+ resolution:
+ {
+ integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==,
+ }
+ engines: { node: '>= 8' }
'@nolyfill/is-core-module@1.0.39':
- resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==}
- engines: {node: '>=12.4.0'}
+ resolution:
+ {
+ integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==,
+ }
+ engines: { node: '>=12.4.0' }
'@pkgjs/parseargs@0.11.0':
- resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
- engines: {node: '>=14'}
+ resolution:
+ {
+ integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==,
+ }
+ engines: { node: '>=14' }
'@rushstack/eslint-patch@1.10.4':
- resolution: {integrity: sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==}
+ resolution:
+ {
+ integrity: sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==,
+ }
'@swc/counter@0.1.3':
- resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==}
+ resolution:
+ {
+ integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==,
+ }
'@swc/helpers@0.5.5':
- resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==}
+ resolution:
+ {
+ integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==,
+ }
'@types/estree@1.0.5':
- resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
+ resolution:
+ {
+ integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==,
+ }
'@types/json-schema@7.0.15':
- resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+ resolution:
+ {
+ integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==,
+ }
'@types/json5@0.0.29':
- resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+ resolution:
+ {
+ integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==,
+ }
'@types/node@20.16.3':
- resolution: {integrity: sha512-/wdGiWRkMOm53gAsSyFMXFZHbVg7C6CbkrzHNpaHoYfsUWPg7m6ZRKtvQjgvQ9i8WT540a3ydRlRQbxjY30XxQ==}
+ resolution:
+ {
+ integrity: sha512-/wdGiWRkMOm53gAsSyFMXFZHbVg7C6CbkrzHNpaHoYfsUWPg7m6ZRKtvQjgvQ9i8WT540a3ydRlRQbxjY30XxQ==,
+ }
'@types/prop-types@15.7.12':
- resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==}
+ resolution:
+ {
+ integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==,
+ }
'@types/react-dom@18.3.0':
- resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==}
+ resolution:
+ {
+ integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==,
+ }
'@types/react@18.3.8':
- resolution: {integrity: sha512-syBUrW3/XpnW4WJ41Pft+I+aPoDVbrBVQGEnbD7NijDGlVC+8gV/XKRY+7vMDlfPpbwYt0l1vd/Sj8bJGMbs9Q==}
+ resolution:
+ {
+ integrity: sha512-syBUrW3/XpnW4WJ41Pft+I+aPoDVbrBVQGEnbD7NijDGlVC+8gV/XKRY+7vMDlfPpbwYt0l1vd/Sj8bJGMbs9Q==,
+ }
'@typescript-eslint/parser@7.2.0':
- resolution: {integrity: sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==}
- engines: {node: ^16.0.0 || >=18.0.0}
+ resolution:
+ {
+ integrity: sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==,
+ }
+ engines: { node: ^16.0.0 || >=18.0.0 }
peerDependencies:
eslint: ^8.56.0
typescript: '*'
@@ -305,16 +481,25 @@ packages:
optional: true
'@typescript-eslint/scope-manager@7.2.0':
- resolution: {integrity: sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==}
- engines: {node: ^16.0.0 || >=18.0.0}
+ resolution:
+ {
+ integrity: sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==,
+ }
+ engines: { node: ^16.0.0 || >=18.0.0 }
'@typescript-eslint/types@7.2.0':
- resolution: {integrity: sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==}
- engines: {node: ^16.0.0 || >=18.0.0}
+ resolution:
+ {
+ integrity: sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==,
+ }
+ engines: { node: ^16.0.0 || >=18.0.0 }
'@typescript-eslint/typescript-estree@7.2.0':
- resolution: {integrity: sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==}
- engines: {node: ^16.0.0 || >=18.0.0}
+ resolution:
+ {
+ integrity: sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==,
+ }
+ engines: { node: ^16.0.0 || >=18.0.0 }
peerDependencies:
typescript: '*'
peerDependenciesMeta:
@@ -322,251 +507,458 @@ packages:
optional: true
'@typescript-eslint/visitor-keys@7.2.0':
- resolution: {integrity: sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==}
- engines: {node: ^16.0.0 || >=18.0.0}
+ resolution:
+ {
+ integrity: sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==,
+ }
+ engines: { node: ^16.0.0 || >=18.0.0 }
'@webassemblyjs/ast@1.12.1':
- resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==}
+ resolution:
+ {
+ integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==,
+ }
'@webassemblyjs/floating-point-hex-parser@1.11.6':
- resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==}
+ resolution:
+ {
+ integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==,
+ }
'@webassemblyjs/helper-api-error@1.11.6':
- resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==}
+ resolution:
+ {
+ integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==,
+ }
'@webassemblyjs/helper-buffer@1.12.1':
- resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==}
+ resolution:
+ {
+ integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==,
+ }
'@webassemblyjs/helper-numbers@1.11.6':
- resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==}
+ resolution:
+ {
+ integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==,
+ }
'@webassemblyjs/helper-wasm-bytecode@1.11.6':
- resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==}
+ resolution:
+ {
+ integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==,
+ }
'@webassemblyjs/helper-wasm-section@1.12.1':
- resolution: {integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==}
+ resolution:
+ {
+ integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==,
+ }
'@webassemblyjs/ieee754@1.11.6':
- resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==}
+ resolution:
+ {
+ integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==,
+ }
'@webassemblyjs/leb128@1.11.6':
- resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==}
+ resolution:
+ {
+ integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==,
+ }
'@webassemblyjs/utf8@1.11.6':
- resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==}
+ resolution:
+ {
+ integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==,
+ }
'@webassemblyjs/wasm-edit@1.12.1':
- resolution: {integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==}
+ resolution:
+ {
+ integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==,
+ }
'@webassemblyjs/wasm-gen@1.12.1':
- resolution: {integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==}
+ resolution:
+ {
+ integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==,
+ }
'@webassemblyjs/wasm-opt@1.12.1':
- resolution: {integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==}
+ resolution:
+ {
+ integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==,
+ }
'@webassemblyjs/wasm-parser@1.12.1':
- resolution: {integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==}
+ resolution:
+ {
+ integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==,
+ }
'@webassemblyjs/wast-printer@1.12.1':
- resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==}
+ resolution:
+ {
+ integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==,
+ }
'@xtuc/ieee754@1.2.0':
- resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==}
+ resolution:
+ {
+ integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==,
+ }
'@xtuc/long@4.2.2':
- resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==}
+ resolution:
+ {
+ integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==,
+ }
acorn-import-attributes@1.9.5:
- resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==}
+ resolution:
+ {
+ integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==,
+ }
peerDependencies:
acorn: ^8
acorn-jsx@5.3.2:
- resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+ resolution:
+ {
+ integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==,
+ }
peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
acorn@8.12.1:
- resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==}
- engines: {node: '>=0.4.0'}
+ resolution:
+ {
+ integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==,
+ }
+ engines: { node: '>=0.4.0' }
hasBin: true
ajv-keywords@3.5.2:
- resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==}
+ resolution:
+ {
+ integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==,
+ }
peerDependencies:
ajv: ^6.9.1
ajv@6.12.6:
- resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+ resolution:
+ {
+ integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==,
+ }
ansi-regex@5.0.1:
- resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
- engines: {node: '>=8'}
+ resolution:
+ {
+ integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==,
+ }
+ engines: { node: '>=8' }
ansi-regex@6.0.1:
- resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
- engines: {node: '>=12'}
+ resolution:
+ {
+ integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==,
+ }
+ engines: { node: '>=12' }
ansi-styles@4.3.0:
- resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
- engines: {node: '>=8'}
+ resolution:
+ {
+ integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==,
+ }
+ engines: { node: '>=8' }
ansi-styles@6.2.1:
- resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
- engines: {node: '>=12'}
+ resolution:
+ {
+ integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==,
+ }
+ engines: { node: '>=12' }
argparse@2.0.1:
- resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+ resolution:
+ {
+ integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==,
+ }
aria-query@5.1.3:
- resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==}
+ resolution:
+ {
+ integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==,
+ }
array-buffer-byte-length@1.0.1:
- resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==,
+ }
+ engines: { node: '>= 0.4' }
array-includes@3.1.8:
- resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==,
+ }
+ engines: { node: '>= 0.4' }
array-union@2.1.0:
- resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
- engines: {node: '>=8'}
+ resolution:
+ {
+ integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==,
+ }
+ engines: { node: '>=8' }
array.prototype.findlast@1.2.5:
- resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==,
+ }
+ engines: { node: '>= 0.4' }
array.prototype.findlastindex@1.2.5:
- resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==,
+ }
+ engines: { node: '>= 0.4' }
array.prototype.flat@1.3.2:
- resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==,
+ }
+ engines: { node: '>= 0.4' }
array.prototype.flatmap@1.3.2:
- resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==,
+ }
+ engines: { node: '>= 0.4' }
array.prototype.tosorted@1.1.4:
- resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==,
+ }
+ engines: { node: '>= 0.4' }
arraybuffer.prototype.slice@1.0.3:
- resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==,
+ }
+ engines: { node: '>= 0.4' }
ast-types-flow@0.0.8:
- resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==}
+ resolution:
+ {
+ integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==,
+ }
available-typed-arrays@1.0.7:
- resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==,
+ }
+ engines: { node: '>= 0.4' }
axe-core@4.10.0:
- resolution: {integrity: sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==}
- engines: {node: '>=4'}
+ resolution:
+ {
+ integrity: sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==,
+ }
+ engines: { node: '>=4' }
axobject-query@3.1.1:
- resolution: {integrity: sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==}
+ resolution:
+ {
+ integrity: sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==,
+ }
balanced-match@1.0.2:
- resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+ resolution:
+ {
+ integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==,
+ }
brace-expansion@1.1.11:
- resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+ resolution:
+ {
+ integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==,
+ }
brace-expansion@2.0.1:
- resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
+ resolution:
+ {
+ integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==,
+ }
braces@3.0.3:
- resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
- engines: {node: '>=8'}
+ resolution:
+ {
+ integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==,
+ }
+ engines: { node: '>=8' }
browserslist@4.23.3:
- resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==}
- engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ resolution:
+ {
+ integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==,
+ }
+ engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 }
hasBin: true
buffer-from@1.1.2:
- resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+ resolution:
+ {
+ integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==,
+ }
busboy@1.6.0:
- resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
- engines: {node: '>=10.16.0'}
+ resolution:
+ {
+ integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==,
+ }
+ engines: { node: '>=10.16.0' }
call-bind@1.0.7:
- resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==,
+ }
+ engines: { node: '>= 0.4' }
callsites@3.1.0:
- resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
- engines: {node: '>=6'}
+ resolution:
+ {
+ integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==,
+ }
+ engines: { node: '>=6' }
camelcase-keys@9.1.3:
- resolution: {integrity: sha512-Rircqi9ch8AnZscQcsA1C47NFdaO3wukpmIRzYcDOrmvgt78hM/sj5pZhZNec2NM12uk5vTwRHZ4anGcrC4ZTg==}
- engines: {node: '>=16'}
+ resolution:
+ {
+ integrity: sha512-Rircqi9ch8AnZscQcsA1C47NFdaO3wukpmIRzYcDOrmvgt78hM/sj5pZhZNec2NM12uk5vTwRHZ4anGcrC4ZTg==,
+ }
+ engines: { node: '>=16' }
camelcase@8.0.0:
- resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==}
- engines: {node: '>=16'}
+ resolution:
+ {
+ integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==,
+ }
+ engines: { node: '>=16' }
caniuse-lite@1.0.30001660:
- resolution: {integrity: sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==}
+ resolution:
+ {
+ integrity: sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==,
+ }
chalk@4.1.2:
- resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
- engines: {node: '>=10'}
+ resolution:
+ {
+ integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==,
+ }
+ engines: { node: '>=10' }
chrome-trace-event@1.0.4:
- resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==}
- engines: {node: '>=6.0'}
+ resolution:
+ {
+ integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==,
+ }
+ engines: { node: '>=6.0' }
client-only@0.0.1:
- resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
+ resolution:
+ {
+ integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==,
+ }
clsx@2.1.1:
- resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
- engines: {node: '>=6'}
+ resolution:
+ {
+ integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==,
+ }
+ engines: { node: '>=6' }
color-convert@2.0.1:
- resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
- engines: {node: '>=7.0.0'}
+ resolution:
+ {
+ integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==,
+ }
+ engines: { node: '>=7.0.0' }
color-name@1.1.4:
- resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+ resolution:
+ {
+ integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==,
+ }
commander@2.20.3:
- resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+ resolution:
+ {
+ integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==,
+ }
concat-map@0.0.1:
- resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+ resolution:
+ {
+ integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==,
+ }
cross-spawn@7.0.3:
- resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
- engines: {node: '>= 8'}
+ resolution:
+ {
+ integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==,
+ }
+ engines: { node: '>= 8' }
csstype@3.1.3:
- resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
+ resolution:
+ {
+ integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==,
+ }
damerau-levenshtein@1.0.8:
- resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==}
+ resolution:
+ {
+ integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==,
+ }
data-view-buffer@1.0.1:
- resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==,
+ }
+ engines: { node: '>= 0.4' }
data-view-byte-length@1.0.1:
- resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==,
+ }
+ engines: { node: '>= 0.4' }
data-view-byte-offset@1.0.0:
- resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==,
+ }
+ engines: { node: '>= 0.4' }
debug@3.2.7:
- resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
+ resolution:
+ {
+ integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==,
+ }
peerDependencies:
supports-color: '*'
peerDependenciesMeta:
@@ -574,8 +966,11 @@ packages:
optional: true
debug@4.3.6:
- resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==}
- engines: {node: '>=6.0'}
+ resolution:
+ {
+ integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==,
+ }
+ engines: { node: '>=6.0' }
peerDependencies:
supports-color: '*'
peerDependenciesMeta:
@@ -583,91 +978,163 @@ packages:
optional: true
deep-equal@2.2.3:
- resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==,
+ }
+ engines: { node: '>= 0.4' }
deep-is@0.1.4:
- resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
+ resolution:
+ {
+ integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==,
+ }
define-data-property@1.1.4:
- resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==,
+ }
+ engines: { node: '>= 0.4' }
define-properties@1.2.1:
- resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==,
+ }
+ engines: { node: '>= 0.4' }
dir-glob@3.0.1:
- resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
- engines: {node: '>=8'}
+ resolution:
+ {
+ integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==,
+ }
+ engines: { node: '>=8' }
doctrine@2.1.0:
- resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
- engines: {node: '>=0.10.0'}
+ resolution:
+ {
+ integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==,
+ }
+ engines: { node: '>=0.10.0' }
eastasianwidth@0.2.0:
- resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
+ resolution:
+ {
+ integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==,
+ }
electron-to-chromium@1.5.19:
- resolution: {integrity: sha512-kpLJJi3zxTR1U828P+LIUDZ5ohixyo68/IcYOHLqnbTPr/wdgn4i1ECvmALN9E16JPA6cvCG5UG79gVwVdEK5w==}
+ resolution:
+ {
+ integrity: sha512-kpLJJi3zxTR1U828P+LIUDZ5ohixyo68/IcYOHLqnbTPr/wdgn4i1ECvmALN9E16JPA6cvCG5UG79gVwVdEK5w==,
+ }
emoji-regex@8.0.0:
- resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+ resolution:
+ {
+ integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==,
+ }
emoji-regex@9.2.2:
- resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+ resolution:
+ {
+ integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==,
+ }
enhanced-resolve@5.17.1:
- resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==}
- engines: {node: '>=10.13.0'}
+ resolution:
+ {
+ integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==,
+ }
+ engines: { node: '>=10.13.0' }
es-abstract@1.23.3:
- resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==,
+ }
+ engines: { node: '>= 0.4' }
es-define-property@1.0.0:
- resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==,
+ }
+ engines: { node: '>= 0.4' }
es-errors@1.3.0:
- resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==,
+ }
+ engines: { node: '>= 0.4' }
es-get-iterator@1.1.3:
- resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==}
+ resolution:
+ {
+ integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==,
+ }
es-iterator-helpers@1.0.19:
- resolution: {integrity: sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==,
+ }
+ engines: { node: '>= 0.4' }
es-module-lexer@1.5.4:
- resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==}
+ resolution:
+ {
+ integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==,
+ }
es-object-atoms@1.0.0:
- resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==,
+ }
+ engines: { node: '>= 0.4' }
es-set-tostringtag@2.0.3:
- resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==,
+ }
+ engines: { node: '>= 0.4' }
es-shim-unscopables@1.0.2:
- resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==}
+ resolution:
+ {
+ integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==,
+ }
es-to-primitive@1.2.1:
- resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==,
+ }
+ engines: { node: '>= 0.4' }
escalade@3.2.0:
- resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
- engines: {node: '>=6'}
+ resolution:
+ {
+ integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==,
+ }
+ engines: { node: '>=6' }
escape-string-regexp@4.0.0:
- resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
- engines: {node: '>=10'}
+ resolution:
+ {
+ integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==,
+ }
+ engines: { node: '>=10' }
eslint-config-next@14.2.7:
- resolution: {integrity: sha512-ppmy+QdQ7qkuCHGDlPjWaoSbJvjGpWSBD4zEW8f1eWlxYXYpZK7QzBOer1EcHKT3uKhlY1JjUus9g7Kvv712rw==}
+ resolution:
+ {
+ integrity: sha512-ppmy+QdQ7qkuCHGDlPjWaoSbJvjGpWSBD4zEW8f1eWlxYXYpZK7QzBOer1EcHKT3uKhlY1JjUus9g7Kvv712rw==,
+ }
peerDependencies:
eslint: ^7.23.0 || ^8.0.0
typescript: '>=3.3.1'
@@ -676,11 +1143,17 @@ packages:
optional: true
eslint-import-resolver-node@0.3.9:
- resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
+ resolution:
+ {
+ integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==,
+ }
eslint-import-resolver-typescript@3.6.3:
- resolution: {integrity: sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==}
- engines: {node: ^14.18.0 || >=16.0.0}
+ resolution:
+ {
+ integrity: sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==,
+ }
+ engines: { node: ^14.18.0 || >=16.0.0 }
peerDependencies:
eslint: '*'
eslint-plugin-import: '*'
@@ -692,8 +1165,11 @@ packages:
optional: true
eslint-module-utils@2.8.2:
- resolution: {integrity: sha512-3XnC5fDyc8M4J2E8pt8pmSVRX2M+5yWMCfI/kDZwauQeFgzQOuhcRBFKjTeJagqgk4sFKxe1mvNVnaWwImx/Tg==}
- engines: {node: '>=4'}
+ resolution:
+ {
+ integrity: sha512-3XnC5fDyc8M4J2E8pt8pmSVRX2M+5yWMCfI/kDZwauQeFgzQOuhcRBFKjTeJagqgk4sFKxe1mvNVnaWwImx/Tg==,
+ }
+ engines: { node: '>=4' }
peerDependencies:
'@typescript-eslint/parser': '*'
eslint: '*'
@@ -713,8 +1189,11 @@ packages:
optional: true
eslint-plugin-import@2.29.1:
- resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==}
- engines: {node: '>=4'}
+ resolution:
+ {
+ integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==,
+ }
+ engines: { node: '>=4' }
peerDependencies:
'@typescript-eslint/parser': '*'
eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8
@@ -723,42 +1202,66 @@ packages:
optional: true
eslint-plugin-jsx-a11y@6.9.0:
- resolution: {integrity: sha512-nOFOCaJG2pYqORjK19lqPqxMO/JpvdCZdPtNdxY3kvom3jTvkAbOvQvD8wuD0G8BYR0IGAGYDlzqWJOh/ybn2g==}
- engines: {node: '>=4.0'}
+ resolution:
+ {
+ integrity: sha512-nOFOCaJG2pYqORjK19lqPqxMO/JpvdCZdPtNdxY3kvom3jTvkAbOvQvD8wuD0G8BYR0IGAGYDlzqWJOh/ybn2g==,
+ }
+ engines: { node: '>=4.0' }
peerDependencies:
eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
eslint-plugin-react-hooks@4.6.2:
- resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==}
- engines: {node: '>=10'}
+ resolution:
+ {
+ integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==,
+ }
+ engines: { node: '>=10' }
peerDependencies:
eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
eslint-plugin-react@7.35.0:
- resolution: {integrity: sha512-v501SSMOWv8gerHkk+IIQBkcGRGrO2nfybfj5pLxuJNFTPxxA3PSryhXTK+9pNbtkggheDdsC0E9Q8CuPk6JKA==}
- engines: {node: '>=4'}
+ resolution:
+ {
+ integrity: sha512-v501SSMOWv8gerHkk+IIQBkcGRGrO2nfybfj5pLxuJNFTPxxA3PSryhXTK+9pNbtkggheDdsC0E9Q8CuPk6JKA==,
+ }
+ engines: { node: '>=4' }
peerDependencies:
eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7
eslint-scope@5.1.1:
- resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
- engines: {node: '>=8.0.0'}
+ resolution:
+ {
+ integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==,
+ }
+ engines: { node: '>=8.0.0' }
eslint-scope@8.0.2:
- resolution: {integrity: sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ resolution:
+ {
+ integrity: sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==,
+ }
+ engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 }
eslint-visitor-keys@3.4.3:
- resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ resolution:
+ {
+ integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==,
+ }
+ engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 }
eslint-visitor-keys@4.0.0:
- resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ resolution:
+ {
+ integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==,
+ }
+ engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 }
eslint@9.9.1:
- resolution: {integrity: sha512-dHvhrbfr4xFQ9/dq+jcVneZMyRYLjggWjk6RVsIiHsP8Rz6yZ8LvZ//iU4TrZF+SXWG+JkNF2OyiZRvzgRDqMg==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ resolution:
+ {
+ integrity: sha512-dHvhrbfr4xFQ9/dq+jcVneZMyRYLjggWjk6RVsIiHsP8Rz6yZ8LvZ//iU4TrZF+SXWG+JkNF2OyiZRvzgRDqMg==,
+ }
+ engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 }
hasBin: true
peerDependencies:
jiti: '*'
@@ -767,445 +1270,805 @@ packages:
optional: true
espree@10.1.0:
- resolution: {integrity: sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ resolution:
+ {
+ integrity: sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==,
+ }
+ engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 }
esquery@1.6.0:
- resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
- engines: {node: '>=0.10'}
+ resolution:
+ {
+ integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==,
+ }
+ engines: { node: '>=0.10' }
esrecurse@4.3.0:
- resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
- engines: {node: '>=4.0'}
+ resolution:
+ {
+ integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==,
+ }
+ engines: { node: '>=4.0' }
estraverse@4.3.0:
- resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
- engines: {node: '>=4.0'}
+ resolution:
+ {
+ integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==,
+ }
+ engines: { node: '>=4.0' }
estraverse@5.3.0:
- resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
- engines: {node: '>=4.0'}
+ resolution:
+ {
+ integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==,
+ }
+ engines: { node: '>=4.0' }
esutils@2.0.3:
- resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
- engines: {node: '>=0.10.0'}
+ resolution:
+ {
+ integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==,
+ }
+ engines: { node: '>=0.10.0' }
events@3.3.0:
- resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
- engines: {node: '>=0.8.x'}
+ resolution:
+ {
+ integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==,
+ }
+ engines: { node: '>=0.8.x' }
fast-deep-equal@3.1.3:
- resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+ resolution:
+ {
+ integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==,
+ }
fast-glob@3.3.2:
- resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
- engines: {node: '>=8.6.0'}
+ resolution:
+ {
+ integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==,
+ }
+ engines: { node: '>=8.6.0' }
fast-json-stable-stringify@2.1.0:
- resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+ resolution:
+ {
+ integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==,
+ }
fast-levenshtein@2.0.6:
- resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+ resolution:
+ {
+ integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==,
+ }
fastq@1.17.1:
- resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
+ resolution:
+ {
+ integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==,
+ }
file-entry-cache@8.0.0:
- resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
- engines: {node: '>=16.0.0'}
+ resolution:
+ {
+ integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==,
+ }
+ engines: { node: '>=16.0.0' }
fill-range@7.1.1:
- resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
- engines: {node: '>=8'}
+ resolution:
+ {
+ integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==,
+ }
+ engines: { node: '>=8' }
find-up@5.0.0:
- resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
- engines: {node: '>=10'}
+ resolution:
+ {
+ integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==,
+ }
+ engines: { node: '>=10' }
flat-cache@4.0.1:
- resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
- engines: {node: '>=16'}
+ resolution:
+ {
+ integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==,
+ }
+ engines: { node: '>=16' }
flatted@3.3.1:
- resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==}
+ resolution:
+ {
+ integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==,
+ }
for-each@0.3.3:
- resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
+ resolution:
+ {
+ integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==,
+ }
foreground-child@3.3.0:
- resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==}
- engines: {node: '>=14'}
+ resolution:
+ {
+ integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==,
+ }
+ engines: { node: '>=14' }
function-bind@1.1.2:
- resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+ resolution:
+ {
+ integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==,
+ }
function.prototype.name@1.1.6:
- resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==,
+ }
+ engines: { node: '>= 0.4' }
functions-have-names@1.2.3:
- resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
+ resolution:
+ {
+ integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==,
+ }
get-intrinsic@1.2.4:
- resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==,
+ }
+ engines: { node: '>= 0.4' }
get-symbol-description@1.0.2:
- resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==,
+ }
+ engines: { node: '>= 0.4' }
get-tsconfig@4.7.6:
- resolution: {integrity: sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==}
+ resolution:
+ {
+ integrity: sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==,
+ }
glob-parent@5.1.2:
- resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
- engines: {node: '>= 6'}
+ resolution:
+ {
+ integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==,
+ }
+ engines: { node: '>= 6' }
glob-parent@6.0.2:
- resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
- engines: {node: '>=10.13.0'}
+ resolution:
+ {
+ integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==,
+ }
+ engines: { node: '>=10.13.0' }
glob-to-regexp@0.4.1:
- resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
+ resolution:
+ {
+ integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==,
+ }
glob@10.3.10:
- resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==}
- engines: {node: '>=16 || 14 >=14.17'}
+ resolution:
+ {
+ integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==,
+ }
+ engines: { node: '>=16 || 14 >=14.17' }
hasBin: true
globals@14.0.0:
- resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
- engines: {node: '>=18'}
+ resolution:
+ {
+ integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==,
+ }
+ engines: { node: '>=18' }
globalthis@1.0.4:
- resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==,
+ }
+ engines: { node: '>= 0.4' }
globby@11.1.0:
- resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
- engines: {node: '>=10'}
+ resolution:
+ {
+ integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==,
+ }
+ engines: { node: '>=10' }
gopd@1.0.1:
- resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
+ resolution:
+ {
+ integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==,
+ }
graceful-fs@4.2.11:
- resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+ resolution:
+ {
+ integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==,
+ }
has-bigints@1.0.2:
- resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==}
+ resolution:
+ {
+ integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==,
+ }
has-flag@4.0.0:
- resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
- engines: {node: '>=8'}
+ resolution:
+ {
+ integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==,
+ }
+ engines: { node: '>=8' }
has-property-descriptors@1.0.2:
- resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
+ resolution:
+ {
+ integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==,
+ }
has-proto@1.0.3:
- resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==,
+ }
+ engines: { node: '>= 0.4' }
has-symbols@1.0.3:
- resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==,
+ }
+ engines: { node: '>= 0.4' }
has-tostringtag@1.0.2:
- resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==,
+ }
+ engines: { node: '>= 0.4' }
hasown@2.0.2:
- resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==,
+ }
+ engines: { node: '>= 0.4' }
iconv-lite@0.6.3:
- resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
- engines: {node: '>=0.10.0'}
+ resolution:
+ {
+ integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==,
+ }
+ engines: { node: '>=0.10.0' }
ignore@5.3.2:
- resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
- engines: {node: '>= 4'}
+ resolution:
+ {
+ integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==,
+ }
+ engines: { node: '>= 4' }
import-fresh@3.3.0:
- resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
- engines: {node: '>=6'}
+ resolution:
+ {
+ integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==,
+ }
+ engines: { node: '>=6' }
imurmurhash@0.1.4:
- resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
- engines: {node: '>=0.8.19'}
+ resolution:
+ {
+ integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==,
+ }
+ engines: { node: '>=0.8.19' }
internal-slot@1.0.7:
- resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==,
+ }
+ engines: { node: '>= 0.4' }
is-arguments@1.1.1:
- resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==,
+ }
+ engines: { node: '>= 0.4' }
is-array-buffer@3.0.4:
- resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==,
+ }
+ engines: { node: '>= 0.4' }
is-async-function@2.0.0:
- resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==,
+ }
+ engines: { node: '>= 0.4' }
is-bigint@1.0.4:
- resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==}
+ resolution:
+ {
+ integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==,
+ }
is-boolean-object@1.1.2:
- resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==,
+ }
+ engines: { node: '>= 0.4' }
is-bun-module@1.1.0:
- resolution: {integrity: sha512-4mTAVPlrXpaN3jtF0lsnPCMGnq4+qZjVIKq0HCpfcqf8OC1SM5oATCIAPM5V5FN05qp2NNnFndphmdZS9CV3hA==}
+ resolution:
+ {
+ integrity: sha512-4mTAVPlrXpaN3jtF0lsnPCMGnq4+qZjVIKq0HCpfcqf8OC1SM5oATCIAPM5V5FN05qp2NNnFndphmdZS9CV3hA==,
+ }
is-callable@1.2.7:
- resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==,
+ }
+ engines: { node: '>= 0.4' }
is-core-module@2.15.1:
- resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==,
+ }
+ engines: { node: '>= 0.4' }
is-data-view@1.0.1:
- resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==,
+ }
+ engines: { node: '>= 0.4' }
is-date-object@1.0.5:
- resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==,
+ }
+ engines: { node: '>= 0.4' }
is-extglob@2.1.1:
- resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
- engines: {node: '>=0.10.0'}
+ resolution:
+ {
+ integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==,
+ }
+ engines: { node: '>=0.10.0' }
is-finalizationregistry@1.0.2:
- resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==}
+ resolution:
+ {
+ integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==,
+ }
is-fullwidth-code-point@3.0.0:
- resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
- engines: {node: '>=8'}
+ resolution:
+ {
+ integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==,
+ }
+ engines: { node: '>=8' }
is-generator-function@1.0.10:
- resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==,
+ }
+ engines: { node: '>= 0.4' }
is-glob@4.0.3:
- resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
- engines: {node: '>=0.10.0'}
+ resolution:
+ {
+ integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==,
+ }
+ engines: { node: '>=0.10.0' }
is-map@2.0.3:
- resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==,
+ }
+ engines: { node: '>= 0.4' }
is-negative-zero@2.0.3:
- resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==,
+ }
+ engines: { node: '>= 0.4' }
is-number-object@1.0.7:
- resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==,
+ }
+ engines: { node: '>= 0.4' }
is-number@7.0.0:
- resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
- engines: {node: '>=0.12.0'}
+ resolution:
+ {
+ integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==,
+ }
+ engines: { node: '>=0.12.0' }
is-path-inside@3.0.3:
- resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
- engines: {node: '>=8'}
+ resolution:
+ {
+ integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==,
+ }
+ engines: { node: '>=8' }
is-regex@1.1.4:
- resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==,
+ }
+ engines: { node: '>= 0.4' }
is-set@2.0.3:
- resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==,
+ }
+ engines: { node: '>= 0.4' }
is-shared-array-buffer@1.0.3:
- resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==,
+ }
+ engines: { node: '>= 0.4' }
is-string@1.0.7:
- resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==,
+ }
+ engines: { node: '>= 0.4' }
is-symbol@1.0.4:
- resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==,
+ }
+ engines: { node: '>= 0.4' }
is-typed-array@1.1.13:
- resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==,
+ }
+ engines: { node: '>= 0.4' }
is-weakmap@2.0.2:
- resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==,
+ }
+ engines: { node: '>= 0.4' }
is-weakref@1.0.2:
- resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==}
+ resolution:
+ {
+ integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==,
+ }
is-weakset@2.0.3:
- resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==,
+ }
+ engines: { node: '>= 0.4' }
isarray@2.0.5:
- resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
+ resolution:
+ {
+ integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==,
+ }
isexe@2.0.0:
- resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+ resolution:
+ {
+ integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==,
+ }
iterator.prototype@1.1.2:
- resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==}
+ resolution:
+ {
+ integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==,
+ }
jackspeak@2.3.6:
- resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==}
- engines: {node: '>=14'}
+ resolution:
+ {
+ integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==,
+ }
+ engines: { node: '>=14' }
jest-worker@27.5.1:
- resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
- engines: {node: '>= 10.13.0'}
+ resolution:
+ {
+ integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==,
+ }
+ engines: { node: '>= 10.13.0' }
jose@5.8.0:
- resolution: {integrity: sha512-E7CqYpL/t7MMnfGnK/eg416OsFCVUrU/Y3Vwe7QjKhu/BkS1Ms455+2xsqZQVN57/U2MHMBvEb5SrmAZWAIntA==}
+ resolution:
+ {
+ integrity: sha512-E7CqYpL/t7MMnfGnK/eg416OsFCVUrU/Y3Vwe7QjKhu/BkS1Ms455+2xsqZQVN57/U2MHMBvEb5SrmAZWAIntA==,
+ }
js-tokens@4.0.0:
- resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+ resolution:
+ {
+ integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==,
+ }
js-yaml@4.1.0:
- resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ resolution:
+ {
+ integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==,
+ }
hasBin: true
json-buffer@3.0.1:
- resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+ resolution:
+ {
+ integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==,
+ }
json-parse-even-better-errors@2.3.1:
- resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
+ resolution:
+ {
+ integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==,
+ }
json-schema-traverse@0.4.1:
- resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+ resolution:
+ {
+ integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==,
+ }
json-stable-stringify-without-jsonify@1.0.1:
- resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+ resolution:
+ {
+ integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==,
+ }
json5@1.0.2:
- resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ resolution:
+ {
+ integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==,
+ }
hasBin: true
jsx-ast-utils@3.3.5:
- resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==}
- engines: {node: '>=4.0'}
+ resolution:
+ {
+ integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==,
+ }
+ engines: { node: '>=4.0' }
keyv@4.5.4:
- resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+ resolution:
+ {
+ integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==,
+ }
language-subtag-registry@0.3.23:
- resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==}
+ resolution:
+ {
+ integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==,
+ }
language-tags@1.0.9:
- resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==}
- engines: {node: '>=0.10'}
+ resolution:
+ {
+ integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==,
+ }
+ engines: { node: '>=0.10' }
levn@0.4.1:
- resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
- engines: {node: '>= 0.8.0'}
+ resolution:
+ {
+ integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==,
+ }
+ engines: { node: '>= 0.8.0' }
livekit-client@2.8.1:
- resolution: {integrity: sha512-HPv9iHNrnBANI9ucK7CKZspx0sBZK3hjR2EbwaV08+J3RM9+tNGL2ob2n76nxJLEZG7LzdWlLZdbr4fQBP6Hkg==}
+ resolution:
+ {
+ integrity: sha512-HPv9iHNrnBANI9ucK7CKZspx0sBZK3hjR2EbwaV08+J3RM9+tNGL2ob2n76nxJLEZG7LzdWlLZdbr4fQBP6Hkg==,
+ }
livekit-server-sdk@2.9.7:
- resolution: {integrity: sha512-uIkFOaqBCJnVgYOidZdanPWQH5G0LMxe0+Qp5zbx7MZCkJ7lGiju//yonfEvFofriJBKACjMq/KQHBex96QpeA==}
- engines: {node: '>=18'}
+ resolution:
+ {
+ integrity: sha512-uIkFOaqBCJnVgYOidZdanPWQH5G0LMxe0+Qp5zbx7MZCkJ7lGiju//yonfEvFofriJBKACjMq/KQHBex96QpeA==,
+ }
+ engines: { node: '>=18' }
loader-runner@4.3.0:
- resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==}
- engines: {node: '>=6.11.5'}
+ resolution:
+ {
+ integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==,
+ }
+ engines: { node: '>=6.11.5' }
locate-path@6.0.0:
- resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
- engines: {node: '>=10'}
+ resolution:
+ {
+ integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==,
+ }
+ engines: { node: '>=10' }
lodash.debounce@4.0.8:
- resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
+ resolution:
+ {
+ integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==,
+ }
lodash.merge@4.6.2:
- resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
+ resolution:
+ {
+ integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==,
+ }
loglevel@1.9.1:
- resolution: {integrity: sha512-hP3I3kCrDIMuRwAwHltphhDM1r8i55H33GgqjXbrisuJhF4kRhW1dNuxsRklp4bXl8DSdLaNLuiL4A/LWRfxvg==}
- engines: {node: '>= 0.6.0'}
+ resolution:
+ {
+ integrity: sha512-hP3I3kCrDIMuRwAwHltphhDM1r8i55H33GgqjXbrisuJhF4kRhW1dNuxsRklp4bXl8DSdLaNLuiL4A/LWRfxvg==,
+ }
+ engines: { node: '>= 0.6.0' }
loose-envify@1.4.0:
- resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
+ resolution:
+ {
+ integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==,
+ }
hasBin: true
lru-cache@10.4.3:
- resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
+ resolution:
+ {
+ integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==,
+ }
map-obj@5.0.0:
- resolution: {integrity: sha512-2L3MIgJynYrZ3TYMriLDLWocz15okFakV6J12HXvMXDHui2x/zgChzg1u9mFFGbbGWE+GsLpQByt4POb9Or+uA==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ resolution:
+ {
+ integrity: sha512-2L3MIgJynYrZ3TYMriLDLWocz15okFakV6J12HXvMXDHui2x/zgChzg1u9mFFGbbGWE+GsLpQByt4POb9Or+uA==,
+ }
+ engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 }
material-symbols@0.28.2:
- resolution: {integrity: sha512-JLK+Bgtfg5Dn9V2WYk6lSwmxciNNF2zmqc/V8MLmH0K9LttUhPCaauJzrS1Vw3mJPs/Tyfi/tszynNRX6nWQOA==}
+ resolution:
+ {
+ integrity: sha512-JLK+Bgtfg5Dn9V2WYk6lSwmxciNNF2zmqc/V8MLmH0K9LttUhPCaauJzrS1Vw3mJPs/Tyfi/tszynNRX6nWQOA==,
+ }
merge-stream@2.0.0:
- resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
+ resolution:
+ {
+ integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==,
+ }
merge2@1.4.1:
- resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
- engines: {node: '>= 8'}
+ resolution:
+ {
+ integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==,
+ }
+ engines: { node: '>= 8' }
micromatch@4.0.8:
- resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
- engines: {node: '>=8.6'}
+ resolution:
+ {
+ integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==,
+ }
+ engines: { node: '>=8.6' }
mime-db@1.52.0:
- resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
- engines: {node: '>= 0.6'}
+ resolution:
+ {
+ integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==,
+ }
+ engines: { node: '>= 0.6' }
mime-types@2.1.35:
- resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
- engines: {node: '>= 0.6'}
+ resolution:
+ {
+ integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==,
+ }
+ engines: { node: '>= 0.6' }
minimatch@3.1.2:
- resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+ resolution:
+ {
+ integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==,
+ }
minimatch@9.0.3:
- resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==}
- engines: {node: '>=16 || 14 >=14.17'}
+ resolution:
+ {
+ integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==,
+ }
+ engines: { node: '>=16 || 14 >=14.17' }
minimatch@9.0.5:
- resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
- engines: {node: '>=16 || 14 >=14.17'}
+ resolution:
+ {
+ integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==,
+ }
+ engines: { node: '>=16 || 14 >=14.17' }
minimist@1.2.8:
- resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+ resolution:
+ {
+ integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==,
+ }
minipass@7.1.2:
- resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
- engines: {node: '>=16 || 14 >=14.17'}
+ resolution:
+ {
+ integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==,
+ }
+ engines: { node: '>=16 || 14 >=14.17' }
ms@2.1.2:
- resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+ resolution:
+ {
+ integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==,
+ }
ms@2.1.3:
- resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+ resolution:
+ {
+ integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==,
+ }
nanoid@3.3.7:
- resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
- engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ resolution:
+ {
+ integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==,
+ }
+ engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 }
hasBin: true
natural-compare@1.4.0:
- resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+ resolution:
+ {
+ integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==,
+ }
neo-async@2.6.2:
- resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
+ resolution:
+ {
+ integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==,
+ }
next@14.2.12:
- resolution: {integrity: sha512-cDOtUSIeoOvt1skKNihdExWMTybx3exnvbFbb9ecZDIxlvIbREQzt9A5Km3Zn3PfU+IFjyYGsHS+lN9VInAGKA==}
- engines: {node: '>=18.17.0'}
+ resolution:
+ {
+ integrity: sha512-cDOtUSIeoOvt1skKNihdExWMTybx3exnvbFbb9ecZDIxlvIbREQzt9A5Km3Zn3PfU+IFjyYGsHS+lN9VInAGKA==,
+ }
+ engines: { node: '>=18.17.0' }
hasBin: true
peerDependencies:
'@opentelemetry/api': ^1.1.0
@@ -1222,301 +2085,535 @@ packages:
optional: true
node-releases@2.0.18:
- resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==}
+ resolution:
+ {
+ integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==,
+ }
object-assign@4.1.1:
- resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
- engines: {node: '>=0.10.0'}
+ resolution:
+ {
+ integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==,
+ }
+ engines: { node: '>=0.10.0' }
object-inspect@1.13.2:
- resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==,
+ }
+ engines: { node: '>= 0.4' }
object-is@1.1.6:
- resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==,
+ }
+ engines: { node: '>= 0.4' }
object-keys@1.1.1:
- resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==,
+ }
+ engines: { node: '>= 0.4' }
object.assign@4.1.5:
- resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==,
+ }
+ engines: { node: '>= 0.4' }
object.entries@1.1.8:
- resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==,
+ }
+ engines: { node: '>= 0.4' }
object.fromentries@2.0.8:
- resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==,
+ }
+ engines: { node: '>= 0.4' }
object.groupby@1.0.3:
- resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==,
+ }
+ engines: { node: '>= 0.4' }
object.values@1.2.0:
- resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==,
+ }
+ engines: { node: '>= 0.4' }
optionator@0.9.4:
- resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
- engines: {node: '>= 0.8.0'}
+ resolution:
+ {
+ integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==,
+ }
+ engines: { node: '>= 0.8.0' }
p-limit@3.1.0:
- resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
- engines: {node: '>=10'}
+ resolution:
+ {
+ integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==,
+ }
+ engines: { node: '>=10' }
p-locate@5.0.0:
- resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
- engines: {node: '>=10'}
+ resolution:
+ {
+ integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==,
+ }
+ engines: { node: '>=10' }
parent-module@1.0.1:
- resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
- engines: {node: '>=6'}
+ resolution:
+ {
+ integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==,
+ }
+ engines: { node: '>=6' }
path-exists@4.0.0:
- resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
- engines: {node: '>=8'}
+ resolution:
+ {
+ integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==,
+ }
+ engines: { node: '>=8' }
path-key@3.1.1:
- resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
- engines: {node: '>=8'}
+ resolution:
+ {
+ integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==,
+ }
+ engines: { node: '>=8' }
path-parse@1.0.7:
- resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+ resolution:
+ {
+ integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==,
+ }
path-scurry@1.11.1:
- resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
- engines: {node: '>=16 || 14 >=14.18'}
+ resolution:
+ {
+ integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==,
+ }
+ engines: { node: '>=16 || 14 >=14.18' }
path-type@4.0.0:
- resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
- engines: {node: '>=8'}
+ resolution:
+ {
+ integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==,
+ }
+ engines: { node: '>=8' }
picocolors@1.1.0:
- resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==}
+ resolution:
+ {
+ integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==,
+ }
picomatch@2.3.1:
- resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
- engines: {node: '>=8.6'}
+ resolution:
+ {
+ integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==,
+ }
+ engines: { node: '>=8.6' }
possible-typed-array-names@1.0.0:
- resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==,
+ }
+ engines: { node: '>= 0.4' }
postcss@8.4.31:
- resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
- engines: {node: ^10 || ^12 || >=14}
+ resolution:
+ {
+ integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==,
+ }
+ engines: { node: ^10 || ^12 || >=14 }
prelude-ls@1.2.1:
- resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
- engines: {node: '>= 0.8.0'}
+ resolution:
+ {
+ integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==,
+ }
+ engines: { node: '>= 0.8.0' }
prop-types@15.8.1:
- resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
+ resolution:
+ {
+ integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==,
+ }
punycode@2.3.1:
- resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
- engines: {node: '>=6'}
+ resolution:
+ {
+ integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==,
+ }
+ engines: { node: '>=6' }
queue-microtask@1.2.3:
- resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+ resolution:
+ {
+ integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==,
+ }
quick-lru@6.1.2:
- resolution: {integrity: sha512-AAFUA5O1d83pIHEhJwWCq/RQcRukCkn/NSm2QsTEMle5f2hP0ChI2+3Xb051PZCkLryI/Ir1MVKviT2FIloaTQ==}
- engines: {node: '>=12'}
+ resolution:
+ {
+ integrity: sha512-AAFUA5O1d83pIHEhJwWCq/RQcRukCkn/NSm2QsTEMle5f2hP0ChI2+3Xb051PZCkLryI/Ir1MVKviT2FIloaTQ==,
+ }
+ engines: { node: '>=12' }
randombytes@2.1.0:
- resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+ resolution:
+ {
+ integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==,
+ }
react-dom@18.3.1:
- resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==}
+ resolution:
+ {
+ integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==,
+ }
peerDependencies:
react: ^18.3.1
react-is@16.13.1:
- resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
+ resolution:
+ {
+ integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==,
+ }
react@18.3.1:
- resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
- engines: {node: '>=0.10.0'}
+ resolution:
+ {
+ integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==,
+ }
+ engines: { node: '>=0.10.0' }
reflect.getprototypeof@1.0.6:
- resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==,
+ }
+ engines: { node: '>= 0.4' }
regexp.prototype.flags@1.5.2:
- resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==,
+ }
+ engines: { node: '>= 0.4' }
resolve-from@4.0.0:
- resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
- engines: {node: '>=4'}
+ resolution:
+ {
+ integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==,
+ }
+ engines: { node: '>=4' }
resolve-pkg-maps@1.0.0:
- resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
+ resolution:
+ {
+ integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==,
+ }
resolve@1.22.8:
- resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
+ resolution:
+ {
+ integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==,
+ }
hasBin: true
resolve@2.0.0-next.5:
- resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==}
+ resolution:
+ {
+ integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==,
+ }
hasBin: true
reusify@1.0.4:
- resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
- engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+ resolution:
+ {
+ integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==,
+ }
+ engines: { iojs: '>=1.0.0', node: '>=0.10.0' }
run-parallel@1.2.0:
- resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+ resolution:
+ {
+ integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==,
+ }
rxjs@7.8.1:
- resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==}
+ resolution:
+ {
+ integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==,
+ }
safe-array-concat@1.1.2:
- resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==}
- engines: {node: '>=0.4'}
+ resolution:
+ {
+ integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==,
+ }
+ engines: { node: '>=0.4' }
safe-buffer@5.2.1:
- resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+ resolution:
+ {
+ integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==,
+ }
safe-regex-test@1.0.3:
- resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==,
+ }
+ engines: { node: '>= 0.4' }
safer-buffer@2.1.2:
- resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+ resolution:
+ {
+ integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==,
+ }
scheduler@0.23.2:
- resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==}
+ resolution:
+ {
+ integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==,
+ }
schema-utils@3.3.0:
- resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==}
- engines: {node: '>= 10.13.0'}
+ resolution:
+ {
+ integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==,
+ }
+ engines: { node: '>= 10.13.0' }
sdp-transform@2.14.2:
- resolution: {integrity: sha512-icY6jVao7MfKCieyo1AyxFYm1baiM+fA00qW/KrNNVlkxHAd34riEKuEkUe4bBb3gJwLJZM+xT60Yj1QL8rHiA==}
+ resolution:
+ {
+ integrity: sha512-icY6jVao7MfKCieyo1AyxFYm1baiM+fA00qW/KrNNVlkxHAd34riEKuEkUe4bBb3gJwLJZM+xT60Yj1QL8rHiA==,
+ }
hasBin: true
sdp@3.2.0:
- resolution: {integrity: sha512-d7wDPgDV3DDiqulJjKiV2865wKsJ34YI+NDREbm+FySq6WuKOikwyNQcm+doLAZ1O6ltdO0SeKle2xMpN3Brgw==}
+ resolution:
+ {
+ integrity: sha512-d7wDPgDV3DDiqulJjKiV2865wKsJ34YI+NDREbm+FySq6WuKOikwyNQcm+doLAZ1O6ltdO0SeKle2xMpN3Brgw==,
+ }
semver@6.3.1:
- resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
+ resolution:
+ {
+ integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==,
+ }
hasBin: true
semver@7.6.3:
- resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==}
- engines: {node: '>=10'}
+ resolution:
+ {
+ integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==,
+ }
+ engines: { node: '>=10' }
hasBin: true
serialize-javascript@6.0.2:
- resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
+ resolution:
+ {
+ integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==,
+ }
set-function-length@1.2.2:
- resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==,
+ }
+ engines: { node: '>= 0.4' }
set-function-name@2.0.2:
- resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==,
+ }
+ engines: { node: '>= 0.4' }
shebang-command@2.0.0:
- resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
- engines: {node: '>=8'}
+ resolution:
+ {
+ integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==,
+ }
+ engines: { node: '>=8' }
shebang-regex@3.0.0:
- resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
- engines: {node: '>=8'}
+ resolution:
+ {
+ integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==,
+ }
+ engines: { node: '>=8' }
side-channel@1.0.6:
- resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==,
+ }
+ engines: { node: '>= 0.4' }
signal-exit@4.1.0:
- resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
- engines: {node: '>=14'}
+ resolution:
+ {
+ integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==,
+ }
+ engines: { node: '>=14' }
slash@3.0.0:
- resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
- engines: {node: '>=8'}
+ resolution:
+ {
+ integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==,
+ }
+ engines: { node: '>=8' }
source-map-js@1.2.0:
- resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==}
- engines: {node: '>=0.10.0'}
+ resolution:
+ {
+ integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==,
+ }
+ engines: { node: '>=0.10.0' }
source-map-loader@5.0.0:
- resolution: {integrity: sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==}
- engines: {node: '>= 18.12.0'}
+ resolution:
+ {
+ integrity: sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==,
+ }
+ engines: { node: '>= 18.12.0' }
peerDependencies:
webpack: ^5.72.1
source-map-support@0.5.21:
- resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+ resolution:
+ {
+ integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==,
+ }
source-map@0.6.1:
- resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
- engines: {node: '>=0.10.0'}
+ resolution:
+ {
+ integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==,
+ }
+ engines: { node: '>=0.10.0' }
stop-iteration-iterator@1.0.0:
- resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==,
+ }
+ engines: { node: '>= 0.4' }
streamsearch@1.1.0:
- resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
- engines: {node: '>=10.0.0'}
+ resolution:
+ {
+ integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==,
+ }
+ engines: { node: '>=10.0.0' }
string-width@4.2.3:
- resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
- engines: {node: '>=8'}
+ resolution:
+ {
+ integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==,
+ }
+ engines: { node: '>=8' }
string-width@5.1.2:
- resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
- engines: {node: '>=12'}
+ resolution:
+ {
+ integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==,
+ }
+ engines: { node: '>=12' }
string.prototype.includes@2.0.0:
- resolution: {integrity: sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg==}
+ resolution:
+ {
+ integrity: sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg==,
+ }
string.prototype.matchall@4.0.11:
- resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==,
+ }
+ engines: { node: '>= 0.4' }
string.prototype.repeat@1.0.0:
- resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==}
+ resolution:
+ {
+ integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==,
+ }
string.prototype.trim@1.2.9:
- resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==,
+ }
+ engines: { node: '>= 0.4' }
string.prototype.trimend@1.0.8:
- resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==}
+ resolution:
+ {
+ integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==,
+ }
string.prototype.trimstart@1.0.8:
- resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==,
+ }
+ engines: { node: '>= 0.4' }
strip-ansi@6.0.1:
- resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
- engines: {node: '>=8'}
+ resolution:
+ {
+ integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==,
+ }
+ engines: { node: '>=8' }
strip-ansi@7.1.0:
- resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
- engines: {node: '>=12'}
+ resolution:
+ {
+ integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==,
+ }
+ engines: { node: '>=12' }
strip-bom@3.0.0:
- resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
- engines: {node: '>=4'}
+ resolution:
+ {
+ integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==,
+ }
+ engines: { node: '>=4' }
strip-json-comments@3.1.1:
- resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
- engines: {node: '>=8'}
+ resolution:
+ {
+ integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==,
+ }
+ engines: { node: '>=8' }
styled-jsx@5.1.1:
- resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==}
- engines: {node: '>= 12.0.0'}
+ resolution:
+ {
+ integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==,
+ }
+ engines: { node: '>= 12.0.0' }
peerDependencies:
'@babel/core': '*'
babel-plugin-macros: '*'
@@ -1528,24 +2625,39 @@ packages:
optional: true
supports-color@7.2.0:
- resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
- engines: {node: '>=8'}
+ resolution:
+ {
+ integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==,
+ }
+ engines: { node: '>=8' }
supports-color@8.1.1:
- resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
- engines: {node: '>=10'}
+ resolution:
+ {
+ integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==,
+ }
+ engines: { node: '>=10' }
supports-preserve-symlinks-flag@1.0.0:
- resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==,
+ }
+ engines: { node: '>= 0.4' }
tapable@2.2.1:
- resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
- engines: {node: '>=6'}
+ resolution:
+ {
+ integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==,
+ }
+ engines: { node: '>=6' }
terser-webpack-plugin@5.3.10:
- resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==}
- engines: {node: '>= 10.13.0'}
+ resolution:
+ {
+ integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==,
+ }
+ engines: { node: '>= 10.13.0' }
peerDependencies:
'@swc/core': '*'
esbuild: '*'
@@ -1560,102 +2672,171 @@ packages:
optional: true
terser@5.32.0:
- resolution: {integrity: sha512-v3Gtw3IzpBJ0ugkxEX8U0W6+TnPKRRCWGh1jC/iM/e3Ki5+qvO1L1EAZ56bZasc64aXHwRHNIQEzm6//i5cemQ==}
- engines: {node: '>=10'}
+ resolution:
+ {
+ integrity: sha512-v3Gtw3IzpBJ0ugkxEX8U0W6+TnPKRRCWGh1jC/iM/e3Ki5+qvO1L1EAZ56bZasc64aXHwRHNIQEzm6//i5cemQ==,
+ }
+ engines: { node: '>=10' }
hasBin: true
text-table@0.2.0:
- resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
+ resolution:
+ {
+ integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==,
+ }
tinykeys@2.1.0:
- resolution: {integrity: sha512-/MESnqBD1xItZJn5oGQ4OsNORQgJfPP96XSGoyu4eLpwpL0ifO0SYR5OD76u0YMhMXsqkb0UqvI9+yXTh4xv8Q==}
+ resolution:
+ {
+ integrity: sha512-/MESnqBD1xItZJn5oGQ4OsNORQgJfPP96XSGoyu4eLpwpL0ifO0SYR5OD76u0YMhMXsqkb0UqvI9+yXTh4xv8Q==,
+ }
to-regex-range@5.0.1:
- resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
- engines: {node: '>=8.0'}
+ resolution:
+ {
+ integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==,
+ }
+ engines: { node: '>=8.0' }
ts-api-utils@1.3.0:
- resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==}
- engines: {node: '>=16'}
+ resolution:
+ {
+ integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==,
+ }
+ engines: { node: '>=16' }
peerDependencies:
typescript: '>=4.2.0'
ts-debounce@4.0.0:
- resolution: {integrity: sha512-+1iDGY6NmOGidq7i7xZGA4cm8DAa6fqdYcvO5Z6yBevH++Bdo9Qt/mN0TzHUgcCcKv1gmh9+W5dHqz8pMWbCbg==}
+ resolution:
+ {
+ integrity: sha512-+1iDGY6NmOGidq7i7xZGA4cm8DAa6fqdYcvO5Z6yBevH++Bdo9Qt/mN0TzHUgcCcKv1gmh9+W5dHqz8pMWbCbg==,
+ }
tsconfig-paths@3.15.0:
- resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
-
- tslib@2.7.0:
- resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==}
+ resolution:
+ {
+ integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==,
+ }
tslib@2.8.1:
- resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+ resolution:
+ {
+ integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==,
+ }
type-check@0.4.0:
- resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
- engines: {node: '>= 0.8.0'}
+ resolution:
+ {
+ integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==,
+ }
+ engines: { node: '>= 0.8.0' }
type-fest@4.25.0:
- resolution: {integrity: sha512-bRkIGlXsnGBRBQRAY56UXBm//9qH4bmJfFvq83gSz41N282df+fjy8ofcEgc1sM8geNt5cl6mC2g9Fht1cs8Aw==}
- engines: {node: '>=16'}
+ resolution:
+ {
+ integrity: sha512-bRkIGlXsnGBRBQRAY56UXBm//9qH4bmJfFvq83gSz41N282df+fjy8ofcEgc1sM8geNt5cl6mC2g9Fht1cs8Aw==,
+ }
+ engines: { node: '>=16' }
typed-array-buffer@1.0.2:
- resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==,
+ }
+ engines: { node: '>= 0.4' }
typed-array-byte-length@1.0.1:
- resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==,
+ }
+ engines: { node: '>= 0.4' }
typed-array-byte-offset@1.0.2:
- resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==,
+ }
+ engines: { node: '>= 0.4' }
typed-array-length@1.0.6:
- resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==,
+ }
+ engines: { node: '>= 0.4' }
typed-emitter@2.1.0:
- resolution: {integrity: sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==}
+ resolution:
+ {
+ integrity: sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==,
+ }
typescript@5.5.4:
- resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==}
- engines: {node: '>=14.17'}
+ resolution:
+ {
+ integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==,
+ }
+ engines: { node: '>=14.17' }
hasBin: true
unbox-primitive@1.0.2:
- resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
+ resolution:
+ {
+ integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==,
+ }
undici-types@6.19.8:
- resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
+ resolution:
+ {
+ integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==,
+ }
update-browserslist-db@1.1.0:
- resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==}
+ resolution:
+ {
+ integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==,
+ }
hasBin: true
peerDependencies:
browserslist: '>= 4.21.0'
uri-js@4.4.1:
- resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+ resolution:
+ {
+ integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==,
+ }
usehooks-ts@3.1.0:
- resolution: {integrity: sha512-bBIa7yUyPhE1BCc0GmR96VU/15l/9gP1Ch5mYdLcFBaFGQsdmXkvjV0TtOqW1yUd6VjIwDunm+flSciCQXujiw==}
- engines: {node: '>=16.15.0'}
+ resolution:
+ {
+ integrity: sha512-bBIa7yUyPhE1BCc0GmR96VU/15l/9gP1Ch5mYdLcFBaFGQsdmXkvjV0TtOqW1yUd6VjIwDunm+flSciCQXujiw==,
+ }
+ engines: { node: '>=16.15.0' }
peerDependencies:
react: ^16.8.0 || ^17 || ^18
watchpack@2.4.2:
- resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==}
- engines: {node: '>=10.13.0'}
+ resolution:
+ {
+ integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==,
+ }
+ engines: { node: '>=10.13.0' }
webpack-sources@3.2.3:
- resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==}
- engines: {node: '>=10.13.0'}
+ resolution:
+ {
+ integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==,
+ }
+ engines: { node: '>=10.13.0' }
webpack@5.94.0:
- resolution: {integrity: sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==}
- engines: {node: '>=10.13.0'}
+ resolution:
+ {
+ integrity: sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==,
+ }
+ engines: { node: '>=10.13.0' }
hasBin: true
peerDependencies:
webpack-cli: '*'
@@ -1664,47 +2845,76 @@ packages:
optional: true
webrtc-adapter@9.0.1:
- resolution: {integrity: sha512-1AQO+d4ElfVSXyzNVTOewgGT/tAomwwztX/6e3totvyyzXPvXIIuUUjAmyZGbKBKbZOXauuJooZm3g6IuFuiNQ==}
- engines: {node: '>=6.0.0', npm: '>=3.10.0'}
+ resolution:
+ {
+ integrity: sha512-1AQO+d4ElfVSXyzNVTOewgGT/tAomwwztX/6e3totvyyzXPvXIIuUUjAmyZGbKBKbZOXauuJooZm3g6IuFuiNQ==,
+ }
+ engines: { node: '>=6.0.0', npm: '>=3.10.0' }
which-boxed-primitive@1.0.2:
- resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
+ resolution:
+ {
+ integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==,
+ }
which-builtin-type@1.1.4:
- resolution: {integrity: sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==,
+ }
+ engines: { node: '>= 0.4' }
which-collection@1.0.2:
- resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==,
+ }
+ engines: { node: '>= 0.4' }
which-typed-array@1.1.15:
- resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==}
- engines: {node: '>= 0.4'}
+ resolution:
+ {
+ integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==,
+ }
+ engines: { node: '>= 0.4' }
which@2.0.2:
- resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
- engines: {node: '>= 8'}
+ resolution:
+ {
+ integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==,
+ }
+ engines: { node: '>= 8' }
hasBin: true
word-wrap@1.2.5:
- resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
- engines: {node: '>=0.10.0'}
+ resolution:
+ {
+ integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==,
+ }
+ engines: { node: '>=0.10.0' }
wrap-ansi@7.0.0:
- resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
- engines: {node: '>=10'}
+ resolution:
+ {
+ integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==,
+ }
+ engines: { node: '>=10' }
wrap-ansi@8.1.0:
- resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
- engines: {node: '>=12'}
+ resolution:
+ {
+ integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==,
+ }
+ engines: { node: '>=12' }
yocto-queue@0.1.0:
- resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
- engines: {node: '>=10'}
+ resolution:
+ {
+ integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==,
+ }
+ engines: { node: '>=10' }
snapshots:
-
'@bufbuild/protobuf@1.10.0': {}
'@datadog/browser-core@5.26.0': {}
@@ -1801,6 +3011,14 @@ snapshots:
rxjs: 7.8.1
tslib: 2.8.1
+ '@livekit/components-core@0.12.1(livekit-client@2.8.1)(tslib@2.8.1)':
+ dependencies:
+ '@floating-ui/dom': 1.6.11
+ livekit-client: 2.8.1
+ loglevel: 1.9.1
+ rxjs: 7.8.1
+ tslib: 2.8.1
+
'@livekit/components-react@2.6.0(@livekit/protocol@1.34.0)(livekit-client@2.8.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tslib@2.8.1)':
dependencies:
'@livekit/components-core': 0.11.5(@livekit/protocol@1.34.0)(livekit-client@2.8.1)(tslib@2.8.1)
@@ -1885,7 +3103,7 @@ snapshots:
'@swc/helpers@0.5.5':
dependencies:
'@swc/counter': 0.1.3
- tslib: 2.7.0
+ tslib: 2.8.1
'@types/estree@1.0.5': {}
@@ -3214,7 +4432,7 @@ snapshots:
rxjs@7.8.1:
dependencies:
- tslib: 2.7.0
+ tslib: 2.8.1
safe-array-concat@1.1.2:
dependencies:
@@ -3431,8 +4649,6 @@ snapshots:
minimist: 1.2.8
strip-bom: 3.0.0
- tslib@2.7.0: {}
-
tslib@2.8.1: {}
type-check@0.4.0:
diff --git a/prod.yaml b/prod.yaml
index bb9b4599..93555825 100644
--- a/prod.yaml
+++ b/prod.yaml
@@ -1,5 +1,4 @@
services:
-
caddy:
image: caddy:2.8.4-alpine
restart: unless-stopped
@@ -16,7 +15,7 @@ services:
livekit:
image: sphinxlightning/sphinx-livekit:latest
restart: on-failure
- command: ["node", "server.js"]
+ command: ['node', 'server.js']
container_name: livekit.sphinx
environment:
- HOSTNAME=0.0.0.0
@@ -25,9 +24,3 @@ services:
volumes:
caddy:
-
-
-
-
-
-
diff --git a/styles/CustomControlBar.css b/styles/CustomControlBar.css
index f7c9e590..c138e921 100644
--- a/styles/CustomControlBar.css
+++ b/styles/CustomControlBar.css
@@ -10,14 +10,15 @@
bottom: 0;
left: 0;
right: 0;
- background: rgba(0, 0, 0, 0.8);
+ background: rgba(0, 0, 0, 0.8);
z-index: 1000;
backdrop-filter: blur(5px);
- -webkit-backdrop-filter: blur(5px); /* Added for Safari compatibility */
+ -webkit-backdrop-filter: blur(5px);
+ /* Added for Safari compatibility */
}
.room-name-box {
- background: rgba(144, 155, 170, 0.1);
+ background: rgba(144, 155, 170, 0.1);
border-radius: 8px;
padding: 5px 10px;
display: flex;
@@ -28,7 +29,7 @@
.room-name {
font-family: 'Roboto', sans-serif;
font-size: 14px;
- color: #909baa;
+ color: #909baa;
}
.copy-link-button {
@@ -54,7 +55,7 @@
.control-button {
width: 40px;
height: 40px;
- background: rgba(144, 155, 170, 0.1);
+ background: rgba(144, 155, 170, 0.1);
border-radius: 8px;
border: none;
cursor: pointer;
@@ -63,38 +64,43 @@
justify-content: center;
}
+/* Status Disabled */
+.material-symbols-outlined[button-state='inactive'] {
+ color: #ed7473;
+}
+
/* Mic button */
-.mic-button[data-lk-audio-enabled="false"] {
+.mic-button[data-lk-audio-enabled='false'] {
background: rgba(255, 82, 82, 0.2);
}
-.mic-button[data-lk-audio-enabled="true"] .material-symbols-outlined {
+.mic-button[data-lk-audio-enabled='true'] .material-symbols-outlined {
color: #ffffff;
}
-.mic-button[data-lk-audio-enabled="false"] .material-symbols-outlined {
+.mic-button[data-lk-audio-enabled='false'] .material-symbols-outlined {
color: #ff6f6f;
}
/* Camera btn */
-.camera-button[data-lk-video-enabled="false"] {
+.camera-button[data-lk-video-enabled='false'] {
background: rgba(255, 82, 82, 0.2);
}
-.camera-button[data-lk-video-enabled="true"] .material-symbols-outlined {
+.camera-button[data-lk-video-enabled='true'] .material-symbols-outlined {
color: #ffffff;
}
-.camera-button[data-lk-video-enabled="false"] .material-symbols-outlined {
+.camera-button[data-lk-video-enabled='false'] .material-symbols-outlined {
color: #ff6f6f;
}
/* Screen share btn */
-.screen-share-button[data-lk-screen-share-enabled="true"] .material-symbols-outlined {
+.screen-share-button[data-lk-screen-share-enabled='true'] .material-symbols-outlined {
color: #49c998;
}
-.screen-share-button[data-lk-screen-share-enabled="false"] .material-symbols-outlined {
+.screen-share-button[data-lk-screen-share-enabled='false'] .material-symbols-outlined {
color: #ffffff;
}
@@ -110,15 +116,23 @@
}
@keyframes pulse {
- 0% { opacity: 1; }
- 50% { opacity: 0.5; }
- 100% { opacity: 1; }
+ 0% {
+ opacity: 1;
+ }
+
+ 50% {
+ opacity: 0.5;
+ }
+
+ 100% {
+ opacity: 1;
+ }
}
/* End call */
.end-call-button {
- width: 64px;
- height: 40px;
+ width: 5rem;
+ height: 2.4rem;
background: #ff5252;
border-radius: 8px;
display: flex;
@@ -130,7 +144,6 @@
color: #ffffff;
}
-
.top-right-controls {
display: flex;
gap: 10px;
@@ -177,4 +190,4 @@
/* Fix for video layout */
.lk-grid-layout {
height: calc(100vh - 60px) !important;
-}
\ No newline at end of file
+}
diff --git a/styles/PageClientImpl.css b/styles/PageClientImpl.css
index 67a47ed2..8c1d1529 100644
--- a/styles/PageClientImpl.css
+++ b/styles/PageClientImpl.css
@@ -1,25 +1,25 @@
.main-container {
- height: 100%;
- }
-
- .pre-join-container {
- display: grid;
- place-items: center;
- height: 100%;
- }
-
- .video-grid {
- height: calc(100vh - 60px) !important;
- }
-
- .video-container {
- position: relative;
- width: 100%;
- height: 100%;
- }
-
- .empty-video-container {
- height: calc(100vh - 60px);
- display: grid;
- place-items: center;
- }
\ No newline at end of file
+ height: 100%;
+}
+
+.pre-join-container {
+ display: grid;
+ place-items: center;
+ height: 100%;
+}
+
+.video-grid {
+ height: calc(100vh - 60px) !important;
+}
+
+.video-container {
+ position: relative;
+ width: 100%;
+ height: 100%;
+}
+
+.empty-video-container {
+ height: calc(100vh - 60px);
+ display: grid;
+ place-items: center;
+}
diff --git a/styles/ParticipantTile.css b/styles/ParticipantTile.css
new file mode 100644
index 00000000..0a17ac7b
--- /dev/null
+++ b/styles/ParticipantTile.css
@@ -0,0 +1,103 @@
+.participant-tile {
+ position: relative;
+ background-color: #1a242e;
+ border-radius: 5px;
+ overflow: hidden;
+ width: 100%;
+ height: 100%;
+}
+
+.participant-tile.speaking {
+ border: 2px solid #618aff;
+}
+
+.participant-info {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ display: flex;
+ align-items: center;
+ padding: 8px;
+ z-index: 10;
+}
+
+.participant-name {
+ font-family: 'Roboto', sans-serif;
+ font-weight: 500;
+ font-size: 14px;
+ color: white;
+ margin-left: 5px;
+}
+
+.mic-icon {
+ font-family: 'Material Symbols Outlined';
+ font-size: 18px;
+}
+
+.mic-on {
+ color: #ffffff;
+}
+
+.mic-off {
+ color: #ff5252;
+}
+
+.speaking-indicator {
+ position: absolute;
+ top: 10px;
+ right: 10px;
+ background-color: #618aff;
+ border-radius: 50%;
+ width: 24px;
+ height: 24px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ z-index: 10;
+}
+
+.speaking-icon {
+ font-family: 'Material Symbols Outlined';
+ color: white;
+ font-size: 16px;
+}
+
+.avatar-container {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ width: 100px;
+ height: 100px;
+ border-radius: 50%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ z-index: 5;
+}
+
+.avatar-initials {
+ font-family: 'Roboto', sans-serif;
+ font-weight: 500;
+ font-size: 50px;
+ color: white;
+}
+
+.avatar-image {
+ width: 100%;
+ height: 100%;
+ border-radius: 50%;
+ object-fit: cover;
+}
+
+.video-container {
+ width: 100%;
+ height: 100%;
+}
+
+.custom-control-bar.lk-control-bar {
+ padding: 6px !important;
+ border-top: 1px solid rgba(255, 255, 255, 0.1);
+ margin-right: -10px;
+ width: calc(100% + 10px);
+}
diff --git a/styles/Transcript.module.css b/styles/Transcript.module.css
index 86939f6b..dc53b7c7 100644
--- a/styles/Transcript.module.css
+++ b/styles/Transcript.module.css
@@ -1,14 +1,13 @@
-
.wrap {
- position:absolute;
- top: 32px;
- width:100%;
- left:0;
- right:0;
+ position: absolute;
+ top: 32px;
+ width: 100%;
+ left: 0;
+ right: 0;
}
-.text{
- color:white;
- text-align:center;
- margin:16px;
-}
\ No newline at end of file
+.text {
+ color: white;
+ text-align: center;
+ margin: 16px;
+}
diff --git a/styles/VideoTrack.css b/styles/VideoTrack.css
index be088925..d05543b2 100644
--- a/styles/VideoTrack.css
+++ b/styles/VideoTrack.css
@@ -1,5 +1,5 @@
.video-element {
- width: 100%;
- height: 100%;
- object-fit: cover;
- }
\ No newline at end of file
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+}
diff --git a/styles/globals.css b/styles/globals.css
index ff0c088d..e80e2522 100644
--- a/styles/globals.css
+++ b/styles/globals.css
@@ -65,3 +65,85 @@ h2 a {
h2 a {
text-decoration: none;
}
+
+:root {
+ /* Primary Colors */
+ --background-primary: #0b0f13;
+ --background-secondary: #181d23;
+ --background-tertiary: #1a232d;
+
+ /* Danger Colors */
+ --danger-dark: #3d1d20;
+ --danger-primary: #ff5252;
+ --danger-light: #fe6f6f;
+
+ /* Success Colors */
+ --success-dark: #1b5e20;
+ --success-primary: #4caf50;
+ --success-light: #66bb6a;
+
+ /* Info Colors */
+ --info-dark: #0d47a1;
+ --info-primary: #2196f3;
+ --info-light: #64b5f6;
+
+ /* Warning Colors */
+ --warning-dark: #ff6f00;
+ --warning-primary: #ffc107;
+ --warning-light: #ffd54f;
+}
+
+.custom-control-bar {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 0.5rem;
+}
+
+.custom-control-bar .left {
+ display: flex;
+ align-items: center;
+ gap: 0.5rem;
+}
+
+.custom-control-bar .control-btn {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ gap: 0.5rem;
+ background-color: var(--background-secondary);
+ border: none;
+ padding: 0.5rem;
+ border-radius: 0.5rem;
+ cursor: pointer;
+ width: 2.4rem;
+ height: 2.4rem;
+}
+
+.custom-control-bar .room-leave-btn {
+ background-color: var(--danger-dark);
+ color: var(--danger-light);
+ padding-inline: 1.2rem;
+}
+
+.custom-control-bar [data-lk-active='true'] {
+ background-color: var(--danger-dark);
+}
+
+.control-link {
+ display: flex;
+ color: #909baa;
+}
+
+.custom-control-bar span {
+ font-size: 1.3rem;
+}
+
+.left,
+.center,
+.right {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: 0.5rem;
+}
diff --git a/styles/participant-tile.css b/styles/participant-tile.css
index 7720b0a7..af7d1690 100644
--- a/styles/participant-tile.css
+++ b/styles/participant-tile.css
@@ -1,103 +1,95 @@
-.participant-tile {
- position: relative;
- background-color: #1a242e;
- border-radius: 5px;
- overflow: hidden;
- width: 100%;
- height: 100%;
-}
-
-.participant-tile.speaking {
- border: 2px solid #618aff;
-}
-
-.participant-info {
- position: absolute;
- bottom: 0;
- left: 0;
- display: flex;
- align-items: center;
- padding: 8px;
- z-index: 10;
-}
-
-.participant-name {
- font-family: 'Roboto', sans-serif;
- font-weight: 500;
- font-size: 14px;
- color: white;
- margin-left: 5px;
-}
-
-.mic-icon {
- font-family: 'Material Symbols Outlined';
- font-size: 18px;
-}
-
-.mic-on {
- color: #ffffff;
-}
-
-.mic-off {
- color: #ff5252;
-}
-
-.speaking-indicator {
- position: absolute;
- top: 10px;
- right: 10px;
- background-color: #618aff;
- border-radius: 50%;
- width: 24px;
- height: 24px;
- display: flex;
- align-items: center;
- justify-content: center;
- z-index: 10;
-}
-
-.speaking-icon {
- font-family: 'Material Symbols Outlined';
- color: white;
- font-size: 16px;
-}
-
-.avatar-container {
- position: absolute;
- top: 50%;
- left: 50%;
- transform: translate(-50%, -50%);
- width: 100px;
- height: 100px;
- border-radius: 50%;
- display: flex;
- align-items: center;
- justify-content: center;
- z-index: 5;
-}
-
-.avatar-initials {
- font-family: 'Roboto', sans-serif;
- font-weight: 500;
- font-size: 50px;
- color: white;
-}
-
-.avatar-image {
- width: 100%;
- height: 100%;
- border-radius: 50%;
- object-fit: cover;
-}
-
-.video-container {
- width: 100%;
- height: 100%;
-}
-
-.custom-control-bar.lk-control-bar {
- padding: 6px !important;
- border-top: 1px solid rgba(255, 255, 255, 0.1);
- margin-right: -10px;
- width: calc(100% + 10px);
-}
+.participant-tile {
+ position: relative;
+ background-color: #1a242e;
+ border-radius: 5px;
+ overflow: hidden;
+ width: 100%;
+ height: 100%;
+}
+
+.participant-tile.speaking {
+ border: 2px solid #618aff;
+}
+
+.participant-info {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ display: flex;
+ align-items: center;
+ padding: 8px;
+ z-index: 10;
+}
+
+.participant-name {
+ font-family: 'Roboto', sans-serif;
+ font-weight: 500;
+ font-size: 14px;
+ color: white;
+ margin-left: 5px;
+}
+
+.mic-icon {
+ font-family: 'Material Symbols Outlined';
+ font-size: 18px;
+ padding: 0.1rem 0.3rem;
+}
+
+.mic-on {
+ color: #ffffff;
+}
+
+.mic-off {
+ color: #ff5252;
+}
+
+.speaking-icon {
+ background-color: #618aff;
+ border-radius: 50%;
+}
+
+.speaking-icon {
+ font-family: 'Material Symbols Outlined';
+ color: white;
+ font-size: 16px;
+}
+
+.avatar-container {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ width: 100px;
+ height: 100px;
+ border-radius: 50%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ z-index: 5;
+}
+
+.avatar-initials {
+ font-family: 'Roboto', sans-serif;
+ font-weight: 500;
+ font-size: 50px;
+ color: white;
+}
+
+.avatar-image {
+ width: 100%;
+ height: 100%;
+ border-radius: 50%;
+ object-fit: cover;
+}
+
+.video-container {
+ width: 100%;
+ height: 100%;
+}
+
+.custom-control-bar.lk-control-bar {
+ padding: 6px !important;
+ border-top: 1px solid rgba(255, 255, 255, 0.1);
+ margin-right: -10px;
+ width: calc(100% + 10px);
+}
From e8c7ff54532bdc3460d7390079e0e84da7610cde Mon Sep 17 00:00:00 2001
From: SujithThirumalaisamy
Date: Mon, 17 Mar 2025 21:19:57 +0530
Subject: [PATCH 05/19] Added lint file back
---
.eslintrc.json | 1 +
1 file changed, 1 insertion(+)
create mode 100644 .eslintrc.json
diff --git a/.eslintrc.json b/.eslintrc.json
new file mode 100644
index 00000000..0967ef42
--- /dev/null
+++ b/.eslintrc.json
@@ -0,0 +1 @@
+{}
From 3995ab048605a0701241f4f7ff109082367d1cb3 Mon Sep 17 00:00:00 2001
From: SujithThirumalaisamy
Date: Tue, 18 Mar 2025 20:32:21 +0530
Subject: [PATCH 06/19] Fixed settings and icons
---
.eslintrc.json | 1 -
app/custom/CustomControlBar.tsx | 47 ++++++++--------------
app/custom/VideoConferenceClientImpl.tsx | 14 +------
app/rooms/[roomName]/PageClientImpl.tsx | 4 +-
app/svg/camera.tsx | 37 ++++++++++++++++++
app/svg/mic.tsx | 36 +++++++++++++++++
app/svg/screen-share.tsx | 32 +++++++++++++++
lib/CustomVideoLayout.tsx | 19 ++++-----
lib/ParticipantTile.tsx | 30 +++++++-------
lib/SettingsMenu.tsx | 29 ++++++++------
styles/CustomControlBar.css | 50 ++++++++++++++----------
styles/PageClientImpl.css | 41 +++++++++++++++++++
styles/SettingsMenu.module.css | 23 -----------
styles/globals.css | 12 ++++--
14 files changed, 244 insertions(+), 131 deletions(-)
delete mode 100644 .eslintrc.json
create mode 100644 app/svg/camera.tsx
create mode 100644 app/svg/mic.tsx
create mode 100644 app/svg/screen-share.tsx
delete mode 100644 styles/SettingsMenu.module.css
diff --git a/.eslintrc.json b/.eslintrc.json
deleted file mode 100644
index 0967ef42..00000000
--- a/.eslintrc.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/app/custom/CustomControlBar.tsx b/app/custom/CustomControlBar.tsx
index 467ffd77..7b0c9abc 100644
--- a/app/custom/CustomControlBar.tsx
+++ b/app/custom/CustomControlBar.tsx
@@ -1,11 +1,14 @@
'use client';
import React, { useState, useEffect } from 'react';
-import { DisconnectButton, useRoomContext } from '@livekit/components-react';
+import { DisconnectButton, useLayoutContext, useRoomContext } from '@livekit/components-react';
import { Room, RoomEvent, Track } from 'livekit-client';
import { mergeClasses } from '@/lib/client-utils';
import { ToggleSource } from '@livekit/components-core';
import '../../styles/CustomControlBar.css';
+import { CameraOffSVG, CameraOnSVG } from '../svg/camera';
+import { MicOffSVG, MicOnSVG } from '../svg/mic';
+import { ScreenShareOnSVG } from '../svg/screen-share';
interface CustomControlBarProps {
room: Room;
@@ -15,6 +18,7 @@ interface CustomControlBarProps {
export function CustomControlBar({ room, roomName }: CustomControlBarProps) {
const [recording, setRecording] = useState(false);
const [participantCount, setParticipantCount] = useState(1);
+ const { dispatch } = useLayoutContext().widget;
useEffect(() => {
if (room) {
@@ -23,10 +27,6 @@ export function CustomControlBar({ room, roomName }: CustomControlBarProps) {
setParticipantCount(room.numParticipants);
};
- if (room.state === 'connected') {
- updateParticipantCount();
- }
-
room.on(RoomEvent.Connected, updateParticipantCount);
room.on(RoomEvent.ParticipantConnected, updateParticipantCount);
room.on(RoomEvent.ParticipantDisconnected, updateParticipantCount);
@@ -62,12 +62,12 @@ export function CustomControlBar({ room, roomName }: CustomControlBarProps) {
-
+
radio_button_checked
-
+
call_end
@@ -79,7 +79,12 @@ export function CustomControlBar({ room, roomName }: CustomControlBarProps) {
{participantCount}
-
+
{
+ if (dispatch) dispatch({ msg: 'toggle_settings' });
+ }}
+ >
settings
@@ -127,32 +132,12 @@ interface TrackIconProps {
function TrackIcon({ trackSource, enabled }: TrackIconProps) {
switch (trackSource) {
case Track.Source.Camera:
- return enabled ? (
- videocam
- ) : (
-
- videocam_off
-
- );
+ return enabled ? : ;
case Track.Source.Microphone:
- return enabled ? (
- mic
- ) : (
-
- mic_off
-
- );
+ return enabled ? : ;
case Track.Source.ScreenShare:
return enabled ? (
- screen_share
+
) : (
{
+ const updateTranscriptions = (segments: TranscriptionSegment[]) => {
console.log('received transcriptions', segments);
setTranscriptions((prev) => {
const newTranscriptions = { ...prev };
@@ -95,12 +90,7 @@ export function VideoConferenceClientImpl(props: {
audio={true}
video={true}
>
-
+
);
diff --git a/app/rooms/[roomName]/PageClientImpl.tsx b/app/rooms/[roomName]/PageClientImpl.tsx
index ece57ea6..8113821e 100644
--- a/app/rooms/[roomName]/PageClientImpl.tsx
+++ b/app/rooms/[roomName]/PageClientImpl.tsx
@@ -8,6 +8,7 @@ import {
PreJoin,
LiveKitRoom,
RoomAudioRenderer,
+ VideoConference,
} from '@livekit/components-react';
import {
ExternalE2EEKeyProvider,
@@ -17,13 +18,12 @@ import {
Room,
DeviceUnsupportedError,
RoomConnectOptions,
- E2EEOptions,
} from 'livekit-client';
import { useRouter } from 'next/navigation';
import '../../../styles/PageClientImpl.css';
-
import { CustomVideoLayout } from '@/lib/CustomVideoLayout';
import { RecordingIndicator } from '@/lib/RecordingIndicator';
+
const CONN_DETAILS_ENDPOINT =
process.env.NEXT_PUBLIC_CONN_DETAILS_ENDPOINT ?? '/api/connection-details';
diff --git a/app/svg/camera.tsx b/app/svg/camera.tsx
new file mode 100644
index 00000000..cc4f4e95
--- /dev/null
+++ b/app/svg/camera.tsx
@@ -0,0 +1,37 @@
+const CameraOnSVG = () => {
+ return (
+
+ );
+};
+
+const CameraOffSVG = () => {
+ return (
+
+ );
+};
+
+export { CameraOnSVG, CameraOffSVG };
diff --git a/app/svg/mic.tsx b/app/svg/mic.tsx
new file mode 100644
index 00000000..d544fe2d
--- /dev/null
+++ b/app/svg/mic.tsx
@@ -0,0 +1,36 @@
+const MicOnSVG = () => {
+ return (
+
+ );
+};
+
+const MicOffSVG = () => {
+ return (
+
+ );
+};
+
+export { MicOnSVG, MicOffSVG };
diff --git a/app/svg/screen-share.tsx b/app/svg/screen-share.tsx
new file mode 100644
index 00000000..c7b126f7
--- /dev/null
+++ b/app/svg/screen-share.tsx
@@ -0,0 +1,32 @@
+const ScreenShareOnSVG = () => {
+ return (
+
+ );
+};
+
+export { ScreenShareOnSVG };
diff --git a/lib/CustomVideoLayout.tsx b/lib/CustomVideoLayout.tsx
index 50e945b0..f6a2d654 100644
--- a/lib/CustomVideoLayout.tsx
+++ b/lib/CustomVideoLayout.tsx
@@ -1,14 +1,9 @@
import React from 'react';
-import {
- GridLayout,
- useTracks,
- RoomAudioRenderer,
- LayoutContextProvider,
- Chat,
-} from '@livekit/components-react';
+import { GridLayout, useTracks, LayoutContextProvider, Chat } from '@livekit/components-react';
import { Track, Room } from 'livekit-client';
import { ParticipantTile } from './ParticipantTile';
import { CustomControlBar } from '@/app/custom/CustomControlBar';
+import { SettingsMenu } from './SettingsMenu';
interface CustomVideoLayoutProps {
room: Room;
@@ -17,6 +12,7 @@ interface CustomVideoLayoutProps {
export const CustomVideoLayout: React.FC = ({ room, roomName }) => {
const [showChat, setShowChat] = React.useState(false);
+ const [showSettings, setShowSettings] = React.useState(false);
const tracks = useTracks(
[
@@ -36,12 +32,16 @@ export const CustomVideoLayout: React.FC = ({ room, room
widget: {
state: {
showChat,
+ showSettings,
unreadMessages: 0,
},
dispatch: (action: any) => {
if ('msg' in action && action.msg === 'toggle_chat') {
setShowChat((prev) => !prev);
}
+ if ('msg' in action && action.msg === 'toggle_settings') {
+ setShowSettings((prev) => !prev);
+ }
},
},
}}
@@ -51,7 +51,7 @@ export const CustomVideoLayout: React.FC = ({ room, room
display: 'flex',
flexDirection: 'row',
height: '100vh',
- width: '100%',
+ width: '100vw',
position: 'relative',
backgroundColor: '#070707',
}}
@@ -69,6 +69,7 @@ export const CustomVideoLayout: React.FC = ({ room, room
tracks={tracks}
style={{
width: '100%',
+ padding: '1rem 1rem 0.5rem 1rem',
}}
>
@@ -92,7 +93,7 @@ export const CustomVideoLayout: React.FC = ({ room, room
)}
-
+
);
diff --git a/lib/ParticipantTile.tsx b/lib/ParticipantTile.tsx
index 596c1ca8..d9e8137d 100644
--- a/lib/ParticipantTile.tsx
+++ b/lib/ParticipantTile.tsx
@@ -1,6 +1,14 @@
import React, { useEffect, useState } from 'react';
-import { AudioTrack, useTracks, VideoTrack, useTrackRefContext } from '@livekit/components-react';
+import {
+ AudioTrack,
+ useTracks,
+ VideoTrack,
+ useTrackRefContext,
+ useEnsureTrackRef,
+ TrackRefContextIfNeeded,
+} from '@livekit/components-react';
import { Track, Participant } from 'livekit-client';
+import { isTrackReference } from '@livekit/components-core';
function getAvatarColor(identity: string): string {
const colors = [
@@ -49,22 +57,13 @@ export const ParticipantTile: React.FC = ({
participant: propParticipant,
}) => {
const trackRef = useTrackRefContext();
+ const trackReference = useEnsureTrackRef(trackRef);
const participant = propParticipant || trackRef?.participant;
if (!participant) return null;
const [profilePictureUrl, setProfilePictureUrl] = useState(null);
- const isValidTrackRef =
- trackRef && 'publication' in trackRef && trackRef.publication !== undefined;
-
- const cameraTrack =
- isValidTrackRef && trackRef.source === Track.Source.Camera
- ? trackRef
- : useTracks([Track.Source.Camera], { onlySubscribed: false }).filter(
- (track) => track.participant.identity === participant.identity,
- )[0];
-
const microphoneTrack = useTracks([Track.Source.Microphone], { onlySubscribed: false }).filter(
(track) => track.participant.identity === participant.identity,
)[0];
@@ -84,8 +83,9 @@ export const ParticipantTile: React.FC = ({
}
}, [participant.metadata]);
- const hasCamera = !!cameraTrack;
- const isCameraEnabled = hasCamera && !cameraTrack.publication?.isMuted;
+ const isCameraEnabled =
+ (trackReference.source === Track.Source.Camera && !trackReference.publication?.isMuted) ||
+ trackReference.source === Track.Source.ScreenShare;
const hasMicrophone = !!microphoneTrack;
const isMicrophoneEnabled = hasMicrophone && !microphoneTrack.publication?.isMuted;
@@ -95,9 +95,9 @@ export const ParticipantTile: React.FC = ({
return (
- {isCameraEnabled ? (
+ {isTrackReference(trackReference) && isCameraEnabled ? (
-
+
) : (
diff --git a/lib/SettingsMenu.tsx b/lib/SettingsMenu.tsx
index 898b3e58..976e3dfa 100644
--- a/lib/SettingsMenu.tsx
+++ b/lib/SettingsMenu.tsx
@@ -9,13 +9,14 @@ import {
useRoomContext,
useIsRecording,
} from '@livekit/components-react';
-import styles from '../styles/SettingsMenu.module.css';
import type { KrispNoiseFilterProcessor } from '@livekit/krisp-noise-filter';
/**
* @alpha
*/
-export interface SettingsMenuProps extends React.HTMLAttributes
{}
+export interface SettingsMenuProps extends React.HTMLAttributes {
+ showSettings: boolean;
+}
/**
* @alpha
@@ -111,14 +112,16 @@ export function SettingsMenu(props: SettingsMenuProps) {
}
};
+ if (!props.showSettings) return null;
+
return (
-
-
+
+
{tabs.map(
(tab) =>
settings[tab] && (
-
+
{activeTab === 'media' && (
<>
{settings.media && settings.media.camera && (
- <>
+
Camera
Camera
@@ -143,10 +146,10 @@ export function SettingsMenu(props: SettingsMenuProps) {
- >
+
)}
{settings.media && settings.media.microphone && (
- <>
+
Microphone
Microphone
@@ -154,10 +157,10 @@ export function SettingsMenu(props: SettingsMenuProps) {
- >
+
)}
{settings.media && settings.media.speaker && (
- <>
+
Speaker & Headphones
Audio Output
@@ -165,7 +168,7 @@ export function SettingsMenu(props: SettingsMenuProps) {
- >
+
)}
>
)}
@@ -201,7 +204,7 @@ export function SettingsMenu(props: SettingsMenuProps) {
)}