diff --git a/.changeset/spotty-squids-search.md b/.changeset/spotty-squids-search.md new file mode 100644 index 000000000..5b51a9510 --- /dev/null +++ b/.changeset/spotty-squids-search.md @@ -0,0 +1,6 @@ +--- +'@livekit/components-react': patch +'@livekit/components-core': patch +--- + +Add initial version of agents sdk (useSession, etc) diff --git a/packages/core/package.json b/packages/core/package.json index 2f0e831a4..07c00a598 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -45,7 +45,7 @@ }, "devDependencies": { "@livekit/components-styles": "workspace:*", - "@livekit/protocol": "^1.38.0", + "@livekit/protocol": "catalog:", "@microsoft/api-extractor": "^7.36.0", "@size-limit/file": "^11.0.2", "@size-limit/webpack": "^11.0.2", diff --git a/packages/core/src/components/chat.ts b/packages/core/src/components/chat.ts index 048777a44..956d4b793 100644 --- a/packages/core/src/components/chat.ts +++ b/packages/core/src/components/chat.ts @@ -1,5 +1,5 @@ /* eslint-disable camelcase */ -import type { Participant, Room, ChatMessage, SendTextOptions } from 'livekit-client'; +import type { Room, SendTextOptions } from 'livekit-client'; import { compareVersions, RoomEvent } from 'livekit-client'; import { BehaviorSubject, Subject, scan, map, takeUntil, from, filter } from 'rxjs'; import { @@ -9,15 +9,10 @@ import { setupDataMessageHandler, } from '../observables/dataChannel'; import { log } from '../logger'; +import { ChatMessage, ReceivedChatMessage } from '../messages/types'; /** @public */ -export type { ChatMessage }; - -/** @public */ -export interface ReceivedChatMessage extends ChatMessage { - from?: Participant; - attributes?: Record; -} +export type { ChatMessage, ReceivedChatMessage }; export interface LegacyChatMessage extends ChatMessage { ignoreLegacy?: boolean; @@ -55,7 +50,9 @@ function isIgnorableChatMessage(msg: ReceivedChatMessage | LegacyReceivedChatMes } const decodeLegacyMsg = (message: Uint8Array) => - JSON.parse(new TextDecoder().decode(message)) as LegacyReceivedChatMessage | ReceivedChatMessage; + JSON.parse(new TextDecoder().decode(message)) as + | LegacyReceivedChatMessage + | Exclude; const encodeLegacyMsg = (message: LegacyChatMessage) => new TextEncoder().encode(JSON.stringify(message)); @@ -93,8 +90,9 @@ export function setupChat(room: Room, options?: ChatOptions) { timestamp, message: chunk, from: room.getParticipantByIdentity(participantInfo.identity), + type: 'chatMessage', // editTimestamp: type === 'update' ? timestamp : undefined, - } as ReceivedChatMessage; + } satisfies ReceivedChatMessage; }), ); streamObservable.subscribe({ @@ -111,7 +109,11 @@ export function setupChat(room: Room, options?: ChatOptions) { if (isIgnorableChatMessage(parsedMessage)) { return undefined; } - const newMessage: ReceivedChatMessage = { ...parsedMessage, from: msg.from }; + const newMessage: ReceivedChatMessage = { + ...parsedMessage, + type: 'chatMessage', + from: msg.from, + }; return newMessage; }), filter((msg) => !!msg), @@ -169,6 +171,7 @@ export function setupChat(room: Room, options?: ChatOptions) { const receivedChatMsg: ReceivedChatMessage = { ...chatMsg, + type: 'chatMessage', from: room.localParticipant, attributes: options.attributes, }; diff --git a/packages/core/src/components/textStream.ts b/packages/core/src/components/textStream.ts index 3587e22af..bdf40d2a2 100644 --- a/packages/core/src/components/textStream.ts +++ b/packages/core/src/components/textStream.ts @@ -2,6 +2,7 @@ import { RoomEvent, type Room } from 'livekit-client'; import type { TextStreamInfo } from 'livekit-client/dist/src/room/types'; import { from, scan, Subject, type Observable } from 'rxjs'; import { share, tap } from 'rxjs/operators'; +import { ParticipantAgentAttributes } from '../helper'; export interface TextStreamData { text: string; @@ -57,7 +58,7 @@ export function setupTextStream(room: Room, topic: string): Observable(); let textStreams: TextStreamData[] = []; - const segmentAttribute = 'lk.segment_id'; + const segmentAttribute = ParticipantAgentAttributes.TranscriptionSegmentId; // Create shared observable and store in cache const sharedObservable = textStreamsSubject.pipe( diff --git a/packages/core/src/helper/index.ts b/packages/core/src/helper/index.ts index 56e2e102e..189492b02 100644 --- a/packages/core/src/helper/index.ts +++ b/packages/core/src/helper/index.ts @@ -13,3 +13,4 @@ export { export { setDifference } from './set-helper'; export { supportsScreenSharing } from './featureDetection'; export * from './transcriptions'; +export * from './participant-attributes'; diff --git a/packages/core/src/helper/participant-attributes.ts b/packages/core/src/helper/participant-attributes.ts new file mode 100644 index 000000000..fb9159882 --- /dev/null +++ b/packages/core/src/helper/participant-attributes.ts @@ -0,0 +1,9 @@ +/** An enum of first party livekit attributes generated by the serverside agents sdk */ +export enum ParticipantAgentAttributes { + AgentState = 'lk.agent.state', + PublishOnBehalf = 'lk.publish_on_behalf', + + TranscriptionFinal = 'lk.transcription_final', + TranscriptionSegmentId = 'lk.segment_id', + TranscribedTrackId = 'lk.transcribed_track_id', +} diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 6dd59b8d5..432c8a028 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -4,6 +4,7 @@ export * from './helper'; export * from './types'; export * from './sorting'; export * from './track-reference'; +export * from './messages'; export * from './components/mediaToggle'; export * from './components/mediaDeviceSelect'; diff --git a/packages/core/src/messages/index.ts b/packages/core/src/messages/index.ts new file mode 100644 index 000000000..fcb073fef --- /dev/null +++ b/packages/core/src/messages/index.ts @@ -0,0 +1 @@ +export * from './types'; diff --git a/packages/core/src/messages/types.ts b/packages/core/src/messages/types.ts new file mode 100644 index 000000000..57497f856 --- /dev/null +++ b/packages/core/src/messages/types.ts @@ -0,0 +1,46 @@ +import type { Participant, ChatMessage } from 'livekit-client'; + +/** @public */ +export type { ChatMessage }; + +export type SentMessage = ChatMessage; + +type ReceivedMessageWithType = { + id: string; + timestamp: number; + + type: Type; + + from?: Participant; + attributes?: Record; +} & Metadata; + +/** @public */ +export type ReceivedChatMessage = ReceivedMessageWithType< + 'chatMessage', + ChatMessage & { + from?: Participant; + attributes?: Record; + } +>; + +export type ReceivedUserTranscriptionMessage = ReceivedMessageWithType< + 'userTranscript', + { + message: string; + } +>; + +export type ReceivedAgentTranscriptionMessage = ReceivedMessageWithType< + 'agentTranscript', + { + message: string; + } +>; + +/** @public */ +export type ReceivedMessage = + | ReceivedUserTranscriptionMessage + | ReceivedAgentTranscriptionMessage + | ReceivedChatMessage; +// TODO: images? attachments? rpc? diff --git a/packages/core/src/observables/dataChannel.ts b/packages/core/src/observables/dataChannel.ts index 04f6bf9f4..5e175f223 100644 --- a/packages/core/src/observables/dataChannel.ts +++ b/packages/core/src/observables/dataChannel.ts @@ -92,7 +92,12 @@ export function setupChatMessageHandler(room: Room) { const send = async (text: string, options: SendTextOptions): Promise => { const msg = await room.localParticipant.sendChatMessage(text, options); await room.localParticipant.sendText(text, options); - return { ...msg, from: room.localParticipant, attachedFiles: options.attachments }; + return { + ...msg, + type: 'chatMessage', + from: room.localParticipant, + attachedFiles: options.attachments, + }; }; const edit = async (text: string, originalMsg: ChatMessage) => { diff --git a/packages/react/etc/components-react.api.md b/packages/react/etc/components-react.api.md index 673c61635..fef736e85 100644 --- a/packages/react/etc/components-react.api.md +++ b/packages/react/etc/components-react.api.md @@ -13,7 +13,9 @@ import { ConnectionQuality } from 'livekit-client'; import { ConnectionState as ConnectionState_2 } from 'livekit-client'; import { CreateLocalTracksOptions } from 'livekit-client'; import { DataPublishOptions } from 'livekit-client'; +import { default as default_2 } from 'typed-emitter'; import { DisconnectReason } from 'livekit-client'; +import { EventMap } from 'typed-emitter'; import { GridLayoutDefinition } from '@livekit/components-core'; import { GridLayoutInfo } from '@livekit/components-core'; import { HTMLAttributes } from 'react'; @@ -36,9 +38,12 @@ import { ParticipantIdentifier } from '@livekit/components-core'; import { ParticipantPermission } from '@livekit/protocol'; import { PinState } from '@livekit/components-core'; import * as React_2 from 'react'; +import { ReceivedAgentTranscriptionMessage } from '@livekit/components-core'; import { ReceivedChatMessage } from '@livekit/components-core'; import { ReceivedDataMessage } from '@livekit/components-core'; +import { ReceivedMessage } from '@livekit/components-core'; import { ReceivedTranscriptionSegment } from '@livekit/components-core'; +import { ReceivedUserTranscriptionMessage } from '@livekit/components-core'; import { RemoteAudioTrack } from 'livekit-client'; import { RemoteParticipant } from 'livekit-client'; import { Room } from 'livekit-client'; @@ -54,6 +59,9 @@ import { SourcesArray } from '@livekit/components-core'; import { SVGProps } from 'react'; import { TextStreamData } from '@livekit/components-core'; import { ToggleSource } from '@livekit/components-core'; +import { TokenSourceConfigurable } from 'livekit-client'; +import { TokenSourceFetchOptions } from 'livekit-client'; +import { TokenSourceFixed } from 'livekit-client'; import { Track } from 'livekit-client'; import { TrackProcessor } from 'livekit-client'; import { TrackPublication } from 'livekit-client'; @@ -65,13 +73,34 @@ import { TranscriptionSegment } from 'livekit-client'; import { VideoCaptureOptions } from 'livekit-client'; import { WidgetState } from '@livekit/components-core'; -// @beta (undocumented) -export type AgentState = 'disconnected' | 'connecting' | 'initializing' | 'listening' | 'thinking' | 'speaking'; +// @public (undocumented) +export type AgentCallbacks = { + [AgentEvent.CameraChanged]: (newTrack: TrackReference | null) => void; + [AgentEvent.MicrophoneChanged]: (newTrack: TrackReference | null) => void; + [AgentEvent.StateChanged]: (newAgentState: AgentState) => void; +}; + +// @public (undocumented) +export enum AgentEvent { + // (undocumented) + CameraChanged = "cameraChanged", + // (undocumented) + MicrophoneChanged = "microphoneChanged", + // (undocumented) + StateChanged = "stateChanged" +} + +// Warning: (ae-forgotten-export) The symbol "AgentSdkStates" needs to be exported by the entry point index.docs.d.ts +// +// @public +export type AgentState = 'disconnected' | 'connecting' | 'failed' | AgentSdkStates; // @public (undocumented) export interface AllowAudioPlaybackProps extends React_2.ButtonHTMLAttributes { // (undocumented) label: string; + // (undocumented) + room?: Room; } // @public (undocumented) @@ -456,6 +485,16 @@ export { MessageEncoder } // @public (undocumented) export type MessageFormatter = (message: string) => React_2.ReactNode; +// @public (undocumented) +export type MessagesCallbacks = { + [MessagesEvent.MessageReceived]: (message: ReceivedMessage) => void; +}; + +// @public (undocumented) +export enum MessagesEvent { + MessageReceived = "messageReceived" +} + // Warning: (ae-internal-missing-underscore) The name "MicDisabledIcon" should be prefixed with an underscore because the declaration is marked as @internal // // @internal (undocumented) @@ -572,15 +611,23 @@ export const QualityPoorIcon: (props: SVGProps) => React_2.JSX.El // @internal (undocumented) export const QualityUnknownIcon: (props: SVGProps) => React_2.JSX.Element; +export { ReceivedAgentTranscriptionMessage } + export { ReceivedChatMessage } +export { ReceivedMessage } + +export { ReceivedUserTranscriptionMessage } + // @public -export function RoomAudioRenderer({ volume, muted }: RoomAudioRendererProps): React_2.JSX.Element; +export function RoomAudioRenderer({ room, volume, muted }: RoomAudioRendererProps): React_2.JSX.Element; // @public (undocumented) export interface RoomAudioRendererProps { // @alpha muted?: boolean; + // (undocumented) + room?: Room; volume?: number; } @@ -606,6 +653,42 @@ export const ScreenShareIcon: (props: SVGProps) => React_2.JSX.El // @internal (undocumented) export const ScreenShareStopIcon: (props: SVGProps) => React_2.JSX.Element; +// @public (undocumented) +export type SessionCallbacks = { + [SessionEvent.ConnectionStateChanged]: (newAgentConnectionState: ConnectionState_2) => void; + [SessionEvent.MediaDevicesError]: (error: Error) => void; + [SessionEvent.EncryptionError]: (error: Error) => void; +}; + +// @public (undocumented) +export type SessionConnectOptions = { + signal?: AbortSignal; + tracks?: { + microphone?: { + enabled?: boolean; + publishOptions?: TrackPublishOptions; + }; + }; + roomConnectOptions?: RoomConnectOptions; +}; + +// @public (undocumented) +export enum SessionEvent { + // (undocumented) + ConnectionStateChanged = "connectionStateChanged", + EncryptionError = "encryptionError", + MediaDevicesError = "mediaDevicesError" +} + +// @public +export function SessionProvider(props: SessionProviderProps): React_2.JSX.Element; + +// @public (undocumented) +export type SessionProviderProps = { + session: UseSessionReturn; + children: React_2.ReactNode; +}; + export { setLogExtension } export { setLogLevel } @@ -621,6 +704,11 @@ export const StartAudio: (props: AllowAudioPlaybackProps & React_2.RefAttributes // @public export const StartMediaButton: (props: AllowMediaPlaybackProps & React_2.RefAttributes) => React_2.ReactNode; +// @public (undocumented) +export type SwitchActiveDeviceOptions = { + exact?: boolean; +}; + export { TextStreamData } // @public @@ -691,6 +779,17 @@ export interface TrackTranscriptionOptions { // @internal (undocumented) export const UnfocusToggleIcon: (props: SVGProps) => React_2.JSX.Element; +// Warning: (ae-forgotten-export) The symbol "SessionStub" needs to be exported by the entry point index.docs.d.ts +// +// @public +export function useAgent(session?: SessionStub): UseAgentReturn; + +// Warning: (ae-forgotten-export) The symbol "AgentStateCases" needs to be exported by the entry point index.docs.d.ts +// Warning: (ae-forgotten-export) The symbol "AgentActions" needs to be exported by the entry point index.docs.d.ts +// +// @public (undocumented) +export type UseAgentReturn = AgentStateCases & AgentActions; + // @alpha export function useAudioPlayback(room?: Room): { canPlayAudio: boolean; @@ -703,7 +802,9 @@ export function useAudioWaveform(trackOrTrackReference?: LocalAudioTrack | Remot }; // @public -export function useChat(options?: ChatOptions): { +export function useChat(options?: ChatOptions & { + room?: Room; +}): { send: (message: string, options?: SendTextOptions) => Promise; chatMessages: ReceivedChatMessage[]; isSending: boolean; @@ -775,9 +876,19 @@ export function useEnsureParticipant(participant?: Participant): Participant; // @public export function useEnsureRoom(room?: Room): Room; +// @public +export function useEnsureSession(session?: UseSessionReturn): UseSessionReturn; + // @public export function useEnsureTrackRef(trackRef?: TrackReferenceOrPlaceholder): TrackReferenceOrPlaceholder; +// @public (undocumented) +export function useEvents, EmitterEventMap extends Emitter extends default_2 ? EM : never, Event extends Parameters[0], Callback extends EmitterEventMap[Event]>(instance: Emitter | { + internal: { + emitter: Emitter; + }; +} | null | undefined, event: Event, handlerFn: Callback | undefined, dependencies?: React_2.DependencyList): void; + // @alpha export function useFacingMode(trackReference: TrackReferenceOrPlaceholder): 'user' | 'environment' | 'left' | 'right' | 'undefined'; @@ -892,6 +1003,9 @@ export function useMaybeParticipantContext(): Participant | undefined; // @public export function useMaybeRoomContext(): Room | undefined; +// @public +export function useMaybeSessionContext(): UseSessionReturn | undefined; + // @public export function useMaybeTrackRefContext(): TrackReferenceOrPlaceholder | undefined; @@ -1000,8 +1114,10 @@ export interface UseParticipantTileProps extends React_2. trackRef?: TrackReferenceOrPlaceholder; } +// Warning: (ae-forgotten-export) The symbol "UseParticipantTracksOptions" needs to be exported by the entry point index.docs.d.ts +// // @public -export function useParticipantTracks(sources: Track.Source[], participantIdentity?: string): TrackReference[]; +export function useParticipantTracks(sources: Array, optionsOrParticipantIdentity?: UseParticipantTracksOptions | UseParticipantTracksOptions['participantIdentity']): Array; // @alpha export function usePersistentUserChoices(options?: UsePersistentUserChoicesOptions): { @@ -1087,11 +1203,50 @@ export type UseSequentialRoomConnectDisconnectResults; + isSending: boolean; + send: (message: string, options?: SendTextOptions) => Promise; + internal: { + emitter: default_2; + }; +}; + +// Warning: (ae-forgotten-export) The symbol "SessionStateConnecting" needs to be exported by the entry point index.docs.d.ts +// Warning: (ae-forgotten-export) The symbol "SessionStateConnected" needs to be exported by the entry point index.docs.d.ts +// Warning: (ae-forgotten-export) The symbol "SessionStateDisconnected" needs to be exported by the entry point index.docs.d.ts +// Warning: (ae-forgotten-export) The symbol "SessionActions" needs to be exported by the entry point index.docs.d.ts +// +// @public (undocumented) +export type UseSessionReturn = (SessionStateConnecting | SessionStateConnected | SessionStateDisconnected) & SessionActions; + // @public export function useSortedParticipants(participants: Array): Participant[]; // @public -export function useSpeakingParticipants(): Participant[]; +export function useSpeakingParticipants(options?: UseSpeakingParticipantsOptions): Participant[]; + +// @public (undocumented) +export type UseSpeakingParticipantsOptions = { + room?: Room; +}; // @alpha export function useStartAudio({ room, props }: UseStartAudioProps): { @@ -1144,10 +1299,15 @@ export type UseSwipeOptions = { }; // @beta (undocumented) -export function useTextStream(topic: string): { +export function useTextStream(topic: string, options?: UseTextStreamOptions): { textStreams: TextStreamData[]; }; +// @beta (undocumented) +export type UseTextStreamOptions = { + room?: Room; +}; + // @public export function useToken(tokenEndpoint: string | undefined, roomName: string, options?: UseTokenOptions): string | undefined; @@ -1182,7 +1342,7 @@ export type UseTracksOptions = { }; // @public -export function useTrackToggle({ source, onChange, initialState, captureOptions, publishOptions, onDeviceError, ...rest }: UseTrackToggleProps): { +export function useTrackToggle({ source, onChange, initialState, captureOptions, publishOptions, onDeviceError, room, ...rest }: UseTrackToggleProps): { toggle: ((forceState?: boolean) => Promise) | ((forceState?: boolean, captureOptions?: CaptureOptionsBySource | undefined) => Promise); enabled: boolean; pending: boolean; @@ -1192,6 +1352,8 @@ export function useTrackToggle({ source, onChange, initi // @public (undocumented) export interface UseTrackToggleProps extends Omit, 'showIcon'> { + // (undocumented) + room?: Room; } // @alpha @deprecated (undocumented) @@ -1210,6 +1372,8 @@ export interface UseTranscriptionsOptions { // (undocumented) participantIdentities?: string[]; // (undocumented) + room?: Room; + // (undocumented) trackSids?: string[]; } diff --git a/packages/react/package.json b/packages/react/package.json index b2b471bf2..4914c75ff 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -54,6 +54,8 @@ "dependencies": { "@livekit/components-core": "workspace:*", "clsx": "2.1.1", + "events": "^3.3.0", + "jose": "^6.0.12", "usehooks-ts": "3.1.1" }, "peerDependencies": { @@ -69,13 +71,15 @@ } }, "devDependencies": { - "@livekit/protocol": "^1.23.0", + "@livekit/protocol": "catalog:", "@microsoft/api-extractor": "^7.35.0", "@size-limit/file": "^11.0.2", "@size-limit/webpack": "^11.0.2", "@size-limit/webpack-why": "^11.1.6", "@svgr/cli": "^8.0.0", "@testing-library/react": "^16.0.0", + "@types/events": "^3.0.3", + "@types/node": "^24.7.0", "@types/react": "^18.0.25", "@types/react-dom": "^18.0.8", "@vitejs/plugin-react": "^4.3.2", @@ -85,6 +89,7 @@ "react-dom": "^18.2.0", "rimraf": "^6.0.0", "size-limit": "^11.0.2", + "typed-emitter": "^2.1.0", "vite": "^6.0.0", "vite-plugin-dts": "^4.2.3", "vitest": "^3.0.0" diff --git a/packages/react/src/components/RoomAudioRenderer.tsx b/packages/react/src/components/RoomAudioRenderer.tsx index 3e8ea26fe..737bae98a 100644 --- a/packages/react/src/components/RoomAudioRenderer.tsx +++ b/packages/react/src/components/RoomAudioRenderer.tsx @@ -1,13 +1,16 @@ import { getTrackReferenceId } from '@livekit/components-core'; -import { Track } from 'livekit-client'; +import { Room, Track } from 'livekit-client'; import * as React from 'react'; import { useTracks } from '../hooks'; import { AudioTrack } from './participant/AudioTrack'; /** @public */ export interface RoomAudioRendererProps { + room?: Room; + /** Sets the volume for all audio tracks rendered by this component. By default, the range is between `0.0` and `1.0`. */ volume?: number; + /** * If set to `true`, mutes all audio tracks rendered by the component. * @remarks @@ -29,12 +32,13 @@ export interface RoomAudioRendererProps { * ``` * @public */ -export function RoomAudioRenderer({ volume, muted }: RoomAudioRendererProps) { +export function RoomAudioRenderer({ room, volume, muted }: RoomAudioRendererProps) { const tracks = useTracks( [Track.Source.Microphone, Track.Source.ScreenShareAudio, Track.Source.Unknown], { updateOnlyOn: [], onlySubscribed: true, + room, }, ).filter((ref) => !ref.participant.isLocal && ref.publication.kind === Track.Kind.Audio); diff --git a/packages/react/src/components/SessionProvider.tsx b/packages/react/src/components/SessionProvider.tsx new file mode 100644 index 000000000..2ace3d3b6 --- /dev/null +++ b/packages/react/src/components/SessionProvider.tsx @@ -0,0 +1,22 @@ +import * as React from 'react'; +import { UseSessionReturn } from '../hooks'; +import { RoomContext } from '../context'; +import { SessionContext } from '../context/session-context'; + +/** @public */ +export type SessionProviderProps = { + session: UseSessionReturn; + children: React.ReactNode; +}; + +/** + * The `SessionProvider` component instantiates a SessionContext from the return of useSession + * @public + */ +export function SessionProvider(props: SessionProviderProps) { + return ( + + {props.children} + + ); +} diff --git a/packages/react/src/components/controls/StartAudio.tsx b/packages/react/src/components/controls/StartAudio.tsx index 3a251ca5c..f4818bd25 100644 --- a/packages/react/src/components/controls/StartAudio.tsx +++ b/packages/react/src/components/controls/StartAudio.tsx @@ -1,9 +1,11 @@ import * as React from 'react'; -import { useRoomContext } from '../../context'; +import { useEnsureRoom } from '../../context'; import { useStartAudio } from '../../hooks'; +import { Room } from 'livekit-client'; /** @public */ export interface AllowAudioPlaybackProps extends React.ButtonHTMLAttributes { + room?: Room; label: string; } @@ -26,7 +28,7 @@ export const StartAudio: ( props: AllowAudioPlaybackProps & React.RefAttributes, ) => React.ReactNode = /* @__PURE__ */ React.forwardRef( function StartAudio({ label = 'Allow Audio', ...props }: AllowAudioPlaybackProps, ref) { - const room = useRoomContext(); + const room = useEnsureRoom(props.room); const { mergedProps } = useStartAudio({ room, props }); return ( diff --git a/packages/react/src/components/index.ts b/packages/react/src/components/index.ts index ca61b230a..235d6c878 100644 --- a/packages/react/src/components/index.ts +++ b/packages/react/src/components/index.ts @@ -30,4 +30,5 @@ export { type ChatEntryProps, ChatEntry, formatChatMessageLinks, -} from '../components/ChatEntry'; +} from './ChatEntry'; +export * from './SessionProvider'; diff --git a/packages/react/src/context/index.ts b/packages/react/src/context/index.ts index 1b49fcdbb..76a9bf433 100644 --- a/packages/react/src/context/index.ts +++ b/packages/react/src/context/index.ts @@ -16,6 +16,7 @@ export { } from './participant-context'; export {} from './pin-context'; export { RoomContext, useEnsureRoom, useMaybeRoomContext, useRoomContext } from './room-context'; +export { useEnsureSession, useMaybeSessionContext, useSessionContext } from './session-context'; export { TrackRefContext, useEnsureTrackRef, diff --git a/packages/react/src/context/session-context.ts b/packages/react/src/context/session-context.ts new file mode 100644 index 000000000..44bcfe177 --- /dev/null +++ b/packages/react/src/context/session-context.ts @@ -0,0 +1,43 @@ +import * as React from 'react'; + +import { UseSessionReturn } from '../hooks/useSession'; + +/** @internal */ +export const SessionContext = React.createContext(undefined); + +/** + * Ensures that a session is provided via context. + * If no session is provided, an error is thrown. + * @public + */ +export function useSessionContext() { + const ctx = React.useContext(SessionContext); + if (!ctx) { + throw Error('tried to access session context outside of SessionProvider component'); + } + return ctx; +} + +/** + * Returns the session context if it exists, otherwise undefined. + * @public + */ +export function useMaybeSessionContext() { + return React.useContext(SessionContext); +} + +/** + * Ensures that a session is provided, either via context or explicitly as a parameter. + * If no session is provided, an error is thrown. + * @public + */ +export function useEnsureSession(session?: UseSessionReturn) { + const context = useMaybeSessionContext(); + const r = session ?? context; + if (!r) { + throw new Error( + 'No session provided, make sure you are inside a Session context or pass the session explicitly', + ); + } + return r; +} diff --git a/packages/react/src/hooks/index.ts b/packages/react/src/hooks/index.ts index 904f5a890..c47c201af 100644 --- a/packages/react/src/hooks/index.ts +++ b/packages/react/src/hooks/index.ts @@ -30,7 +30,10 @@ export { type UseRemoteParticipantOptions, useRemoteParticipant } from './useRem export { type UseRemoteParticipantsOptions, useRemoteParticipants } from './useRemoteParticipants'; export { type UseRoomInfoOptions, useRoomInfo } from './useRoomInfo'; export { useSortedParticipants } from './useSortedParticipants'; -export { useSpeakingParticipants } from './useSpeakingParticipants'; +export { + useSpeakingParticipants, + type UseSpeakingParticipantsOptions, +} from './useSpeakingParticipants'; export { type UseStartAudioProps, useStartAudio } from './useStartAudio'; export { type UseStartVideoProps, useStartVideo } from './useStartVideo'; export { type UseSwipeOptions, useSwipe } from './useSwipe'; @@ -57,3 +60,13 @@ export * from './useIsRecording'; export * from './useTextStream'; export * from './useTranscriptions'; export * from './useSequentialRoomConnectDisconnect'; +export * from './useSession'; +export { + type AgentState, + AgentEvent, + type AgentCallbacks, + type UseAgentReturn, + useAgent, +} from './useAgent'; +export * from './useEvents'; +export * from './useSessionMessages'; diff --git a/packages/react/src/hooks/useAgent.ts b/packages/react/src/hooks/useAgent.ts new file mode 100644 index 000000000..4d7929421 --- /dev/null +++ b/packages/react/src/hooks/useAgent.ts @@ -0,0 +1,636 @@ +import { + ConnectionState, + LocalTrackPublication, + ParticipantEvent, + ParticipantKind, + RemoteParticipant, + RoomEvent, + Track, +} from 'livekit-client'; +import type TypedEventEmitter from 'typed-emitter'; +import { EventEmitter } from 'events'; +import * as React from 'react'; +import { ParticipantAgentAttributes, TrackReference } from '@livekit/components-core'; + +import { useParticipantTracks } from './useParticipantTracks'; +import { useRemoteParticipants } from './useRemoteParticipants'; +import { UseSessionReturn } from './useSession'; +import { useMaybeSessionContext } from '../context'; + +// FIXME: make this 10 seconds once room dispatch booting info is discoverable +const DEFAULT_AGENT_CONNECT_TIMEOUT_MILLISECONDS = 20_000; + +/** @see https://github.com/livekit/agents/blob/65170238db197f62f479eb7aaef1c0e18bfad6e7/livekit-agents/livekit/agents/voice/events.py#L97 */ +type AgentSdkStates = 'initializing' | 'idle' | 'listening' | 'thinking' | 'speaking'; + +/** + * State representing the current status of the agent, whether it is ready for speach, etc + * + * For most agents (which have the preconnect audio buffer feature enabled), this is the lifecycle: + * connecting ➡️ listening ➡️ initializing/listening/thinking/speaking + * + * For agents without the preconnect audio feature enabled: + * connecting ➡️ initializing ➡️ idle/listening/thinking/speaking + * + * If an agent fails to connect: + * connecting ➡️ listening/initializing ➡️ failed + * + * Legacy useVoiceAssistant hook: + * disconnected ➡️ connecting ➡️ initializing ➡️ listening/thinking/speaking + * + * @public + * */ +export type AgentState = 'disconnected' | 'connecting' | 'failed' | AgentSdkStates; + +/** @public */ +export enum AgentEvent { + CameraChanged = 'cameraChanged', + MicrophoneChanged = 'microphoneChanged', + StateChanged = 'stateChanged', +} + +/** @public */ +export type AgentCallbacks = { + [AgentEvent.CameraChanged]: (newTrack: TrackReference | null) => void; + [AgentEvent.MicrophoneChanged]: (newTrack: TrackReference | null) => void; + [AgentEvent.StateChanged]: (newAgentState: AgentState) => void; +}; + +type AgentStateCommon = { + // FIXME: maybe add some sort of schema to this? + attributes: Record; + + internal: { + emitter: TypedEventEmitter; + + agentParticipant: RemoteParticipant | null; + workerParticipant: RemoteParticipant | null; + }; +}; + +type AgentStateAvailable = AgentStateCommon & { + state: 'thinking' | 'speaking'; + failureReasons: null; + + /** Is the agent ready for user interaction? */ + isAvailable: true; + + /** Is the audio preconnect buffer currently active and recording because the agent hasn't + * connected yet? */ + isBufferingSpeech: false; + + cameraTrack: TrackReference | null; + microphoneTrack: TrackReference | null; +}; + +type AgentStateAvailableListening = AgentStateCommon & { + state: 'listening'; + failureReasons: null; + + /** Is the agent ready for user interaction? */ + isAvailable: true; + + /** Is the audio preconnect buffer currently active and recording because the agent hasn't + * connected yet? */ + isBufferingSpeech: boolean; + + cameraTrack: TrackReference | null; + microphoneTrack: TrackReference | null; +}; + +type AgentStateUnAvailable = AgentStateCommon & { + state: 'initializing' | 'idle'; + failureReasons: null; + + /** Is the agent ready for user interaction? */ + isAvailable: false; + + /** Is the audio preconnect buffer currently active and recording because the agent hasn't + * connected yet? */ + isBufferingSpeech: false; + + cameraTrack: TrackReference | null; + microphoneTrack: TrackReference | null; +}; + +type AgentStateConnecting = AgentStateCommon & { + state: 'disconnected' | 'connecting'; + failureReasons: null; + + /** Is the agent ready for user interaction? */ + isAvailable: false; + + /** Is the audio preconnect buffer currently active and recording because the agent hasn't + * connected yet? */ + isBufferingSpeech: false; + + cameraTrack: null; + microphoneTrack: null; +}; + +type AgentStateFailed = AgentStateCommon & { + state: 'failed'; + failureReasons: Array; + + /** Is the agent ready for user interaction? */ + isAvailable: false; + + /** Is the audio preconnect buffer currently active and recording because the agent hasn't + * connected yet? */ + isBufferingSpeech: false; + + cameraTrack: null; + microphoneTrack: null; +}; + +type AgentActions = { + /** Returns a promise that resolves once the agent is available for interaction */ + waitUntilAvailable: (signal?: AbortSignal) => Promise; + + /** Returns a promise that resolves once the agent has published a camera track */ + waitUntilCamera: (signal?: AbortSignal) => Promise; + + /** Returns a promise that resolves once the agent has published a microphone track */ + waitUntilMicrophone: (signal?: AbortSignal) => Promise; +}; + +type AgentStateCases = + | AgentStateConnecting + | AgentStateAvailable + | AgentStateAvailableListening + | AgentStateUnAvailable + | AgentStateFailed; + +/** @public */ +export type UseAgentReturn = AgentStateCases & AgentActions; + +const generateDerivedStateValues = (state: State) => + ({ + isAvailable: state === 'listening' || state === 'thinking' || state === 'speaking', + }) as { + isAvailable: State extends 'listening' | 'thinking' | 'speaking' ? true : false; + }; + +/** Internal hook used by useSession to store global agent state */ +export const useAgentTimeoutIdStore = (): { + agentTimeoutFailureReason: string | null; + startAgentTimeout: (agentConnectTimeoutMilliseconds?: number) => void; + clearAgentTimeout: () => void; + updateAgentTimeoutState: (agentState: AgentState) => void; + updateAgentTimeoutParticipantExists: (agentParticipantExists: boolean) => void; +} => { + const [agentTimeoutFailureReason, setAgentTimeoutFailureReason] = React.useState( + null, + ); + const [agentTimeoutId, setAgentTimeoutId] = React.useState | null>( + null, + ); + + const agentStateRef = React.useRef('connecting'); + const agentParticipantExistsRef = React.useRef(false); + + const startAgentConnectedTimeout = (agentConnectTimeoutMilliseconds?: number) => { + return setTimeout(() => { + if (!agentParticipantExistsRef.current) { + setAgentTimeoutFailureReason('Agent did not join the room.'); + return; + } + + const { isAvailable } = generateDerivedStateValues(agentStateRef.current); + if (!isAvailable) { + setAgentTimeoutFailureReason('Agent connected but did not complete initializing.'); + return; + } + }, agentConnectTimeoutMilliseconds ?? DEFAULT_AGENT_CONNECT_TIMEOUT_MILLISECONDS); + }; + + return { + agentTimeoutFailureReason, + startAgentTimeout: React.useCallback( + (agentConnectTimeoutMilliseconds?: number) => { + if (agentTimeoutId) { + clearTimeout(agentTimeoutId); + } + + setAgentTimeoutFailureReason(null); + setAgentTimeoutId(startAgentConnectedTimeout(agentConnectTimeoutMilliseconds)); + agentStateRef.current = 'connecting'; + agentParticipantExistsRef.current = false; + }, + [agentTimeoutId], + ), + clearAgentTimeout: React.useCallback(() => { + if (agentTimeoutId) { + clearTimeout(agentTimeoutId); + } + + setAgentTimeoutFailureReason(null); + setAgentTimeoutId(null); + agentStateRef.current = 'connecting'; + agentParticipantExistsRef.current = false; + }, [agentTimeoutId]), + + updateAgentTimeoutState: React.useCallback((agentState: AgentState) => { + agentStateRef.current = agentState; + }, []), + updateAgentTimeoutParticipantExists: React.useCallback((agentParticipantExists: boolean) => { + agentParticipantExistsRef.current = agentParticipantExists; + }, []), + }; +}; + +type SessionStub = Pick; + +/** + * useAgent encapculates all agent state, normalizing some quirks around how LiveKit Agents work. + * @public + */ +export function useAgent(session?: SessionStub): UseAgentReturn { + const sessionFromContext = useMaybeSessionContext(); + session = session ?? sessionFromContext; + if (!session) { + throw new Error( + 'No session provided, make sure you are inside a Session context or pass the session explicitly', + ); + } + + const { + room, + internal: { + agentConnectTimeoutMilliseconds, + + agentTimeoutFailureReason, + startAgentTimeout, + clearAgentTimeout, + updateAgentTimeoutState, + updateAgentTimeoutParticipantExists, + }, + } = session; + + const emitter = React.useMemo(() => new EventEmitter() as TypedEventEmitter, []); + + const roomRemoteParticipants = useRemoteParticipants({ room }); + + const agentParticipant = React.useMemo(() => { + return ( + roomRemoteParticipants.find( + (p) => + p.kind === ParticipantKind.AGENT && + !(ParticipantAgentAttributes.PublishOnBehalf in p.attributes), + ) ?? null + ); + }, [roomRemoteParticipants]); + const workerParticipant = React.useMemo(() => { + if (!agentParticipant) { + return null; + } + return ( + roomRemoteParticipants.find( + (p) => + p.kind === ParticipantKind.AGENT && + p.attributes[ParticipantAgentAttributes.PublishOnBehalf] === agentParticipant.identity, + ) ?? null + ); + }, [agentParticipant, roomRemoteParticipants]); + + // 1. Listen for agent participant attribute changes + const [agentParticipantAttributes, setAgentParticipantAttributes] = React.useState< + Record + >({}); + React.useEffect(() => { + if (!agentParticipant) { + return; + } + + const handleAttributesChanged = (attributes: UseAgentReturn['attributes']) => { + setAgentParticipantAttributes(attributes); + }; + + agentParticipant.on(ParticipantEvent.AttributesChanged, handleAttributesChanged); + return () => { + agentParticipant.off(ParticipantEvent.AttributesChanged, handleAttributesChanged); + }; + }, [agentParticipant, emitter]); + + // 2. Listen for track updates + const agentTracks = useParticipantTracks([Track.Source.Camera, Track.Source.Microphone], { + room, + participantIdentity: agentParticipant?.identity, + }); + const workerTracks = useParticipantTracks([Track.Source.Camera, Track.Source.Microphone], { + room, + participantIdentity: workerParticipant?.identity, + }); + + const videoTrack = React.useMemo( + () => + agentTracks.find((t) => t.source === Track.Source.Camera) ?? + workerTracks.find((t) => t.source === Track.Source.Camera) ?? + null, + [agentTracks, workerTracks], + ); + React.useEffect(() => { + emitter.emit(AgentEvent.CameraChanged, videoTrack); + }, [emitter, videoTrack]); + + const audioTrack = React.useMemo( + () => + agentTracks.find((t) => t.source === Track.Source.Microphone) ?? + workerTracks.find((t) => t.source === Track.Source.Microphone) ?? + null, + [agentTracks, workerTracks], + ); + React.useEffect(() => { + emitter.emit(AgentEvent.MicrophoneChanged, audioTrack); + }, [emitter, audioTrack]); + + const [roomConnectionState, setRoomConnectionState] = React.useState(room.state); + React.useEffect(() => { + const handleConnectionStateChanged = (connectionState: ConnectionState) => { + setRoomConnectionState(connectionState); + }; + + room.on(RoomEvent.ConnectionStateChanged, handleConnectionStateChanged); + return () => { + room.off(RoomEvent.ConnectionStateChanged, handleConnectionStateChanged); + }; + }, [room]); + + const [localMicTrack, setLocalMicTrack] = React.useState( + () => room.localParticipant.getTrackPublication(Track.Source.Microphone) ?? null, + ); + React.useEffect(() => { + const handleLocalParticipantTrackPublished = () => { + setLocalMicTrack(room.localParticipant.getTrackPublication(Track.Source.Microphone) ?? null); + }; + const handleLocalParticipantTrackUnPublished = () => { + setLocalMicTrack(null); + }; + + room.localParticipant.on( + ParticipantEvent.LocalTrackPublished, + handleLocalParticipantTrackPublished, + ); + room.localParticipant.on( + ParticipantEvent.LocalTrackUnpublished, + handleLocalParticipantTrackUnPublished, + ); + return () => { + room.localParticipant.off( + ParticipantEvent.LocalTrackPublished, + handleLocalParticipantTrackPublished, + ); + room.localParticipant.off( + ParticipantEvent.LocalTrackUnpublished, + handleLocalParticipantTrackUnPublished, + ); + }; + }, [room.localParticipant]); + + const failureReasons = React.useMemo(() => { + return agentTimeoutFailureReason ? [agentTimeoutFailureReason] : []; + }, [agentTimeoutFailureReason]); + + const [state, isBufferingSpeech] = React.useMemo(() => { + if (failureReasons.length > 0) { + return ['failed' as const, false]; + } + + let state: AgentState = 'disconnected'; + let bufferingSpeachLocally = false; + + if (roomConnectionState !== ConnectionState.Disconnected) { + state = 'connecting'; + } + + // If the microphone preconnect buffer is active, then the state should be "listening" rather + // than "initializing" + if (localMicTrack) { + state = 'listening'; + bufferingSpeachLocally = true; + } + + if (agentParticipant && agentParticipantAttributes[ParticipantAgentAttributes.AgentState]) { + state = agentParticipantAttributes[ParticipantAgentAttributes.AgentState] as AgentSdkStates; + bufferingSpeachLocally = false; + } + + return [state, bufferingSpeachLocally] as [AgentState, boolean]; + }, [ + failureReasons, + roomConnectionState, + localMicTrack, + agentParticipant, + agentParticipantAttributes, + ]); + + React.useEffect(() => { + emitter.emit(AgentEvent.StateChanged, state); + updateAgentTimeoutState(state); + }, [emitter, state]); + React.useEffect(() => { + updateAgentTimeoutParticipantExists(agentParticipant !== null); + }, [agentParticipant]); + + // When the session room begins connecting, start the agent timeout + const isSessionDisconnected = session.connectionState === 'disconnected'; + React.useEffect(() => { + if (isSessionDisconnected) { + return; + } + + startAgentTimeout(agentConnectTimeoutMilliseconds); + return () => { + clearAgentTimeout(); + }; + }, [isSessionDisconnected, agentConnectTimeoutMilliseconds]); + + const agentState: AgentStateCases = React.useMemo(() => { + const common: AgentStateCommon = { + attributes: agentParticipantAttributes, + + internal: { + agentParticipant, + workerParticipant, + emitter, + }, + }; + + switch (state) { + case 'disconnected': + case 'connecting': + return { + ...common, + + state, + ...generateDerivedStateValues(state), + isBufferingSpeech: false, + failureReasons: null, + + // Clear inner values if no longer connected + cameraTrack: null, + microphoneTrack: null, + }; + + case 'initializing': + case 'idle': + return { + ...common, + + state, + ...generateDerivedStateValues(state), + isBufferingSpeech: false, + failureReasons: null, + + cameraTrack: videoTrack, + microphoneTrack: audioTrack, + }; + + case 'listening': + return { + ...common, + + state, + ...generateDerivedStateValues(state), + isBufferingSpeech, + failureReasons: null, + + cameraTrack: videoTrack, + microphoneTrack: audioTrack, + }; + + case 'thinking': + case 'speaking': + return { + ...common, + + state, + ...generateDerivedStateValues(state), + isBufferingSpeech: false, + failureReasons: null, + + cameraTrack: videoTrack, + microphoneTrack: audioTrack, + }; + + case 'failed': + return { + ...common, + + state: 'failed', + ...generateDerivedStateValues('failed'), + isBufferingSpeech: false, + failureReasons, + + // Clear inner values if no longer connected + cameraTrack: null, + microphoneTrack: null, + }; + } + }, [ + agentParticipantAttributes, + emitter, + agentParticipant, + + state, + videoTrack, + audioTrack, + isBufferingSpeech, + ]); + + const waitUntilAvailable = React.useCallback( + async (signal?: AbortSignal) => { + const { isAvailable } = generateDerivedStateValues(state); + if (isAvailable) { + return; + } + + return new Promise((resolve, reject) => { + const stateChangedHandler = (state: AgentState) => { + const { isAvailable } = generateDerivedStateValues(state); + if (!isAvailable) { + return; + } + cleanup(); + resolve(); + }; + const abortHandler = () => { + cleanup(); + reject(new Error('useAgent.waitUntilAvailable - signal aborted')); + }; + + const cleanup = () => { + emitter.off(AgentEvent.StateChanged, stateChangedHandler); + signal?.removeEventListener('abort', abortHandler); + }; + + emitter.on(AgentEvent.StateChanged, stateChangedHandler); + signal?.addEventListener('abort', abortHandler); + }); + }, + [state, emitter], + ); + + const waitUntilCamera = React.useCallback( + (signal?: AbortSignal) => { + return new Promise((resolve, reject) => { + const stateChangedHandler = (camera: TrackReference | null) => { + if (!camera) { + return; + } + cleanup(); + resolve(camera); + }; + const abortHandler = () => { + cleanup(); + reject(new Error('useAgent.waitUntilCamera - signal aborted')); + }; + + const cleanup = () => { + emitter.off(AgentEvent.CameraChanged, stateChangedHandler); + signal?.removeEventListener('abort', abortHandler); + }; + + emitter.on(AgentEvent.CameraChanged, stateChangedHandler); + signal?.addEventListener('abort', abortHandler); + }); + }, + [emitter], + ); + + const waitUntilMicrophone = React.useCallback( + (signal?: AbortSignal) => { + return new Promise((resolve, reject) => { + const stateChangedHandler = (microphone: TrackReference | null) => { + if (!microphone) { + return; + } + cleanup(); + resolve(microphone); + }; + const abortHandler = () => { + cleanup(); + reject(new Error('useAgent.waitUntilMicrophone - signal aborted')); + }; + + const cleanup = () => { + emitter.off(AgentEvent.MicrophoneChanged, stateChangedHandler); + signal?.removeEventListener('abort', abortHandler); + }; + + emitter.on(AgentEvent.MicrophoneChanged, stateChangedHandler); + signal?.addEventListener('abort', abortHandler); + }); + }, + [emitter], + ); + + return React.useMemo(() => { + return { + ...agentState, + waitUntilAvailable, + waitUntilCamera, + waitUntilMicrophone, + }; + }, [agentState, waitUntilAvailable, waitUntilCamera, waitUntilMicrophone]); +} diff --git a/packages/react/src/hooks/useChat.ts b/packages/react/src/hooks/useChat.ts index feade40f9..a86543665 100644 --- a/packages/react/src/hooks/useChat.ts +++ b/packages/react/src/hooks/useChat.ts @@ -1,8 +1,8 @@ import * as React from 'react'; import type { ChatOptions, ReceivedChatMessage } from '@livekit/components-core'; import { setupChat } from '@livekit/components-core'; -import { ConnectionState } from 'livekit-client'; -import { useRoomContext } from '../context'; +import { ConnectionState, Room } from 'livekit-client'; +import { useEnsureRoom } from '../context'; import { useObservableState } from './internal/useObservableState'; import { useConnectionState } from './useConnectionStatus'; @@ -39,8 +39,8 @@ import { useConnectionState } from './useConnectionStatus'; * ``` * @public */ -export function useChat(options?: ChatOptions) { - const room = useRoomContext(); +export function useChat(options?: ChatOptions & { room?: Room }) { + const room = useEnsureRoom(options?.room); const connectionState = useConnectionState(room); const isDisconnected = React.useMemo( () => connectionState === ConnectionState.Disconnected, diff --git a/packages/react/src/hooks/useEvents.ts b/packages/react/src/hooks/useEvents.ts new file mode 100644 index 000000000..779228949 --- /dev/null +++ b/packages/react/src/hooks/useEvents.ts @@ -0,0 +1,39 @@ +import * as React from 'react'; +import TypedEventEmitter, { EventMap } from 'typed-emitter'; + +/** @public */ +export function useEvents< + Emitter extends TypedEventEmitter, + EmitterEventMap extends Emitter extends TypedEventEmitter ? EM : never, + Event extends Parameters[0], + Callback extends EmitterEventMap[Event], +>( + instance: Emitter | { internal: { emitter: Emitter } } | null | undefined, + event: Event, + handlerFn: Callback | undefined, + dependencies?: React.DependencyList, +) { + const fallback = React.useMemo(() => () => {}, []); + const wrappedCallback = React.useCallback(handlerFn ?? fallback, dependencies ?? []); + const callback = dependencies ? wrappedCallback : handlerFn; + + const emitter = React.useMemo(() => { + if (!instance) { + return null; + } + if ('internal' in instance) { + return instance.internal.emitter; + } + return instance; + }, [instance]); + + React.useEffect(() => { + if (!emitter || !callback) { + return; + } + emitter.on(event, callback); + return () => { + emitter.off(event, callback); + }; + }, [emitter, event, callback]); +} diff --git a/packages/react/src/hooks/useLiveKitRoom.ts b/packages/react/src/hooks/useLiveKitRoom.ts index 0e01d7be7..2c1eb4fe4 100644 --- a/packages/react/src/hooks/useLiveKitRoom.ts +++ b/packages/react/src/hooks/useLiveKitRoom.ts @@ -84,7 +84,7 @@ export function useLiveKitRoom( }); }; - const handleMediaDeviceError = (e: Error, kind: MediaDeviceKind) => { + const handleMediaDeviceError = (e: Error, kind?: MediaDeviceKind) => { const mediaDeviceFailure = MediaDeviceFailure.getFailure(e); onMediaDeviceFailure?.(mediaDeviceFailure, kind); }; diff --git a/packages/react/src/hooks/useParticipantTracks.ts b/packages/react/src/hooks/useParticipantTracks.ts index 661ee7683..b5ccf7c1d 100644 --- a/packages/react/src/hooks/useParticipantTracks.ts +++ b/packages/react/src/hooks/useParticipantTracks.ts @@ -2,21 +2,37 @@ import * as React from 'react'; import type { TrackReference } from '@livekit/components-core'; import { participantTracksObservable } from '@livekit/components-core'; import { useObservableState } from './internal'; -import type { Track } from 'livekit-client'; +import type { Room, Track } from 'livekit-client'; import { useMaybeParticipantContext } from '../context'; import { useParticipants } from './useParticipants'; +type UseParticipantTracksOptions = { + participantIdentity?: string; + room?: Room; +}; + /** * `useParticipantTracks` is a custom React that allows you to get tracks of a specific participant only, by specifiying the participant's identity. * If the participant identity is not passed the hook will try to get the participant from a participant context. * @public */ -export function useParticipantTracks( - sources: Track.Source[], - participantIdentity?: string, -): TrackReference[] { +export function useParticipantTracks( + sources: Array, + optionsOrParticipantIdentity: + | UseParticipantTracksOptions + | UseParticipantTracksOptions['participantIdentity'] = {}, +): Array { + let participantIdentity: UseParticipantTracksOptions['participantIdentity']; + let room: UseParticipantTracksOptions['room']; + if (typeof optionsOrParticipantIdentity === 'string') { + participantIdentity = optionsOrParticipantIdentity; + } else { + participantIdentity = optionsOrParticipantIdentity?.participantIdentity; + room = optionsOrParticipantIdentity?.room; + } + const participantContext = useMaybeParticipantContext(); - const participants = useParticipants({ updateOnlyOn: [] }); + const participants = useParticipants({ room, updateOnlyOn: [] }); const p = React.useMemo(() => { if (participantIdentity) { @@ -32,7 +48,7 @@ export function useParticipantTracks( return participantTracksObservable(p, { sources }); }, [p, JSON.stringify(sources)]); - const trackRefs = useObservableState(observable, [] as TrackReference[]); + const trackRefs = useObservableState(observable, [] as Array); return trackRefs; } diff --git a/packages/react/src/hooks/useSession.ts b/packages/react/src/hooks/useSession.ts new file mode 100644 index 000000000..c79cb0791 --- /dev/null +++ b/packages/react/src/hooks/useSession.ts @@ -0,0 +1,514 @@ +import * as React from 'react'; +import type TypedEventEmitter from 'typed-emitter'; +import { + Room, + RoomEvent, + ConnectionState, + TrackPublishOptions, + Track, + TokenSourceConfigurable, + TokenSourceFixed, + TokenSourceFetchOptions, + RoomConnectOptions, +} from 'livekit-client'; +import { EventEmitter } from 'events'; + +import { useMaybeRoomContext } from '../context'; +import { AgentState, useAgent, useAgentTimeoutIdStore } from './useAgent'; +import { TrackReference } from '@livekit/components-core'; +import { useLocalParticipant } from './useLocalParticipant'; + +/** @public */ +export enum SessionEvent { + ConnectionStateChanged = 'connectionStateChanged', + /** + * Emits when an error is encountered while attempting to create a track. + * Use MediaDeviceFailure.getFailure(error) to get the reason of failure. + * args: (error: Error, kind: MediaDeviceKind) + */ + MediaDevicesError = 'mediaDevicesError', + /** + * Emits when an error is received while decrypting frame received frame information. + * args: (error: Error) + */ + EncryptionError = 'encryptionError', +} + +/** @public */ +export type SessionCallbacks = { + [SessionEvent.ConnectionStateChanged]: (newAgentConnectionState: ConnectionState) => void; + [SessionEvent.MediaDevicesError]: (error: Error) => void; + [SessionEvent.EncryptionError]: (error: Error) => void; +}; + +/** @public */ +export type SessionConnectOptions = { + /** Optional abort signal which if triggered will terminate connecting even if it isn't complete */ + signal?: AbortSignal; + + tracks?: { + microphone?: { + enabled?: boolean; + publishOptions?: TrackPublishOptions; + }; + }; + + /** Options for Room.connect(.., .., opts) */ + roomConnectOptions?: RoomConnectOptions; +}; + +/** @public */ +export type SwitchActiveDeviceOptions = { + /** + * If true, adds an `exact` constraint to the getUserMedia request. + * The request will fail if this option is true and the device specified is not actually available + */ + exact?: boolean; +}; + +type SessionStateCommon = { + room: Room; + internal: { + emitter: TypedEventEmitter; + tokenSource: TokenSourceConfigurable | TokenSourceFixed; + agentConnectTimeoutMilliseconds?: number; + + agentTimeoutFailureReason: string | null; + startAgentTimeout: (agentConnectTimeoutMilliseconds?: number) => void; + clearAgentTimeout: () => void; + updateAgentTimeoutState: (agentState: AgentState) => void; + updateAgentTimeoutParticipantExists: (agentParticipantExists: boolean) => void; + }; +}; + +type SessionStateConnecting = SessionStateCommon & { + connectionState: ConnectionState.Connecting; + isConnected: false; + isReconnecting: false; + + local: { + cameraTrack: null; + microphoneTrack: null; + }; +}; + +type SessionStateConnected = SessionStateCommon & { + connectionState: + | ConnectionState.Connected + | ConnectionState.Reconnecting + | ConnectionState.SignalReconnecting; + isConnected: true; + isReconnecting: boolean; + + local: { + cameraTrack: TrackReference | null; + microphoneTrack: TrackReference | null; + }; +}; + +type SessionStateDisconnected = SessionStateCommon & { + connectionState: ConnectionState.Disconnected; + isConnected: false; + isReconnecting: false; + + local: { + cameraTrack: null; + microphoneTrack: null; + }; +}; + +type SessionActions = { + /** Returns a promise that resolves once the room connects. */ + waitUntilConnected: (signal?: AbortSignal) => void; + /** Returns a promise that resolves once the room disconnects */ + waitUntilDisconnected: (signal?: AbortSignal) => void; + + prepareConnection: () => Promise; + + /** Connect to the underlying room and dispatch any agents */ + start: (options?: SessionConnectOptions) => Promise; + + /** Disconnect from the underlying room */ + end: () => Promise; +}; + +/** @public */ +export type UseSessionReturn = ( + | SessionStateConnecting + | SessionStateConnected + | SessionStateDisconnected +) & + SessionActions; + +type UseSessionCommonOptions = { + room?: Room; + + /** + * Amount of time in milliseonds the system will wait for an agent to join the room, before + * transitioning to the "failure" state. + */ + agentConnectTimeoutMilliseconds?: number; +}; + +type UseSessionConfigurableOptions = UseSessionCommonOptions & TokenSourceFetchOptions; +type UseSessionFixedOptions = UseSessionCommonOptions; + +/** + * A Session represents a manages connection to a Room which can contain Agents. + * @public + */ +export function useSession( + tokenSource: TokenSourceConfigurable, + options?: UseSessionConfigurableOptions, +): UseSessionReturn; +/** + * A Session represents a manages connection to a Room which can contain Agents. + * @public + */ +export function useSession( + tokenSource: TokenSourceFixed, + options?: UseSessionFixedOptions, +): UseSessionReturn; +export function useSession( + tokenSource: TokenSourceConfigurable | TokenSourceFixed, + options: UseSessionConfigurableOptions | UseSessionFixedOptions = {}, +): UseSessionReturn { + const { room: optionsRoom, agentConnectTimeoutMilliseconds, ...restOptions } = options; + + const roomFromContext = useMaybeRoomContext(); + const room = React.useMemo( + () => roomFromContext ?? optionsRoom ?? new Room(), + [roomFromContext, optionsRoom], + ); + + const emitter = React.useMemo( + () => new EventEmitter() as TypedEventEmitter, + [], + ); + + const generateDerivedConnectionStateValues = React.useCallback( + (connectionState: State) => + ({ + isConnected: + connectionState === ConnectionState.Connected || + connectionState === ConnectionState.Reconnecting || + connectionState === ConnectionState.SignalReconnecting, + isReconnecting: + connectionState === ConnectionState.Reconnecting || + connectionState === ConnectionState.SignalReconnecting, + }) as { + isConnected: State extends + | ConnectionState.Connected + | ConnectionState.Reconnecting + | ConnectionState.SignalReconnecting + ? true + : false; + isReconnecting: State extends + | ConnectionState.Reconnecting + | ConnectionState.SignalReconnecting + ? true + : false; + }, + [], + ); + + const [roomConnectionState, setRoomConnectionState] = React.useState(room.state); + React.useEffect(() => { + const handleConnectionStateChanged = (connectionState: ConnectionState) => { + setRoomConnectionState(connectionState); + }; + + room.on(RoomEvent.ConnectionStateChanged, handleConnectionStateChanged); + return () => { + room.off(RoomEvent.ConnectionStateChanged, handleConnectionStateChanged); + }; + }, [room]); + + React.useEffect(() => { + const handleMediaDevicesError = async (error: Error) => { + emitter.emit(SessionEvent.MediaDevicesError, error); + }; + + room.on(RoomEvent.MediaDevicesError, handleMediaDevicesError); + return () => { + room.off(RoomEvent.MediaDevicesError, handleMediaDevicesError); + }; + }, [room, emitter]); + + React.useEffect(() => { + const handleEncryptionError = async (error: Error) => { + emitter.emit(SessionEvent.EncryptionError, error); + }; + + room.on(RoomEvent.EncryptionError, handleEncryptionError); + return () => { + room.off(RoomEvent.EncryptionError, handleEncryptionError); + }; + }, [room, emitter]); + + const { localParticipant } = useLocalParticipant({ room }); + const cameraPublication = localParticipant.getTrackPublication(Track.Source.Camera); + const localCamera = React.useMemo(() => { + if (!cameraPublication || cameraPublication.isMuted) { + return null; + } + return { + source: Track.Source.Camera, + participant: localParticipant, + publication: cameraPublication, + }; + }, [localParticipant, cameraPublication, cameraPublication?.isMuted]); + const microphonePublication = localParticipant.getTrackPublication(Track.Source.Microphone); + const localMicrophone = React.useMemo(() => { + if (!microphonePublication || microphonePublication.isMuted) { + return null; + } + return { + source: Track.Source.Microphone, + participant: localParticipant, + publication: microphonePublication, + }; + }, [localParticipant, microphonePublication, microphonePublication?.isMuted]); + + const { + agentTimeoutFailureReason, + startAgentTimeout, + clearAgentTimeout, + updateAgentTimeoutState, + updateAgentTimeoutParticipantExists, + } = useAgentTimeoutIdStore(); + + const sessionInternal: UseSessionReturn['internal'] = React.useMemo( + () => ({ + emitter, + tokenSource, + agentConnectTimeoutMilliseconds, + + agentTimeoutFailureReason, + startAgentTimeout, + clearAgentTimeout, + updateAgentTimeoutState, + updateAgentTimeoutParticipantExists, + }), + [ + emitter, + agentConnectTimeoutMilliseconds, + tokenSource, + agentTimeoutFailureReason, + startAgentTimeout, + clearAgentTimeout, + updateAgentTimeoutState, + updateAgentTimeoutParticipantExists, + ], + ); + + const conversationState = React.useMemo((): + | SessionStateConnecting + | SessionStateConnected + | SessionStateDisconnected => { + const common: SessionStateCommon = { + room, + internal: sessionInternal, + }; + + switch (roomConnectionState) { + case ConnectionState.Connecting: + return { + ...common, + + connectionState: ConnectionState.Connecting, + ...generateDerivedConnectionStateValues(ConnectionState.Connecting), + + local: { + cameraTrack: null, + microphoneTrack: null, + }, + }; + + case ConnectionState.Connected: + case ConnectionState.Reconnecting: + case ConnectionState.SignalReconnecting: + return { + ...common, + + connectionState: roomConnectionState, + ...generateDerivedConnectionStateValues(roomConnectionState), + + local: { + cameraTrack: localCamera, + microphoneTrack: localMicrophone, + }, + }; + + case ConnectionState.Disconnected: + return { + ...common, + + connectionState: ConnectionState.Disconnected, + ...generateDerivedConnectionStateValues(ConnectionState.Disconnected), + + local: { + cameraTrack: null, + microphoneTrack: null, + }, + }; + } + }, [ + sessionInternal, + room, + emitter, + roomConnectionState, + localParticipant, + localCamera, + localMicrophone, + generateDerivedConnectionStateValues, + ]); + React.useEffect(() => { + emitter.emit(SessionEvent.ConnectionStateChanged, conversationState.connectionState); + }, [emitter, conversationState.connectionState]); + + const waitUntilConnectionState = React.useCallback( + async (state: UseSessionReturn['connectionState'], signal?: AbortSignal) => { + if (conversationState.connectionState === state) { + return; + } + + return new Promise((resolve, reject) => { + const onceEventOccurred = (newState: UseSessionReturn['connectionState']) => { + if (newState !== state) { + return; + } + cleanup(); + resolve(); + }; + const abortHandler = () => { + cleanup(); + reject(new Error(`AgentSession.waitUntilRoomState(${state}, ...) - signal aborted`)); + }; + + const cleanup = () => { + emitter.off(SessionEvent.ConnectionStateChanged, onceEventOccurred); + signal?.removeEventListener('abort', abortHandler); + }; + + emitter.on(SessionEvent.ConnectionStateChanged, onceEventOccurred); + signal?.addEventListener('abort', abortHandler); + }); + }, + [conversationState.connectionState, emitter], + ); + + const waitUntilConnected = React.useCallback( + async (signal?: AbortSignal) => { + return waitUntilConnectionState( + ConnectionState.Connected /* FIXME: should I check for other states too? */, + signal, + ); + }, + [waitUntilConnectionState], + ); + + const waitUntilDisconnected = React.useCallback( + async (signal?: AbortSignal) => { + return waitUntilConnectionState(ConnectionState.Disconnected, signal); + }, + [waitUntilConnectionState], + ); + + const agent = useAgent( + React.useMemo( + () => ({ + connectionState: conversationState.connectionState, + room, + internal: sessionInternal, + }), + [conversationState, room, sessionInternal], + ), + ); + + const tokenSourceFetch = React.useCallback(async () => { + const isConfigurable = tokenSource instanceof TokenSourceConfigurable; + if (isConfigurable) { + const tokenFetchOptions = restOptions as UseSessionConfigurableOptions; + return tokenSource.fetch(tokenFetchOptions); + } else { + return tokenSource.fetch(); + } + }, [tokenSource, restOptions]); + + const start = React.useCallback( + async (connectOptions: SessionConnectOptions = {}) => { + const { + signal, + tracks = { microphone: { enabled: true, publishOptions: { preConnectBuffer: true } } }, + roomConnectOptions, + } = connectOptions; + + await waitUntilDisconnected(signal); + + const onSignalAbort = () => { + room.disconnect(); + }; + signal?.addEventListener('abort', onSignalAbort); + + await Promise.all([ + // FIXME: swap the below line in once the new `livekit-client` changes are published + // room.connect(tokenSource, { tokenSourceOptions }), + tokenSourceFetch().then(({ serverUrl, participantToken }) => + room.connect(serverUrl, participantToken, roomConnectOptions), + ), + + // Start microphone (with preconnect buffer) by default + tracks.microphone?.enabled + ? room.localParticipant.setMicrophoneEnabled( + true, + undefined, + tracks.microphone?.publishOptions ?? {}, + ) + : Promise.resolve(), + ]); + + await waitUntilConnected(signal); + await agent.waitUntilAvailable(signal); + + signal?.removeEventListener('abort', onSignalAbort); + }, + [room, waitUntilDisconnected, tokenSourceFetch, waitUntilConnected, agent.waitUntilAvailable], + ); + + const end = React.useCallback(async () => { + await room.disconnect(); + }, [room]); + + const prepareConnection = React.useCallback(async () => { + const credentials = await tokenSourceFetch(); + // FIXME: swap the below line in once the new `livekit-client` changes are published + // room.prepareConnection(tokenSource, { tokenSourceOptions }), + await room.prepareConnection(credentials.serverUrl, credentials.participantToken); + }, [tokenSourceFetch, room]); + React.useEffect( + () => { + prepareConnection().catch((err) => { + // FIXME: figure out a better logging solution? + console.warn('WARNING: Room.prepareConnection failed:', err); + }); + }, + [ + /* note: no prepareConnection here, this effect should only ever run once! */ + ], + ); + + return React.useMemo( + () => ({ + ...conversationState, + + waitUntilConnected, + waitUntilDisconnected, + + prepareConnection, + start, + end, + }), + [conversationState, waitUntilConnected, waitUntilDisconnected, prepareConnection, start, end], + ); +} diff --git a/packages/react/src/hooks/useSessionMessages.ts b/packages/react/src/hooks/useSessionMessages.ts new file mode 100644 index 000000000..8d98c410f --- /dev/null +++ b/packages/react/src/hooks/useSessionMessages.ts @@ -0,0 +1,136 @@ +import * as React from 'react'; +import type TypedEventEmitter from 'typed-emitter'; +import { SendTextOptions } from 'livekit-client'; +import { EventEmitter } from 'events'; +import { + ReceivedMessage, + ReceivedChatMessage, + TextStreamData, + ReceivedUserTranscriptionMessage, + ReceivedAgentTranscriptionMessage, +} from '@livekit/components-core'; + +import { useAgent } from './useAgent'; +import { useTranscriptions } from './useTranscriptions'; +import { useChat } from './useChat'; +import { UseSessionReturn } from './useSession'; +import { useEnsureSession } from '../context'; + +/** @public */ +export type UseSessionMessagesReturn = { + messages: Array; + + /** Is a send operation currently in progress? */ + isSending: boolean; + + send: (message: string, options?: SendTextOptions) => Promise; + + internal: { + emitter: TypedEventEmitter; + }; +}; + +/** @public */ +export enum MessagesEvent { + /** + * Emits when a new message is received from a participant + * args: (message: ReceivedMessage) + */ + MessageReceived = 'messageReceived', +} + +/** @public */ +export type MessagesCallbacks = { + [MessagesEvent.MessageReceived]: (message: ReceivedMessage) => void; +}; + +/** @public */ +export function useSessionMessages(session?: UseSessionReturn): UseSessionMessagesReturn { + const { room } = useEnsureSession(session); + + const emitter = React.useMemo( + () => new EventEmitter() as TypedEventEmitter, + [], + ); + + const agent = useAgent(session); + + const transcriptions: Array = useTranscriptions({ room }); + const chatOptions = React.useMemo(() => ({ room }), [room]); + const chat = useChat(chatOptions); + + const transcriptionMessages: Array< + ReceivedUserTranscriptionMessage | ReceivedAgentTranscriptionMessage + > = React.useMemo(() => { + return transcriptions.map((transcription) => { + switch (transcription.participantInfo.identity) { + case room.localParticipant.identity: + return { + type: 'userTranscript', + message: transcription.text, + + id: transcription.streamInfo.id, + timestamp: transcription.streamInfo.timestamp, + from: room.localParticipant, + }; + + case agent.internal.agentParticipant?.identity: + case agent.internal.workerParticipant?.identity: + return { + type: 'agentTranscript', + message: transcription.text, + + id: transcription.streamInfo.id, + timestamp: transcription.streamInfo.timestamp, + from: + agent.internal.agentParticipant?.identity === transcription.participantInfo.identity + ? agent.internal.agentParticipant + : agent.internal.workerParticipant!, + }; + + default: + // FIXME: what should happen if an associated participant is not found? + // + // For now, just assume it is an agent transcription, since maybe it is from an agent + // which disconencted from the room or something like that. + return { + type: 'agentTranscript', + message: transcription.text, + + id: transcription.streamInfo.id, + timestamp: transcription.streamInfo.timestamp, + from: Array.from(room.remoteParticipants.values()).find( + (p) => p.identity === transcription.participantInfo.identity, + ), + }; + } + }); + }, [transcriptions, room]); + + const receivedMessages = React.useMemo(() => { + const merged: Array = [...transcriptionMessages, ...chat.chatMessages]; + return merged.sort((a, b) => a.timestamp - b.timestamp); + }, [transcriptionMessages, chat.chatMessages]); + + const previouslyReceivedMessageIdsRef = React.useRef(new Set()); + React.useEffect(() => { + for (const message of receivedMessages) { + if (previouslyReceivedMessageIdsRef.current.has(message.id)) { + continue; + } + + previouslyReceivedMessageIdsRef.current.add(message.id); + emitter.emit(MessagesEvent.MessageReceived, message); + } + }, [receivedMessages]); + + return React.useMemo( + () => ({ + messages: receivedMessages, + send: chat.send, + isSending: chat.isSending, + internal: { emitter }, + }), + [receivedMessages, chat.send, chat.isSending], + ); +} diff --git a/packages/react/src/hooks/useSpeakingParticipants.ts b/packages/react/src/hooks/useSpeakingParticipants.ts index 4f4565c6f..3b757f019 100644 --- a/packages/react/src/hooks/useSpeakingParticipants.ts +++ b/packages/react/src/hooks/useSpeakingParticipants.ts @@ -1,7 +1,13 @@ import { activeSpeakerObserver } from '@livekit/components-core'; import * as React from 'react'; -import { useRoomContext } from '../context'; +import { useEnsureRoom } from '../context'; import { useObservableState } from './internal'; +import { Room } from 'livekit-client'; + +/** @public */ +export type UseSpeakingParticipantsOptions = { + room?: Room; +}; /** * The `useSpeakingParticipants` hook returns only the active speakers of all participants. @@ -12,9 +18,10 @@ import { useObservableState } from './internal'; * ``` * @public */ -export function useSpeakingParticipants() { - const room = useRoomContext(); - const speakerObserver = React.useMemo(() => activeSpeakerObserver(room), [room]); - const activeSpeakers = useObservableState(speakerObserver, room.activeSpeakers); +export function useSpeakingParticipants(options?: UseSpeakingParticipantsOptions) { + const ensuredRoom = useEnsureRoom(options?.room); + + const speakerObserver = React.useMemo(() => activeSpeakerObserver(ensuredRoom), [ensuredRoom]); + const activeSpeakers = useObservableState(speakerObserver, ensuredRoom.activeSpeakers); return activeSpeakers; } diff --git a/packages/react/src/hooks/useTextStream.ts b/packages/react/src/hooks/useTextStream.ts index 2f22bf4de..1de3db2a3 100644 --- a/packages/react/src/hooks/useTextStream.ts +++ b/packages/react/src/hooks/useTextStream.ts @@ -1,10 +1,15 @@ import * as React from 'react'; -import { ConnectionState } from 'livekit-client'; +import { ConnectionState, Room } from 'livekit-client'; import { setupTextStream, type TextStreamData } from '@livekit/components-core'; -import { useRoomContext } from '../context'; +import { useEnsureRoom } from '../context'; import { useConnectionState } from './useConnectionStatus'; import { useObservableState } from './internal'; +/** @beta */ +export type UseTextStreamOptions = { + room?: Room; +}; + /** * @beta * @param topic - the topic to listen to @@ -15,8 +20,8 @@ import { useObservableState } from './internal'; * return
{textStreams.map((textStream) => textStream.text)}
; * ``` */ -export function useTextStream(topic: string) { - const room = useRoomContext(); +export function useTextStream(topic: string, options?: UseTextStreamOptions) { + const room = useEnsureRoom(options?.room); const connectionState = useConnectionState(room); const isDisconnected = connectionState === ConnectionState.Disconnected; diff --git a/packages/react/src/hooks/useTrackToggle.ts b/packages/react/src/hooks/useTrackToggle.ts index 4e3a1410c..ad0b0ef09 100644 --- a/packages/react/src/hooks/useTrackToggle.ts +++ b/packages/react/src/hooks/useTrackToggle.ts @@ -1,6 +1,7 @@ import type { ToggleSource } from '@livekit/components-core'; import { setupMediaToggle, setupManualToggle, log } from '@livekit/components-core'; import * as React from 'react'; +import { type Room } from 'livekit-client'; import type { TrackToggleProps } from '../components'; import { useMaybeRoomContext } from '../context'; import { mergeProps } from '../mergeProps'; @@ -8,7 +9,9 @@ import { useObservableState } from './internal'; /** @public */ export interface UseTrackToggleProps - extends Omit, 'showIcon'> {} + extends Omit, 'showIcon'> { + room?: Room; +} /** * The `useTrackToggle` hook is used to implement the `TrackToggle` component and returns state @@ -28,19 +31,21 @@ export function useTrackToggle({ captureOptions, publishOptions, onDeviceError, + room, ...rest }: UseTrackToggleProps) { - const room = useMaybeRoomContext(); - const track = room?.localParticipant?.getTrackPublication(source); + const roomFromContext = useMaybeRoomContext(); + const roomFallback = React.useMemo(() => room ?? roomFromContext, [room, roomFromContext]); + const track = roomFallback?.localParticipant?.getTrackPublication(source); /** `true` if a user interaction such as a click on the TrackToggle button has occurred. */ const userInteractionRef = React.useRef(false); const { toggle, className, pendingObserver, enabledObserver } = React.useMemo( () => - room - ? setupMediaToggle(source, room, captureOptions, publishOptions, onDeviceError) + roomFallback + ? setupMediaToggle(source, roomFallback, captureOptions, publishOptions, onDeviceError) : setupManualToggle(), - [room, source, JSON.stringify(captureOptions), publishOptions], + [roomFallback, source, JSON.stringify(captureOptions), publishOptions], ); const pending = useObservableState(pendingObserver, false); diff --git a/packages/react/src/hooks/useTranscriptions.ts b/packages/react/src/hooks/useTranscriptions.ts index a256cbb31..409fd65cc 100644 --- a/packages/react/src/hooks/useTranscriptions.ts +++ b/packages/react/src/hooks/useTranscriptions.ts @@ -1,11 +1,13 @@ import * as React from 'react'; import { useTextStream } from './useTextStream'; -import { DataTopic } from '@livekit/components-core'; +import { DataTopic, ParticipantAgentAttributes } from '@livekit/components-core'; +import { Room } from 'livekit-client'; /** * @beta */ export interface UseTranscriptionsOptions { + room?: Room; participantIdentities?: string[]; trackSids?: string[]; } @@ -22,7 +24,7 @@ export interface UseTranscriptionsOptions { */ export function useTranscriptions(opts?: UseTranscriptionsOptions) { const { participantIdentities, trackSids } = opts ?? {}; - const { textStreams } = useTextStream(DataTopic.TRANSCRIPTION); + const { textStreams } = useTextStream(DataTopic.TRANSCRIPTION, { room: opts?.room }); const filteredMessages = React.useMemo( () => @@ -34,7 +36,9 @@ export function useTranscriptions(opts?: UseTranscriptionsOptions) { ) .filter((stream) => trackSids - ? trackSids.includes(stream.streamInfo.attributes?.['lk.transcribed_track_id'] ?? '') + ? trackSids.includes( + stream.streamInfo.attributes?.[ParticipantAgentAttributes.TranscribedTrackId] ?? '', + ) : true, ), [textStreams, participantIdentities, trackSids], diff --git a/packages/react/src/hooks/useVoiceAssistant.ts b/packages/react/src/hooks/useVoiceAssistant.ts index ee812c6ac..1f458bca1 100644 --- a/packages/react/src/hooks/useVoiceAssistant.ts +++ b/packages/react/src/hooks/useVoiceAssistant.ts @@ -1,23 +1,17 @@ import * as React from 'react'; import { ConnectionState, ParticipantKind, Track } from 'livekit-client'; import type { RemoteParticipant } from 'livekit-client'; -import type { ReceivedTranscriptionSegment, TrackReference } from '@livekit/components-core'; +import { + ParticipantAgentAttributes, + type ReceivedTranscriptionSegment, + type TrackReference, +} from '@livekit/components-core'; import { useRemoteParticipants } from './useRemoteParticipants'; import { useParticipantTracks } from './useParticipantTracks'; import { useTrackTranscription } from './useTrackTranscription'; import { useConnectionState } from './useConnectionStatus'; import { useParticipantAttributes } from './useParticipantAttributes'; - -/** - * @beta - */ -export type AgentState = - | 'disconnected' - | 'connecting' - | 'initializing' - | 'listening' - | 'thinking' - | 'speaking'; +import { AgentState } from './useAgent'; /** * @beta @@ -49,7 +43,7 @@ export interface VoiceAssistant { agentAttributes: RemoteParticipant['attributes'] | undefined; } -const state_attribute = 'lk.agent.state'; +const state_attribute = ParticipantAgentAttributes.AgentState; /** * This hook looks for the first agent-participant in the room. @@ -63,11 +57,14 @@ const state_attribute = 'lk.agent.state'; export function useVoiceAssistant(): VoiceAssistant { const remoteParticipants = useRemoteParticipants(); const agent = remoteParticipants.find( - (p) => p.kind === ParticipantKind.AGENT && !('lk.publish_on_behalf' in p.attributes), + (p) => + p.kind === ParticipantKind.AGENT && + !(ParticipantAgentAttributes.PublishOnBehalf in p.attributes), ); const worker = remoteParticipants.find( (p) => - p.kind === ParticipantKind.AGENT && p.attributes['lk.publish_on_behalf'] === agent?.identity, + p.kind === ParticipantKind.AGENT && + p.attributes[ParticipantAgentAttributes.PublishOnBehalf] === agent?.identity, ); const agentTracks = useParticipantTracks( [Track.Source.Microphone, Track.Source.Camera], diff --git a/packages/react/src/index.ts b/packages/react/src/index.ts index 035c7102f..543c94804 100644 --- a/packages/react/src/index.ts +++ b/packages/react/src/index.ts @@ -1,4 +1,4 @@ -export * from './components/index.js'; +export * from './components'; export * from './hooks'; @@ -14,7 +14,10 @@ export * from './assets/images'; export { setLogLevel, setLogExtension, isTrackReference } from '@livekit/components-core'; export type { ChatMessage, + ReceivedMessage, ReceivedChatMessage, + ReceivedUserTranscriptionMessage, + ReceivedAgentTranscriptionMessage, MessageDecoder, MessageEncoder, LocalUserChoices, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a21165686..7445f579a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,9 +6,9 @@ settings: catalogs: default: - livekit-client: - specifier: ^2.13.3 - version: 2.15.1 + '@livekit/protocol': + specifier: ^1.42.0 + version: 1.42.0 importers: @@ -22,7 +22,7 @@ importers: version: 0.0.4 '@rushstack/heft': specifier: ^0.73.0 - version: 0.73.6(@types/node@22.13.1) + version: 0.73.6(@types/node@24.7.0) glob: specifier: ^11.0.0 version: 11.0.1 @@ -46,7 +46,7 @@ importers: version: 5.8.2 typescript-eslint: specifier: ^8.24.0 - version: 8.29.0(eslint@8.57.1)(typescript@5.8.2) + version: 8.29.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2) docs/docs: dependencies: @@ -64,7 +64,7 @@ importers: version: link:../../packages/styles livekit-client: specifier: 'catalog:' - version: 2.15.1(@types/dom-mediacapture-record@1.0.22) + version: 2.15.8(@types/dom-mediacapture-record@1.0.22) react: specifier: ^18.2.0 version: 18.3.1 @@ -77,10 +77,10 @@ importers: version: 7.26.8 '@storybook/addon-docs': specifier: ^7.6.0 - version: 7.6.20(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 7.6.20(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/addon-essentials': specifier: ^7.6.0 - version: 7.6.20(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 7.6.20(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/addon-interactions': specifier: ^7.6.0 version: 7.6.20 @@ -92,7 +92,7 @@ importers: version: 7.6.20(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.2) '@storybook/react-vite': specifier: ^7.6.0 - version: 7.6.20(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.50.1)(typescript@5.8.2)(vite@6.3.6(@types/node@22.13.1)(jiti@2.4.2)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5)) + version: 7.6.20(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.44.1)(typescript@5.8.2)(vite@6.3.5(@types/node@24.7.0)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5)) '@storybook/testing-library': specifier: ^0.2.2 version: 0.2.2 @@ -113,11 +113,262 @@ importers: version: 5.8.2 vite: specifier: ^6.0.0 - version: 6.3.6(@types/node@22.13.1)(jiti@2.4.2)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5) + version: 6.3.5(@types/node@24.7.0)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5) webpack: specifier: ^5.75.0 version: 5.97.1(esbuild@0.18.20) + examples/agent-starter-react: + dependencies: + '@livekit/components-core': + specifier: workspace:* + version: link:../../packages/core + '@livekit/components-react': + specifier: workspace:* + version: link:../../packages/react + '@phosphor-icons/react': + specifier: ^2.1.8 + version: 2.1.10(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-label': + specifier: ^2.1.7 + version: 2.1.7(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-scroll-area': + specifier: ^1.2.9 + version: 1.2.10(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-select': + specifier: ^2.2.5 + version: 2.2.6(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slot': + specifier: ^1.2.3 + version: 1.2.3(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-toggle': + specifier: ^1.1.9 + version: 1.1.10(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-toolbar': + specifier: ^1.1.10 + version: 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + buffer-image-size: + specifier: ^0.6.4 + version: 0.6.4 + class-variance-authority: + specifier: ^0.7.1 + version: 0.7.1 + clsx: + specifier: ^2.1.1 + version: 2.1.1 + jose: + specifier: ^6.0.12 + version: 6.1.0 + livekit-client: + specifier: 'catalog:' + version: 2.15.8(@types/dom-mediacapture-record@1.0.22) + livekit-server-sdk: + specifier: ^2.13.0 + version: 2.13.3 + mime: + specifier: ^4.0.7 + version: 4.0.7 + motion: + specifier: ^12.16.0 + version: 12.23.12(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + next: + specifier: 15.4.6 + version: 15.4.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.84.0) + next-themes: + specifier: ^0.4.6 + version: 0.4.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react: + specifier: ^19.0.0 + version: 19.1.1 + react-dom: + specifier: ^19.0.0 + version: 19.1.1(react@19.1.1) + sonner: + specifier: ^2.0.3 + version: 2.0.7(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + streaming-iterables: + specifier: ^8.0.1 + version: 8.0.1 + tailwind-merge: + specifier: ^3.3.0 + version: 3.3.1 + devDependencies: + '@eslint/eslintrc': + specifier: ^3 + version: 3.3.1 + '@tailwindcss/postcss': + specifier: ^4 + version: 4.1.13 + '@trivago/prettier-plugin-sort-imports': + specifier: ^5.2.2 + version: 5.2.2(prettier@3.5.3) + '@types/node': + specifier: ^22.0.0 + version: 22.13.1 + '@types/react': + specifier: ^19 + version: 19.1.12 + '@types/react-dom': + specifier: ^19 + version: 19.1.9(@types/react@19.1.12) + eslint: + specifier: ^9 + version: 9.35.0(jiti@2.5.1) + eslint-config-next: + specifier: 15.4.6 + version: 15.4.6(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2) + eslint-config-prettier: + specifier: ^10.1.5 + version: 10.1.8(eslint@9.35.0(jiti@2.5.1)) + eslint-plugin-import: + specifier: ^2.31.0 + version: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2))(eslint-import-resolver-typescript@3.7.0)(eslint@9.35.0(jiti@2.5.1)) + eslint-plugin-prettier: + specifier: ^5.5.0 + version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1))(prettier@3.5.3) + prettier: + specifier: ^3.4.2 + version: 3.5.3 + prettier-plugin-tailwindcss: + specifier: ^0.6.11 + version: 0.6.14(@trivago/prettier-plugin-sort-imports@5.2.2(prettier@3.5.3))(prettier@3.5.3) + tailwindcss: + specifier: ^4 + version: 4.1.13 + tw-animate-css: + specifier: ^1.3.0 + version: 1.3.8 + typescript: + specifier: ^5 + version: 5.8.2 + + examples/agent-starter-react-v1: + dependencies: + '@livekit/components-react': + specifier: workspace:* + version: link:../../packages/react + '@phosphor-icons/react': + specifier: ^2.1.8 + version: 2.1.10(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-label': + specifier: ^2.1.7 + version: 2.1.7(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-scroll-area': + specifier: ^1.2.9 + version: 1.2.10(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-select': + specifier: ^2.2.5 + version: 2.2.6(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slot': + specifier: ^1.2.3 + version: 1.2.3(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-toggle': + specifier: ^1.1.9 + version: 1.1.10(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-toolbar': + specifier: ^1.1.10 + version: 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + buffer-image-size: + specifier: ^0.6.4 + version: 0.6.4 + class-variance-authority: + specifier: ^0.7.1 + version: 0.7.1 + clsx: + specifier: ^2.1.1 + version: 2.1.1 + jose: + specifier: ^6.0.12 + version: 6.1.0 + livekit-client: + specifier: 'catalog:' + version: 2.15.8(@types/dom-mediacapture-record@1.0.22) + livekit-server-sdk: + specifier: ^2.13.0 + version: 2.13.3 + mime: + specifier: ^4.0.7 + version: 4.0.7 + motion: + specifier: ^12.16.0 + version: 12.23.12(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + next: + specifier: 15.4.6 + version: 15.4.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.84.0) + next-themes: + specifier: ^0.4.6 + version: 0.4.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react: + specifier: ^19.0.0 + version: 19.1.1 + react-dom: + specifier: ^19.0.0 + version: 19.1.1(react@19.1.1) + sonner: + specifier: ^2.0.3 + version: 2.0.7(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + streaming-iterables: + specifier: ^8.0.1 + version: 8.0.1 + tailwind-merge: + specifier: ^3.3.0 + version: 3.3.1 + typed-emitter: + specifier: ^2.1.0 + version: 2.1.0 + zustand: + specifier: ^5.0.8 + version: 5.0.8(@types/react@19.1.12)(react@19.1.1) + devDependencies: + '@eslint/eslintrc': + specifier: ^3 + version: 3.3.1 + '@tailwindcss/postcss': + specifier: ^4 + version: 4.1.13 + '@trivago/prettier-plugin-sort-imports': + specifier: ^5.2.2 + version: 5.2.2(prettier@3.5.3) + '@types/node': + specifier: ^22.0.0 + version: 22.13.1 + '@types/react': + specifier: ^19 + version: 19.1.12 + '@types/react-dom': + specifier: ^19 + version: 19.1.9(@types/react@19.1.12) + eslint: + specifier: ^9 + version: 9.35.0(jiti@2.5.1) + eslint-config-next: + specifier: 15.4.6 + version: 15.4.6(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2) + eslint-config-prettier: + specifier: ^10.1.5 + version: 10.1.8(eslint@9.35.0(jiti@2.5.1)) + eslint-plugin-import: + specifier: ^2.31.0 + version: 2.31.0(@typescript-eslint/parser@8.29.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2))(eslint@9.35.0(jiti@2.5.1)) + eslint-plugin-prettier: + specifier: ^5.5.0 + version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1))(prettier@3.5.3) + prettier: + specifier: ^3.4.2 + version: 3.5.3 + prettier-plugin-tailwindcss: + specifier: ^0.6.11 + version: 0.6.14(@trivago/prettier-plugin-sort-imports@5.2.2(prettier@3.5.3))(prettier@3.5.3) + tailwindcss: + specifier: ^4 + version: 4.1.13 + tw-animate-css: + specifier: ^1.3.0 + version: 1.3.8 + typescript: + specifier: ^5 + version: 5.8.2 + examples/nextjs: dependencies: '@livekit/components-react': @@ -128,10 +379,10 @@ importers: version: link:../../packages/styles '@livekit/track-processors': specifier: ^0.3.2 - version: 0.3.2(livekit-client@2.15.1(@types/dom-mediacapture-record@1.0.22)) + version: 0.3.2(livekit-client@2.15.8(@types/dom-mediacapture-record@1.0.22)) livekit-client: specifier: 'catalog:' - version: 2.15.1(@types/dom-mediacapture-record@1.0.22) + version: 2.15.8(@types/dom-mediacapture-record@1.0.22) livekit-server-sdk: specifier: ^2.6.1 version: 2.6.1 @@ -156,7 +407,7 @@ importers: version: 18.3.5(@types/react@18.3.18) eslint-config-next: specifier: ^12.3.4 - version: 12.3.4(eslint@8.57.1)(typescript@5.4.2) + version: 12.3.4(eslint@9.35.0(jiti@2.5.1))(typescript@5.4.2) source-map-loader: specifier: ^4.0.2 version: 4.0.2(webpack@5.97.1) @@ -171,7 +422,7 @@ importers: version: 1.6.13 livekit-client: specifier: 'catalog:' - version: 2.15.1(@types/dom-mediacapture-record@1.0.22) + version: 2.15.8(@types/dom-mediacapture-record@1.0.22) loglevel: specifier: 1.9.1 version: 1.9.1 @@ -186,11 +437,11 @@ importers: specifier: workspace:* version: link:../styles '@livekit/protocol': - specifier: ^1.38.0 - version: 1.39.3 + specifier: 'catalog:' + version: 1.42.0 '@microsoft/api-extractor': specifier: ^7.36.0 - version: 7.49.2(@types/node@22.13.1) + version: 7.49.2(@types/node@24.7.0) '@size-limit/file': specifier: ^11.0.2 version: 11.1.6(size-limit@11.1.6) @@ -205,13 +456,13 @@ importers: version: 11.1.6 tsup: specifier: ^8.0.0 - version: 8.3.6(@microsoft/api-extractor@7.49.2(@types/node@22.13.1))(jiti@2.4.2)(postcss@8.5.6)(tsx@4.19.2)(typescript@5.8.2)(yaml@2.4.5) + version: 8.3.6(@microsoft/api-extractor@7.49.2(@types/node@24.7.0))(jiti@2.5.1)(postcss@8.5.6)(tsx@4.19.2)(typescript@5.8.2)(yaml@2.4.5) typescript: specifier: 5.8.2 version: 5.8.2 vitest: specifier: ^3.0.0 - version: 3.0.5(@types/node@22.13.1)(jiti@2.4.2)(jsdom@26.0.0)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5) + version: 3.0.5(@types/node@24.7.0)(jiti@2.5.1)(jsdom@26.0.0)(lightningcss@1.30.1)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5) packages/react: dependencies: @@ -220,13 +471,19 @@ importers: version: link:../core '@livekit/krisp-noise-filter': specifier: ^0.2.12 || ^0.3.0 - version: 0.2.12(livekit-client@2.15.1(@types/dom-mediacapture-record@1.0.22)) + version: 0.2.12(livekit-client@2.15.8(@types/dom-mediacapture-record@1.0.22)) clsx: specifier: 2.1.1 version: 2.1.1 + events: + specifier: ^3.3.0 + version: 3.3.0 + jose: + specifier: ^6.0.12 + version: 6.1.0 livekit-client: specifier: 'catalog:' - version: 2.15.1(@types/dom-mediacapture-record@1.0.22) + version: 2.15.8(@types/dom-mediacapture-record@1.0.22) tslib: specifier: ^2.6.2 version: 2.8.1 @@ -235,11 +492,11 @@ importers: version: 3.1.1(react@18.3.1) devDependencies: '@livekit/protocol': - specifier: ^1.23.0 - version: 1.39.3 + specifier: 'catalog:' + version: 1.42.0 '@microsoft/api-extractor': specifier: ^7.35.0 - version: 7.49.2(@types/node@22.13.1) + version: 7.49.2(@types/node@24.7.0) '@size-limit/file': specifier: ^11.0.2 version: 11.1.6(size-limit@11.1.6) @@ -255,6 +512,12 @@ importers: '@testing-library/react': specifier: ^16.0.0 version: 16.2.0(@testing-library/dom@10.1.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@types/events': + specifier: ^3.0.3 + version: 3.0.3 + '@types/node': + specifier: ^24.7.0 + version: 24.7.0 '@types/react': specifier: ^18.0.25 version: 18.3.18 @@ -263,7 +526,7 @@ importers: version: 18.3.5(@types/react@18.3.18) '@vitejs/plugin-react': specifier: ^4.3.2 - version: 4.3.4(vite@6.3.6(@types/node@22.13.1)(jiti@2.4.2)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5)) + version: 4.3.4(vite@6.3.5(@types/node@24.7.0)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5)) eslint-config-lk-custom: specifier: workspace:* version: link:../../tooling/eslint-config-custom @@ -282,15 +545,18 @@ importers: size-limit: specifier: ^11.0.2 version: 11.1.6 + typed-emitter: + specifier: ^2.1.0 + version: 2.1.0 vite: specifier: ^6.0.0 - version: 6.3.6(@types/node@22.13.1)(jiti@2.4.2)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5) + version: 6.3.5(@types/node@24.7.0)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5) vite-plugin-dts: specifier: ^4.2.3 - version: 4.5.0(@types/node@22.13.1)(rollup@4.50.1)(typescript@5.8.2)(vite@6.3.6(@types/node@22.13.1)(jiti@2.4.2)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5)) + version: 4.5.0(@types/node@24.7.0)(rollup@4.44.1)(typescript@5.8.2)(vite@6.3.5(@types/node@24.7.0)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5)) vitest: specifier: ^3.0.0 - version: 3.0.5(@types/node@22.13.1)(jiti@2.4.2)(jsdom@26.0.0)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5) + version: 3.0.5(@types/node@24.7.0)(jiti@2.5.1)(jsdom@26.0.0)(lightningcss@1.30.1)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5) packages/styles: devDependencies: @@ -305,7 +571,7 @@ importers: version: 8.5.6 postcss-cli: specifier: ^11.0.0 - version: 11.0.0(jiti@2.4.2)(postcss@8.5.6) + version: 11.0.0(jiti@2.5.1)(postcss@8.5.6) postcss-prefixer: specifier: ^3.0.0 version: 3.0.0(postcss@8.5.6) @@ -323,13 +589,13 @@ importers: version: 8.1.1(sass@1.84.0) vitest: specifier: ^3.0.0 - version: 3.0.5(@types/node@22.13.1)(jiti@2.4.2)(jsdom@26.0.0)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5) + version: 3.0.5(@types/node@24.7.0)(jiti@2.5.1)(jsdom@26.0.0)(lightningcss@1.30.1)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5) tooling/api-documenter: dependencies: '@microsoft/api-extractor-model': specifier: ^7.27.2 - version: 7.30.7(@types/node@20.17.29) + version: 7.30.5(@types/node@20.17.29) '@microsoft/tsdoc': specifier: 0.15.1 version: 0.15.1 @@ -341,7 +607,7 @@ importers: version: 2.6.52(@rushstack/heft@0.73.6(@types/node@20.17.29))(@types/node@20.17.29) '@rushstack/node-core-library': specifier: ^5.0.0 - version: 5.14.0(@types/node@20.17.29) + version: 5.13.1(@types/node@20.17.29) '@rushstack/ts-command-line': specifier: ^4.15.0 version: 4.23.4(@types/node@20.17.29) @@ -394,7 +660,7 @@ importers: devDependencies: '@microsoft/api-extractor': specifier: ^7.35.2 - version: 7.49.2(@types/node@22.13.1) + version: 7.49.2(@types/node@24.7.0) tooling/eslint-config-custom: devDependencies: @@ -452,6 +718,10 @@ importers: packages: + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} @@ -1065,8 +1335,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime@7.28.4': - resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} + '@babel/runtime@7.27.6': + resolution: {integrity: sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==} engines: {node: '>=6.9.0'} '@babel/template@7.26.8': @@ -1191,6 +1461,9 @@ packages: resolution: {integrity: sha512-yuctPJs5lRXoI8LkpVZGAV6n+DKOuEsfpfcIDQ8ZjWHwazqk1QjBc4jMlof0UlZHyUqv4dwsOTooMiAmtzvwXA==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + '@emnapi/runtime@1.5.0': + resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==} + '@emotion/use-insertion-effect-with-fallbacks@1.2.0': resolution: {integrity: sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==} peerDependencies: @@ -1208,8 +1481,8 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.25.9': - resolution: {integrity: sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==} + '@esbuild/aix-ppc64@0.25.5': + resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] @@ -1238,8 +1511,8 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.25.9': - resolution: {integrity: sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==} + '@esbuild/android-arm64@0.25.5': + resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==} engines: {node: '>=18'} cpu: [arm64] os: [android] @@ -1268,8 +1541,8 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.25.9': - resolution: {integrity: sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==} + '@esbuild/android-arm@0.25.5': + resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==} engines: {node: '>=18'} cpu: [arm] os: [android] @@ -1298,8 +1571,8 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.25.9': - resolution: {integrity: sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==} + '@esbuild/android-x64@0.25.5': + resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==} engines: {node: '>=18'} cpu: [x64] os: [android] @@ -1328,8 +1601,8 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.25.9': - resolution: {integrity: sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==} + '@esbuild/darwin-arm64@0.25.5': + resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] @@ -1358,8 +1631,8 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.25.9': - resolution: {integrity: sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==} + '@esbuild/darwin-x64@0.25.5': + resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] @@ -1388,8 +1661,8 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.25.9': - resolution: {integrity: sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==} + '@esbuild/freebsd-arm64@0.25.5': + resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] @@ -1418,8 +1691,8 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.9': - resolution: {integrity: sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==} + '@esbuild/freebsd-x64@0.25.5': + resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] @@ -1448,8 +1721,8 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.25.9': - resolution: {integrity: sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==} + '@esbuild/linux-arm64@0.25.5': + resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==} engines: {node: '>=18'} cpu: [arm64] os: [linux] @@ -1478,8 +1751,8 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.25.9': - resolution: {integrity: sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==} + '@esbuild/linux-arm@0.25.5': + resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==} engines: {node: '>=18'} cpu: [arm] os: [linux] @@ -1508,8 +1781,8 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.25.9': - resolution: {integrity: sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==} + '@esbuild/linux-ia32@0.25.5': + resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==} engines: {node: '>=18'} cpu: [ia32] os: [linux] @@ -1538,8 +1811,8 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.25.9': - resolution: {integrity: sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==} + '@esbuild/linux-loong64@0.25.5': + resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] @@ -1568,8 +1841,8 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.25.9': - resolution: {integrity: sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==} + '@esbuild/linux-mips64el@0.25.5': + resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] @@ -1598,8 +1871,8 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.25.9': - resolution: {integrity: sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==} + '@esbuild/linux-ppc64@0.25.5': + resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] @@ -1628,8 +1901,8 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.25.9': - resolution: {integrity: sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==} + '@esbuild/linux-riscv64@0.25.5': + resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] @@ -1658,8 +1931,8 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.25.9': - resolution: {integrity: sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==} + '@esbuild/linux-s390x@0.25.5': + resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==} engines: {node: '>=18'} cpu: [s390x] os: [linux] @@ -1688,8 +1961,8 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.25.9': - resolution: {integrity: sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==} + '@esbuild/linux-x64@0.25.5': + resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==} engines: {node: '>=18'} cpu: [x64] os: [linux] @@ -1700,8 +1973,8 @@ packages: cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-arm64@0.25.9': - resolution: {integrity: sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==} + '@esbuild/netbsd-arm64@0.25.5': + resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] @@ -1730,8 +2003,8 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.9': - resolution: {integrity: sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==} + '@esbuild/netbsd-x64@0.25.5': + resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] @@ -1748,8 +2021,8 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-arm64@0.25.9': - resolution: {integrity: sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==} + '@esbuild/openbsd-arm64@0.25.5': + resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] @@ -1778,18 +2051,12 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.9': - resolution: {integrity: sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==} + '@esbuild/openbsd-x64@0.25.5': + resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.25.9': - resolution: {integrity: sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - '@esbuild/sunos-x64@0.17.19': resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} engines: {node: '>=12'} @@ -1814,8 +2081,8 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.25.9': - resolution: {integrity: sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==} + '@esbuild/sunos-x64@0.25.5': + resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] @@ -1844,8 +2111,8 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.25.9': - resolution: {integrity: sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==} + '@esbuild/win32-arm64@0.25.5': + resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==} engines: {node: '>=18'} cpu: [arm64] os: [win32] @@ -1874,8 +2141,8 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.25.9': - resolution: {integrity: sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==} + '@esbuild/win32-ia32@0.25.5': + resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==} engines: {node: '>=18'} cpu: [ia32] os: [win32] @@ -1904,8 +2171,8 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.25.9': - resolution: {integrity: sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==} + '@esbuild/win32-x64@0.25.5': + resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -1916,18 +2183,52 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/eslint-utils@4.9.0': + resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} + 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.12.1': resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + '@eslint/config-array@0.21.0': + resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/config-helpers@0.3.1': + resolution: {integrity: sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.15.2': + resolution: {integrity: sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/eslintrc@2.1.4': resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/eslintrc@3.3.1': + resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/js@8.57.1': resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/js@9.35.0': + resolution: {integrity: sha512-30iXE9whjlILfWobBkNerJo+TXYsgVM5ERQwMcMKCHckHflCmf7wXDAHlARoWnh0s1U72WqlbeyE7iAcCzuCPw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.6': + resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.3.5': + resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@fal-works/esbuild-plugin-global-externals@2.1.2': resolution: {integrity: sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==} @@ -1946,6 +2247,14 @@ packages: '@floating-ui/utils@0.2.9': resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.7': + resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} + engines: {node: '>=18.18.0'} + '@humanwhocodes/config-array@0.13.0': resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} engines: {node: '>=10.10.0'} @@ -1959,10 +2268,140 @@ packages: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} deprecated: Use @eslint/object-schema instead + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} + + '@img/sharp-darwin-arm64@0.34.3': + resolution: {integrity: sha512-ryFMfvxxpQRsgZJqBd4wsttYQbCxsJksrv9Lw/v798JcQ8+w84mBWuXwl+TT0WJ/WrYOLaYpwQXi3sA9nTIaIg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.34.3': + resolution: {integrity: sha512-yHpJYynROAj12TA6qil58hmPmAwxKKC7reUqtGLzsOHfP7/rniNGTL8tjWX6L3CTV4+5P4ypcS7Pp+7OB+8ihA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.2.0': + resolution: {integrity: sha512-sBZmpwmxqwlqG9ueWFXtockhsxefaV6O84BMOrhtg/YqbTaRdqDE7hxraVE3y6gVM4eExmfzW4a8el9ArLeEiQ==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.2.0': + resolution: {integrity: sha512-M64XVuL94OgiNHa5/m2YvEQI5q2cl9d/wk0qFTDVXcYzi43lxuiFTftMR1tOnFQovVXNZJ5TURSDK2pNe9Yzqg==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.2.0': + resolution: {integrity: sha512-RXwd0CgG+uPRX5YYrkzKyalt2OJYRiJQ8ED/fi1tq9WQW2jsQIn0tqrlR5l5dr/rjqq6AHAxURhj2DVjyQWSOA==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linux-arm@1.2.0': + resolution: {integrity: sha512-mWd2uWvDtL/nvIzThLq3fr2nnGfyr/XMXlq8ZJ9WMR6PXijHlC3ksp0IpuhK6bougvQrchUAfzRLnbsen0Cqvw==} + cpu: [arm] + os: [linux] + + '@img/sharp-libvips-linux-ppc64@1.2.0': + resolution: {integrity: sha512-Xod/7KaDDHkYu2phxxfeEPXfVXFKx70EAFZ0qyUdOjCcxbjqyJOEUpDe6RIyaunGxT34Anf9ue/wuWOqBW2WcQ==} + cpu: [ppc64] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.2.0': + resolution: {integrity: sha512-eMKfzDxLGT8mnmPJTNMcjfO33fLiTDsrMlUVcp6b96ETbnJmd4uvZxVJSKPQfS+odwfVaGifhsB07J1LynFehw==} + cpu: [s390x] + os: [linux] + + '@img/sharp-libvips-linux-x64@1.2.0': + resolution: {integrity: sha512-ZW3FPWIc7K1sH9E3nxIGB3y3dZkpJlMnkk7z5tu1nSkBoCgw2nSRTFHI5pB/3CQaJM0pdzMF3paf9ckKMSE9Tg==} + cpu: [x64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-arm64@1.2.0': + resolution: {integrity: sha512-UG+LqQJbf5VJ8NWJ5Z3tdIe/HXjuIdo4JeVNADXBFuG7z9zjoegpzzGIyV5zQKi4zaJjnAd2+g2nna8TZvuW9Q==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-x64@1.2.0': + resolution: {integrity: sha512-SRYOLR7CXPgNze8akZwjoGBoN1ThNZoqpOgfnOxmWsklTGVfJiGJoC/Lod7aNMGA1jSsKWM1+HRX43OP6p9+6Q==} + cpu: [x64] + os: [linux] + + '@img/sharp-linux-arm64@0.34.3': + resolution: {integrity: sha512-QdrKe3EvQrqwkDrtuTIjI0bu6YEJHTgEeqdzI3uWJOH6G1O8Nl1iEeVYRGdj1h5I21CqxSvQp1Yv7xeU3ZewbA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linux-arm@0.34.3': + resolution: {integrity: sha512-oBK9l+h6KBN0i3dC8rYntLiVfW8D8wH+NPNT3O/WBHeW0OQWCjfWksLUaPidsrDKpJgXp3G3/hkmhptAW0I3+A==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + + '@img/sharp-linux-ppc64@0.34.3': + resolution: {integrity: sha512-GLtbLQMCNC5nxuImPR2+RgrviwKwVql28FWZIW1zWruy6zLgA5/x2ZXk3mxj58X/tszVF69KK0Is83V8YgWhLA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ppc64] + os: [linux] + + '@img/sharp-linux-s390x@0.34.3': + resolution: {integrity: sha512-3gahT+A6c4cdc2edhsLHmIOXMb17ltffJlxR0aC2VPZfwKoTGZec6u5GrFgdR7ciJSsHT27BD3TIuGcuRT0KmQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + + '@img/sharp-linux-x64@0.34.3': + resolution: {integrity: sha512-8kYso8d806ypnSq3/Ly0QEw90V5ZoHh10yH0HnrzOCr6DKAPI6QVHvwleqMkVQ0m+fc7EH8ah0BB0QPuWY6zJQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-linuxmusl-arm64@0.34.3': + resolution: {integrity: sha512-vAjbHDlr4izEiXM1OTggpCcPg9tn4YriK5vAjowJsHwdBIdx0fYRsURkxLG2RLm9gyBq66gwtWI8Gx0/ov+JKQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linuxmusl-x64@0.34.3': + resolution: {integrity: sha512-gCWUn9547K5bwvOn9l5XGAEjVTTRji4aPTqLzGXHvIr6bIDZKNTA34seMPgM0WmSf+RYBH411VavCejp3PkOeQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-wasm32@0.34.3': + resolution: {integrity: sha512-+CyRcpagHMGteySaWos8IbnXcHgfDn7pO2fiC2slJxvNq9gDipYBN42/RagzctVRKgxATmfqOSulgZv5e1RdMg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-arm64@0.34.3': + resolution: {integrity: sha512-MjnHPnbqMXNC2UgeLJtX4XqoVHHlZNd+nPt1kRPmj63wURegwBhZlApELdtxM2OIZDRv/DFtLcNhVbd1z8GYXQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [win32] + + '@img/sharp-win32-ia32@0.34.3': + resolution: {integrity: sha512-xuCdhH44WxuXgOM714hn4amodJMZl3OEvf0GVTm0BEyMeA2to+8HEdRPShH0SLYptJY1uBw+SCFP9WVQi1Q/cw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.34.3': + resolution: {integrity: sha512-OWwz05d++TxzLEv4VnsTz5CmZ6mI6S05sfQGEMrNrQcOEERbX46332IvE7pO/EUiw7jUrrS40z/M7kPyjfl04g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} + '@isaacs/fs-minipass@4.0.1': + resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} + engines: {node: '>=18.0.0'} + '@istanbuljs/load-nyc-config@1.1.0': resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} @@ -2058,6 +2497,9 @@ packages: resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} engines: {node: '>=6.0.0'} + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} @@ -2072,6 +2514,9 @@ packages: '@jridgewell/sourcemap-codec@1.5.0': resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} @@ -2104,6 +2549,9 @@ packages: '@livekit/protocol@1.39.3': resolution: {integrity: sha512-hfOnbwPCeZBEvMRdRhU2sr46mjGXavQcrb3BFRfG+Gm0Z7WUSeFdy5WLstXJzEepz17Iwp/lkGwJ4ZgOOYfPuA==} + '@livekit/protocol@1.42.0': + resolution: {integrity: sha512-42sYSCay2PZrn5yHHt+O3RQpTElcTrA7bqg7iYbflUApeerA5tUCJDr8Z4abHsYHVKjqVUbkBq/TPmT3X6aYOQ==} + '@livekit/track-processors@0.3.2': resolution: {integrity: sha512-4JUCzb7yIKoVsTo8J6FTzLZJHcI6DihfX/pGRDg0SOGaxprcDPrt8jaDBBTsnGBSXHeMxl2ugN+xQjdCWzLKEA==} peerDependencies: @@ -2129,8 +2577,8 @@ packages: '@microsoft/api-extractor-model@7.30.3': resolution: {integrity: sha512-yEAvq0F78MmStXdqz9TTT4PZ05Xu5R8nqgwI5xmUmQjWBQ9E6R2n8HB/iZMRciG4rf9iwI2mtuQwIzDXBvHn1w==} - '@microsoft/api-extractor-model@7.30.7': - resolution: {integrity: sha512-TBbmSI2/BHpfR9YhQA7nH0nqVmGgJ0xH0Ex4D99/qBDAUpnhA2oikGmdXanbw9AWWY/ExBYIpkmY8dBHdla3YQ==} + '@microsoft/api-extractor-model@7.30.5': + resolution: {integrity: sha512-0ic4rcbcDZHz833RaTZWTGu+NpNgrxVNjVaor0ZDUymfDFzjA/Uuk8hYziIUIOEOSTfmIQqyzVwlzxZxPe7tOA==} '@microsoft/api-extractor@7.49.2': resolution: {integrity: sha512-DI/WnvhbkHcucxxc4ys00ejCiViFls5EKPrEfe4NV3GGpVkoM5ZXF61HZNSGA8IG0oEV4KfTqIa59Rc3wdMopw==} @@ -2148,54 +2596,102 @@ packages: '@next/env@14.2.13': resolution: {integrity: sha512-s3lh6K8cbW1h5Nga7NNeXrbe0+2jIIYK9YaA9T7IufDWnZpozdFUp6Hf0d5rNWUKu4fEuSX2rCKlGjCrtylfDw==} + '@next/env@15.4.6': + resolution: {integrity: sha512-yHDKVTcHrZy/8TWhj0B23ylKv5ypocuCwey9ZqPyv4rPdUdRzpGCkSi03t04KBPyU96kxVtUqx6O3nE1kpxASQ==} + '@next/eslint-plugin-next@12.3.4': resolution: {integrity: sha512-BFwj8ykJY+zc1/jWANsDprDIu2MgwPOIKxNVnrKvPs+f5TPegrVnem8uScND+1veT4B7F6VeqgaNLFW1Hzl9Og==} '@next/eslint-plugin-next@15.1.7': resolution: {integrity: sha512-kRP7RjSxfTO13NE317ek3mSGzoZlI33nc/i5hs1KaWpK+egs85xg0DJ4p32QEiHnR0mVjuUfhRIun7awqfL7pQ==} + '@next/eslint-plugin-next@15.4.6': + resolution: {integrity: sha512-2NOu3ln+BTcpnbIDuxx6MNq+pRrCyey4WSXGaJIyt0D2TYicHeO9QrUENNjcf673n3B1s7hsiV5xBYRCK1Q8kA==} + '@next/swc-darwin-arm64@14.2.13': resolution: {integrity: sha512-IkAmQEa2Htq+wHACBxOsslt+jMoV3msvxCn0WFSfJSkv/scy+i/EukBKNad36grRxywaXUYJc9mxEGkeIs8Bzg==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] + '@next/swc-darwin-arm64@15.4.6': + resolution: {integrity: sha512-667R0RTP4DwxzmrqTs4Lr5dcEda9OxuZsVFsjVtxVMVhzSpo6nLclXejJVfQo2/g7/Z9qF3ETDmN3h65mTjpTQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + '@next/swc-darwin-x64@14.2.13': resolution: {integrity: sha512-Dv1RBGs2TTjkwEnFMVL5XIfJEavnLqqwYSD6LXgTPdEy/u6FlSrLBSSfe1pcfqhFEXRAgVL3Wpjibe5wXJzWog==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] + '@next/swc-darwin-x64@15.4.6': + resolution: {integrity: sha512-KMSFoistFkaiQYVQQnaU9MPWtp/3m0kn2Xed1Ces5ll+ag1+rlac20sxG+MqhH2qYWX1O2GFOATQXEyxKiIscg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + '@next/swc-linux-arm64-gnu@14.2.13': resolution: {integrity: sha512-yB1tYEFFqo4ZNWkwrJultbsw7NPAAxlPXURXioRl9SdW6aIefOLS+0TEsKrWBtbJ9moTDgU3HRILL6QBQnMevg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + '@next/swc-linux-arm64-gnu@15.4.6': + resolution: {integrity: sha512-PnOx1YdO0W7m/HWFeYd2A6JtBO8O8Eb9h6nfJia2Dw1sRHoHpNf6lN1U4GKFRzRDBi9Nq2GrHk9PF3Vmwf7XVw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + '@next/swc-linux-arm64-musl@14.2.13': resolution: {integrity: sha512-v5jZ/FV/eHGoWhMKYrsAweQ7CWb8xsWGM/8m1mwwZQ/sutJjoFaXchwK4pX8NqwImILEvQmZWyb8pPTcP7htWg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + '@next/swc-linux-arm64-musl@15.4.6': + resolution: {integrity: sha512-XBbuQddtY1p5FGPc2naMO0kqs4YYtLYK/8aPausI5lyOjr4J77KTG9mtlU4P3NwkLI1+OjsPzKVvSJdMs3cFaw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + '@next/swc-linux-x64-gnu@14.2.13': resolution: {integrity: sha512-aVc7m4YL7ViiRv7SOXK3RplXzOEe/qQzRA5R2vpXboHABs3w8vtFslGTz+5tKiQzWUmTmBNVW0UQdhkKRORmGA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + '@next/swc-linux-x64-gnu@15.4.6': + resolution: {integrity: sha512-+WTeK7Qdw82ez3U9JgD+igBAP75gqZ1vbK6R8PlEEuY0OIe5FuYXA4aTjL811kWPf7hNeslD4hHK2WoM9W0IgA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + '@next/swc-linux-x64-musl@14.2.13': resolution: {integrity: sha512-4wWY7/OsSaJOOKvMsu1Teylku7vKyTuocvDLTZQq0TYv9OjiYYWt63PiE1nTuZnqQ4RPvME7Xai+9enoiN0Wrg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + '@next/swc-linux-x64-musl@15.4.6': + resolution: {integrity: sha512-XP824mCbgQsK20jlXKrUpZoh/iO3vUWhMpxCz8oYeagoiZ4V0TQiKy0ASji1KK6IAe3DYGfj5RfKP6+L2020OQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + '@next/swc-win32-arm64-msvc@14.2.13': resolution: {integrity: sha512-uP1XkqCqV2NVH9+g2sC7qIw+w2tRbcMiXFEbMihkQ8B1+V6m28sshBwAB0SDmOe0u44ne1vFU66+gx/28RsBVQ==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] + '@next/swc-win32-arm64-msvc@15.4.6': + resolution: {integrity: sha512-FxrsenhUz0LbgRkNWx6FRRJIPe/MI1JRA4W4EPd5leXO00AZ6YU8v5vfx4MDXTvN77lM/EqsE3+6d2CIeF5NYg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + '@next/swc-win32-ia32-msvc@14.2.13': resolution: {integrity: sha512-V26ezyjPqQpDBV4lcWIh8B/QICQ4v+M5Bo9ykLN+sqeKKBxJVDpEc6biDVyluTXTC40f5IqCU0ttth7Es2ZuMw==} engines: {node: '>= 10'} @@ -2208,6 +2704,12 @@ packages: cpu: [x64] os: [win32] + '@next/swc-win32-x64-msvc@15.4.6': + resolution: {integrity: sha512-T4ufqnZ4u88ZheczkBTtOF+eKaM14V8kbjud/XrAakoM5DKQWjW09vD6B9fsdsWS2T7D5EY31hRHdta7QKWOng==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -2306,6 +2808,13 @@ packages: resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==} engines: {node: '>= 10.0.0'} + '@phosphor-icons/react@2.1.10': + resolution: {integrity: sha512-vt8Tvq8GLjheAZZYa+YG/pW7HDbov8El/MANW8pOAz4eGxrwhnbfrQZq0Cp4q8zBEu8NIhHdnr+r8thnfRSNYA==} + engines: {node: '>=10'} + peerDependencies: + react: '>= 16.8' + react-dom: '>= 16.8' + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -2314,14 +2823,21 @@ packages: resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + '@pkgr/core@0.2.9': + resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + '@radix-ui/number@1.0.1': resolution: {integrity: sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==} + '@radix-ui/number@1.1.1': + resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} + '@radix-ui/primitive@1.0.1': resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} - '@radix-ui/primitive@1.1.1': - resolution: {integrity: sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==} + '@radix-ui/primitive@1.1.3': + resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} '@radix-ui/react-arrow@1.0.3': resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} @@ -2336,6 +2852,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-arrow@1.1.7': + resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-collection@1.0.3': resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} peerDependencies: @@ -2349,8 +2878,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-collection@1.1.2': - resolution: {integrity: sha512-9z54IEKRxIa9VityapoEYMuByaG42iSy1ZXlY2KcuLSEtq8x4987/N6m15ppoMffgZX72gER2uHe1D9Y6Unlcw==} + '@radix-ui/react-collection@1.1.7': + resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -2371,8 +2900,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-compose-refs@1.1.1': - resolution: {integrity: sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==} + '@radix-ui/react-compose-refs@1.1.2': + resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} peerDependencies: '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc @@ -2389,8 +2918,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-context@1.1.1': - resolution: {integrity: sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==} + '@radix-ui/react-context@1.1.2': + resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==} peerDependencies: '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc @@ -2407,8 +2936,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-direction@1.1.0': - resolution: {integrity: sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==} + '@radix-ui/react-direction@1.1.1': + resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==} peerDependencies: '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc @@ -2429,30 +2958,21 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-focus-guards@1.0.1': - resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-focus-scope@1.0.3': - resolution: {integrity: sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==} + '@radix-ui/react-dismissable-layer@1.1.11': + resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true - '@radix-ui/react-id@1.0.1': - resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} + '@radix-ui/react-focus-guards@1.0.1': + resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==} peerDependencies: '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 @@ -2460,8 +2980,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-id@1.1.0': - resolution: {integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==} + '@radix-ui/react-focus-guards@1.1.3': + resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==} peerDependencies: '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc @@ -2469,8 +2989,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-popper@1.1.2': - resolution: {integrity: sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==} + '@radix-ui/react-focus-scope@1.0.3': + resolution: {integrity: sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -2482,47 +3002,39 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-portal@1.0.3': - resolution: {integrity: sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==} + '@radix-ui/react-focus-scope@1.1.7': + resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true - '@radix-ui/react-primitive@1.0.3': - resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} + '@radix-ui/react-id@1.0.1': + resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} peerDependencies: '@types/react': '*' - '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: '@types/react': optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-primitive@2.0.2': - resolution: {integrity: sha512-Ec/0d38EIuvDF+GZjcMU/Ze6MxntVJYO/fRlCPhCaVUyPY9WTalHJw54tp9sXeJo3tlShWpy41vQRgLRGOuz+w==} + '@radix-ui/react-id@1.1.1': + resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} peerDependencies: '@types/react': '*' - '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-roving-focus@1.1.2': - resolution: {integrity: sha512-zgMQWkNO169GtGqRvYrzb0Zf8NhMHS2DuEB/TiEmVnpr5OqPU3i8lfbxaAmC2J/KYuIQxyoQQ6DxepyXp61/xw==} + '@radix-ui/react-label@2.1.7': + resolution: {integrity: sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -2534,8 +3046,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-select@1.2.2': - resolution: {integrity: sha512-zI7McXr8fNaSrUY9mZe4x/HC0jTLY9fWNhO1oLWYMQGDXuV4UCivIGTxwioSzO0ZCYX9iSLyWmAh/1TOmX3Cnw==} + '@radix-ui/react-popper@1.1.2': + resolution: {integrity: sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -2547,8 +3059,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-separator@1.1.2': - resolution: {integrity: sha512-oZfHcaAp2Y6KFBX6I5P1u7CQoy4lheCGiYj+pGFrHy8E/VNRb5E39TkTr3JrV520csPBTZjkuKFdEsjS5EUNKQ==} + '@radix-ui/react-popper@1.2.8': + resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -2560,8 +3072,138 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-slot@1.0.2': - resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} + '@radix-ui/react-portal@1.0.3': + resolution: {integrity: sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-portal@1.1.9': + resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-presence@1.1.5': + resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-primitive@1.0.3': + resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-primitive@2.1.3': + resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-roving-focus@1.1.11': + resolution: {integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-scroll-area@1.2.10': + resolution: {integrity: sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-select@1.2.2': + resolution: {integrity: sha512-zI7McXr8fNaSrUY9mZe4x/HC0jTLY9fWNhO1oLWYMQGDXuV4UCivIGTxwioSzO0ZCYX9iSLyWmAh/1TOmX3Cnw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-select@2.2.6': + resolution: {integrity: sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-separator@1.1.7': + resolution: {integrity: sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-slot@1.0.2': + resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} peerDependencies: '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 @@ -2569,8 +3211,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-slot@1.1.2': - resolution: {integrity: sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==} + '@radix-ui/react-slot@1.2.3': + resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} peerDependencies: '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc @@ -2578,8 +3220,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-toggle-group@1.1.2': - resolution: {integrity: sha512-JBm6s6aVG/nwuY5eadhU2zDi/IwYS0sDM5ZWb4nymv/hn3hZdkw+gENn0LP4iY1yCd7+bgJaCwueMYJIU3vk4A==} + '@radix-ui/react-toggle-group@1.1.11': + resolution: {integrity: sha512-5umnS0T8JQzQT6HbPyO7Hh9dgd82NmS36DQr+X/YJ9ctFNCiiQd6IJAYYZ33LUwm8M+taCz5t2ui29fHZc4Y6Q==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -2591,8 +3233,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-toggle@1.1.2': - resolution: {integrity: sha512-lntKchNWx3aCHuWKiDY+8WudiegQvBpDRAYL8dKLRvKEH8VOpl0XX6SSU/bUBqIRJbcTy4+MW06Wv8vgp10rzQ==} + '@radix-ui/react-toggle@1.1.10': + resolution: {integrity: sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -2604,8 +3246,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-toolbar@1.1.2': - resolution: {integrity: sha512-wT20eQ7ScFk+kBMDmHp+lMk18cgxhu35b2Bn5deUcPxiVwfn5vuZgi7NGcHu8ocdkinahmp4FaSZysKDyRVPWQ==} + '@radix-ui/react-toolbar@1.1.11': + resolution: {integrity: sha512-4ol06/1bLoFu1nwUqzdD4Y5RZ9oDdKeiHIsntug54Hcr1pgaHiPqHFEaXI1IFP/EsOfROQZ8Mig9VTIRza6Tjg==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -2626,8 +3268,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-use-callback-ref@1.1.0': - resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==} + '@radix-ui/react-use-callback-ref@1.1.1': + resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} peerDependencies: '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc @@ -2644,8 +3286,17 @@ packages: '@types/react': optional: true - '@radix-ui/react-use-controllable-state@1.1.0': - resolution: {integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==} + '@radix-ui/react-use-controllable-state@1.2.2': + resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-effect-event@0.0.2': + resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} peerDependencies: '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc @@ -2662,6 +3313,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-escape-keydown@1.1.1': + resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-layout-effect@1.0.1': resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} peerDependencies: @@ -2671,8 +3331,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-use-layout-effect@1.1.0': - resolution: {integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==} + '@radix-ui/react-use-layout-effect@1.1.1': + resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} peerDependencies: '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc @@ -2689,6 +3349,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-previous@1.1.1': + resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-rect@1.0.1': resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==} peerDependencies: @@ -2698,6 +3367,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-rect@1.1.1': + resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-size@1.0.1': resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} peerDependencies: @@ -2707,6 +3385,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-size@1.1.1': + resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-visually-hidden@1.0.3': resolution: {integrity: sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==} peerDependencies: @@ -2720,9 +3407,25 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-visually-hidden@1.2.3': + resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/rect@1.0.1': resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==} + '@radix-ui/rect@1.1.1': + resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} + '@rollup/pluginutils@5.1.4': resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} engines: {node: '>=14.0.0'} @@ -2732,108 +3435,103 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.50.1': - resolution: {integrity: sha512-HJXwzoZN4eYTdD8bVV22DN8gsPCAj3V20NHKOs8ezfXanGpmVPR7kalUHd+Y31IJp9stdB87VKPFbsGY3H/2ag==} + '@rollup/rollup-android-arm-eabi@4.44.1': + resolution: {integrity: sha512-JAcBr1+fgqx20m7Fwe1DxPUl/hPkee6jA6Pl7n1v2EFiktAHenTaXl5aIFjUIEsfn9w3HE4gK1lEgNGMzBDs1w==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.50.1': - resolution: {integrity: sha512-PZlsJVcjHfcH53mOImyt3bc97Ep3FJDXRpk9sMdGX0qgLmY0EIWxCag6EigerGhLVuL8lDVYNnSo8qnTElO4xw==} + '@rollup/rollup-android-arm64@4.44.1': + resolution: {integrity: sha512-RurZetXqTu4p+G0ChbnkwBuAtwAbIwJkycw1n6GvlGlBuS4u5qlr5opix8cBAYFJgaY05TWtM+LaoFggUmbZEQ==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.50.1': - resolution: {integrity: sha512-xc6i2AuWh++oGi4ylOFPmzJOEeAa2lJeGUGb4MudOtgfyyjr4UPNK+eEWTPLvmPJIY/pgw6ssFIox23SyrkkJw==} + '@rollup/rollup-darwin-arm64@4.44.1': + resolution: {integrity: sha512-fM/xPesi7g2M7chk37LOnmnSTHLG/v2ggWqKj3CCA1rMA4mm5KVBT1fNoswbo1JhPuNNZrVwpTvlCVggv8A2zg==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.50.1': - resolution: {integrity: sha512-2ofU89lEpDYhdLAbRdeyz/kX3Y2lpYc6ShRnDjY35bZhd2ipuDMDi6ZTQ9NIag94K28nFMofdnKeHR7BT0CATw==} + '@rollup/rollup-darwin-x64@4.44.1': + resolution: {integrity: sha512-gDnWk57urJrkrHQ2WVx9TSVTH7lSlU7E3AFqiko+bgjlh78aJ88/3nycMax52VIVjIm3ObXnDL2H00e/xzoipw==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.50.1': - resolution: {integrity: sha512-wOsE6H2u6PxsHY/BeFHA4VGQN3KUJFZp7QJBmDYI983fgxq5Th8FDkVuERb2l9vDMs1D5XhOrhBrnqcEY6l8ZA==} + '@rollup/rollup-freebsd-arm64@4.44.1': + resolution: {integrity: sha512-wnFQmJ/zPThM5zEGcnDcCJeYJgtSLjh1d//WuHzhf6zT3Md1BvvhJnWoy+HECKu2bMxaIcfWiu3bJgx6z4g2XA==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.50.1': - resolution: {integrity: sha512-A/xeqaHTlKbQggxCqispFAcNjycpUEHP52mwMQZUNqDUJFFYtPHCXS1VAG29uMlDzIVr+i00tSFWFLivMcoIBQ==} + '@rollup/rollup-freebsd-x64@4.44.1': + resolution: {integrity: sha512-uBmIxoJ4493YATvU2c0upGz87f99e3wop7TJgOA/bXMFd2SvKCI7xkxY/5k50bv7J6dw1SXT4MQBQSLn8Bb/Uw==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.50.1': - resolution: {integrity: sha512-54v4okehwl5TaSIkpp97rAHGp7t3ghinRd/vyC1iXqXMfjYUTm7TfYmCzXDoHUPTTf36L8pr0E7YsD3CfB3ZDg==} + '@rollup/rollup-linux-arm-gnueabihf@4.44.1': + resolution: {integrity: sha512-n0edDmSHlXFhrlmTK7XBuwKlG5MbS7yleS1cQ9nn4kIeW+dJH+ExqNgQ0RrFRew8Y+0V/x6C5IjsHrJmiHtkxQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.50.1': - resolution: {integrity: sha512-p/LaFyajPN/0PUHjv8TNyxLiA7RwmDoVY3flXHPSzqrGcIp/c2FjwPPP5++u87DGHtw+5kSH5bCJz0mvXngYxw==} + '@rollup/rollup-linux-arm-musleabihf@4.44.1': + resolution: {integrity: sha512-8WVUPy3FtAsKSpyk21kV52HCxB+me6YkbkFHATzC2Yd3yuqHwy2lbFL4alJOLXKljoRw08Zk8/xEj89cLQ/4Nw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.50.1': - resolution: {integrity: sha512-2AbMhFFkTo6Ptna1zO7kAXXDLi7H9fGTbVaIq2AAYO7yzcAsuTNWPHhb2aTA6GPiP+JXh85Y8CiS54iZoj4opw==} + '@rollup/rollup-linux-arm64-gnu@4.44.1': + resolution: {integrity: sha512-yuktAOaeOgorWDeFJggjuCkMGeITfqvPgkIXhDqsfKX8J3jGyxdDZgBV/2kj/2DyPaLiX6bPdjJDTu9RB8lUPQ==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.50.1': - resolution: {integrity: sha512-Cgef+5aZwuvesQNw9eX7g19FfKX5/pQRIyhoXLCiBOrWopjo7ycfB292TX9MDcDijiuIJlx1IzJz3IoCPfqs9w==} + '@rollup/rollup-linux-arm64-musl@4.44.1': + resolution: {integrity: sha512-W+GBM4ifET1Plw8pdVaecwUgxmiH23CfAUj32u8knq0JPFyK4weRy6H7ooxYFD19YxBulL0Ktsflg5XS7+7u9g==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.50.1': - resolution: {integrity: sha512-RPhTwWMzpYYrHrJAS7CmpdtHNKtt2Ueo+BlLBjfZEhYBhK00OsEqM08/7f+eohiF6poe0YRDDd8nAvwtE/Y62Q==} + '@rollup/rollup-linux-loongarch64-gnu@4.44.1': + resolution: {integrity: sha512-1zqnUEMWp9WrGVuVak6jWTl4fEtrVKfZY7CvcBmUUpxAJ7WcSowPSAWIKa/0o5mBL/Ij50SIf9tuirGx63Ovew==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.50.1': - resolution: {integrity: sha512-eSGMVQw9iekut62O7eBdbiccRguuDgiPMsw++BVUg+1K7WjZXHOg/YOT9SWMzPZA+w98G+Fa1VqJgHZOHHnY0Q==} + '@rollup/rollup-linux-powerpc64le-gnu@4.44.1': + resolution: {integrity: sha512-Rl3JKaRu0LHIx7ExBAAnf0JcOQetQffaw34T8vLlg9b1IhzcBgaIdnvEbbsZq9uZp3uAH+JkHd20Nwn0h9zPjA==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.50.1': - resolution: {integrity: sha512-S208ojx8a4ciIPrLgazF6AgdcNJzQE4+S9rsmOmDJkusvctii+ZvEuIC4v/xFqzbuP8yDjn73oBlNDgF6YGSXQ==} + '@rollup/rollup-linux-riscv64-gnu@4.44.1': + resolution: {integrity: sha512-j5akelU3snyL6K3N/iX7otLBIl347fGwmd95U5gS/7z6T4ftK288jKq3A5lcFKcx7wwzb5rgNvAg3ZbV4BqUSw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.50.1': - resolution: {integrity: sha512-3Ag8Ls1ggqkGUvSZWYcdgFwriy2lWo+0QlYgEFra/5JGtAd6C5Hw59oojx1DeqcA2Wds2ayRgvJ4qxVTzCHgzg==} + '@rollup/rollup-linux-riscv64-musl@4.44.1': + resolution: {integrity: sha512-ppn5llVGgrZw7yxbIm8TTvtj1EoPgYUAbfw0uDjIOzzoqlZlZrLJ/KuiE7uf5EpTpCTrNt1EdtzF0naMm0wGYg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.50.1': - resolution: {integrity: sha512-t9YrKfaxCYe7l7ldFERE1BRg/4TATxIg+YieHQ966jwvo7ddHJxPj9cNFWLAzhkVsbBvNA4qTbPVNsZKBO4NSg==} + '@rollup/rollup-linux-s390x-gnu@4.44.1': + resolution: {integrity: sha512-Hu6hEdix0oxtUma99jSP7xbvjkUM/ycke/AQQ4EC5g7jNRLLIwjcNwaUy95ZKBJJwg1ZowsclNnjYqzN4zwkAw==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.50.1': - resolution: {integrity: sha512-MCgtFB2+SVNuQmmjHf+wfI4CMxy3Tk8XjA5Z//A0AKD7QXUYFMQcns91K6dEHBvZPCnhJSyDWLApk40Iq/H3tA==} + '@rollup/rollup-linux-x64-gnu@4.44.1': + resolution: {integrity: sha512-EtnsrmZGomz9WxK1bR5079zee3+7a+AdFlghyd6VbAjgRJDbTANJ9dcPIPAi76uG05micpEL+gPGmAKYTschQw==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.50.1': - resolution: {integrity: sha512-nEvqG+0jeRmqaUMuwzlfMKwcIVffy/9KGbAGyoa26iu6eSngAYQ512bMXuqqPrlTyfqdlB9FVINs93j534UJrg==} + '@rollup/rollup-linux-x64-musl@4.44.1': + resolution: {integrity: sha512-iAS4p+J1az6Usn0f8xhgL4PaU878KEtutP4hqw52I4IO6AGoyOkHCxcc4bqufv1tQLdDWFx8lR9YlwxKuv3/3g==} cpu: [x64] os: [linux] - '@rollup/rollup-openharmony-arm64@4.50.1': - resolution: {integrity: sha512-RDsLm+phmT3MJd9SNxA9MNuEAO/J2fhW8GXk62G/B4G7sLVumNFbRwDL6v5NrESb48k+QMqdGbHgEtfU0LCpbA==} - cpu: [arm64] - os: [openharmony] - - '@rollup/rollup-win32-arm64-msvc@4.50.1': - resolution: {integrity: sha512-hpZB/TImk2FlAFAIsoElM3tLzq57uxnGYwplg6WDyAxbYczSi8O2eQ+H2Lx74504rwKtZ3N2g4bCUkiamzS6TQ==} + '@rollup/rollup-win32-arm64-msvc@4.44.1': + resolution: {integrity: sha512-NtSJVKcXwcqozOl+FwI41OH3OApDyLk3kqTJgx8+gp6On9ZEt5mYhIsKNPGuaZr3p9T6NWPKGU/03Vw4CNU9qg==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.50.1': - resolution: {integrity: sha512-SXjv8JlbzKM0fTJidX4eVsH+Wmnp0/WcD8gJxIZyR6Gay5Qcsmdbi9zVtnbkGPG8v2vMR1AD06lGWy5FLMcG7A==} + '@rollup/rollup-win32-ia32-msvc@4.44.1': + resolution: {integrity: sha512-JYA3qvCOLXSsnTR3oiyGws1Dm0YTuxAAeaYGVlGpUsHqloPcFjPg+X0Fj2qODGLNwQOAcCiQmHub/V007kiH5A==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.50.1': - resolution: {integrity: sha512-StxAO/8ts62KZVRAm4JZYq9+NqNsV7RvimNK+YM7ry//zebEH6meuugqW/P5OFUCjyQgui+9fUxT6d5NShvMvA==} + '@rollup/rollup-win32-x64-msvc@4.44.1': + resolution: {integrity: sha512-J8o22LuF0kTe7m+8PvW9wk3/bRq5+mRo5Dqo6+vXb7otCm3TPhYOJqOaQtGU9YMWQSL3krMnoOxMr0+9E6F3Ug==} cpu: [x64] os: [win32] @@ -2917,16 +3615,16 @@ packages: '@types/node': optional: true - '@rushstack/node-core-library@5.13.1': - resolution: {integrity: sha512-5yXhzPFGEkVc9Fu92wsNJ9jlvdwz4RNb2bMso+/+TH0nMm1jDDDsOIf4l8GAkPxGuwPw5DH24RliWVfSPhlW/Q==} + '@rushstack/node-core-library@5.13.0': + resolution: {integrity: sha512-IGVhy+JgUacAdCGXKUrRhwHMTzqhWwZUI+qEPcdzsb80heOw0QPbhhoVsoiMF7Klp8eYsp7hzpScMXmOa3Uhfg==} peerDependencies: '@types/node': '*' peerDependenciesMeta: '@types/node': optional: true - '@rushstack/node-core-library@5.14.0': - resolution: {integrity: sha512-eRong84/rwQUlATGFW3TMTYVyqL1vfW9Lf10PH+mVGfIb9HzU3h5AASNIw+axnBLjnD0n3rT5uQBwu9fvzATrg==} + '@rushstack/node-core-library@5.13.1': + resolution: {integrity: sha512-5yXhzPFGEkVc9Fu92wsNJ9jlvdwz4RNb2bMso+/+TH0nMm1jDDDsOIf4l8GAkPxGuwPw5DH24RliWVfSPhlW/Q==} peerDependencies: '@types/node': '*' peerDependenciesMeta: @@ -3322,9 +4020,100 @@ packages: '@swc/counter@0.1.3': resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + '@swc/helpers@0.5.15': + resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + '@swc/helpers@0.5.5': resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==} + '@tailwindcss/node@4.1.13': + resolution: {integrity: sha512-eq3ouolC1oEFOAvOMOBAmfCIqZBJuvWvvYWh5h5iOYfe1HFC6+GZ6EIL0JdM3/niGRJmnrOc+8gl9/HGUaaptw==} + + '@tailwindcss/oxide-android-arm64@4.1.13': + resolution: {integrity: sha512-BrpTrVYyejbgGo57yc8ieE+D6VT9GOgnNdmh5Sac6+t0m+v+sKQevpFVpwX3pBrM2qKrQwJ0c5eDbtjouY/+ew==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@tailwindcss/oxide-darwin-arm64@4.1.13': + resolution: {integrity: sha512-YP+Jksc4U0KHcu76UhRDHq9bx4qtBftp9ShK/7UGfq0wpaP96YVnnjFnj3ZFrUAjc5iECzODl/Ts0AN7ZPOANQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@tailwindcss/oxide-darwin-x64@4.1.13': + resolution: {integrity: sha512-aAJ3bbwrn/PQHDxCto9sxwQfT30PzyYJFG0u/BWZGeVXi5Hx6uuUOQEI2Fa43qvmUjTRQNZnGqe9t0Zntexeuw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@tailwindcss/oxide-freebsd-x64@4.1.13': + resolution: {integrity: sha512-Wt8KvASHwSXhKE/dJLCCWcTSVmBj3xhVhp/aF3RpAhGeZ3sVo7+NTfgiN8Vey/Fi8prRClDs6/f0KXPDTZE6nQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.13': + resolution: {integrity: sha512-mbVbcAsW3Gkm2MGwA93eLtWrwajz91aXZCNSkGTx/R5eb6KpKD5q8Ueckkh9YNboU8RH7jiv+ol/I7ZyQ9H7Bw==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-gnu@4.1.13': + resolution: {integrity: sha512-wdtfkmpXiwej/yoAkrCP2DNzRXCALq9NVLgLELgLim1QpSfhQM5+ZxQQF8fkOiEpuNoKLp4nKZ6RC4kmeFH0HQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-musl@4.1.13': + resolution: {integrity: sha512-hZQrmtLdhyqzXHB7mkXfq0IYbxegaqTmfa1p9MBj72WPoDD3oNOh1Lnxf6xZLY9C3OV6qiCYkO1i/LrzEdW2mg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-gnu@4.1.13': + resolution: {integrity: sha512-uaZTYWxSXyMWDJZNY1Ul7XkJTCBRFZ5Fo6wtjrgBKzZLoJNrG+WderJwAjPzuNZOnmdrVg260DKwXCFtJ/hWRQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-musl@4.1.13': + resolution: {integrity: sha512-oXiPj5mi4Hdn50v5RdnuuIms0PVPI/EG4fxAfFiIKQh5TgQgX7oSuDWntHW7WNIi/yVLAiS+CRGW4RkoGSSgVQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-wasm32-wasi@4.1.13': + resolution: {integrity: sha512-+LC2nNtPovtrDwBc/nqnIKYh/W2+R69FA0hgoeOn64BdCX522u19ryLh3Vf3F8W49XBcMIxSe665kwy21FkhvA==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + + '@tailwindcss/oxide-win32-arm64-msvc@4.1.13': + resolution: {integrity: sha512-dziTNeQXtoQ2KBXmrjCxsuPk3F3CQ/yb7ZNZNA+UkNTeiTGgfeh+gH5Pi7mRncVgcPD2xgHvkFCh/MhZWSgyQg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@tailwindcss/oxide-win32-x64-msvc@4.1.13': + resolution: {integrity: sha512-3+LKesjXydTkHk5zXX01b5KMzLV1xl2mcktBJkje7rhFUpUlYJy7IMOLqjIRQncLTa1WZZiFY/foAeB5nmaiTw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@tailwindcss/oxide@4.1.13': + resolution: {integrity: sha512-CPgsM1IpGRa880sMbYmG1s4xhAy3xEt1QULgTJGQmZUeNgXFR7s1YxYygmJyBGtou4SyEosGAGEeYqY7R53bIA==} + engines: {node: '>= 10'} + + '@tailwindcss/postcss@4.1.13': + resolution: {integrity: sha512-HLgx6YSFKJT7rJqh9oJs/TkBFhxuMOfUKSBEPYwV+t78POOBsdQ7crhZLzwcH3T0UyUuOzU/GK5pk5eKr3wCiQ==} + '@testing-library/dom@10.1.0': resolution: {integrity: sha512-wdsYKy5zupPyLCW2Je5DLHSxSfbIp6h80WoHOQc+RPtmPGA52O9x5MJEkv92Sjonpq+poOAtUKhh1kBGAXBrNA==} engines: {node: '>=18'} @@ -3354,6 +4143,22 @@ packages: peerDependencies: '@testing-library/dom': '>=7.21.4' + '@trivago/prettier-plugin-sort-imports@5.2.2': + resolution: {integrity: sha512-fYDQA9e6yTNmA13TLVSA+WMQRc5Bn/c0EUBditUHNfMMxN7M82c38b1kEggVE3pLpZ0FwkwJkUEKMiOi52JXFA==} + engines: {node: '>18.12'} + peerDependencies: + '@vue/compiler-sfc': 3.x + prettier: 2.x - 3.x + prettier-plugin-svelte: 3.x + svelte: 4.x || 5.x + peerDependenciesMeta: + '@vue/compiler-sfc': + optional: true + prettier-plugin-svelte: + optional: true + svelte: + optional: true + '@trysound/sax@0.2.0': resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} engines: {node: '>=10.13.0'} @@ -3421,6 +4226,9 @@ packages: '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/events@3.0.3': + resolution: {integrity: sha512-trOc4AAUThEz9hapPtSd7wf5tiQKvTtu5b371UxXdTuqzIh0ArcRspRP0i0Viu+LXstIQ1z96t1nsPxT9ol01g==} + '@types/express-serve-static-core@4.19.6': resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==} @@ -3502,6 +4310,9 @@ packages: '@types/node@22.13.1': resolution: {integrity: sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew==} + '@types/node@24.7.0': + resolution: {integrity: sha512-IbKooQVqUBrlzWTi79E8Fw78l8k1RNtlDDNWsFZs7XonuQSJ8oNYfEeclhprUldXISRMLzBpILuKgPlIxm+/Yw==} + '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -3528,9 +4339,17 @@ packages: peerDependencies: '@types/react': ^18.0.0 + '@types/react-dom@19.1.9': + resolution: {integrity: sha512-qXRuZaOsAdXKFyOhRBg6Lqqc0yay13vN7KrIg4L7N4aaHN68ma9OK3NE1BoDFgFOTfM7zg+3/8+2n8rLUH3OKQ==} + peerDependencies: + '@types/react': ^19.0.0 + '@types/react@18.3.18': resolution: {integrity: sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==} + '@types/react@19.1.12': + resolution: {integrity: sha512-cMoR+FoAf/Jyq6+Df2/Z41jISvGZZ2eTlnsaJRptmZ76Caldwy1odD4xTr/gNV9VLj0AWgg/nmkevIyUfIIq5w==} + '@types/resolve@1.20.6': resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==} @@ -3948,6 +4767,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + address@1.2.2: resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} engines: {node: '>= 10.0.0'} @@ -4270,6 +5094,10 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + buffer-image-size@0.6.4: + resolution: {integrity: sha512-nEh+kZOPY1w+gcCMobZ6ETUp9WfibndnosbpwB1iJk/8Gt5ZF2bhS6+B6bPYz424KtwsR6Rflc3tCz1/ghX2dQ==} + engines: {node: '>=4.0'} + buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} @@ -4382,6 +5210,10 @@ packages: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} + chownr@3.0.0: + resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} + engines: {node: '>=18'} + chrome-trace-event@1.0.4: resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} engines: {node: '>=6.0'} @@ -4396,6 +5228,9 @@ packages: cjs-module-lexer@1.4.3: resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} + class-variance-authority@0.7.1: + resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + clean-stack@2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} @@ -4445,6 +5280,13 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + colors@1.4.0: resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} engines: {node: '>=0.1.90'} @@ -4718,6 +5560,10 @@ packages: engines: {node: '>=0.10'} hasBin: true + detect-libc@2.0.4: + resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} + engines: {node: '>=8'} + detect-newline@3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} @@ -4834,6 +5680,10 @@ packages: resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} engines: {node: '>=10.13.0'} + enhanced-resolve@5.18.3: + resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==} + engines: {node: '>=10.13.0'} + enquirer@2.4.1: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} engines: {node: '>=8.6'} @@ -4919,8 +5769,8 @@ packages: engines: {node: '>=18'} hasBin: true - esbuild@0.25.9: - resolution: {integrity: sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==} + esbuild@0.25.5: + resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==} engines: {node: '>=18'} hasBin: true @@ -4971,12 +5821,27 @@ packages: typescript: optional: true + eslint-config-next@15.4.6: + resolution: {integrity: sha512-4uznvw5DlTTjrZgYZjMciSdDDMO2SWIuQgUNaFyC2O3Zw3Z91XeIejeVa439yRq2CnJb/KEvE4U2AeN/66FpUA==} + peerDependencies: + eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 + typescript: '>=3.3.1' + peerDependenciesMeta: + typescript: + optional: true + eslint-config-prettier@10.0.1: resolution: {integrity: sha512-lZBts941cyJyeaooiKxAtzoPHTN+GbQTJFAIdQbRhA4/8whaAraEh47Whw/ZFfrjNSnlAxqfm9i0XVAEkULjCw==} hasBin: true peerDependencies: eslint: '>=7.0.0' + eslint-config-prettier@10.1.8: + resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + eslint-config-standard-react@13.0.0: resolution: {integrity: sha512-HrVPGj8UncHfV+BsdJTuJpVsomn6AIrke3Af2Fh4XFvQQDU+iO6N2ZL+UsC+scExft4fU3uf7fJwj7PKWnXJDA==} peerDependencies: @@ -5085,7 +5950,21 @@ packages: eslint-config-prettier: optional: true - eslint-plugin-promise@6.1.1: + eslint-plugin-prettier@5.5.4: + resolution: {integrity: sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' + eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0' + prettier: '>=3.0.0' + peerDependenciesMeta: + '@types/eslint': + optional: true + eslint-config-prettier: + optional: true + + eslint-plugin-promise@6.1.1: resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -5144,6 +6023,10 @@ packages: resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} + 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} @@ -5152,12 +6035,30 @@ packages: resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint@8.57.1: resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true + eslint@9.35.0: + resolution: {integrity: sha512-QePbBFMJFjgmlE+cXAlbHZbHpdFVS2E/6vzCy7aKlebddvl1vadiC4JFV5u/wqTkNUwEV8WrQi257jf5f06hrg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -5270,9 +6171,8 @@ packages: fd-slicer@1.1.0: resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} - fdir@6.5.0: - resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} - engines: {node: '>=12.0.0'} + fdir@6.4.6: + resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==} peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: @@ -5286,6 +6186,10 @@ packages: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + file-system-cache@2.3.0: resolution: {integrity: sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==} @@ -5332,6 +6236,10 @@ packages: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + flatted@3.3.2: resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} @@ -5355,6 +6263,20 @@ packages: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} + framer-motion@12.23.12: + resolution: {integrity: sha512-6e78rdVtnBvlEVgu6eFEAgG9v3wLnYEboM8I5O5EXvfKC8gxGQB8wXJdhkMy10iVcn05jl6CNw7/HTsTCfwcWg==} + peerDependencies: + '@emotion/is-prop-valid': '*' + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/is-prop-valid': + optional: true + react: + optional: true + react-dom: + optional: true + fresh@0.5.2: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} @@ -5366,8 +6288,8 @@ packages: resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} engines: {node: '>=14.14'} - fs-extra@11.3.1: - resolution: {integrity: sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g==} + fs-extra@11.3.0: + resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} engines: {node: '>=14.14'} fs-extra@7.0.1: @@ -5508,6 +6430,10 @@ packages: resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} engines: {node: '>=8'} + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + globals@15.14.0: resolution: {integrity: sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==} engines: {node: '>=18'} @@ -5709,6 +6635,9 @@ packages: is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + is-arrayish@0.3.4: + resolution: {integrity: sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==} + is-async-function@2.1.1: resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} engines: {node: '>= 0.4'} @@ -5927,6 +6856,9 @@ packages: engines: {node: '>=10'} hasBin: true + javascript-natural-sort@0.7.1: + resolution: {integrity: sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==} + jest-changed-files@29.7.0: resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -6060,6 +6992,10 @@ packages: resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} hasBin: true + jiti@2.5.1: + resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==} + hasBin: true + jju@1.4.0: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} @@ -6070,6 +7006,9 @@ packages: jose@5.8.0: resolution: {integrity: sha512-E7CqYpL/t7MMnfGnK/eg416OsFCVUrU/Y3Vwe7QjKhu/BkS1Ms455+2xsqZQVN57/U2MHMBvEb5SrmAZWAIntA==} + jose@6.1.0: + resolution: {integrity: sha512-TTQJyoEoKcC1lscpVDCSsVgYzUDg/0Bt3WE//WiTPK6uOCQC2KZS4MpugbMWt/zyjkopgZoXhZuCi00gLudfUA==} + joycon@3.1.1: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} @@ -6144,8 +7083,8 @@ packages: jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} - jsonfile@6.2.0: - resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} jsonpath-plus@10.2.0: resolution: {integrity: sha512-T9V+8iNYKFL2n2rF+w02LBOT2JjDnTjioaNFrxRy0Bv1y/hNsqR/EBK7Ojy2ythRHwmz2cRIls+9JitQGZC/sw==} @@ -6194,6 +7133,70 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} + lightningcss-darwin-arm64@1.30.1: + resolution: {integrity: sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.30.1: + resolution: {integrity: sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.30.1: + resolution: {integrity: sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.30.1: + resolution: {integrity: sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.30.1: + resolution: {integrity: sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-musl@1.30.1: + resolution: {integrity: sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-x64-gnu@1.30.1: + resolution: {integrity: sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.30.1: + resolution: {integrity: sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-win32-arm64-msvc@1.30.1: + resolution: {integrity: sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.30.1: + resolution: {integrity: sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.30.1: + resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==} + engines: {node: '>= 12.0.0'} + lilconfig@3.1.3: resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} engines: {node: '>=14'} @@ -6201,11 +7204,15 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - livekit-client@2.15.1: - resolution: {integrity: sha512-dRdA9ihM4WuEwqUSV1IFHuT6phH4tfrVzlgVw6mSM13ezpagIbmaK0F/4QNxOrQ2UaywfMs66qNI6XW6q/r3Fw==} + livekit-client@2.15.8: + resolution: {integrity: sha512-M+GnlmoY+JOfGGhDov5f4V273YZ9DuWFBaPwz42fliC3TsFTzEcJoRqqE7uLtEGAnloqbLPk+sIvW/XSU4Z4/Q==} peerDependencies: '@types/dom-mediacapture-record': ^1 + livekit-server-sdk@2.13.3: + resolution: {integrity: sha512-ItSQ2gE1oz/Ev9mfBRdAw+P05rt/BaYRkldggKz0+3rh/Yt0ag0BLID3VrgCVFVRAQ2YEJKcJJyj5p4epIJ8QA==} + engines: {node: '>=18'} + livekit-server-sdk@2.6.1: resolution: {integrity: sha512-j/8TOlahIyWnycNkuSzTv6q+win4JTbDGNH48iMsZDMnJBks9hhC9UwAO4ES42sAorIAxGkrH58hxt4KdTkZaQ==} engines: {node: '>=19'} @@ -6307,6 +7314,9 @@ packages: magic-string@0.30.17: resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + magic-string@0.30.19: + resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} + make-dir@2.1.0: resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} engines: {node: '>=6'} @@ -6401,6 +7411,11 @@ packages: engines: {node: '>=4.0.0'} hasBin: true + mime@4.0.7: + resolution: {integrity: sha512-2OfDPL+e03E0LrXaGYOtTFIYhiuzep94NSsuhrNULq+stylcJedcHdzHtz0atMUuGwJfFYs0YL5xeC/Ca2x0eQ==} + engines: {node: '>=16'} + hasBin: true + mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} @@ -6450,6 +7465,10 @@ packages: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} + minizlib@3.0.2: + resolution: {integrity: sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==} + engines: {node: '>= 18'} + mkdirp-classic@0.5.3: resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} @@ -6462,6 +7481,11 @@ packages: engines: {node: '>=10'} hasBin: true + mkdirp@3.0.1: + resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} + engines: {node: '>=10'} + hasBin: true + mlly@1.7.4: resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} @@ -6469,6 +7493,26 @@ packages: resolution: {integrity: sha512-VqlMdYi59Uch6fnUPxnpijWUQe+TW6zeWCvyr6Mb7JibheHzSuAAoJi2c71ZwIaWKpECpGpYHoaaBp6rBRr+/g==} engines: {node: '>=6'} + motion-dom@12.23.12: + resolution: {integrity: sha512-RcR4fvMCTESQBD/uKQe49D5RUeDOokkGRmz4ceaJKDBgHYtZtntC/s2vLvY38gqGaytinij/yi3hMcWVcEF5Kw==} + + motion-utils@12.23.6: + resolution: {integrity: sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==} + + motion@12.23.12: + resolution: {integrity: sha512-8jCD8uW5GD1csOoqh1WhH1A6j5APHVE15nuBkFeRiMzYBdRwyAHmSP/oXSuW0WJPZRXTFdBoG4hY9TFWNhhwng==} + peerDependencies: + '@emotion/is-prop-valid': '*' + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/is-prop-valid': + optional: true + react: + optional: true + react-dom: + optional: true + mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} @@ -6512,6 +7556,12 @@ packages: neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + next-themes@0.4.6: + resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==} + peerDependencies: + react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc + react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc + next@14.2.13: resolution: {integrity: sha512-BseY9YNw8QJSwLYD7hlZzl6QVDoSFHL/URN5K64kVEVpCsSOWeyjbIGK+dZUaRViHTaMQX8aqmnn0PHBbGZezg==} engines: {node: '>=18.17.0'} @@ -6530,6 +7580,27 @@ packages: sass: optional: true + next@15.4.6: + resolution: {integrity: sha512-us++E/Q80/8+UekzB3SAGs71AlLDsadpFMXVNM/uQ0BMwsh9m3mr0UNQIfjKed8vpWXsASe+Qifrnu1oLIcKEQ==} + engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.51.1 + babel-plugin-react-compiler: '*' + react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + babel-plugin-react-compiler: + optional: true + sass: + optional: true + no-case@3.0.4: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} @@ -6811,8 +7882,8 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} engines: {node: '>=12'} pify@2.3.0: @@ -6961,6 +8032,67 @@ packages: resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} engines: {node: '>=6.0.0'} + prettier-plugin-tailwindcss@0.6.14: + resolution: {integrity: sha512-pi2e/+ZygeIqntN+vC573BcW5Cve8zUB0SSAGxqpB4f96boZF4M3phPVoOFCeypwkpRYdi7+jQ5YJJUwrkGUAg==} + engines: {node: '>=14.21.3'} + peerDependencies: + '@ianvs/prettier-plugin-sort-imports': '*' + '@prettier/plugin-hermes': '*' + '@prettier/plugin-oxc': '*' + '@prettier/plugin-pug': '*' + '@shopify/prettier-plugin-liquid': '*' + '@trivago/prettier-plugin-sort-imports': '*' + '@zackad/prettier-plugin-twig': '*' + prettier: ^3.0 + prettier-plugin-astro: '*' + prettier-plugin-css-order: '*' + prettier-plugin-import-sort: '*' + prettier-plugin-jsdoc: '*' + prettier-plugin-marko: '*' + prettier-plugin-multiline-arrays: '*' + prettier-plugin-organize-attributes: '*' + prettier-plugin-organize-imports: '*' + prettier-plugin-sort-imports: '*' + prettier-plugin-style-order: '*' + prettier-plugin-svelte: '*' + peerDependenciesMeta: + '@ianvs/prettier-plugin-sort-imports': + optional: true + '@prettier/plugin-hermes': + optional: true + '@prettier/plugin-oxc': + optional: true + '@prettier/plugin-pug': + optional: true + '@shopify/prettier-plugin-liquid': + optional: true + '@trivago/prettier-plugin-sort-imports': + optional: true + '@zackad/prettier-plugin-twig': + optional: true + prettier-plugin-astro: + optional: true + prettier-plugin-css-order: + optional: true + prettier-plugin-import-sort: + optional: true + prettier-plugin-jsdoc: + optional: true + prettier-plugin-marko: + optional: true + prettier-plugin-multiline-arrays: + optional: true + prettier-plugin-organize-attributes: + optional: true + prettier-plugin-organize-imports: + optional: true + prettier-plugin-sort-imports: + optional: true + prettier-plugin-style-order: + optional: true + prettier-plugin-svelte: + optional: true + prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} @@ -7083,6 +8215,11 @@ packages: peerDependencies: react: ^18.3.1 + react-dom@19.1.1: + resolution: {integrity: sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==} + peerDependencies: + react: ^19.1.1 + react-element-to-jsx-string@15.0.0: resolution: {integrity: sha512-UDg4lXB6BzlobN60P8fHWVPX3Kyw8ORrTeBtClmIlGdkOOE+GYQSFvmEU5iLLpwp/6v42DINwNcwOhOLfQ//FQ==} peerDependencies: @@ -7125,6 +8262,16 @@ packages: '@types/react': optional: true + react-remove-scroll@2.7.1: + resolution: {integrity: sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + react-style-singleton@2.2.3: resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} engines: {node: '>=10'} @@ -7139,6 +8286,10 @@ packages: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} + react@19.1.1: + resolution: {integrity: sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==} + engines: {node: '>=0.10.0'} + read-cache@1.0.0: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} @@ -7276,8 +8427,8 @@ packages: engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true - rollup@4.50.1: - resolution: {integrity: sha512-78E9voJHwnXQMiQdiqswVLZwJIzdBKJ1GdI5Zx6XwoFKUIk09/sSrr+05QFzvYb8q6Y9pPV45zzDuYa3907TZA==} + rollup@4.44.1: + resolution: {integrity: sha512-x8H8aPvD+xbl0Do8oez5f5o8eMS3trfCghc4HhLAnCkj7Vl0d1JWGs0UF/D886zLW2rOj2QymV/JcSSsw+XDNg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -7323,6 +8474,9 @@ packages: scheduler@0.23.2: resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + scheduler@0.26.0: + resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} + schema-utils@3.3.0: resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} engines: {node: '>= 10.13.0'} @@ -7351,6 +8505,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + engines: {node: '>=10'} + hasBin: true + semver@7.7.2: resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} engines: {node: '>=10'} @@ -7389,6 +8548,10 @@ packages: resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} engines: {node: '>=8'} + sharp@0.34.3: + resolution: {integrity: sha512-eX2IQ6nFohW4DbvHIOLRB3MHFpYqaqvXd3Tp5e/T/dSH83fxaNJQRvDMhASmkNTsNTVF2/OOopzRCt7xokgPfg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -7423,6 +8586,9 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} + simple-swizzle@0.2.4: + resolution: {integrity: sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==} + simple-update-notifier@2.0.0: resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} engines: {node: '>=10'} @@ -7446,6 +8612,12 @@ packages: snake-case@3.0.4: resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + sonner@2.0.7: + resolution: {integrity: sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==} + peerDependencies: + react: ^18.0.0 || ^19.0.0 || ^19.0.0-rc + react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-rc + source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -7469,7 +8641,6 @@ packages: source-map@0.8.0-beta.0: resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} engines: {node: '>= 8'} - deprecated: The work that was done in this beta branch won't be included in future versions space-separated-tokens@1.1.5: resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} @@ -7523,6 +8694,10 @@ packages: stream-shift@1.0.3: resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} + streaming-iterables@8.0.1: + resolution: {integrity: sha512-yfQdmUB1b+rGLZkD/r6YisT/eNOjZxBAckXKlzYNmRJnwSzHaiScykD8gsQceFcShtK09qAbLhOqvzIpnBPoDQ==} + engines: {node: '>=18'} + streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} @@ -7616,6 +8791,19 @@ packages: babel-plugin-macros: optional: true + styled-jsx@5.1.6: + resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + sucrase@3.35.0: resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} engines: {node: '>=16 || 14 >=14.17'} @@ -7651,10 +8839,20 @@ packages: synchronous-promise@2.0.17: resolution: {integrity: sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g==} + synckit@0.11.11: + resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==} + engines: {node: ^14.18.0 || >=16.0.0} + synckit@0.9.2: resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} engines: {node: ^14.18.0 || >=16.0.0} + tailwind-merge@3.3.1: + resolution: {integrity: sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==} + + tailwindcss@4.1.13: + resolution: {integrity: sha512-i+zidfmTqtwquj4hMEwdjshYYgMbOrPzb9a0M3ZgNa0JMoZeFC6bxZvO8yr8ozS6ix2SDz0+mvryPeBs2TFE+w==} + tapable@1.1.3: resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} engines: {node: '>=6'} @@ -7674,6 +8872,10 @@ packages: resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} engines: {node: '>=10'} + tar@7.4.3: + resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} + engines: {node: '>=18'} + telejson@7.2.0: resolution: {integrity: sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==} @@ -7743,8 +8945,8 @@ packages: tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - tinyglobby@0.2.15: - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + tinyglobby@0.2.14: + resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} engines: {node: '>=12.0.0'} tinypool@1.0.2: @@ -7901,6 +9103,9 @@ packages: resolution: {integrity: sha512-N9FDOVaY3yz0YCOhYIgOGYad7+m2ptvinXygw27WPLQvcZDl3+0Sa77KGVlLSiuPDChOUEnTKE9VJwLSi9BPGQ==} hasBin: true + tw-animate-css@1.3.8: + resolution: {integrity: sha512-Qrk3PZ7l7wUcGYhwZloqfkWCmaXZAoqjkdbIDvzfGshwGtexa/DAs9koXxIkrpEasyevandomzCBAV1Yyop5rw==} + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -8022,6 +9227,9 @@ packages: undici-types@6.20.0: resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + undici-types@7.14.0: + resolution: {integrity: sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==} + unicode-canonical-property-names-ecmascript@2.0.1: resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} engines: {node: '>=4'} @@ -8161,8 +9369,8 @@ packages: vite: optional: true - vite@6.3.6: - resolution: {integrity: sha512-0msEVHJEScQbhkbVTb/4iHZdJ6SXp/AvxL2sjwYQFfBqleHtnCqv1J3sa9zbWz/6kW1m9Tfzn92vW+kZ1WV6QA==} + vite@6.3.5: + resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: @@ -8394,6 +9602,10 @@ packages: yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + yallist@5.0.0: + resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} + engines: {node: '>=18'} + yaml@2.4.5: resolution: {integrity: sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==} engines: {node: '>= 14'} @@ -8418,8 +9630,28 @@ packages: resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} engines: {node: '>=12.20'} + zustand@5.0.8: + resolution: {integrity: sha512-gyPKpIaxY9XcO2vSMrLbiER7QMAMGOQZVRdJ6Zi782jkbzZygq5GI9nG8g+sMgitRtndwaBSl7uiqC49o1SSiw==} + engines: {node: '>=12.20.0'} + peerDependencies: + '@types/react': '>=18.0.0' + immer: '>=9.0.6' + react: '>=18.0.0' + use-sync-external-store: '>=1.2.0' + peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true + react: + optional: true + use-sync-external-store: + optional: true + snapshots: + '@alloc/quick-lru@5.2.0': {} + '@ampproject/remapping@2.3.0': dependencies: '@jridgewell/gen-mapping': 0.3.8 @@ -8459,7 +9691,7 @@ snapshots: '@babel/types': 7.26.8 '@types/gensync': 1.0.4 convert-source-map: 2.0.0 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.0 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -9189,7 +10421,7 @@ snapshots: pirates: 4.0.6 source-map-support: 0.5.21 - '@babel/runtime@7.28.4': {} + '@babel/runtime@7.27.6': {} '@babel/template@7.26.8': dependencies: @@ -9204,7 +10436,7 @@ snapshots: '@babel/parser': 7.26.8 '@babel/template': 7.26.8 '@babel/types': 7.26.8 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.0 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -9234,7 +10466,7 @@ snapshots: outdent: 0.5.0 prettier: 2.8.8 resolve-from: 5.0.0 - semver: 7.7.2 + semver: 7.7.1 '@changesets/assemble-release-plan@6.0.6': dependencies: @@ -9243,7 +10475,7 @@ snapshots: '@changesets/should-skip-package': 0.1.2 '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 - semver: 7.7.2 + semver: 7.7.1 '@changesets/changelog-git@0.2.1': dependencies: @@ -9276,7 +10508,7 @@ snapshots: package-manager-detector: 0.2.11 picocolors: 1.1.1 resolve-from: 5.0.0 - semver: 7.7.2 + semver: 7.7.1 spawndamnit: 3.0.1 term-size: 2.2.1 @@ -9299,7 +10531,7 @@ snapshots: '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 picocolors: 1.1.1 - semver: 7.7.2 + semver: 7.7.1 '@changesets/get-github-info@0.5.2': dependencies: @@ -9398,6 +10630,11 @@ snapshots: '@discoveryjs/natural-compare@1.1.0': {} + '@emnapi/runtime@1.5.0': + dependencies: + tslib: 2.8.1 + optional: true + '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@18.3.1)': dependencies: react: 18.3.1 @@ -9408,7 +10645,7 @@ snapshots: '@esbuild/aix-ppc64@0.24.2': optional: true - '@esbuild/aix-ppc64@0.25.9': + '@esbuild/aix-ppc64@0.25.5': optional: true '@esbuild/android-arm64@0.17.19': @@ -9423,7 +10660,7 @@ snapshots: '@esbuild/android-arm64@0.24.2': optional: true - '@esbuild/android-arm64@0.25.9': + '@esbuild/android-arm64@0.25.5': optional: true '@esbuild/android-arm@0.17.19': @@ -9438,7 +10675,7 @@ snapshots: '@esbuild/android-arm@0.24.2': optional: true - '@esbuild/android-arm@0.25.9': + '@esbuild/android-arm@0.25.5': optional: true '@esbuild/android-x64@0.17.19': @@ -9453,7 +10690,7 @@ snapshots: '@esbuild/android-x64@0.24.2': optional: true - '@esbuild/android-x64@0.25.9': + '@esbuild/android-x64@0.25.5': optional: true '@esbuild/darwin-arm64@0.17.19': @@ -9468,7 +10705,7 @@ snapshots: '@esbuild/darwin-arm64@0.24.2': optional: true - '@esbuild/darwin-arm64@0.25.9': + '@esbuild/darwin-arm64@0.25.5': optional: true '@esbuild/darwin-x64@0.17.19': @@ -9483,7 +10720,7 @@ snapshots: '@esbuild/darwin-x64@0.24.2': optional: true - '@esbuild/darwin-x64@0.25.9': + '@esbuild/darwin-x64@0.25.5': optional: true '@esbuild/freebsd-arm64@0.17.19': @@ -9498,7 +10735,7 @@ snapshots: '@esbuild/freebsd-arm64@0.24.2': optional: true - '@esbuild/freebsd-arm64@0.25.9': + '@esbuild/freebsd-arm64@0.25.5': optional: true '@esbuild/freebsd-x64@0.17.19': @@ -9513,7 +10750,7 @@ snapshots: '@esbuild/freebsd-x64@0.24.2': optional: true - '@esbuild/freebsd-x64@0.25.9': + '@esbuild/freebsd-x64@0.25.5': optional: true '@esbuild/linux-arm64@0.17.19': @@ -9528,7 +10765,7 @@ snapshots: '@esbuild/linux-arm64@0.24.2': optional: true - '@esbuild/linux-arm64@0.25.9': + '@esbuild/linux-arm64@0.25.5': optional: true '@esbuild/linux-arm@0.17.19': @@ -9543,7 +10780,7 @@ snapshots: '@esbuild/linux-arm@0.24.2': optional: true - '@esbuild/linux-arm@0.25.9': + '@esbuild/linux-arm@0.25.5': optional: true '@esbuild/linux-ia32@0.17.19': @@ -9558,7 +10795,7 @@ snapshots: '@esbuild/linux-ia32@0.24.2': optional: true - '@esbuild/linux-ia32@0.25.9': + '@esbuild/linux-ia32@0.25.5': optional: true '@esbuild/linux-loong64@0.17.19': @@ -9573,7 +10810,7 @@ snapshots: '@esbuild/linux-loong64@0.24.2': optional: true - '@esbuild/linux-loong64@0.25.9': + '@esbuild/linux-loong64@0.25.5': optional: true '@esbuild/linux-mips64el@0.17.19': @@ -9588,7 +10825,7 @@ snapshots: '@esbuild/linux-mips64el@0.24.2': optional: true - '@esbuild/linux-mips64el@0.25.9': + '@esbuild/linux-mips64el@0.25.5': optional: true '@esbuild/linux-ppc64@0.17.19': @@ -9603,7 +10840,7 @@ snapshots: '@esbuild/linux-ppc64@0.24.2': optional: true - '@esbuild/linux-ppc64@0.25.9': + '@esbuild/linux-ppc64@0.25.5': optional: true '@esbuild/linux-riscv64@0.17.19': @@ -9618,7 +10855,7 @@ snapshots: '@esbuild/linux-riscv64@0.24.2': optional: true - '@esbuild/linux-riscv64@0.25.9': + '@esbuild/linux-riscv64@0.25.5': optional: true '@esbuild/linux-s390x@0.17.19': @@ -9633,7 +10870,7 @@ snapshots: '@esbuild/linux-s390x@0.24.2': optional: true - '@esbuild/linux-s390x@0.25.9': + '@esbuild/linux-s390x@0.25.5': optional: true '@esbuild/linux-x64@0.17.19': @@ -9648,13 +10885,13 @@ snapshots: '@esbuild/linux-x64@0.24.2': optional: true - '@esbuild/linux-x64@0.25.9': + '@esbuild/linux-x64@0.25.5': optional: true '@esbuild/netbsd-arm64@0.24.2': optional: true - '@esbuild/netbsd-arm64@0.25.9': + '@esbuild/netbsd-arm64@0.25.5': optional: true '@esbuild/netbsd-x64@0.17.19': @@ -9669,7 +10906,7 @@ snapshots: '@esbuild/netbsd-x64@0.24.2': optional: true - '@esbuild/netbsd-x64@0.25.9': + '@esbuild/netbsd-x64@0.25.5': optional: true '@esbuild/openbsd-arm64@0.23.1': @@ -9678,7 +10915,7 @@ snapshots: '@esbuild/openbsd-arm64@0.24.2': optional: true - '@esbuild/openbsd-arm64@0.25.9': + '@esbuild/openbsd-arm64@0.25.5': optional: true '@esbuild/openbsd-x64@0.17.19': @@ -9693,10 +10930,7 @@ snapshots: '@esbuild/openbsd-x64@0.24.2': optional: true - '@esbuild/openbsd-x64@0.25.9': - optional: true - - '@esbuild/openharmony-arm64@0.25.9': + '@esbuild/openbsd-x64@0.25.5': optional: true '@esbuild/sunos-x64@0.17.19': @@ -9711,7 +10945,7 @@ snapshots: '@esbuild/sunos-x64@0.24.2': optional: true - '@esbuild/sunos-x64@0.25.9': + '@esbuild/sunos-x64@0.25.5': optional: true '@esbuild/win32-arm64@0.17.19': @@ -9726,7 +10960,7 @@ snapshots: '@esbuild/win32-arm64@0.24.2': optional: true - '@esbuild/win32-arm64@0.25.9': + '@esbuild/win32-arm64@0.25.5': optional: true '@esbuild/win32-ia32@0.17.19': @@ -9741,7 +10975,7 @@ snapshots: '@esbuild/win32-ia32@0.24.2': optional: true - '@esbuild/win32-ia32@0.25.9': + '@esbuild/win32-ia32@0.25.5': optional: true '@esbuild/win32-x64@0.17.19': @@ -9756,7 +10990,7 @@ snapshots: '@esbuild/win32-x64@0.24.2': optional: true - '@esbuild/win32-x64@0.25.9': + '@esbuild/win32-x64@0.25.5': optional: true '@eslint-community/eslint-utils@4.5.1(eslint@8.57.1)': @@ -9764,8 +10998,32 @@ snapshots: eslint: 8.57.1 eslint-visitor-keys: 3.4.3 + '@eslint-community/eslint-utils@4.5.1(eslint@9.35.0(jiti@2.5.1))': + dependencies: + eslint: 9.35.0(jiti@2.5.1) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/eslint-utils@4.9.0(eslint@9.35.0(jiti@2.5.1))': + dependencies: + eslint: 9.35.0(jiti@2.5.1) + eslint-visitor-keys: 3.4.3 + '@eslint-community/regexpp@4.12.1': {} + '@eslint/config-array@0.21.0': + dependencies: + '@eslint/object-schema': 2.1.6 + debug: 4.4.0(supports-color@5.5.0) + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.3.1': {} + + '@eslint/core@0.15.2': + dependencies: + '@types/json-schema': 7.0.15 + '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 @@ -9780,8 +11038,31 @@ snapshots: transitivePeerDependencies: - supports-color + '@eslint/eslintrc@3.3.1': + dependencies: + ajv: 6.12.6 + debug: 4.4.0(supports-color@5.5.0) + espree: 10.4.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + '@eslint/js@8.57.1': {} + '@eslint/js@9.35.0': {} + + '@eslint/object-schema@2.1.6': {} + + '@eslint/plugin-kit@0.3.5': + dependencies: + '@eslint/core': 0.15.2 + levn: 0.4.1 + '@fal-works/esbuild-plugin-global-externals@2.1.2': {} '@floating-ui/core@1.6.9': @@ -9799,8 +11080,21 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + '@floating-ui/react-dom@2.1.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@floating-ui/dom': 1.6.13 + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + '@floating-ui/utils@0.2.9': {} + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.7': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.4.3 + '@humanwhocodes/config-array@0.13.0': dependencies: '@humanwhocodes/object-schema': 2.0.3 @@ -9813,6 +11107,94 @@ snapshots: '@humanwhocodes/object-schema@2.0.3': {} + '@humanwhocodes/retry@0.4.3': {} + + '@img/sharp-darwin-arm64@0.34.3': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.2.0 + optional: true + + '@img/sharp-darwin-x64@0.34.3': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.2.0 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.2.0': + optional: true + + '@img/sharp-libvips-darwin-x64@1.2.0': + optional: true + + '@img/sharp-libvips-linux-arm64@1.2.0': + optional: true + + '@img/sharp-libvips-linux-arm@1.2.0': + optional: true + + '@img/sharp-libvips-linux-ppc64@1.2.0': + optional: true + + '@img/sharp-libvips-linux-s390x@1.2.0': + optional: true + + '@img/sharp-libvips-linux-x64@1.2.0': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.2.0': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.2.0': + optional: true + + '@img/sharp-linux-arm64@0.34.3': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.2.0 + optional: true + + '@img/sharp-linux-arm@0.34.3': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.2.0 + optional: true + + '@img/sharp-linux-ppc64@0.34.3': + optionalDependencies: + '@img/sharp-libvips-linux-ppc64': 1.2.0 + optional: true + + '@img/sharp-linux-s390x@0.34.3': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.2.0 + optional: true + + '@img/sharp-linux-x64@0.34.3': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.2.0 + optional: true + + '@img/sharp-linuxmusl-arm64@0.34.3': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.2.0 + optional: true + + '@img/sharp-linuxmusl-x64@0.34.3': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.2.0 + optional: true + + '@img/sharp-wasm32@0.34.3': + dependencies: + '@emnapi/runtime': 1.5.0 + optional: true + + '@img/sharp-win32-arm64@0.34.3': + optional: true + + '@img/sharp-win32-ia32@0.34.3': + optional: true + + '@img/sharp-win32-x64@0.34.3': + optional: true + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -9822,6 +11204,10 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 + '@isaacs/fs-minipass@4.0.1': + dependencies: + minipass: 7.1.2 + '@istanbuljs/load-nyc-config@1.1.0': dependencies: camelcase: 5.3.1 @@ -9835,7 +11221,7 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 18.19.75 + '@types/node': 22.13.1 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -9848,14 +11234,14 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.75 + '@types/node': 22.13.1 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.5.0(@types/node@18.19.75) + jest-config: 29.5.0(@types/node@22.13.1) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -9880,7 +11266,7 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.75 + '@types/node': 22.13.1 jest-mock: 29.7.0 '@jest/expect-utils@29.7.0': @@ -9898,7 +11284,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 18.19.75 + '@types/node': 22.13.1 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -9920,7 +11306,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 18.19.75 + '@types/node': 22.13.1 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -10009,7 +11395,7 @@ snapshots: dependencies: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 18.19.75 + '@types/node': 22.13.1 '@types/yargs': 16.0.9 chalk: 4.1.2 @@ -10018,17 +11404,17 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 18.19.75 + '@types/node': 22.13.1 '@types/yargs': 17.0.33 chalk: 4.1.2 - '@joshwooding/vite-plugin-react-docgen-typescript@0.3.0(typescript@5.8.2)(vite@6.3.6(@types/node@22.13.1)(jiti@2.4.2)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.3.0(typescript@5.8.2)(vite@6.3.5(@types/node@24.7.0)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5))': dependencies: glob: 7.2.3 glob-promise: 4.2.2(glob@7.2.3) magic-string: 0.27.0 react-docgen-typescript: 2.2.2(typescript@5.8.2) - vite: 6.3.6(@types/node@22.13.1)(jiti@2.4.2)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5) + vite: 6.3.5(@types/node@24.7.0)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5) optionalDependencies: typescript: 5.8.2 @@ -10038,6 +11424,11 @@ snapshots: '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/resolve-uri@3.1.2': {} '@jridgewell/set-array@1.2.1': {} @@ -10049,6 +11440,8 @@ snapshots: '@jridgewell/sourcemap-codec@1.5.0': {} + '@jridgewell/sourcemap-codec@1.5.5': {} + '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 @@ -10072,9 +11465,9 @@ snapshots: transitivePeerDependencies: - encoding - '@livekit/krisp-noise-filter@0.2.12(livekit-client@2.15.1(@types/dom-mediacapture-record@1.0.22))': + '@livekit/krisp-noise-filter@0.2.12(livekit-client@2.15.8(@types/dom-mediacapture-record@1.0.22))': dependencies: - livekit-client: 2.15.1(@types/dom-mediacapture-record@1.0.22) + livekit-client: 2.15.8(@types/dom-mediacapture-record@1.0.22) '@livekit/mutex@1.1.1': {} @@ -10082,22 +11475,26 @@ snapshots: dependencies: '@bufbuild/protobuf': 1.10.1 - '@livekit/track-processors@0.3.2(livekit-client@2.15.1(@types/dom-mediacapture-record@1.0.22))': + '@livekit/protocol@1.42.0': + dependencies: + '@bufbuild/protobuf': 1.10.1 + + '@livekit/track-processors@0.3.2(livekit-client@2.15.8(@types/dom-mediacapture-record@1.0.22))': dependencies: '@mediapipe/holistic': 0.5.1675471629 '@mediapipe/tasks-vision': 0.10.9 - livekit-client: 2.15.1(@types/dom-mediacapture-record@1.0.22) + livekit-client: 2.15.8(@types/dom-mediacapture-record@1.0.22) '@manypkg/find-root@1.1.0': dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.27.6 '@types/node': 12.20.55 find-up: 4.1.0 fs-extra: 8.1.0 '@manypkg/get-packages@1.1.3': dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.27.6 '@changesets/types': 4.1.0 '@manypkg/find-root': 1.1.0 fs-extra: 8.1.0 @@ -10122,19 +11519,19 @@ snapshots: transitivePeerDependencies: - '@types/node' - '@microsoft/api-extractor-model@7.30.3(@types/node@22.13.1)': + '@microsoft/api-extractor-model@7.30.3(@types/node@24.7.0)': dependencies: '@microsoft/tsdoc': 0.15.1 '@microsoft/tsdoc-config': 0.17.1 - '@rushstack/node-core-library': 5.11.0(@types/node@22.13.1) + '@rushstack/node-core-library': 5.11.0(@types/node@24.7.0) transitivePeerDependencies: - '@types/node' - '@microsoft/api-extractor-model@7.30.7(@types/node@20.17.29)': + '@microsoft/api-extractor-model@7.30.5(@types/node@20.17.29)': dependencies: '@microsoft/tsdoc': 0.15.1 '@microsoft/tsdoc-config': 0.17.1 - '@rushstack/node-core-library': 5.14.0(@types/node@20.17.29) + '@rushstack/node-core-library': 5.13.0(@types/node@20.17.29) transitivePeerDependencies: - '@types/node' @@ -10156,15 +11553,15 @@ snapshots: transitivePeerDependencies: - '@types/node' - '@microsoft/api-extractor@7.49.2(@types/node@22.13.1)': + '@microsoft/api-extractor@7.49.2(@types/node@24.7.0)': dependencies: - '@microsoft/api-extractor-model': 7.30.3(@types/node@22.13.1) + '@microsoft/api-extractor-model': 7.30.3(@types/node@24.7.0) '@microsoft/tsdoc': 0.15.1 '@microsoft/tsdoc-config': 0.17.1 - '@rushstack/node-core-library': 5.11.0(@types/node@22.13.1) + '@rushstack/node-core-library': 5.11.0(@types/node@24.7.0) '@rushstack/rig-package': 0.5.3 - '@rushstack/terminal': 0.14.6(@types/node@22.13.1) - '@rushstack/ts-command-line': 4.23.4(@types/node@22.13.1) + '@rushstack/terminal': 0.14.6(@types/node@24.7.0) + '@rushstack/ts-command-line': 4.23.4(@types/node@24.7.0) lodash: 4.17.21 minimatch: 3.0.8 resolve: 1.22.10 @@ -10191,6 +11588,8 @@ snapshots: '@next/env@14.2.13': {} + '@next/env@15.4.6': {} + '@next/eslint-plugin-next@12.3.4': dependencies: glob: 7.1.7 @@ -10199,33 +11598,61 @@ snapshots: dependencies: fast-glob: 3.3.1 + '@next/eslint-plugin-next@15.4.6': + dependencies: + fast-glob: 3.3.1 + '@next/swc-darwin-arm64@14.2.13': optional: true + '@next/swc-darwin-arm64@15.4.6': + optional: true + '@next/swc-darwin-x64@14.2.13': optional: true + '@next/swc-darwin-x64@15.4.6': + optional: true + '@next/swc-linux-arm64-gnu@14.2.13': optional: true + '@next/swc-linux-arm64-gnu@15.4.6': + optional: true + '@next/swc-linux-arm64-musl@14.2.13': optional: true + '@next/swc-linux-arm64-musl@15.4.6': + optional: true + '@next/swc-linux-x64-gnu@14.2.13': optional: true + '@next/swc-linux-x64-gnu@15.4.6': + optional: true + '@next/swc-linux-x64-musl@14.2.13': optional: true + '@next/swc-linux-x64-musl@15.4.6': + optional: true + '@next/swc-win32-arm64-msvc@14.2.13': optional: true + '@next/swc-win32-arm64-msvc@15.4.6': + optional: true + '@next/swc-win32-ia32-msvc@14.2.13': optional: true '@next/swc-win32-x64-msvc@14.2.13': optional: true + '@next/swc-win32-x64-msvc@15.4.6': + optional: true + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -10301,151 +11728,245 @@ snapshots: '@parcel/watcher-win32-x64': 2.5.1 optional: true + '@phosphor-icons/react@2.1.10(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + dependencies: + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + '@pkgjs/parseargs@0.11.0': optional: true '@pkgr/core@0.1.1': {} + '@pkgr/core@0.2.9': {} + '@radix-ui/number@1.0.1': dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.27.6 + + '@radix-ui/number@1.1.1': {} '@radix-ui/primitive@1.0.1': dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.27.6 - '@radix-ui/primitive@1.1.1': {} + '@radix-ui/primitive@1.1.3': {} - '@radix-ui/react-arrow@1.0.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-arrow@1.0.3(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.28.4 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@babel/runtime': 7.27.6 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react-dom': 19.1.9(@types/react@18.3.18) - '@radix-ui/react-collection@1.0.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@babel/runtime': 7.28.4 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.12 + '@types/react-dom': 19.1.9(@types/react@19.1.12) + + '@radix-ui/react-collection@1.0.3(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.27.6 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-context': 1.0.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-slot': 1.0.2(@types/react@18.3.18)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react-dom': 19.1.9(@types/react@18.3.18) - '@radix-ui/react-collection@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-collection@1.1.7(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.2(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.2.3(@types/react@18.3.18)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react-dom': 19.1.9(@types/react@18.3.18) + + '@radix-ui/react-collection@1.1.7(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.12)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.12 + '@types/react-dom': 19.1.9(@types/react@19.1.12) '@radix-ui/react-compose-refs@1.0.1(@types/react@18.3.18)(react@18.3.1)': dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.27.6 react: 18.3.1 optionalDependencies: '@types/react': 18.3.18 - '@radix-ui/react-compose-refs@1.1.1(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-compose-refs@1.1.2(@types/react@18.3.18)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.18 + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.12)(react@19.1.1)': + dependencies: + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.12 + '@radix-ui/react-context@1.0.1(@types/react@18.3.18)(react@18.3.1)': dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.27.6 react: 18.3.1 optionalDependencies: '@types/react': 18.3.18 - '@radix-ui/react-context@1.1.1(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-context@1.1.2(@types/react@18.3.18)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.18 + '@radix-ui/react-context@1.1.2(@types/react@19.1.12)(react@19.1.1)': + dependencies: + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.12 + '@radix-ui/react-direction@1.0.1(@types/react@18.3.18)(react@18.3.1)': dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.27.6 react: 18.3.1 optionalDependencies: '@types/react': 18.3.18 - '@radix-ui/react-direction@1.1.0(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-direction@1.1.1(@types/react@18.3.18)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.18 - '@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-direction@1.1.1(@types/react@19.1.12)(react@19.1.1)': dependencies: - '@babel/runtime': 7.28.4 + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.12 + + '@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.27.6 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.3.18)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react-dom': 19.1.9(@types/react@18.3.18) + + '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.12)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.12 + '@types/react-dom': 19.1.9(@types/react@19.1.12) '@radix-ui/react-focus-guards@1.0.1(@types/react@18.3.18)(react@18.3.1)': dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.27.6 react: 18.3.1 optionalDependencies: '@types/react': 18.3.18 - '@radix-ui/react-focus-scope@1.0.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-focus-guards@1.1.3(@types/react@19.1.12)(react@19.1.1)': + dependencies: + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.12 + + '@radix-ui/react-focus-scope@1.0.3(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.27.6 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.18)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react-dom': 19.1.9(@types/react@18.3.18) + + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.12)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.12 + '@types/react-dom': 19.1.9(@types/react@19.1.12) '@radix-ui/react-id@1.0.1(@types/react@18.3.18)(react@18.3.1)': dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.27.6 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.18)(react@18.3.1) react: 18.3.1 optionalDependencies: '@types/react': 18.3.18 - '@radix-ui/react-id@1.1.0(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-id@1.1.1(@types/react@18.3.18)(react@18.3.1)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.18)(react@18.3.1) react: 18.3.1 optionalDependencies: '@types/react': 18.3.18 - '@radix-ui/react-popper@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-id@1.1.1(@types/react@19.1.12)(react@19.1.1)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.12)(react@19.1.1) + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.12 + + '@radix-ui/react-label@2.1.7(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.12 + '@types/react-dom': 19.1.9(@types/react@19.1.12) + + '@radix-ui/react-popper@1.1.2(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.27.6 '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-arrow': 1.0.3(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-context': 1.0.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-rect': 1.0.1(@types/react@18.3.18)(react@18.3.1) @@ -10455,304 +11976,541 @@ snapshots: react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react-dom': 19.1.9(@types/react@18.3.18) + + '@radix-ui/react-popper@1.2.8(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@floating-ui/react-dom': 2.1.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/rect': 1.1.1 + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.12 + '@types/react-dom': 19.1.9(@types/react@19.1.12) - '@radix-ui/react-portal@1.0.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-portal@1.0.3(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.28.4 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@babel/runtime': 7.27.6 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react-dom': 19.1.9(@types/react@18.3.18) - '@radix-ui/react-primitive@1.0.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@babel/runtime': 7.28.4 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.12)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.12 + '@types/react-dom': 19.1.9(@types/react@19.1.12) + + '@radix-ui/react-presence@1.1.5(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.12)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.12 + '@types/react-dom': 19.1.9(@types/react@19.1.12) + + '@radix-ui/react-primitive@1.0.3(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.27.6 '@radix-ui/react-slot': 1.0.2(@types/react@18.3.18)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react-dom': 19.1.9(@types/react@18.3.18) - '@radix-ui/react-primitive@2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-slot': 1.1.2(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-slot': 1.2.3(@types/react@18.3.18)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react-dom': 19.1.9(@types/react@18.3.18) - '@radix-ui/react-roving-focus@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-collection': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-direction': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.12)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.12 + '@types/react-dom': 19.1.9(@types/react@19.1.12) + + '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-direction': 1.1.1(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.18)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react-dom': 19.1.9(@types/react@18.3.18) + + '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.12)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.12 + '@types/react-dom': 19.1.9(@types/react@19.1.12) + + '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@radix-ui/number': 1.1.1 + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.12)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.12 + '@types/react-dom': 19.1.9(@types/react@19.1.12) - '@radix-ui/react-select@1.2.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-select@1.2.2(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.27.6 '@radix-ui/number': 1.0.1 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-collection': 1.0.3(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-context': 1.0.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-direction': 1.0.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-id': 1.0.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-popper': 1.1.2(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.0.3(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-slot': 1.0.2(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.18)(react@18.3.1) '@radix-ui/react-use-previous': 1.0.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-remove-scroll: 2.5.5(@types/react@18.3.18)(react@18.3.1) optionalDependencies: '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react-dom': 19.1.9(@types/react@18.3.18) + + '@radix-ui/react-select@2.2.6(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@radix-ui/number': 1.1.1 + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + aria-hidden: 1.2.4 + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + react-remove-scroll: 2.7.1(@types/react@19.1.12)(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.12 + '@types/react-dom': 19.1.9(@types/react@19.1.12) - '@radix-ui/react-separator@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-separator@1.1.7(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react-dom': 19.1.9(@types/react@18.3.18) + + '@radix-ui/react-separator@1.1.7(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.12 + '@types/react-dom': 19.1.9(@types/react@19.1.12) '@radix-ui/react-slot@1.0.2(@types/react@18.3.18)(react@18.3.1)': dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.27.6 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.18)(react@18.3.1) react: 18.3.1 optionalDependencies: '@types/react': 18.3.18 - '@radix-ui/react-slot@1.1.2(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-slot@1.2.3(@types/react@18.3.18)(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.18)(react@18.3.1) react: 18.3.1 optionalDependencies: '@types/react': 18.3.18 - '@radix-ui/react-toggle-group@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-slot@1.2.3(@types/react@19.1.12)(react@19.1.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.12)(react@19.1.1) + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.12 + + '@radix-ui/react-toggle-group@1.1.11(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-direction': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-roving-focus': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-toggle': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-context': 1.1.2(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-direction': 1.1.1(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.18)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react-dom': 19.1.9(@types/react@18.3.18) + + '@radix-ui/react-toggle-group@1.1.11(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-context': 1.1.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.12)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.12 + '@types/react-dom': 19.1.9(@types/react@19.1.12) - '@radix-ui/react-toggle@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-toggle@1.1.10(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.18)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react-dom': 19.1.9(@types/react@18.3.18) - '@radix-ui/react-toolbar@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-toggle@1.1.10(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-direction': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-roving-focus': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-separator': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-toggle-group': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.12)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.12 + '@types/react-dom': 19.1.9(@types/react@19.1.12) + + '@radix-ui/react-toolbar@1.1.11(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-context': 1.1.2(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-direction': 1.1.1(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-separator': 1.1.7(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-toggle-group': 1.1.11(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react-dom': 19.1.9(@types/react@18.3.18) + + '@radix-ui/react-toolbar@1.1.11(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-context': 1.1.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-separator': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-toggle-group': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.12 + '@types/react-dom': 19.1.9(@types/react@19.1.12) '@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.3.18)(react@18.3.1)': dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.27.6 react: 18.3.1 optionalDependencies: '@types/react': 18.3.18 - '@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@18.3.18)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.18 + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.12)(react@19.1.1)': + dependencies: + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.12 + '@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.3.18)(react@18.3.1)': dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.27.6 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.18)(react@18.3.1) react: 18.3.1 optionalDependencies: '@types/react': 18.3.18 - '@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@18.3.18)(react@18.3.1)': + dependencies: + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.18)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.18 + + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.12)(react@19.1.1)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.12)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.12)(react@19.1.1) + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.12 + + '@radix-ui/react-use-effect-event@0.0.2(@types/react@18.3.18)(react@18.3.1)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.18)(react@18.3.1) react: 18.3.1 optionalDependencies: '@types/react': 18.3.18 + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.12)(react@19.1.1)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.12)(react@19.1.1) + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.12 + '@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.3.18)(react@18.3.1)': dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.27.6 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.18)(react@18.3.1) react: 18.3.1 optionalDependencies: '@types/react': 18.3.18 + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.12)(react@19.1.1)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.12)(react@19.1.1) + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.12 + '@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.3.18)(react@18.3.1)': dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.27.6 react: 18.3.1 optionalDependencies: '@types/react': 18.3.18 - '@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@18.3.18)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.18 + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.12)(react@19.1.1)': + dependencies: + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.12 + '@radix-ui/react-use-previous@1.0.1(@types/react@18.3.18)(react@18.3.1)': dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.27.6 react: 18.3.1 optionalDependencies: '@types/react': 18.3.18 + '@radix-ui/react-use-previous@1.1.1(@types/react@19.1.12)(react@19.1.1)': + dependencies: + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.12 + '@radix-ui/react-use-rect@1.0.1(@types/react@18.3.18)(react@18.3.1)': dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.27.6 '@radix-ui/rect': 1.0.1 react: 18.3.1 optionalDependencies: '@types/react': 18.3.18 + '@radix-ui/react-use-rect@1.1.1(@types/react@19.1.12)(react@19.1.1)': + dependencies: + '@radix-ui/rect': 1.1.1 + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.12 + '@radix-ui/react-use-size@1.0.1(@types/react@18.3.18)(react@18.3.1)': dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.27.6 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.18)(react@18.3.1) react: 18.3.1 optionalDependencies: '@types/react': 18.3.18 - '@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-use-size@1.1.1(@types/react@19.1.12)(react@19.1.1)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.12)(react@19.1.1) + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.12 + + '@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.28.4 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@babel/runtime': 7.27.6 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react-dom': 19.1.9(@types/react@18.3.18) + + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.12 + '@types/react-dom': 19.1.9(@types/react@19.1.12) '@radix-ui/rect@1.0.1': dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.27.6 + + '@radix-ui/rect@1.1.1': {} - '@rollup/pluginutils@5.1.4(rollup@4.50.1)': + '@rollup/pluginutils@5.1.4(rollup@4.44.1)': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 - picomatch: 4.0.3 + picomatch: 4.0.2 optionalDependencies: - rollup: 4.50.1 + rollup: 4.44.1 - '@rollup/rollup-android-arm-eabi@4.50.1': + '@rollup/rollup-android-arm-eabi@4.44.1': optional: true - '@rollup/rollup-android-arm64@4.50.1': + '@rollup/rollup-android-arm64@4.44.1': optional: true - '@rollup/rollup-darwin-arm64@4.50.1': + '@rollup/rollup-darwin-arm64@4.44.1': optional: true - '@rollup/rollup-darwin-x64@4.50.1': + '@rollup/rollup-darwin-x64@4.44.1': optional: true - '@rollup/rollup-freebsd-arm64@4.50.1': + '@rollup/rollup-freebsd-arm64@4.44.1': optional: true - '@rollup/rollup-freebsd-x64@4.50.1': + '@rollup/rollup-freebsd-x64@4.44.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.50.1': + '@rollup/rollup-linux-arm-gnueabihf@4.44.1': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.50.1': + '@rollup/rollup-linux-arm-musleabihf@4.44.1': optional: true - '@rollup/rollup-linux-arm64-gnu@4.50.1': + '@rollup/rollup-linux-arm64-gnu@4.44.1': optional: true - '@rollup/rollup-linux-arm64-musl@4.50.1': + '@rollup/rollup-linux-arm64-musl@4.44.1': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.50.1': + '@rollup/rollup-linux-loongarch64-gnu@4.44.1': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.50.1': + '@rollup/rollup-linux-powerpc64le-gnu@4.44.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.50.1': + '@rollup/rollup-linux-riscv64-gnu@4.44.1': optional: true - '@rollup/rollup-linux-riscv64-musl@4.50.1': + '@rollup/rollup-linux-riscv64-musl@4.44.1': optional: true - '@rollup/rollup-linux-s390x-gnu@4.50.1': + '@rollup/rollup-linux-s390x-gnu@4.44.1': optional: true - '@rollup/rollup-linux-x64-gnu@4.50.1': + '@rollup/rollup-linux-x64-gnu@4.44.1': optional: true - '@rollup/rollup-linux-x64-musl@4.50.1': + '@rollup/rollup-linux-x64-musl@4.44.1': optional: true - '@rollup/rollup-openharmony-arm64@4.50.1': + '@rollup/rollup-win32-arm64-msvc@4.44.1': optional: true - '@rollup/rollup-win32-arm64-msvc@4.50.1': + '@rollup/rollup-win32-ia32-msvc@4.44.1': optional: true - '@rollup/rollup-win32-ia32-msvc@4.50.1': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.50.1': + '@rollup/rollup-win32-x64-msvc@4.44.1': optional: true '@rtsao/scc@1.1.0': {} @@ -10832,11 +12590,11 @@ snapshots: transitivePeerDependencies: - '@types/node' - '@rushstack/heft-config-file@0.18.2(@types/node@22.13.1)': + '@rushstack/heft-config-file@0.18.2(@types/node@24.7.0)': dependencies: - '@rushstack/node-core-library': 5.13.1(@types/node@22.13.1) + '@rushstack/node-core-library': 5.13.1(@types/node@24.7.0) '@rushstack/rig-package': 0.5.3 - '@rushstack/terminal': 0.15.3(@types/node@22.13.1) + '@rushstack/terminal': 0.15.3(@types/node@24.7.0) '@ungap/structured-clone': 1.3.0 jsonpath-plus: 10.3.0 transitivePeerDependencies: @@ -10922,14 +12680,14 @@ snapshots: transitivePeerDependencies: - '@types/node' - '@rushstack/heft@0.73.6(@types/node@22.13.1)': + '@rushstack/heft@0.73.6(@types/node@24.7.0)': dependencies: - '@rushstack/heft-config-file': 0.18.2(@types/node@22.13.1) - '@rushstack/node-core-library': 5.13.1(@types/node@22.13.1) - '@rushstack/operation-graph': 0.2.41(@types/node@22.13.1) + '@rushstack/heft-config-file': 0.18.2(@types/node@24.7.0) + '@rushstack/node-core-library': 5.13.1(@types/node@24.7.0) + '@rushstack/operation-graph': 0.2.41(@types/node@24.7.0) '@rushstack/rig-package': 0.5.3 - '@rushstack/terminal': 0.15.3(@types/node@22.13.1) - '@rushstack/ts-command-line': 5.0.1(@types/node@22.13.1) + '@rushstack/terminal': 0.15.3(@types/node@24.7.0) + '@rushstack/ts-command-line': 5.0.1(@types/node@24.7.0) '@types/tapable': 1.0.6 fast-glob: 3.3.3 git-repo-info: 2.1.1 @@ -10944,7 +12702,7 @@ snapshots: ajv: 8.13.0 ajv-draft-04: 1.0.0(ajv@8.13.0) ajv-formats: 3.0.1(ajv@8.13.0) - fs-extra: 11.3.1 + fs-extra: 11.3.0 import-lazy: 4.0.0 jju: 1.4.0 resolve: 1.22.10 @@ -10952,25 +12710,25 @@ snapshots: optionalDependencies: '@types/node': 20.17.29 - '@rushstack/node-core-library@5.11.0(@types/node@22.13.1)': + '@rushstack/node-core-library@5.11.0(@types/node@24.7.0)': dependencies: ajv: 8.13.0 ajv-draft-04: 1.0.0(ajv@8.13.0) ajv-formats: 3.0.1(ajv@8.13.0) - fs-extra: 11.3.1 + fs-extra: 11.3.0 import-lazy: 4.0.0 jju: 1.4.0 resolve: 1.22.10 semver: 7.5.4 optionalDependencies: - '@types/node': 22.13.1 + '@types/node': 24.7.0 - '@rushstack/node-core-library@5.13.1(@types/node@20.17.29)': + '@rushstack/node-core-library@5.13.0(@types/node@20.17.29)': dependencies: ajv: 8.13.0 ajv-draft-04: 1.0.0(ajv@8.13.0) ajv-formats: 3.0.1(ajv@8.13.0) - fs-extra: 11.3.1 + fs-extra: 11.3.0 import-lazy: 4.0.0 jju: 1.4.0 resolve: 1.22.10 @@ -10978,31 +12736,31 @@ snapshots: optionalDependencies: '@types/node': 20.17.29 - '@rushstack/node-core-library@5.13.1(@types/node@22.13.1)': + '@rushstack/node-core-library@5.13.1(@types/node@20.17.29)': dependencies: ajv: 8.13.0 ajv-draft-04: 1.0.0(ajv@8.13.0) ajv-formats: 3.0.1(ajv@8.13.0) - fs-extra: 11.3.1 + fs-extra: 11.3.0 import-lazy: 4.0.0 jju: 1.4.0 resolve: 1.22.10 semver: 7.5.4 optionalDependencies: - '@types/node': 22.13.1 + '@types/node': 20.17.29 - '@rushstack/node-core-library@5.14.0(@types/node@20.17.29)': + '@rushstack/node-core-library@5.13.1(@types/node@24.7.0)': dependencies: ajv: 8.13.0 ajv-draft-04: 1.0.0(ajv@8.13.0) ajv-formats: 3.0.1(ajv@8.13.0) - fs-extra: 11.3.1 + fs-extra: 11.3.0 import-lazy: 4.0.0 jju: 1.4.0 resolve: 1.22.10 semver: 7.5.4 optionalDependencies: - '@types/node': 20.17.29 + '@types/node': 24.7.0 '@rushstack/operation-graph@0.2.41(@types/node@20.17.29)': dependencies: @@ -11011,12 +12769,12 @@ snapshots: optionalDependencies: '@types/node': 20.17.29 - '@rushstack/operation-graph@0.2.41(@types/node@22.13.1)': + '@rushstack/operation-graph@0.2.41(@types/node@24.7.0)': dependencies: - '@rushstack/node-core-library': 5.13.1(@types/node@22.13.1) - '@rushstack/terminal': 0.15.3(@types/node@22.13.1) + '@rushstack/node-core-library': 5.13.1(@types/node@24.7.0) + '@rushstack/terminal': 0.15.3(@types/node@24.7.0) optionalDependencies: - '@types/node': 22.13.1 + '@types/node': 24.7.0 '@rushstack/rig-package@0.5.3': dependencies: @@ -11030,12 +12788,12 @@ snapshots: optionalDependencies: '@types/node': 20.17.29 - '@rushstack/terminal@0.14.6(@types/node@22.13.1)': + '@rushstack/terminal@0.14.6(@types/node@24.7.0)': dependencies: - '@rushstack/node-core-library': 5.11.0(@types/node@22.13.1) + '@rushstack/node-core-library': 5.11.0(@types/node@24.7.0) supports-color: 8.1.1 optionalDependencies: - '@types/node': 22.13.1 + '@types/node': 24.7.0 '@rushstack/terminal@0.15.3(@types/node@20.17.29)': dependencies: @@ -11044,12 +12802,12 @@ snapshots: optionalDependencies: '@types/node': 20.17.29 - '@rushstack/terminal@0.15.3(@types/node@22.13.1)': + '@rushstack/terminal@0.15.3(@types/node@24.7.0)': dependencies: - '@rushstack/node-core-library': 5.13.1(@types/node@22.13.1) + '@rushstack/node-core-library': 5.13.1(@types/node@24.7.0) supports-color: 8.1.1 optionalDependencies: - '@types/node': 22.13.1 + '@types/node': 24.7.0 '@rushstack/tree-pattern@0.3.4': {} @@ -11062,9 +12820,9 @@ snapshots: transitivePeerDependencies: - '@types/node' - '@rushstack/ts-command-line@4.23.4(@types/node@22.13.1)': + '@rushstack/ts-command-line@4.23.4(@types/node@24.7.0)': dependencies: - '@rushstack/terminal': 0.14.6(@types/node@22.13.1) + '@rushstack/terminal': 0.14.6(@types/node@24.7.0) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 @@ -11080,9 +12838,9 @@ snapshots: transitivePeerDependencies: - '@types/node' - '@rushstack/ts-command-line@5.0.1(@types/node@22.13.1)': + '@rushstack/ts-command-line@5.0.1(@types/node@24.7.0)': dependencies: - '@rushstack/terminal': 0.15.3(@types/node@22.13.1) + '@rushstack/terminal': 0.15.3(@types/node@24.7.0) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 @@ -11275,9 +13033,9 @@ snapshots: memoizerific: 1.11.3 ts-dedent: 2.2.0 - '@storybook/addon-controls@7.6.20(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@storybook/addon-controls@7.6.20(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@storybook/blocks': 7.6.20(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@storybook/blocks': 7.6.20(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) lodash: 4.17.21 ts-dedent: 2.2.0 transitivePeerDependencies: @@ -11288,13 +13046,13 @@ snapshots: - react-dom - supports-color - '@storybook/addon-docs@7.6.20(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@storybook/addon-docs@7.6.20(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@jest/transform': 29.7.0 '@mdx-js/react': 2.3.0(react@18.3.1) - '@storybook/blocks': 7.6.20(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@storybook/blocks': 7.6.20(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/client-logger': 7.6.20 - '@storybook/components': 7.6.20(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@storybook/components': 7.6.20(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/csf-plugin': 7.6.20 '@storybook/csf-tools': 7.6.20 '@storybook/global': 5.0.0 @@ -11305,7 +13063,7 @@ snapshots: '@storybook/react-dom-shim': 7.6.20(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/theming': 7.6.20(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/types': 7.6.20 - fs-extra: 11.3.1 + fs-extra: 11.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) remark-external-links: 8.0.0 @@ -11317,12 +13075,12 @@ snapshots: - encoding - supports-color - '@storybook/addon-essentials@7.6.20(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@storybook/addon-essentials@7.6.20(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@storybook/addon-actions': 7.6.20 '@storybook/addon-backgrounds': 7.6.20 - '@storybook/addon-controls': 7.6.20(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@storybook/addon-docs': 7.6.20(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@storybook/addon-controls': 7.6.20(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@storybook/addon-docs': 7.6.20(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/addon-highlight': 7.6.20 '@storybook/addon-measure': 7.6.20 '@storybook/addon-outline': 7.6.20 @@ -11377,11 +13135,11 @@ snapshots: dependencies: memoizerific: 1.11.3 - '@storybook/blocks@7.6.20(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@storybook/blocks@7.6.20(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@storybook/channels': 7.6.20 '@storybook/client-logger': 7.6.20 - '@storybook/components': 7.6.20(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@storybook/components': 7.6.20(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/core-events': 7.6.20 '@storybook/csf': 0.1.13 '@storybook/docs-tools': 7.6.20 @@ -11425,14 +13183,14 @@ snapshots: esbuild-plugin-alias: 0.2.1 express: 4.21.2 find-cache-dir: 3.3.2 - fs-extra: 11.3.1 + fs-extra: 11.3.0 process: 0.11.10 util: 0.12.5 transitivePeerDependencies: - encoding - supports-color - '@storybook/builder-vite@7.6.20(typescript@5.8.2)(vite@6.3.6(@types/node@22.13.1)(jiti@2.4.2)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5))': + '@storybook/builder-vite@7.6.20(typescript@5.8.2)(vite@6.3.5(@types/node@24.7.0)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5))': dependencies: '@storybook/channels': 7.6.20 '@storybook/client-logger': 7.6.20 @@ -11447,10 +13205,10 @@ snapshots: es-module-lexer: 0.9.3 express: 4.21.2 find-cache-dir: 3.3.2 - fs-extra: 11.3.1 + fs-extra: 11.3.0 magic-string: 0.30.17 rollup: 3.29.5 - vite: 6.3.6(@types/node@22.13.1)(jiti@2.4.2)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5) + vite: 6.3.5(@types/node@24.7.0)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5) optionalDependencies: typescript: 5.8.2 transitivePeerDependencies: @@ -11491,7 +13249,7 @@ snapshots: execa: 5.1.1 express: 4.21.2 find-up: 5.0.0 - fs-extra: 11.3.1 + fs-extra: 11.3.0 get-npm-tarball-url: 2.1.0 get-port: 5.1.1 giget: 1.2.4 @@ -11503,7 +13261,7 @@ snapshots: prompts: 2.4.2 puppeteer-core: 2.1.1 read-pkg-up: 7.0.1 - semver: 7.7.2 + semver: 7.7.1 strip-json-comments: 3.1.1 tempy: 1.0.1 ts-dedent: 2.2.0 @@ -11537,10 +13295,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@storybook/components@7.6.20(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@storybook/components@7.6.20(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-select': 1.2.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-toolbar': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-select': 1.2.2(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-toolbar': 1.1.11(@types/react-dom@19.1.9(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/client-logger': 7.6.20 '@storybook/csf': 0.1.13 '@storybook/global': 5.0.0 @@ -11575,7 +13333,7 @@ snapshots: file-system-cache: 2.3.0 find-cache-dir: 3.3.2 find-up: 5.0.0 - fs-extra: 11.3.1 + fs-extra: 11.3.0 glob: 10.4.5 handlebars: 4.7.8 lazy-universal-dotenv: 4.0.0 @@ -11620,14 +13378,14 @@ snapshots: compression: 1.7.5 detect-port: 1.6.1 express: 4.21.2 - fs-extra: 11.3.1 + fs-extra: 11.3.0 globby: 11.1.0 lodash: 4.17.21 open: 8.4.2 pretty-hrtime: 1.0.3 prompts: 2.4.2 read-pkg-up: 7.0.1 - semver: 7.7.2 + semver: 7.7.1 telejson: 7.2.0 tiny-invariant: 1.3.3 ts-dedent: 2.2.0 @@ -11656,7 +13414,7 @@ snapshots: '@babel/types': 7.26.8 '@storybook/csf': 0.1.13 '@storybook/types': 7.6.20 - fs-extra: 11.3.1 + fs-extra: 11.3.0 recast: 0.23.9 ts-dedent: 2.2.0 transitivePeerDependencies: @@ -11735,18 +13493,18 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/react-vite@7.6.20(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.50.1)(typescript@5.8.2)(vite@6.3.6(@types/node@22.13.1)(jiti@2.4.2)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5))': + '@storybook/react-vite@7.6.20(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.44.1)(typescript@5.8.2)(vite@6.3.5(@types/node@24.7.0)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.0(typescript@5.8.2)(vite@6.3.6(@types/node@22.13.1)(jiti@2.4.2)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5)) - '@rollup/pluginutils': 5.1.4(rollup@4.50.1) - '@storybook/builder-vite': 7.6.20(typescript@5.8.2)(vite@6.3.6(@types/node@22.13.1)(jiti@2.4.2)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5)) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.0(typescript@5.8.2)(vite@6.3.5(@types/node@24.7.0)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5)) + '@rollup/pluginutils': 5.1.4(rollup@4.44.1) + '@storybook/builder-vite': 7.6.20(typescript@5.8.2)(vite@6.3.5(@types/node@24.7.0)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5)) '@storybook/react': 7.6.20(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.2) - '@vitejs/plugin-react': 3.1.0(vite@6.3.6(@types/node@22.13.1)(jiti@2.4.2)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5)) + '@vitejs/plugin-react': 3.1.0(vite@6.3.5(@types/node@24.7.0)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5)) magic-string: 0.30.17 react: 18.3.1 react-docgen: 7.1.1 react-dom: 18.3.1(react@18.3.1) - vite: 6.3.6(@types/node@22.13.1)(jiti@2.4.2)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5) + vite: 6.3.5(@types/node@24.7.0)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5) transitivePeerDependencies: - '@preact/preset-vite' - encoding @@ -11800,7 +13558,7 @@ snapshots: chalk: 4.1.2 detect-package-manager: 2.0.1 fetch-retry: 5.0.6 - fs-extra: 11.3.1 + fs-extra: 11.3.0 read-pkg-up: 7.0.1 transitivePeerDependencies: - encoding @@ -11931,15 +13689,91 @@ snapshots: '@swc/counter@0.1.3': {} + '@swc/helpers@0.5.15': + dependencies: + tslib: 2.8.1 + '@swc/helpers@0.5.5': dependencies: '@swc/counter': 0.1.3 tslib: 2.8.1 + '@tailwindcss/node@4.1.13': + dependencies: + '@jridgewell/remapping': 2.3.5 + enhanced-resolve: 5.18.3 + jiti: 2.5.1 + lightningcss: 1.30.1 + magic-string: 0.30.19 + source-map-js: 1.2.1 + tailwindcss: 4.1.13 + + '@tailwindcss/oxide-android-arm64@4.1.13': + optional: true + + '@tailwindcss/oxide-darwin-arm64@4.1.13': + optional: true + + '@tailwindcss/oxide-darwin-x64@4.1.13': + optional: true + + '@tailwindcss/oxide-freebsd-x64@4.1.13': + optional: true + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.13': + optional: true + + '@tailwindcss/oxide-linux-arm64-gnu@4.1.13': + optional: true + + '@tailwindcss/oxide-linux-arm64-musl@4.1.13': + optional: true + + '@tailwindcss/oxide-linux-x64-gnu@4.1.13': + optional: true + + '@tailwindcss/oxide-linux-x64-musl@4.1.13': + optional: true + + '@tailwindcss/oxide-wasm32-wasi@4.1.13': + optional: true + + '@tailwindcss/oxide-win32-arm64-msvc@4.1.13': + optional: true + + '@tailwindcss/oxide-win32-x64-msvc@4.1.13': + optional: true + + '@tailwindcss/oxide@4.1.13': + dependencies: + detect-libc: 2.0.4 + tar: 7.4.3 + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.1.13 + '@tailwindcss/oxide-darwin-arm64': 4.1.13 + '@tailwindcss/oxide-darwin-x64': 4.1.13 + '@tailwindcss/oxide-freebsd-x64': 4.1.13 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.13 + '@tailwindcss/oxide-linux-arm64-gnu': 4.1.13 + '@tailwindcss/oxide-linux-arm64-musl': 4.1.13 + '@tailwindcss/oxide-linux-x64-gnu': 4.1.13 + '@tailwindcss/oxide-linux-x64-musl': 4.1.13 + '@tailwindcss/oxide-wasm32-wasi': 4.1.13 + '@tailwindcss/oxide-win32-arm64-msvc': 4.1.13 + '@tailwindcss/oxide-win32-x64-msvc': 4.1.13 + + '@tailwindcss/postcss@4.1.13': + dependencies: + '@alloc/quick-lru': 5.2.0 + '@tailwindcss/node': 4.1.13 + '@tailwindcss/oxide': 4.1.13 + postcss: 8.5.6 + tailwindcss: 4.1.13 + '@testing-library/dom@10.1.0': dependencies: '@babel/code-frame': 7.27.1 - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.27.6 '@types/aria-query': 5.0.4 aria-query: 5.3.0 chalk: 4.1.2 @@ -11950,7 +13784,7 @@ snapshots: '@testing-library/dom@9.3.4': dependencies: '@babel/code-frame': 7.27.1 - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.27.6 '@types/aria-query': 5.0.4 aria-query: 5.1.3 chalk: 4.1.2 @@ -11960,7 +13794,7 @@ snapshots: '@testing-library/react@16.2.0(@testing-library/dom@10.1.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.27.6 '@testing-library/dom': 10.1.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -11972,6 +13806,18 @@ snapshots: dependencies: '@testing-library/dom': 9.3.4 + '@trivago/prettier-plugin-sort-imports@5.2.2(prettier@3.5.3)': + dependencies: + '@babel/generator': 7.26.8 + '@babel/parser': 7.26.8 + '@babel/traverse': 7.26.8 + '@babel/types': 7.26.8 + javascript-natural-sort: 0.7.1 + lodash: 4.17.21 + prettier: 3.5.3 + transitivePeerDependencies: + - supports-color + '@trysound/sax@0.2.0': {} '@types/archy@0.0.32': {} @@ -12004,15 +13850,15 @@ snapshots: '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 18.19.75 + '@types/node': 22.13.1 '@types/connect@3.4.38': dependencies: - '@types/node': 18.19.75 + '@types/node': 22.13.1 '@types/cross-spawn@6.0.6': dependencies: - '@types/node': 18.19.75 + '@types/node': 22.13.1 '@types/detect-port@1.3.5': {} @@ -12042,9 +13888,11 @@ snapshots: '@types/estree@1.0.8': {} + '@types/events@3.0.3': {} + '@types/express-serve-static-core@4.19.6': dependencies: - '@types/node': 18.19.75 + '@types/node': 22.13.1 '@types/qs': 6.9.18 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -12063,11 +13911,11 @@ snapshots: '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 18.19.75 + '@types/node': 22.13.1 '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 18.19.75 + '@types/node': 22.13.1 '@types/heft-jest@1.0.1': dependencies: @@ -12114,7 +13962,7 @@ snapshots: '@types/node-fetch@2.6.12': dependencies: - '@types/node': 18.19.75 + '@types/node': 22.13.1 form-data: 4.0.1 '@types/node@12.20.55': {} @@ -12130,7 +13978,10 @@ snapshots: '@types/node@22.13.1': dependencies: undici-types: 6.20.0 - optional: true + + '@types/node@24.7.0': + dependencies: + undici-types: 7.14.0 '@types/normalize-package-data@2.4.4': {} @@ -12150,11 +14001,24 @@ snapshots: dependencies: '@types/react': 18.3.18 + '@types/react-dom@19.1.9(@types/react@18.3.18)': + dependencies: + '@types/react': 18.3.18 + optional: true + + '@types/react-dom@19.1.9(@types/react@19.1.12)': + dependencies: + '@types/react': 19.1.12 + '@types/react@18.3.18': dependencies: '@types/prop-types': 15.7.14 csstype: 3.1.3 + '@types/react@19.1.12': + dependencies: + csstype: 3.1.3 + '@types/resolve@1.20.6': {} '@types/semver@7.5.8': {} @@ -12162,12 +14026,12 @@ snapshots: '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 18.19.75 + '@types/node': 22.13.1 '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 18.19.75 + '@types/node': 22.13.1 '@types/send': 0.17.4 '@types/stack-utils@2.0.2': {} @@ -12180,7 +14044,7 @@ snapshots: '@types/webpack@5.28.5': dependencies: - '@types/node': 18.19.75 + '@types/node': 22.13.1 tapable: 2.2.1 webpack: 5.97.1 transitivePeerDependencies: @@ -12217,6 +14081,24 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 7.18.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2) + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/type-utils': 7.18.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2) + '@typescript-eslint/utils': 7.18.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2) + '@typescript-eslint/visitor-keys': 7.18.0 + eslint: 9.35.0(jiti@2.5.1) + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 1.4.3(typescript@5.8.2) + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/eslint-plugin@8.1.0(@typescript-eslint/parser@8.1.0(eslint@8.57.1)(typescript@5.4.2))(eslint@8.57.1)(typescript@5.4.2)': dependencies: '@eslint-community/regexpp': 4.12.1 @@ -12235,15 +14117,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.29.0(@typescript-eslint/parser@8.29.0(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)(typescript@5.8.2)': + '@typescript-eslint/eslint-plugin@8.29.0(@typescript-eslint/parser@8.29.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.29.0(eslint@8.57.1)(typescript@5.8.2) + '@typescript-eslint/parser': 8.29.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2) '@typescript-eslint/scope-manager': 8.29.0 - '@typescript-eslint/type-utils': 8.29.0(eslint@8.57.1)(typescript@5.8.2) - '@typescript-eslint/utils': 8.29.0(eslint@8.57.1)(typescript@5.8.2) + '@typescript-eslint/type-utils': 8.29.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2) + '@typescript-eslint/utils': 8.29.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2) '@typescript-eslint/visitor-keys': 8.29.0 - eslint: 8.57.1 + eslint: 9.35.0(jiti@2.5.1) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 @@ -12252,13 +14134,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.4.2)': + '@typescript-eslint/parser@5.62.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.4.2)': dependencies: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.2) debug: 4.4.0(supports-color@5.5.0) - eslint: 8.57.1 + eslint: 9.35.0(jiti@2.5.1) optionalDependencies: typescript: 5.4.2 transitivePeerDependencies: @@ -12277,6 +14159,19 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/parser@7.18.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2)': + dependencies: + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.8.2) + '@typescript-eslint/visitor-keys': 7.18.0 + debug: 4.4.0(supports-color@5.5.0) + eslint: 9.35.0(jiti@2.5.1) + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/parser@8.1.0(eslint@8.57.1)(typescript@5.4.2)': dependencies: '@typescript-eslint/scope-manager': 8.1.0 @@ -12290,14 +14185,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.29.0(eslint@8.57.1)(typescript@5.8.2)': + '@typescript-eslint/parser@8.29.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2)': dependencies: '@typescript-eslint/scope-manager': 8.29.0 '@typescript-eslint/types': 8.29.0 '@typescript-eslint/typescript-estree': 8.29.0(typescript@5.8.2) '@typescript-eslint/visitor-keys': 8.29.0 debug: 4.4.0(supports-color@5.5.0) - eslint: 8.57.1 + eslint: 9.35.0(jiti@2.5.1) typescript: 5.8.2 transitivePeerDependencies: - supports-color @@ -12339,6 +14234,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/type-utils@7.18.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2)': + dependencies: + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.8.2) + '@typescript-eslint/utils': 7.18.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2) + debug: 4.4.0(supports-color@5.5.0) + eslint: 9.35.0(jiti@2.5.1) + ts-api-utils: 1.4.3(typescript@5.8.2) + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/type-utils@8.1.0(eslint@8.57.1)(typescript@5.4.2)': dependencies: '@typescript-eslint/typescript-estree': 8.1.0(typescript@5.4.2) @@ -12351,12 +14258,12 @@ snapshots: - eslint - supports-color - '@typescript-eslint/type-utils@8.29.0(eslint@8.57.1)(typescript@5.8.2)': + '@typescript-eslint/type-utils@8.29.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2)': dependencies: '@typescript-eslint/typescript-estree': 8.29.0(typescript@5.8.2) - '@typescript-eslint/utils': 8.29.0(eslint@8.57.1)(typescript@5.8.2) + '@typescript-eslint/utils': 8.29.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2) debug: 4.4.0(supports-color@5.5.0) - eslint: 8.57.1 + eslint: 9.35.0(jiti@2.5.1) ts-api-utils: 2.1.0(typescript@5.8.2) typescript: 5.8.2 transitivePeerDependencies: @@ -12379,7 +14286,7 @@ snapshots: debug: 4.4.0(supports-color@5.5.0) globby: 11.1.0 is-glob: 4.0.3 - semver: 7.7.2 + semver: 7.7.1 tsutils: 3.21.0(typescript@5.4.2) optionalDependencies: typescript: 5.4.2 @@ -12409,7 +14316,7 @@ snapshots: globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.7.2 + semver: 7.7.1 ts-api-utils: 1.4.3(typescript@5.8.2) optionalDependencies: typescript: 5.8.2 @@ -12424,7 +14331,7 @@ snapshots: globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.7.2 + semver: 7.7.1 ts-api-utils: 1.4.3(typescript@5.4.2) optionalDependencies: typescript: 5.4.2 @@ -12454,7 +14361,7 @@ snapshots: '@typescript-eslint/types': 6.19.1 '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.4.2) eslint: 8.57.1 - semver: 7.7.2 + semver: 7.7.1 transitivePeerDependencies: - supports-color - typescript @@ -12470,6 +14377,17 @@ snapshots: - supports-color - typescript + '@typescript-eslint/utils@7.18.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2)': + dependencies: + '@eslint-community/eslint-utils': 4.5.1(eslint@9.35.0(jiti@2.5.1)) + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.8.2) + eslint: 9.35.0(jiti@2.5.1) + transitivePeerDependencies: + - supports-color + - typescript + '@typescript-eslint/utils@8.1.0(eslint@8.57.1)(typescript@5.4.2)': dependencies: '@eslint-community/eslint-utils': 4.5.1(eslint@8.57.1) @@ -12481,13 +14399,13 @@ snapshots: - supports-color - typescript - '@typescript-eslint/utils@8.29.0(eslint@8.57.1)(typescript@5.8.2)': + '@typescript-eslint/utils@8.29.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2)': dependencies: - '@eslint-community/eslint-utils': 4.5.1(eslint@8.57.1) + '@eslint-community/eslint-utils': 4.5.1(eslint@9.35.0(jiti@2.5.1)) '@typescript-eslint/scope-manager': 8.29.0 '@typescript-eslint/types': 8.29.0 '@typescript-eslint/typescript-estree': 8.29.0(typescript@5.8.2) - eslint: 8.57.1 + eslint: 9.35.0(jiti@2.5.1) typescript: 5.8.2 transitivePeerDependencies: - supports-color @@ -12519,25 +14437,25 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@vitejs/plugin-react@3.1.0(vite@6.3.6(@types/node@22.13.1)(jiti@2.4.2)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5))': + '@vitejs/plugin-react@3.1.0(vite@6.3.5(@types/node@24.7.0)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5))': dependencies: '@babel/core': 7.26.8 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.8) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.8) magic-string: 0.27.0 react-refresh: 0.14.2 - vite: 6.3.6(@types/node@22.13.1)(jiti@2.4.2)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5) + vite: 6.3.5(@types/node@24.7.0)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@4.3.4(vite@6.3.6(@types/node@22.13.1)(jiti@2.4.2)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5))': + '@vitejs/plugin-react@4.3.4(vite@6.3.5(@types/node@24.7.0)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5))': dependencies: '@babel/core': 7.26.8 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.8) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.8) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 6.3.6(@types/node@22.13.1)(jiti@2.4.2)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5) + vite: 6.3.5(@types/node@24.7.0)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5) transitivePeerDependencies: - supports-color @@ -12548,13 +14466,13 @@ snapshots: chai: 5.1.2 tinyrainbow: 2.0.0 - '@vitest/mocker@3.0.5(vite@6.3.6(@types/node@22.13.1)(jiti@2.4.2)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5))': + '@vitest/mocker@3.0.5(vite@6.3.5(@types/node@24.7.0)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5))': dependencies: '@vitest/spy': 3.0.5 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.3.6(@types/node@22.13.1)(jiti@2.4.2)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5) + vite: 6.3.5(@types/node@24.7.0)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5) '@vitest/pretty-format@3.0.5': dependencies: @@ -12734,12 +14652,18 @@ snapshots: dependencies: acorn: 8.14.0 + acorn-jsx@5.3.2(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + acorn-walk@7.2.0: {} acorn@7.4.1: {} acorn@8.14.0: {} + acorn@8.15.0: {} + address@1.2.2: {} agent-base@5.1.1: {} @@ -13120,6 +15044,10 @@ snapshots: buffer-from@1.1.2: {} + buffer-image-size@0.6.4: + dependencies: + '@types/node': 22.13.1 + buffer@5.7.1: dependencies: base64-js: 1.5.1 @@ -13246,6 +15174,8 @@ snapshots: chownr@2.0.0: {} + chownr@3.0.0: {} + chrome-trace-event@1.0.4: {} ci-info@3.9.0: {} @@ -13256,6 +15186,10 @@ snapshots: cjs-module-lexer@1.4.3: {} + class-variance-authority@0.7.1: + dependencies: + clsx: 2.1.1 + clean-stack@2.2.0: {} cli-cursor@3.1.0: @@ -13298,6 +15232,18 @@ snapshots: color-name@1.1.4: {} + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.4 + optional: true + + color@4.2.3: + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + optional: true + colors@1.4.0: {} combined-stream@1.0.8: @@ -13469,6 +15415,10 @@ snapshots: dependencies: ms: 2.1.3 + debug@4.4.0: + dependencies: + ms: 2.1.3 + debug@4.4.0(supports-color@5.5.0): dependencies: ms: 2.1.3 @@ -13557,6 +15507,8 @@ snapshots: detect-libc@1.0.3: optional: true + detect-libc@2.0.4: {} + detect-newline@3.1.0: {} detect-node-es@1.1.0: {} @@ -13663,6 +15615,11 @@ snapshots: graceful-fs: 4.2.11 tapable: 2.2.1 + enhanced-resolve@5.18.3: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + enquirer@2.4.1: dependencies: ansi-colors: 4.1.3 @@ -13904,34 +15861,33 @@ snapshots: '@esbuild/win32-ia32': 0.24.2 '@esbuild/win32-x64': 0.24.2 - esbuild@0.25.9: + esbuild@0.25.5: optionalDependencies: - '@esbuild/aix-ppc64': 0.25.9 - '@esbuild/android-arm': 0.25.9 - '@esbuild/android-arm64': 0.25.9 - '@esbuild/android-x64': 0.25.9 - '@esbuild/darwin-arm64': 0.25.9 - '@esbuild/darwin-x64': 0.25.9 - '@esbuild/freebsd-arm64': 0.25.9 - '@esbuild/freebsd-x64': 0.25.9 - '@esbuild/linux-arm': 0.25.9 - '@esbuild/linux-arm64': 0.25.9 - '@esbuild/linux-ia32': 0.25.9 - '@esbuild/linux-loong64': 0.25.9 - '@esbuild/linux-mips64el': 0.25.9 - '@esbuild/linux-ppc64': 0.25.9 - '@esbuild/linux-riscv64': 0.25.9 - '@esbuild/linux-s390x': 0.25.9 - '@esbuild/linux-x64': 0.25.9 - '@esbuild/netbsd-arm64': 0.25.9 - '@esbuild/netbsd-x64': 0.25.9 - '@esbuild/openbsd-arm64': 0.25.9 - '@esbuild/openbsd-x64': 0.25.9 - '@esbuild/openharmony-arm64': 0.25.9 - '@esbuild/sunos-x64': 0.25.9 - '@esbuild/win32-arm64': 0.25.9 - '@esbuild/win32-ia32': 0.25.9 - '@esbuild/win32-x64': 0.25.9 + '@esbuild/aix-ppc64': 0.25.5 + '@esbuild/android-arm': 0.25.5 + '@esbuild/android-arm64': 0.25.5 + '@esbuild/android-x64': 0.25.5 + '@esbuild/darwin-arm64': 0.25.5 + '@esbuild/darwin-x64': 0.25.5 + '@esbuild/freebsd-arm64': 0.25.5 + '@esbuild/freebsd-x64': 0.25.5 + '@esbuild/linux-arm': 0.25.5 + '@esbuild/linux-arm64': 0.25.5 + '@esbuild/linux-ia32': 0.25.5 + '@esbuild/linux-loong64': 0.25.5 + '@esbuild/linux-mips64el': 0.25.5 + '@esbuild/linux-ppc64': 0.25.5 + '@esbuild/linux-riscv64': 0.25.5 + '@esbuild/linux-s390x': 0.25.5 + '@esbuild/linux-x64': 0.25.5 + '@esbuild/netbsd-arm64': 0.25.5 + '@esbuild/netbsd-x64': 0.25.5 + '@esbuild/openbsd-arm64': 0.25.5 + '@esbuild/openbsd-x64': 0.25.5 + '@esbuild/sunos-x64': 0.25.5 + '@esbuild/win32-arm64': 0.25.5 + '@esbuild/win32-ia32': 0.25.5 + '@esbuild/win32-x64': 0.25.5 escalade@3.2.0: {} @@ -13952,22 +15908,22 @@ snapshots: eslint-compat-utils@0.5.1(eslint@8.57.1): dependencies: eslint: 8.57.1 - semver: 7.7.2 + semver: 7.7.1 eslint-config-lk-custom@0.0.1: {} - eslint-config-next@12.3.4(eslint@8.57.1)(typescript@5.4.2): + eslint-config-next@12.3.4(eslint@9.35.0(jiti@2.5.1))(typescript@5.4.2): dependencies: '@next/eslint-plugin-next': 12.3.4 '@rushstack/eslint-patch': 1.10.5 - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.4.2) - eslint: 8.57.1 + '@typescript-eslint/parser': 5.62.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.4.2) + eslint: 9.35.0(jiti@2.5.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 2.7.1(eslint-plugin-import@2.31.0)(eslint@8.57.1) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.29.0(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1) - eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.1) - eslint-plugin-react: 7.37.4(eslint@8.57.1) - eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1) + eslint-import-resolver-typescript: 2.7.1(eslint-plugin-import@2.31.0)(eslint@9.35.0(jiti@2.5.1)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.29.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2))(eslint@9.35.0(jiti@2.5.1)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.35.0(jiti@2.5.1)) + eslint-plugin-react: 7.37.4(eslint@9.35.0(jiti@2.5.1)) + eslint-plugin-react-hooks: 4.6.2(eslint@9.35.0(jiti@2.5.1)) optionalDependencies: typescript: 5.4.2 transitivePeerDependencies: @@ -13994,10 +15950,34 @@ snapshots: - eslint-plugin-import-x - supports-color + eslint-config-next@15.4.6(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2): + dependencies: + '@next/eslint-plugin-next': 15.4.6 + '@rushstack/eslint-patch': 1.10.5 + '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2) + '@typescript-eslint/parser': 7.18.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2) + eslint: 9.35.0(jiti@2.5.1) + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@9.35.0(jiti@2.5.1)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2))(eslint-import-resolver-typescript@3.7.0)(eslint@9.35.0(jiti@2.5.1)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.35.0(jiti@2.5.1)) + eslint-plugin-react: 7.37.4(eslint@9.35.0(jiti@2.5.1)) + eslint-plugin-react-hooks: 5.1.0(eslint@9.35.0(jiti@2.5.1)) + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - eslint-import-resolver-webpack + - eslint-plugin-import-x + - supports-color + eslint-config-prettier@10.0.1(eslint@8.57.1): dependencies: eslint: 8.57.1 + eslint-config-prettier@10.1.8(eslint@9.35.0(jiti@2.5.1)): + dependencies: + eslint: 9.35.0(jiti@2.5.1) + eslint-config-standard-react@13.0.0(eslint-plugin-react-hooks@5.1.0(eslint@8.57.1))(eslint-plugin-react@7.37.4(eslint@8.57.1))(eslint@8.57.1): dependencies: eslint: 8.57.1 @@ -14025,11 +16005,11 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@2.7.1(eslint-plugin-import@2.31.0)(eslint@8.57.1): + eslint-import-resolver-typescript@2.7.1(eslint-plugin-import@2.31.0)(eslint@9.35.0(jiti@2.5.1)): dependencies: debug: 4.4.0(supports-color@5.5.0) - eslint: 8.57.1 - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.29.0(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1) + eslint: 9.35.0(jiti@2.5.1) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.29.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2))(eslint@9.35.0(jiti@2.5.1)) glob: 7.2.3 is-glob: 4.0.3 resolve: 1.22.10 @@ -14041,7 +16021,7 @@ snapshots: dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.0(supports-color@5.5.0) - enhanced-resolve: 5.18.1 + enhanced-resolve: 5.18.3 eslint: 8.57.1 fast-glob: 3.3.3 get-tsconfig: 4.10.0 @@ -14053,6 +16033,22 @@ snapshots: transitivePeerDependencies: - supports-color + eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0)(eslint@9.35.0(jiti@2.5.1)): + dependencies: + '@nolyfill/is-core-module': 1.0.39 + debug: 4.4.0(supports-color@5.5.0) + enhanced-resolve: 5.18.3 + eslint: 9.35.0(jiti@2.5.1) + fast-glob: 3.3.3 + get-tsconfig: 4.10.0 + is-bun-module: 1.3.0 + is-glob: 4.0.3 + stable-hash: 0.0.4 + optionalDependencies: + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2))(eslint@9.35.0(jiti@2.5.1)) + transitivePeerDependencies: + - supports-color + eslint-module-utils@2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@8.57.1): dependencies: debug: 3.2.7 @@ -14064,12 +16060,23 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.29.0(eslint@8.57.1)(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1): + eslint-module-utils@2.12.0(@typescript-eslint/parser@7.18.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.35.0(jiti@2.5.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.29.0(eslint@8.57.1)(typescript@5.8.2) - eslint: 8.57.1 + '@typescript-eslint/parser': 7.18.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2) + eslint: 9.35.0(jiti@2.5.1) + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@9.35.0(jiti@2.5.1)) + transitivePeerDependencies: + - supports-color + + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.29.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 8.29.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2) + eslint: 9.35.0(jiti@2.5.1) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color @@ -14139,7 +16146,66 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.29.0(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2))(eslint-import-resolver-typescript@3.7.0)(eslint@9.35.0(jiti@2.5.1)): + dependencies: + '@rtsao/scc': 1.1.0 + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.5 + array.prototype.flat: 1.3.3 + array.prototype.flatmap: 1.3.3 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 9.35.0(jiti@2.5.1) + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.35.0(jiti@2.5.1)) + hasown: 2.0.2 + is-core-module: 2.16.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.1 + semver: 6.3.1 + string.prototype.trimend: 1.0.9 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 7.18.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + + eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2))(eslint@9.35.0(jiti@2.5.1)): + dependencies: + '@rtsao/scc': 1.1.0 + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.5 + array.prototype.flat: 1.3.3 + array.prototype.flatmap: 1.3.3 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 9.35.0(jiti@2.5.1) + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.35.0(jiti@2.5.1)) + hasown: 2.0.2 + is-core-module: 2.16.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.1 + semver: 6.3.1 + string.prototype.trimend: 1.0.9 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 7.18.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + optional: true + + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.29.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2))(eslint@9.35.0(jiti@2.5.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -14148,9 +16214,9 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.57.1 + eslint: 9.35.0(jiti@2.5.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.29.0(eslint@8.57.1)(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.29.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -14162,7 +16228,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.29.0(eslint@8.57.1)(typescript@5.8.2) + '@typescript-eslint/parser': 8.29.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -14187,6 +16253,25 @@ snapshots: safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 + eslint-plugin-jsx-a11y@6.10.2(eslint@9.35.0(jiti@2.5.1)): + dependencies: + aria-query: 5.3.2 + array-includes: 3.1.8 + array.prototype.flatmap: 1.3.3 + ast-types-flow: 0.0.8 + axe-core: 4.10.2 + axobject-query: 4.1.0 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + eslint: 9.35.0(jiti@2.5.1) + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.9 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + safe-regex-test: 1.1.0 + string.prototype.includes: 2.0.1 + eslint-plugin-n@17.15.1(eslint@8.57.1): dependencies: '@eslint-community/eslint-utils': 4.5.1(eslint@8.57.1) @@ -14197,7 +16282,7 @@ snapshots: globals: 15.14.0 ignore: 5.3.2 minimatch: 9.0.5 - semver: 7.7.2 + semver: 7.7.1 eslint-plugin-prettier@5.2.3(@types/eslint@9.6.1)(eslint-config-prettier@10.0.1(eslint@8.57.1))(eslint@8.57.1)(prettier@3.5.3): dependencies: @@ -14209,6 +16294,16 @@ snapshots: '@types/eslint': 9.6.1 eslint-config-prettier: 10.0.1(eslint@8.57.1) + eslint-plugin-prettier@5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1))(prettier@3.5.3): + dependencies: + eslint: 9.35.0(jiti@2.5.1) + prettier: 3.5.3 + prettier-linter-helpers: 1.0.0 + synckit: 0.11.11 + optionalDependencies: + '@types/eslint': 9.6.1 + eslint-config-prettier: 10.1.8(eslint@9.35.0(jiti@2.5.1)) + eslint-plugin-promise@6.1.1(eslint@8.57.1): dependencies: eslint: 8.57.1 @@ -14218,14 +16313,18 @@ snapshots: '@eslint-community/eslint-utils': 4.5.1(eslint@8.57.1) eslint: 8.57.1 - eslint-plugin-react-hooks@4.6.2(eslint@8.57.1): + eslint-plugin-react-hooks@4.6.2(eslint@9.35.0(jiti@2.5.1)): dependencies: - eslint: 8.57.1 + eslint: 9.35.0(jiti@2.5.1) eslint-plugin-react-hooks@5.1.0(eslint@8.57.1): dependencies: eslint: 8.57.1 + eslint-plugin-react-hooks@5.1.0(eslint@9.35.0(jiti@2.5.1)): + dependencies: + eslint: 9.35.0(jiti@2.5.1) + eslint-plugin-react@7.33.2(eslint@8.57.1): dependencies: array-includes: 3.1.8 @@ -14268,6 +16367,28 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 + eslint-plugin-react@7.37.4(eslint@9.35.0(jiti@2.5.1)): + dependencies: + array-includes: 3.1.8 + array.prototype.findlast: 1.2.5 + array.prototype.flatmap: 1.3.3 + array.prototype.tosorted: 1.1.4 + doctrine: 2.1.0 + es-iterator-helpers: 1.2.1 + eslint: 9.35.0(jiti@2.5.1) + estraverse: 5.3.0 + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.8 + object.fromentries: 2.0.8 + object.values: 1.2.1 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.12 + string.prototype.repeat: 1.0.0 + eslint-plugin-standard@5.0.0(eslint@8.57.1): dependencies: eslint: 8.57.1 @@ -14293,10 +16414,17 @@ snapshots: esrecurse: 4.3.0 estraverse: 5.3.0 + eslint-scope@8.4.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + eslint-visitor-keys@3.4.3: {} eslint-visitor-keys@4.2.0: {} + eslint-visitor-keys@4.2.1: {} + eslint@8.57.1: dependencies: '@eslint-community/eslint-utils': 4.5.1(eslint@8.57.1) @@ -14340,6 +16468,54 @@ snapshots: transitivePeerDependencies: - supports-color + eslint@9.35.0(jiti@2.5.1): + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.35.0(jiti@2.5.1)) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.21.0 + '@eslint/config-helpers': 0.3.1 + '@eslint/core': 0.15.2 + '@eslint/eslintrc': 3.3.1 + '@eslint/js': 9.35.0 + '@eslint/plugin-kit': 0.3.5 + '@humanfs/node': 0.16.7 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.0(supports-color@5.5.0) + escape-string-regexp: 4.0.0 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 2.5.1 + transitivePeerDependencies: + - supports-color + + espree@10.4.0: + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + eslint-visitor-keys: 4.2.1 + espree@9.6.1: dependencies: acorn: 8.14.0 @@ -14491,9 +16667,9 @@ snapshots: dependencies: pend: 1.2.0 - fdir@6.5.0(picomatch@4.0.3): + fdir@6.4.6(picomatch@4.0.2): optionalDependencies: - picomatch: 4.0.3 + picomatch: 4.0.2 fetch-retry@5.0.6: {} @@ -14501,6 +16677,10 @@ snapshots: dependencies: flat-cache: 3.2.0 + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + file-system-cache@2.3.0: dependencies: fs-extra: 11.1.1 @@ -14568,6 +16748,11 @@ snapshots: keyv: 4.5.4 rimraf: 3.0.2 + flat-cache@4.0.1: + dependencies: + flatted: 3.3.2 + keyv: 4.5.4 + flatted@3.3.2: {} flow-parser@0.259.1: {} @@ -14589,6 +16774,15 @@ snapshots: forwarded@0.2.0: {} + framer-motion@12.23.12(react-dom@19.1.1(react@19.1.1))(react@19.1.1): + dependencies: + motion-dom: 12.23.12 + motion-utils: 12.23.6 + tslib: 2.8.1 + optionalDependencies: + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + fresh@0.5.2: {} fs-constants@1.0.0: {} @@ -14596,13 +16790,13 @@ snapshots: fs-extra@11.1.1: dependencies: graceful-fs: 4.2.11 - jsonfile: 6.2.0 + jsonfile: 6.1.0 universalify: 2.0.1 - fs-extra@11.3.1: + fs-extra@11.3.0: dependencies: graceful-fs: 4.2.11 - jsonfile: 6.2.0 + jsonfile: 6.1.0 universalify: 2.0.1 fs-extra@7.0.1: @@ -14767,6 +16961,8 @@ snapshots: dependencies: type-fest: 0.20.2 + globals@14.0.0: {} + globals@15.14.0: {} globals@16.0.0: {} @@ -14874,7 +17070,7 @@ snapshots: http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.3 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -14888,7 +17084,7 @@ snapshots: https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.3 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -14961,6 +17157,9 @@ snapshots: is-arrayish@0.2.1: {} + is-arrayish@0.3.4: + optional: true + is-async-function@2.1.1: dependencies: async-function: 1.0.0 @@ -15178,6 +17377,8 @@ snapshots: filelist: 1.0.4 minimatch: 3.1.2 + javascript-natural-sort@0.7.1: {} + jest-changed-files@29.7.0: dependencies: execa: 5.1.1 @@ -15190,7 +17391,7 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.75 + '@types/node': 22.13.1 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.3 @@ -15210,7 +17411,7 @@ snapshots: - babel-plugin-macros - supports-color - jest-config@29.5.0(@types/node@18.19.75): + jest-config@29.5.0(@types/node@20.17.29): dependencies: '@babel/core': 7.26.8 '@jest/test-sequencer': 29.7.0 @@ -15235,12 +17436,12 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 18.19.75 + '@types/node': 20.17.29 transitivePeerDependencies: - babel-plugin-macros - supports-color - jest-config@29.5.0(@types/node@20.17.29): + jest-config@29.5.0(@types/node@22.13.1): dependencies: '@babel/core': 7.26.8 '@jest/test-sequencer': 29.7.0 @@ -15265,7 +17466,7 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 20.17.29 + '@types/node': 22.13.1 transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -15294,7 +17495,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.75 + '@types/node': 22.13.1 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -15303,7 +17504,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.75 + '@types/node': 22.13.1 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -15313,7 +17514,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 18.19.75 + '@types/node': 22.13.1 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -15352,12 +17553,12 @@ snapshots: jest-mock@27.5.1: dependencies: '@jest/types': 27.5.1 - '@types/node': 18.19.75 + '@types/node': 22.13.1 jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 18.19.75 + '@types/node': 22.13.1 jest-util: 29.7.0 jest-pnp-resolver@1.2.3(jest-resolve@29.5.0): @@ -15408,7 +17609,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.75 + '@types/node': 22.13.1 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -15436,7 +17637,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.75 + '@types/node': 22.13.1 chalk: 4.1.2 cjs-module-lexer: 1.4.3 collect-v8-coverage: 1.0.2 @@ -15478,7 +17679,7 @@ snapshots: jest-util: 29.7.0 natural-compare: 1.4.0 pretty-format: 29.7.0 - semver: 7.7.2 + semver: 7.7.1 transitivePeerDependencies: - supports-color @@ -15510,7 +17711,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 18.19.75 + '@types/node': 22.13.1 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -15529,7 +17730,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.75 + '@types/node': 22.13.1 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -15538,19 +17739,21 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 18.19.75 + '@types/node': 22.13.1 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 18.19.75 + '@types/node': 22.13.1 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 jiti@2.4.2: {} + jiti@2.5.1: {} + jju@1.4.0: {} jora@1.0.0-beta.8: @@ -15559,6 +17762,8 @@ snapshots: jose@5.8.0: {} + jose@6.1.0: {} + joycon@3.1.1: {} js-tokens@4.0.0: {} @@ -15653,7 +17858,7 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 - jsonfile@6.2.0: + jsonfile@6.1.0: dependencies: universalify: 2.0.1 optionalDependencies: @@ -15707,16 +17912,62 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 + lightningcss-darwin-arm64@1.30.1: + optional: true + + lightningcss-darwin-x64@1.30.1: + optional: true + + lightningcss-freebsd-x64@1.30.1: + optional: true + + lightningcss-linux-arm-gnueabihf@1.30.1: + optional: true + + lightningcss-linux-arm64-gnu@1.30.1: + optional: true + + lightningcss-linux-arm64-musl@1.30.1: + optional: true + + lightningcss-linux-x64-gnu@1.30.1: + optional: true + + lightningcss-linux-x64-musl@1.30.1: + optional: true + + lightningcss-win32-arm64-msvc@1.30.1: + optional: true + + lightningcss-win32-x64-msvc@1.30.1: + optional: true + + lightningcss@1.30.1: + dependencies: + detect-libc: 2.0.4 + optionalDependencies: + lightningcss-darwin-arm64: 1.30.1 + lightningcss-darwin-x64: 1.30.1 + lightningcss-freebsd-x64: 1.30.1 + lightningcss-linux-arm-gnueabihf: 1.30.1 + lightningcss-linux-arm64-gnu: 1.30.1 + lightningcss-linux-arm64-musl: 1.30.1 + lightningcss-linux-x64-gnu: 1.30.1 + lightningcss-linux-x64-musl: 1.30.1 + lightningcss-win32-arm64-msvc: 1.30.1 + lightningcss-win32-x64-msvc: 1.30.1 + lilconfig@3.1.3: {} lines-and-columns@1.2.4: {} - livekit-client@2.15.1(@types/dom-mediacapture-record@1.0.22): + livekit-client@2.15.8(@types/dom-mediacapture-record@1.0.22): dependencies: '@livekit/mutex': 1.1.1 - '@livekit/protocol': 1.39.3 + '@livekit/protocol': 1.42.0 '@types/dom-mediacapture-record': 1.0.22 events: 3.3.0 + jose: 6.1.0 loglevel: 1.9.2 sdp-transform: 2.15.0 ts-debounce: 4.0.0 @@ -15724,6 +17975,13 @@ snapshots: typed-emitter: 2.1.0 webrtc-adapter: 9.0.3 + livekit-server-sdk@2.13.3: + dependencies: + '@bufbuild/protobuf': 1.10.1 + '@livekit/protocol': 1.39.3 + camelcase-keys: 9.1.3 + jose: 5.8.0 + livekit-server-sdk@2.6.1: dependencies: '@livekit/protocol': 1.39.3 @@ -15811,6 +18069,10 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 + magic-string@0.30.19: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + make-dir@2.1.0: dependencies: pify: 4.0.1 @@ -15885,6 +18147,8 @@ snapshots: mime@2.6.0: {} + mime@4.0.7: {} + mimic-fn@2.1.0: {} min-indent@1.0.1: {} @@ -15928,6 +18192,10 @@ snapshots: minipass: 3.3.6 yallist: 4.0.0 + minizlib@3.0.2: + dependencies: + minipass: 7.1.2 + mkdirp-classic@0.5.3: {} mkdirp@0.5.6: @@ -15936,6 +18204,8 @@ snapshots: mkdirp@1.0.4: {} + mkdirp@3.0.1: {} + mlly@1.7.4: dependencies: acorn: 8.14.0 @@ -15945,6 +18215,20 @@ snapshots: modern-normalize@3.0.1: {} + motion-dom@12.23.12: + dependencies: + motion-utils: 12.23.6 + + motion-utils@12.23.6: {} + + motion@12.23.12(react-dom@19.1.1(react@19.1.1))(react@19.1.1): + dependencies: + framer-motion: 12.23.12(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + tslib: 2.8.1 + optionalDependencies: + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + mri@1.2.0: {} ms@2.0.0: {} @@ -15975,6 +18259,11 @@ snapshots: neo-async@2.6.2: {} + next-themes@0.4.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1): + dependencies: + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + next@14.2.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.84.0): dependencies: '@next/env': 14.2.13 @@ -16001,6 +18290,30 @@ snapshots: - '@babel/core' - babel-plugin-macros + next@15.4.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.84.0): + dependencies: + '@next/env': 15.4.6 + '@swc/helpers': 0.5.15 + caniuse-lite: 1.0.30001699 + postcss: 8.4.31 + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + styled-jsx: 5.1.6(react@19.1.1) + optionalDependencies: + '@next/swc-darwin-arm64': 15.4.6 + '@next/swc-darwin-x64': 15.4.6 + '@next/swc-linux-arm64-gnu': 15.4.6 + '@next/swc-linux-arm64-musl': 15.4.6 + '@next/swc-linux-x64-gnu': 15.4.6 + '@next/swc-linux-x64-musl': 15.4.6 + '@next/swc-win32-arm64-msvc': 15.4.6 + '@next/swc-win32-x64-msvc': 15.4.6 + sass: 1.84.0 + sharp: 0.34.3 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + no-case@3.0.4: dependencies: lower-case: 2.0.2 @@ -16030,7 +18343,7 @@ snapshots: ignore-by-default: 1.0.1 minimatch: 3.1.2 pstree.remy: 1.1.8 - semver: 7.7.2 + semver: 7.7.1 simple-update-notifier: 2.0.0 supports-color: 5.5.0 touch: 3.1.1 @@ -16297,7 +18610,7 @@ snapshots: picomatch@2.3.1: {} - picomatch@4.0.3: {} + picomatch@4.0.2: {} pify@2.3.0: {} @@ -16329,20 +18642,20 @@ snapshots: polished@4.3.1: dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.27.6 possible-typed-array-names@1.1.0: {} - postcss-cli@11.0.0(jiti@2.4.2)(postcss@8.5.6): + postcss-cli@11.0.0(jiti@2.5.1)(postcss@8.5.6): dependencies: chokidar: 3.6.0 dependency-graph: 0.11.0 - fs-extra: 11.3.1 + fs-extra: 11.3.0 get-stdin: 9.0.0 globby: 14.0.1 picocolors: 1.1.1 postcss: 8.5.6 - postcss-load-config: 5.0.2(jiti@2.4.2)(postcss@8.5.6) + postcss-load-config: 5.0.2(jiti@2.5.1)(postcss@8.5.6) postcss-reporter: 7.0.5(postcss@8.5.6) pretty-hrtime: 1.0.3 read-cache: 1.0.0 @@ -16351,19 +18664,19 @@ snapshots: transitivePeerDependencies: - jiti - postcss-load-config@5.0.2(jiti@2.4.2)(postcss@8.5.6): + postcss-load-config@5.0.2(jiti@2.5.1)(postcss@8.5.6): dependencies: lilconfig: 3.1.3 yaml: 2.4.5 optionalDependencies: - jiti: 2.4.2 + jiti: 2.5.1 postcss: 8.5.6 - postcss-load-config@6.0.1(jiti@2.4.2)(postcss@8.5.6)(tsx@4.19.2)(yaml@2.4.5): + postcss-load-config@6.0.1(jiti@2.5.1)(postcss@8.5.6)(tsx@4.19.2)(yaml@2.4.5): dependencies: lilconfig: 3.1.3 optionalDependencies: - jiti: 2.4.2 + jiti: 2.5.1 postcss: 8.5.6 tsx: 4.19.2 yaml: 2.4.5 @@ -16441,6 +18754,12 @@ snapshots: dependencies: fast-diff: 1.3.0 + prettier-plugin-tailwindcss@0.6.14(@trivago/prettier-plugin-sort-imports@5.2.2(prettier@3.5.3))(prettier@3.5.3): + dependencies: + prettier: 3.5.3 + optionalDependencies: + '@trivago/prettier-plugin-sort-imports': 5.2.2(prettier@3.5.3) + prettier@2.8.8: {} prettier@3.5.3: {} @@ -16581,6 +18900,11 @@ snapshots: react: 18.3.1 scheduler: 0.23.2 + react-dom@19.1.1(react@19.1.1): + dependencies: + react: 19.1.1 + scheduler: 0.26.0 + react-element-to-jsx-string@15.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@base2/pretty-print-object': 1.0.1 @@ -16607,6 +18931,14 @@ snapshots: optionalDependencies: '@types/react': 18.3.18 + react-remove-scroll-bar@2.3.8(@types/react@19.1.12)(react@19.1.1): + dependencies: + react: 19.1.1 + react-style-singleton: 2.2.3(@types/react@19.1.12)(react@19.1.1) + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.1.12 + react-remove-scroll@2.5.5(@types/react@18.3.18)(react@18.3.1): dependencies: react: 18.3.1 @@ -16618,6 +18950,17 @@ snapshots: optionalDependencies: '@types/react': 18.3.18 + react-remove-scroll@2.7.1(@types/react@19.1.12)(react@19.1.1): + dependencies: + react: 19.1.1 + react-remove-scroll-bar: 2.3.8(@types/react@19.1.12)(react@19.1.1) + react-style-singleton: 2.2.3(@types/react@19.1.12)(react@19.1.1) + tslib: 2.8.1 + use-callback-ref: 1.3.3(@types/react@19.1.12)(react@19.1.1) + use-sidecar: 1.1.3(@types/react@19.1.12)(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.12 + react-style-singleton@2.2.3(@types/react@18.3.18)(react@18.3.1): dependencies: get-nonce: 1.0.1 @@ -16626,10 +18969,20 @@ snapshots: optionalDependencies: '@types/react': 18.3.18 + react-style-singleton@2.2.3(@types/react@19.1.12)(react@19.1.1): + dependencies: + get-nonce: 1.0.1 + react: 19.1.1 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.1.12 + react@18.3.1: dependencies: loose-envify: 1.4.0 + react@19.1.1: {} + read-cache@1.0.0: dependencies: pify: 2.3.0 @@ -16703,7 +19056,7 @@ snapshots: regenerator-transform@0.15.2: dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.27.6 regexp.prototype.flags@1.5.4: dependencies: @@ -16797,31 +19150,30 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - rollup@4.50.1: + rollup@4.44.1: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.50.1 - '@rollup/rollup-android-arm64': 4.50.1 - '@rollup/rollup-darwin-arm64': 4.50.1 - '@rollup/rollup-darwin-x64': 4.50.1 - '@rollup/rollup-freebsd-arm64': 4.50.1 - '@rollup/rollup-freebsd-x64': 4.50.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.50.1 - '@rollup/rollup-linux-arm-musleabihf': 4.50.1 - '@rollup/rollup-linux-arm64-gnu': 4.50.1 - '@rollup/rollup-linux-arm64-musl': 4.50.1 - '@rollup/rollup-linux-loongarch64-gnu': 4.50.1 - '@rollup/rollup-linux-ppc64-gnu': 4.50.1 - '@rollup/rollup-linux-riscv64-gnu': 4.50.1 - '@rollup/rollup-linux-riscv64-musl': 4.50.1 - '@rollup/rollup-linux-s390x-gnu': 4.50.1 - '@rollup/rollup-linux-x64-gnu': 4.50.1 - '@rollup/rollup-linux-x64-musl': 4.50.1 - '@rollup/rollup-openharmony-arm64': 4.50.1 - '@rollup/rollup-win32-arm64-msvc': 4.50.1 - '@rollup/rollup-win32-ia32-msvc': 4.50.1 - '@rollup/rollup-win32-x64-msvc': 4.50.1 + '@rollup/rollup-android-arm-eabi': 4.44.1 + '@rollup/rollup-android-arm64': 4.44.1 + '@rollup/rollup-darwin-arm64': 4.44.1 + '@rollup/rollup-darwin-x64': 4.44.1 + '@rollup/rollup-freebsd-arm64': 4.44.1 + '@rollup/rollup-freebsd-x64': 4.44.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.44.1 + '@rollup/rollup-linux-arm-musleabihf': 4.44.1 + '@rollup/rollup-linux-arm64-gnu': 4.44.1 + '@rollup/rollup-linux-arm64-musl': 4.44.1 + '@rollup/rollup-linux-loongarch64-gnu': 4.44.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.44.1 + '@rollup/rollup-linux-riscv64-gnu': 4.44.1 + '@rollup/rollup-linux-riscv64-musl': 4.44.1 + '@rollup/rollup-linux-s390x-gnu': 4.44.1 + '@rollup/rollup-linux-x64-gnu': 4.44.1 + '@rollup/rollup-linux-x64-musl': 4.44.1 + '@rollup/rollup-win32-arm64-msvc': 4.44.1 + '@rollup/rollup-win32-ia32-msvc': 4.44.1 + '@rollup/rollup-win32-x64-msvc': 4.44.1 fsevents: 2.3.3 rrweb-cssom@0.8.0: {} @@ -16875,6 +19227,8 @@ snapshots: dependencies: loose-envify: 1.4.0 + scheduler@0.26.0: {} + schema-utils@3.3.0: dependencies: '@types/json-schema': 7.0.15 @@ -16900,6 +19254,8 @@ snapshots: dependencies: lru-cache: 6.0.0 + semver@7.7.1: {} + semver@7.7.2: {} send@0.19.0: @@ -16967,6 +19323,36 @@ snapshots: dependencies: kind-of: 6.0.3 + sharp@0.34.3: + dependencies: + color: 4.2.3 + detect-libc: 2.0.4 + semver: 7.7.2 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.34.3 + '@img/sharp-darwin-x64': 0.34.3 + '@img/sharp-libvips-darwin-arm64': 1.2.0 + '@img/sharp-libvips-darwin-x64': 1.2.0 + '@img/sharp-libvips-linux-arm': 1.2.0 + '@img/sharp-libvips-linux-arm64': 1.2.0 + '@img/sharp-libvips-linux-ppc64': 1.2.0 + '@img/sharp-libvips-linux-s390x': 1.2.0 + '@img/sharp-libvips-linux-x64': 1.2.0 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.0 + '@img/sharp-libvips-linuxmusl-x64': 1.2.0 + '@img/sharp-linux-arm': 0.34.3 + '@img/sharp-linux-arm64': 0.34.3 + '@img/sharp-linux-ppc64': 0.34.3 + '@img/sharp-linux-s390x': 0.34.3 + '@img/sharp-linux-x64': 0.34.3 + '@img/sharp-linuxmusl-arm64': 0.34.3 + '@img/sharp-linuxmusl-x64': 0.34.3 + '@img/sharp-wasm32': 0.34.3 + '@img/sharp-win32-arm64': 0.34.3 + '@img/sharp-win32-ia32': 0.34.3 + '@img/sharp-win32-x64': 0.34.3 + optional: true + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -17007,9 +19393,14 @@ snapshots: signal-exit@4.1.0: {} + simple-swizzle@0.2.4: + dependencies: + is-arrayish: 0.3.4 + optional: true + simple-update-notifier@2.0.0: dependencies: - semver: 7.7.2 + semver: 7.7.1 sisteransi@1.0.5: {} @@ -17021,7 +19412,7 @@ snapshots: lilconfig: 3.1.3 nanospinner: 1.2.2 picocolors: 1.1.1 - tinyglobby: 0.2.15 + tinyglobby: 0.2.14 slash@3.0.0: {} @@ -17032,6 +19423,11 @@ snapshots: dot-case: 3.0.4 tslib: 2.8.1 + sonner@2.0.7(react-dom@19.1.1(react@19.1.1))(react@19.1.1): + dependencies: + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + source-map-js@1.2.1: {} source-map-loader@4.0.2(webpack@5.97.1): @@ -17108,6 +19504,8 @@ snapshots: stream-shift@1.0.3: {} + streaming-iterables@8.0.1: {} + streamsearch@1.1.0: {} string-argv@0.3.2: {} @@ -17214,6 +19612,11 @@ snapshots: client-only: 0.0.1 react: 18.3.1 + styled-jsx@5.1.6(react@19.1.1): + dependencies: + client-only: 0.0.1 + react: 19.1.1 + sucrase@3.35.0: dependencies: '@jridgewell/gen-mapping': 0.3.8 @@ -17253,11 +19656,19 @@ snapshots: synchronous-promise@2.0.17: {} + synckit@0.11.11: + dependencies: + '@pkgr/core': 0.2.9 + synckit@0.9.2: dependencies: '@pkgr/core': 0.1.1 tslib: 2.8.1 + tailwind-merge@3.3.1: {} + + tailwindcss@4.1.13: {} + tapable@1.1.3: {} tapable@2.2.1: {} @@ -17286,6 +19697,15 @@ snapshots: mkdirp: 1.0.4 yallist: 4.0.0 + tar@7.4.3: + dependencies: + '@isaacs/fs-minipass': 4.0.1 + chownr: 3.0.0 + minipass: 7.1.2 + minizlib: 3.0.2 + mkdirp: 3.0.1 + yallist: 5.0.0 + telejson@7.2.0: dependencies: memoizerific: 1.11.3 @@ -17373,10 +19793,10 @@ snapshots: tinyexec@0.3.2: {} - tinyglobby@0.2.15: + tinyglobby@0.2.14: dependencies: - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 + fdir: 6.4.6(picomatch@4.0.2) + picomatch: 4.0.2 tinypool@1.0.2: {} @@ -17451,7 +19871,7 @@ snapshots: tslib@2.8.1: {} - tsup@8.3.6(@microsoft/api-extractor@7.49.2(@types/node@22.13.1))(jiti@2.4.2)(postcss@8.5.6)(tsx@4.19.2)(typescript@5.8.2)(yaml@2.4.5): + tsup@8.3.6(@microsoft/api-extractor@7.49.2(@types/node@24.7.0))(jiti@2.5.1)(postcss@8.5.6)(tsx@4.19.2)(typescript@5.8.2)(yaml@2.4.5): dependencies: bundle-require: 5.1.0(esbuild@0.24.2) cac: 6.7.14 @@ -17461,16 +19881,16 @@ snapshots: esbuild: 0.24.2 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@2.4.2)(postcss@8.5.6)(tsx@4.19.2)(yaml@2.4.5) + postcss-load-config: 6.0.1(jiti@2.5.1)(postcss@8.5.6)(tsx@4.19.2)(yaml@2.4.5) resolve-from: 5.0.0 - rollup: 4.50.1 + rollup: 4.44.1 source-map: 0.8.0-beta.0 sucrase: 3.35.0 tinyexec: 0.3.2 - tinyglobby: 0.2.15 + tinyglobby: 0.2.14 tree-kill: 1.2.2 optionalDependencies: - '@microsoft/api-extractor': 7.49.2(@types/node@22.13.1) + '@microsoft/api-extractor': 7.49.2(@types/node@24.7.0) postcss: 8.5.6 typescript: 5.8.2 transitivePeerDependencies: @@ -17518,6 +19938,8 @@ snapshots: turbo-windows-64: 2.4.4 turbo-windows-arm64: 2.4.4 + tw-animate-css@1.3.8: {} + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -17599,12 +20021,12 @@ snapshots: typedarray@0.0.6: {} - typescript-eslint@8.29.0(eslint@8.57.1)(typescript@5.8.2): + typescript-eslint@8.29.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.29.0(@typescript-eslint/parser@8.29.0(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)(typescript@5.8.2) - '@typescript-eslint/parser': 8.29.0(eslint@8.57.1)(typescript@5.8.2) - '@typescript-eslint/utils': 8.29.0(eslint@8.57.1)(typescript@5.8.2) - eslint: 8.57.1 + '@typescript-eslint/eslint-plugin': 8.29.0(@typescript-eslint/parser@8.29.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2) + '@typescript-eslint/parser': 8.29.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2) + '@typescript-eslint/utils': 8.29.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.2) + eslint: 9.35.0(jiti@2.5.1) typescript: 5.8.2 transitivePeerDependencies: - supports-color @@ -17633,8 +20055,9 @@ snapshots: undici-types@6.19.8: {} - undici-types@6.20.0: - optional: true + undici-types@6.20.0: {} + + undici-types@7.14.0: {} unicode-canonical-property-names-ecmascript@2.0.1: {} @@ -17704,6 +20127,13 @@ snapshots: optionalDependencies: '@types/react': 18.3.18 + use-callback-ref@1.3.3(@types/react@19.1.12)(react@19.1.1): + dependencies: + react: 19.1.1 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.1.12 + use-resize-observer@9.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@juggle/resize-observer': 3.4.0 @@ -17718,6 +20148,14 @@ snapshots: optionalDependencies: '@types/react': 18.3.18 + use-sidecar@1.1.3(@types/react@19.1.12)(react@19.1.1): + dependencies: + detect-node-es: 1.1.0 + react: 19.1.1 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.1.12 + usehooks-ts@3.1.1(react@18.3.1): dependencies: lodash.debounce: 4.0.8 @@ -17750,13 +20188,13 @@ snapshots: vary@1.1.2: {} - vite-node@3.0.5(@types/node@22.13.1)(jiti@2.4.2)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5): + vite-node@3.0.5(@types/node@24.7.0)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5): dependencies: cac: 6.7.14 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.0 es-module-lexer: 1.6.0 pathe: 2.0.2 - vite: 6.3.6(@types/node@22.13.1)(jiti@2.4.2)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5) + vite: 6.3.5(@types/node@24.7.0)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5) transitivePeerDependencies: - '@types/node' - jiti @@ -17771,53 +20209,54 @@ snapshots: - tsx - yaml - vite-plugin-dts@4.5.0(@types/node@22.13.1)(rollup@4.50.1)(typescript@5.8.2)(vite@6.3.6(@types/node@22.13.1)(jiti@2.4.2)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5)): + vite-plugin-dts@4.5.0(@types/node@24.7.0)(rollup@4.44.1)(typescript@5.8.2)(vite@6.3.5(@types/node@24.7.0)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5)): dependencies: - '@microsoft/api-extractor': 7.49.2(@types/node@22.13.1) - '@rollup/pluginutils': 5.1.4(rollup@4.50.1) + '@microsoft/api-extractor': 7.49.2(@types/node@24.7.0) + '@rollup/pluginutils': 5.1.4(rollup@4.44.1) '@volar/typescript': 2.4.11 '@vue/language-core': 2.2.0(typescript@5.8.2) compare-versions: 6.1.1 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.0 kolorist: 1.8.0 local-pkg: 0.5.1 magic-string: 0.30.17 typescript: 5.8.2 optionalDependencies: - vite: 6.3.6(@types/node@22.13.1)(jiti@2.4.2)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5) + vite: 6.3.5(@types/node@24.7.0)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite@6.3.6(@types/node@22.13.1)(jiti@2.4.2)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5): + vite@6.3.5(@types/node@24.7.0)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5): dependencies: - esbuild: 0.25.9 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 + esbuild: 0.25.5 + fdir: 6.4.6(picomatch@4.0.2) + picomatch: 4.0.2 postcss: 8.5.6 - rollup: 4.50.1 - tinyglobby: 0.2.15 + rollup: 4.44.1 + tinyglobby: 0.2.14 optionalDependencies: - '@types/node': 22.13.1 + '@types/node': 24.7.0 fsevents: 2.3.3 - jiti: 2.4.2 + jiti: 2.5.1 + lightningcss: 1.30.1 sass: 1.84.0 terser: 5.38.1 tsx: 4.19.2 yaml: 2.4.5 - vitest@3.0.5(@types/node@22.13.1)(jiti@2.4.2)(jsdom@26.0.0)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5): + vitest@3.0.5(@types/node@24.7.0)(jiti@2.5.1)(jsdom@26.0.0)(lightningcss@1.30.1)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5): dependencies: '@vitest/expect': 3.0.5 - '@vitest/mocker': 3.0.5(vite@6.3.6(@types/node@22.13.1)(jiti@2.4.2)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5)) + '@vitest/mocker': 3.0.5(vite@6.3.5(@types/node@24.7.0)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5)) '@vitest/pretty-format': 3.0.5 '@vitest/runner': 3.0.5 '@vitest/snapshot': 3.0.5 '@vitest/spy': 3.0.5 '@vitest/utils': 3.0.5 chai: 5.1.2 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.0 expect-type: 1.1.0 magic-string: 0.30.17 pathe: 2.0.2 @@ -17826,11 +20265,11 @@ snapshots: tinyexec: 0.3.2 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 6.3.6(@types/node@22.13.1)(jiti@2.4.2)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5) - vite-node: 3.0.5(@types/node@22.13.1)(jiti@2.4.2)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5) + vite: 6.3.5(@types/node@24.7.0)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5) + vite-node: 3.0.5(@types/node@24.7.0)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.4.5) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.13.1 + '@types/node': 24.7.0 jsdom: 26.0.0 transitivePeerDependencies: - jiti @@ -18092,6 +20531,8 @@ snapshots: yallist@4.0.0: {} + yallist@5.0.0: {} + yaml@2.4.5: {} yargs-parser@21.1.1: {} @@ -18114,3 +20555,8 @@ snapshots: yocto-queue@0.1.0: {} yocto-queue@1.1.1: {} + + zustand@5.0.8(@types/react@19.1.12)(react@19.1.1): + optionalDependencies: + '@types/react': 19.1.12 + react: 19.1.1 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index e361e47a3..c1fae8909 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -5,4 +5,5 @@ packages: - 'tooling/*' catalog: - livekit-client: ^2.13.3 + livekit-client: ^2.15.8 + "@livekit/protocol": ^1.42.0