From 5b4377f273b71623f586a253adfd54da16e3000e Mon Sep 17 00:00:00 2001 From: hsingh Date: Sat, 24 May 2025 01:49:48 +0530 Subject: [PATCH 1/4] chore: add swift helper --- .npmrc | 3 + .vscode/launch.json | 40 + apps/electron/.vscode/launch.json | 22 - apps/electron/.vscode/settings.json | 3 - apps/electron/forge.config.ts | 2 +- apps/electron/package.json | 12 +- .../electron/scripts/generate-swift-models.ts | 4 +- apps/electron/src/main/swift-io-bridge.ts | 16 +- package.json | 17 +- .../native-helpers/swift-helper/.gitignore | 79 + .../native-helpers/swift-helper/Package.swift | 26 + .../SwiftHelper/AccessibilityService.swift | 512 ++++ .../Sources/SwiftHelper/AnyCodable.swift | 74 + .../Sources/SwiftHelper/JSONHelpers.swift | 20 + .../SwiftHelper/Resources/rec-start.mp3 | Bin 0 -> 3393 bytes .../SwiftHelper/Resources/rec-stop.mp3 | Bin 0 -> 3393 bytes .../Sources/SwiftHelper/RpcHandler.swift | 247 ++ .../Sources/SwiftHelper/main.swift | 123 + .../native-helpers/swift-helper/package.json | 28 + pnpm-lock.yaml | 2553 +++++++---------- pnpm-workspace.yaml | 1 + turbo.json | 8 +- 22 files changed, 2221 insertions(+), 1569 deletions(-) create mode 100644 .vscode/launch.json delete mode 100644 apps/electron/.vscode/launch.json delete mode 100644 apps/electron/.vscode/settings.json create mode 100644 packages/native-helpers/swift-helper/.gitignore create mode 100644 packages/native-helpers/swift-helper/Package.swift create mode 100644 packages/native-helpers/swift-helper/Sources/SwiftHelper/AccessibilityService.swift create mode 100644 packages/native-helpers/swift-helper/Sources/SwiftHelper/AnyCodable.swift create mode 100644 packages/native-helpers/swift-helper/Sources/SwiftHelper/JSONHelpers.swift create mode 100644 packages/native-helpers/swift-helper/Sources/SwiftHelper/Resources/rec-start.mp3 create mode 100644 packages/native-helpers/swift-helper/Sources/SwiftHelper/Resources/rec-stop.mp3 create mode 100644 packages/native-helpers/swift-helper/Sources/SwiftHelper/RpcHandler.swift create mode 100644 packages/native-helpers/swift-helper/Sources/SwiftHelper/main.swift create mode 100644 packages/native-helpers/swift-helper/package.json diff --git a/.npmrc b/.npmrc index e69de29..29eef8b 100644 --- a/.npmrc +++ b/.npmrc @@ -0,0 +1,3 @@ +# Standard hoisting configuration +node-linker=hoisted +shamefully-hoist=true diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..e1abde9 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,40 @@ +{ + "configurations": [ + { + "type": "swift", + "request": "launch", + "args": [], + "cwd": "${workspaceFolder:amical}/packages/native-helpers/swift-helper", + "name": "Debug KeyTapHelper (packages/native-helpers/swift-helper)", + "program": "${workspaceFolder:amical}/packages/native-helpers/swift-helper/.build/debug/KeyTapHelper", + "preLaunchTask": "swift: Build Debug KeyTapHelper (packages/native-helpers/swift-helper)" + }, + { + "type": "swift", + "request": "launch", + "args": [], + "cwd": "${workspaceFolder:amical}/packages/native-helpers/swift-helper", + "name": "Release KeyTapHelper (packages/native-helpers/swift-helper)", + "program": "${workspaceFolder:amical}/packages/native-helpers/swift-helper/.build/release/KeyTapHelper", + "preLaunchTask": "swift: Build Release KeyTapHelper (packages/native-helpers/swift-helper)" + }, + { + "type": "swift", + "request": "launch", + "args": [], + "cwd": "${workspaceFolder:amical}/packages/native-helpers/swift-helper", + "name": "Debug SwiftHelper (packages/native-helpers/swift-helper)", + "program": "${workspaceFolder:amical}/packages/native-helpers/swift-helper/.build/debug/SwiftHelper", + "preLaunchTask": "swift: Build Debug SwiftHelper (packages/native-helpers/swift-helper)" + }, + { + "type": "swift", + "request": "launch", + "args": [], + "cwd": "${workspaceFolder:amical}/packages/native-helpers/swift-helper", + "name": "Release SwiftHelper (packages/native-helpers/swift-helper)", + "program": "${workspaceFolder:amical}/packages/native-helpers/swift-helper/.build/release/SwiftHelper", + "preLaunchTask": "swift: Build Release SwiftHelper (packages/native-helpers/swift-helper)" + } + ] +} \ No newline at end of file diff --git a/apps/electron/.vscode/launch.json b/apps/electron/.vscode/launch.json deleted file mode 100644 index 7694987..0000000 --- a/apps/electron/.vscode/launch.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "configurations": [ - { - "type": "swift", - "request": "launch", - "args": [], - "cwd": "${workspaceFolder:amical-app}/src/helper/swift/KeyTapHelper", - "name": "Debug KeyTapHelper (src/helper/swift/KeyTapHelper)", - "program": "${workspaceFolder:amical-app}/src/helper/swift/KeyTapHelper/.build/debug/KeyTapHelper", - "preLaunchTask": "swift: Build Debug KeyTapHelper (src/helper/swift/KeyTapHelper)" - }, - { - "type": "swift", - "request": "launch", - "args": [], - "cwd": "${workspaceFolder:amical-app}/src/helper/swift/KeyTapHelper", - "name": "Release KeyTapHelper (src/helper/swift/KeyTapHelper)", - "program": "${workspaceFolder:amical-app}/src/helper/swift/KeyTapHelper/.build/release/KeyTapHelper", - "preLaunchTask": "swift: Build Release KeyTapHelper (src/helper/swift/KeyTapHelper)" - } - ] -} diff --git a/apps/electron/.vscode/settings.json b/apps/electron/.vscode/settings.json deleted file mode 100644 index 25fa621..0000000 --- a/apps/electron/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "typescript.tsdk": "node_modules/typescript/lib" -} diff --git a/apps/electron/forge.config.ts b/apps/electron/forge.config.ts index b053556..3d60949 100644 --- a/apps/electron/forge.config.ts +++ b/apps/electron/forge.config.ts @@ -11,7 +11,7 @@ import { FuseV1Options, FuseVersion } from '@electron/fuses'; const config: ForgeConfig = { packagerConfig: { asar: true, - extraResource: ['src/helper/bin'], + extraResource: ['../../packages/native-helpers/swift-helper/bin'], extendInfo: { NSMicrophoneUsageDescription: "This app needs access to your microphone to record audio for transcription.", }, diff --git a/apps/electron/package.json b/apps/electron/package.json index 94878ce..0167217 100644 --- a/apps/electron/package.json +++ b/apps/electron/package.json @@ -5,9 +5,9 @@ "description": "My Electron application description", "main": ".vite/build/main.js", "scripts": { - "start": "electron-forge start", - "package": "electron-forge package", - "make": "electron-forge make", + "start": "pnpm build:swift-helper && electron-forge start", + "package": "pnpm build:swift-helper && electron-forge package", + "make": "pnpm build:swift-helper && electron-forge make", "publish": "electron-forge publish", "lint": "eslint --ext .ts,.tsx .", "format": "prettier --write \"**/*.{js,jsx,ts,tsx,json,md}\"", @@ -16,7 +16,9 @@ "schema:generate-json": "tsx scripts/generate-json-schema.ts", "schema:generate-swift": "tsx scripts/generate-swift-models.js", "schema:generate-all": "pnpm schema:generate-json && pnpm schema:generate-swift", - "build:swift-helper": "pnpm schema:generate-all && swift build --package-path src/helper/swift/KeyTapHelper --configuration release && mkdir -p src/helper/bin && cp src/helper/swift/KeyTapHelper/.build/release/KeyTapHelper src/helper/bin/" + "build:swift-helper": "pnpm schema:generate-all && pnpm --filter @amical/swift-helper build", + "dev": "pnpm start", + "prepare": "pnpm build:swift-helper" }, "keywords": [], "license": "MIT", @@ -47,7 +49,7 @@ "eslint-plugin-import": "^2.31.0", "eslint-plugin-prettier": "^5.4.0", "prettier": "^3.5.3", - "quicktype": "^23.1.4", + "quicktype": "23.1.4", "tailwindcss": "^4.1.6", "tsx": "^4.19.4", "typescript": "~5.8.3", diff --git a/apps/electron/scripts/generate-swift-models.ts b/apps/electron/scripts/generate-swift-models.ts index 31e0cb7..8ee6545 100644 --- a/apps/electron/scripts/generate-swift-models.ts +++ b/apps/electron/scripts/generate-swift-models.ts @@ -2,7 +2,7 @@ const { execSync } = require('child_process'); const fs = require('fs'); const path = require('path'); -const generatedDir = 'src/helper/swift/KeyTapHelper/Sources/KeyTapHelper/models/generated'; +const generatedDir = '../../packages/native-helpers/swift-helper/Sources/SwiftHelper/models/generated'; try { // Remove existing generated models and create the directory @@ -16,7 +16,7 @@ try { // Generate Swift models from JSON schemas using quicktype const commands = [ 'quicktype --src-lang schema --lang swift ' + - '-o src/helper/swift/KeyTapHelper/Sources/KeyTapHelper/models/generated/models.swift ' + + '-o ../../packages/native-helpers/swift-helper/Sources/SwiftHelper/models/generated/models.swift ' + 'generated/schemas/helper-envelopes/rpc-request.schema.json ' + 'generated/schemas/helper-envelopes/rpc-response.schema.json ' + 'generated/schemas/helper-requests/get-accessibility-tree-details-params.schema.json ' + diff --git a/apps/electron/src/main/swift-io-bridge.ts b/apps/electron/src/main/swift-io-bridge.ts index ed11eec..fe65d44 100644 --- a/apps/electron/src/main/swift-io-bridge.ts +++ b/apps/electron/src/main/swift-io-bridge.ts @@ -71,10 +71,10 @@ export class SwiftIOBridge extends EventEmitter { } private determineHelperPath(): string { - const helperName = 'KeyTapHelper'; // Or your Swift executable name + const helperName = 'SwiftHelper'; // Swift native helper executable return electronApp.isPackaged ? path.join(process.resourcesPath, 'bin', helperName) - : path.join(electronApp.getAppPath(), 'src', 'helper', 'bin', helperName); + : path.join(electronApp.getAppPath(), '..', '..', 'packages', 'native-helpers', 'swift-helper', 'bin', helperName); } private startHelperProcess(): void { @@ -82,7 +82,7 @@ export class SwiftIOBridge extends EventEmitter { fs.accessSync(this.helperPath, fs.constants.X_OK); } catch (err) { console.error( - `SwiftIOBridge: KeyTapHelper executable not found or not executable at ${this.helperPath}.` + `SwiftIOBridge: SwiftHelper executable not found or not executable at ${this.helperPath}.` ); this.emit( 'error', @@ -94,7 +94,7 @@ export class SwiftIOBridge extends EventEmitter { return; } - console.log(`SwiftIOBridge: Spawning KeyTapHelper from: ${this.helperPath}`); + console.log(`SwiftIOBridge: Spawning SwiftHelper from: ${this.helperPath}`); this.proc = spawn(this.helperPath, [], { stdio: ['pipe', 'pipe', 'pipe'] }); this.proc.stdout.pipe(split2()).on('data', (line: string) => { @@ -132,19 +132,19 @@ export class SwiftIOBridge extends EventEmitter { this.proc.stderr.on('data', (data: Buffer) => { const errorMsg = data.toString(); - console.error(`SwiftIOBridge: KeyTapHelper stderr: ${errorMsg}`); + console.error(`SwiftIOBridge: SwiftHelper stderr: ${errorMsg}`); this.emit('error', new Error(`Helper stderr: ${errorMsg}`)); }); this.proc.on('error', (err) => { - console.error('SwiftIOBridge: Failed to start KeyTapHelper process:', err); + console.error('SwiftIOBridge: Failed to start SwiftHelper process:', err); this.emit('error', err); this.proc = null; }); this.proc.on('close', (code, signal) => { console.log( - `SwiftIOBridge: KeyTapHelper process exited with code ${code} and signal ${signal}` + `SwiftIOBridge: SwiftHelper process exited with code ${code} and signal ${signal}` ); this.emit('close', code, signal); this.proc = null; @@ -236,7 +236,7 @@ export class SwiftIOBridge extends EventEmitter { public stopHelper(): void { if (this.proc) { - console.log('SwiftIOBridge: Stopping KeyTapHelper process...'); + console.log('SwiftIOBridge: Stopping SwiftHelper process...'); this.proc.kill(); this.proc = null; } diff --git a/package.json b/package.json index cc353b3..2b7eabd 100644 --- a/package.json +++ b/package.json @@ -13,8 +13,21 @@ "turbo": "^2.5.3", "typescript": "5.8.2" }, - "packageManager": "pnpm@9.0.0", + "packageManager": "pnpm@10.4.0", "engines": { - "node": ">=18" + "node": ">=24" + }, + "pnpm": { + "ignoredBuiltDependencies": [ + "@tailwindcss/oxide", + "better-sqlite3", + "core-js-pure", + "electron", + "electron-winstaller", + "esbuild", + "keytar", + "protobufjs", + "sharp" + ] } } diff --git a/packages/native-helpers/swift-helper/.gitignore b/packages/native-helpers/swift-helper/.gitignore new file mode 100644 index 0000000..e15a7b9 --- /dev/null +++ b/packages/native-helpers/swift-helper/.gitignore @@ -0,0 +1,79 @@ +# Swift Package Manager +.build/ +.swiftpm/ +Package.resolved + +# Built executables +bin/ +*.app/ +*.ipa + +# Xcode +*.xcodeproj/ +*.xcworkspace/ +*.xcuserdata/ +*.xccheckout +*.moved-aside +DerivedData/ +*.hmap +*.ipa +*.dSYM.zip +*.dSYM + +# macOS +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# Swift specific +*.swiftdoc +*.swiftmodule +*.swiftsourceinfo + +# SPM Dependencies +.swift-version + +# Turbo cache (for monorepo) +.turbo/ + +# IDE files +.vscode/ +.idea/ +*.swp +*.swo +*~ + +# Logs +*.log + +# Coverage reports +*.profdata +*.profraw + +# Swift testing +.coverage/ + +# Generated files +Sources/*/models/generated/ \ No newline at end of file diff --git a/packages/native-helpers/swift-helper/Package.swift b/packages/native-helpers/swift-helper/Package.swift new file mode 100644 index 0000000..6e77ac9 --- /dev/null +++ b/packages/native-helpers/swift-helper/Package.swift @@ -0,0 +1,26 @@ +// swift-tools-version:5.3 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription + +let package = Package( + name: "SwiftHelper", + platforms: [ + .macOS(.v10_15) // Set a deployment target, e.g., macOS 10.15 or later + ], + dependencies: [ + // Dependencies declare other packages that this package depends on. + // .package(url: /* package url */, from: "1.0.0"), + ], + targets: [ + // Targets are the basic building blocks of a package. A target can define a module or a test suite. + // Targets can depend on other targets in this package, and on products in packages this package depends on. + .target( + name: "SwiftHelper", + dependencies: [], + resources: [ + .process("Resources") // This line tells SPM to copy the Resources folder + ] + ) + ] +) diff --git a/packages/native-helpers/swift-helper/Sources/SwiftHelper/AccessibilityService.swift b/packages/native-helpers/swift-helper/Sources/SwiftHelper/AccessibilityService.swift new file mode 100644 index 0000000..0628ddd --- /dev/null +++ b/packages/native-helpers/swift-helper/Sources/SwiftHelper/AccessibilityService.swift @@ -0,0 +1,512 @@ +import Foundation +import ApplicationServices // For AXUIElement and Accessibility APIs +import AppKit // Added AppKit for NSWorkspace +import CoreAudio // For audio control + +// Represents a node in the accessibility tree. Must be Codable to be sent via RPC. +struct AccessibilityElementNode: Codable { + // Basic properties - expand as needed + let role: String? + let description: String? // Corresponds to AXDescription + let title: String? // Corresponds to AXTitle + let value: String? // Corresponds to AXValue (might need to be AnyCodable or specific types) + let identifier: String? // Corresponds to AXIdentifier (often not set) + // let frame: CGRect? // CGRect is not directly Codable, would need a wrapper or separate fields + let children: [AccessibilityElementNode]? + + // Example for frame if you want to include it: + struct CodableRect: Codable { + let x: Double + let y: Double + let width: Double + let height: Double + + init?(rect: CGRect?) { + guard let rect = rect else { return nil } + self.x = Double(rect.origin.x) + self.y = Double(rect.origin.y) + self.width = Double(rect.size.width) + self.height = Double(rect.size.height) + } + } + // let codableFrame: CodableRect? + + // Initializer for convenience (internal use during tree construction) + init(role: String?, description: String?, title: String?, value: String?, identifier: String?, children: [AccessibilityElementNode]?) { + self.role = role + self.description = description + self.title = title + self.value = value + self.identifier = identifier + self.children = children + // self.codableFrame = CodableRect(rect: frame) // If using frame + } +} + +class AccessibilityService { + + private let maxDepth = 10 // To prevent excessively deep recursion and large payloads + + // Properties to store original audio states + private var originalSystemMuteState: Bool? + private var originalSystemVolume: Float32? + + // Fetches a value for a given accessibility attribute from an element. + private func getAttributeValue(element: AXUIElement, attribute: String) -> String? { + var value: AnyObject? + let error = AXUIElementCopyAttributeValue(element, attribute as CFString, &value) + if error == .success, let strValue = value as? String { + return strValue + } + // Could also handle other types like AXValue (numbers, bools) if needed + return nil + } + + // Fetches children of an accessibility element. + private func getChildren(element: AXUIElement) -> [AXUIElement]? { + var value: AnyObject? + let error = AXUIElementCopyAttributeValue(element, kAXChildrenAttribute as CFString, &value) + if error == .success, let children = value as? [AXUIElement] { + return children + } + return nil + } + + // MARK: - Audio Control Helpers + private func getDefaultOutputDeviceID() -> AudioDeviceID? { + var deviceID: AudioDeviceID = kAudioObjectUnknown + var propertyAddress = AudioObjectPropertyAddress( + mSelector: kAudioHardwarePropertyDefaultOutputDevice, + mScope: kAudioObjectPropertyScopeGlobal, + mElement: kAudioObjectPropertyElementMain + ) + var propertySize = UInt32(MemoryLayout.size) + + let status = AudioObjectGetPropertyData( + AudioObjectID(kAudioObjectSystemObject), + &propertyAddress, + 0, + nil, + &propertySize, + &deviceID + ) + + if status == noErr && deviceID != kAudioObjectUnknown { + return deviceID + } else { + FileHandle.standardError.write("[AccessibilityService] Error getting default output device: \(status).\\n".data(using: .utf8)!) + return nil + } + } + + private func isDeviceMuted(deviceID: AudioDeviceID) -> Bool? { + var isMuted: UInt32 = 0 + var propertyAddress = AudioObjectPropertyAddress( + mSelector: kAudioDevicePropertyMute, + mScope: kAudioDevicePropertyScopeOutput, + mElement: kAudioObjectPropertyElementMain // Master channel + ) + var propertySize = UInt32(MemoryLayout.size) + + var isSettable: DarwinBoolean = false + let infoStatus = AudioObjectIsPropertySettable(deviceID, &propertyAddress, &isSettable) + if infoStatus != noErr || !isSettable.boolValue { + FileHandle.standardError.write("[AccessibilityService] Mute property not supported or not settable for device \(deviceID).\\n".data(using: .utf8)!) + return nil + } + + let status = AudioObjectGetPropertyData( + deviceID, + &propertyAddress, + 0, + nil, + &propertySize, + &isMuted + ) + + if status == noErr { + return isMuted == 1 + } else { + FileHandle.standardError.write("[AccessibilityService] Error getting mute state for device \(deviceID): \(status).\\n".data(using: .utf8)!) + return nil + } + } + + private func setDeviceMute(deviceID: AudioDeviceID, mute: Bool) -> OSStatus { + var muteVal: UInt32 = mute ? 1 : 0 + var propertyAddress = AudioObjectPropertyAddress( + mSelector: kAudioDevicePropertyMute, + mScope: kAudioDevicePropertyScopeOutput, + mElement: kAudioObjectPropertyElementMain // Master channel + ) + let propertySize = UInt32(MemoryLayout.size) + + var isSettable: DarwinBoolean = false + let infoStatus = AudioObjectIsPropertySettable(deviceID, &propertyAddress, &isSettable) + if infoStatus != noErr { + FileHandle.standardError.write("[AccessibilityService] Error checking if mute is settable for device \(deviceID): \(infoStatus).\\n".data(using: .utf8)!) + return infoStatus + } + if !isSettable.boolValue { + FileHandle.standardError.write("[AccessibilityService] Mute property is not settable for device \(deviceID).\\n".data(using: .utf8)!) + return kAudioHardwareUnsupportedOperationError + } + + let status = AudioObjectSetPropertyData( + deviceID, + &propertyAddress, + 0, + nil, + propertySize, + &muteVal + ) + if status != noErr { + FileHandle.standardError.write("[AccessibilityService] Error setting mute state for device \(deviceID) to \(mute): \(status).\\n".data(using: .utf8)!) + } + return status + } + + private func getDeviceVolume(deviceID: AudioDeviceID) -> Float32? { + var volume: Float32 = 0.0 + var propertyAddress = AudioObjectPropertyAddress( + mSelector: kAudioDevicePropertyVolumeScalar, + mScope: kAudioDevicePropertyScopeOutput, + mElement: kAudioObjectPropertyElementMain // Master channel + ) + var propertySize = UInt32(MemoryLayout.size) + + if AudioObjectHasProperty(deviceID, &propertyAddress) == false { + FileHandle.standardError.write("[AccessibilityService] Volume scalar property not supported for device \(deviceID).\\n".data(using: .utf8)!) + return nil + } + + let status = AudioObjectGetPropertyData( + deviceID, + &propertyAddress, + 0, + nil, + &propertySize, + &volume + ) + + if status == noErr { + return volume + } else { + FileHandle.standardError.write("[AccessibilityService] Error getting volume for device \(deviceID): \(status).\\n".data(using: .utf8)!) + return nil + } + } + + private func setDeviceVolume(deviceID: AudioDeviceID, volume: Float32) -> OSStatus { + var newVolume = min(max(volume, 0.0), 1.0) // Clamp volume to 0.0-1.0 + var propertyAddress = AudioObjectPropertyAddress( + mSelector: kAudioDevicePropertyVolumeScalar, + mScope: kAudioDevicePropertyScopeOutput, + mElement: kAudioObjectPropertyElementMain // Master channel + ) + let propertySize = UInt32(MemoryLayout.size) + + var isSettable: DarwinBoolean = false + let infoStatus = AudioObjectIsPropertySettable(deviceID, &propertyAddress, &isSettable) + if infoStatus != noErr { + FileHandle.standardError.write("[AccessibilityService] Error checking if volume is settable for device \(deviceID): \(infoStatus).\\n".data(using: .utf8)!) + return infoStatus + } + if !isSettable.boolValue { + FileHandle.standardError.write("[AccessibilityService] Volume property is not settable for device \(deviceID).\\n".data(using: .utf8)!) + return kAudioHardwareUnsupportedOperationError + } + + let status = AudioObjectSetPropertyData( + deviceID, + &propertyAddress, + 0, + nil, + propertySize, + &newVolume + ) + if status != noErr { + FileHandle.standardError.write("[AccessibilityService] Error setting volume for device \(deviceID) to \(newVolume): \(status).\\n".data(using: .utf8)!) + } + return status + } + + // Recursive function to build the tree from a given AXUIElement + func buildTree(fromElement element: AXUIElement, currentDepth: Int) -> AccessibilityElementNode? { + if currentDepth > maxDepth { + // Return a placeholder or nil if max depth is exceeded + return AccessibilityElementNode(role: "DepthLimitExceeded", description: "Max recursion depth reached", title: nil, value: nil, identifier: nil, children: nil) + } + + let role = getAttributeValue(element: element, attribute: kAXRoleAttribute) + let description = getAttributeValue(element: element, attribute: kAXDescriptionAttribute) + let title = getAttributeValue(element: element, attribute: kAXTitleAttribute) + let value = getAttributeValue(element: element, attribute: kAXValueAttribute) + let identifier = getAttributeValue(element: element, attribute: kAXIdentifierAttribute) + // Add more attributes as needed (e.g., kAXFrameAttribute, kAXEnabledAttribute) + + var childNodes: [AccessibilityElementNode]? = nil + if let axChildren = getChildren(element: element) { + childNodes = [] // Initialize if there are children to process + for childElement in axChildren { + if let childNode = buildTree(fromElement: childElement, currentDepth: currentDepth + 1) { + childNodes?.append(childNode) + } + } + if childNodes?.isEmpty ?? true { // If loop completed but no valid childNodes were added + childNodes = nil + } + } + + // Only create a node if it has some meaningful data or children + // This helps to avoid empty nodes for elements that might not be relevant + if role != nil || description != nil || title != nil || value != nil || identifier != nil || (childNodes != nil && !childNodes!.isEmpty) { + return AccessibilityElementNode( + role: role, + description: description, + title: title, + value: value, + identifier: identifier, + children: childNodes + ) + } + return nil + } + + // Public method to fetch the entire accessibility tree for the system or a specific app. + // For `rootId`: if nil, gets system-wide. If "focused", gets the focused application. + // Otherwise, it could be a bundle identifier (not implemented here yet). + public func fetchFullAccessibilityTree(rootId: String?) -> AccessibilityElementNode? { + FileHandle.standardError.write("[AccessibilityService] Starting fetchFullAccessibilityTree. rootId: \(rootId ?? "nil")\n".data(using: .utf8)!) + + var rootElement: AXUIElement? + + if let id = rootId, id.lowercased() == "focusedapp" { + // Get the focused application + guard let frontmostApp = NSWorkspace.shared.frontmostApplication else { + FileHandle.standardError.write("[AccessibilityService] Could not get frontmost application.\n".data(using: .utf8)!) + return nil + } + rootElement = AXUIElementCreateApplication(frontmostApp.processIdentifier) + FileHandle.standardError.write("[AccessibilityService] Targeting focused app: \(frontmostApp.localizedName ?? "Unknown App") (PID: \(frontmostApp.processIdentifier))\n".data(using: .utf8)!) + } else if let id = rootId, !id.isEmpty { + // Basic PID lookup if rootId is a number (representing a PID) + // More robust app lookup by bundle ID would be better for non-PID rootIds. + if let pid = Int32(id) { + rootElement = AXUIElementCreateApplication(pid) + FileHandle.standardError.write("[AccessibilityService] Targeting PID: \(pid)\n".data(using: .utf8)!) + } else { + FileHandle.standardError.write("[AccessibilityService] rootId '\(id)' is not 'focusedapp' or a valid PID. Falling back to system-wide (or implement bundle ID lookup).\n".data(using: .utf8)!) + // Fallback or specific error for unhandled rootId format + // For now, let's try system-wide if rootId isn't 'focusedapp' or PID. + rootElement = AXUIElementCreateSystemWide() + FileHandle.standardError.write("[AccessibilityService] Defaulting to system-wide due to unhandled rootId.\n".data(using: .utf8)!) + } + } else { + // Default to system-wide if rootId is nil or empty + rootElement = AXUIElementCreateSystemWide() + FileHandle.standardError.write("[AccessibilityService] Targeting system-wide accessibility tree.\n".data(using: .utf8)!) + } + + guard let element = rootElement else { + FileHandle.standardError.write("[AccessibilityService] Failed to create root AXUIElement.\n".data(using: .utf8)!) + return nil + } + + let tree = buildTree(fromElement: element, currentDepth: 0) + FileHandle.standardError.write("[AccessibilityService] Finished buildTree. Result is \(tree == nil ? "nil" : "not nil").\\n".data(using: .utf8)!) + return tree + } + + // MARK: - System Audio Control + + public func muteSystemAudio() -> Bool { + FileHandle.standardError.write("[AccessibilityService] Attempting to mute system audio.\\n".data(using: .utf8)!) + guard let deviceID = getDefaultOutputDeviceID() else { + FileHandle.standardError.write("[AccessibilityService] Could not get default output device to mute audio.\\n".data(using: .utf8)!) + return false + } + + // Store original state + self.originalSystemMuteState = isDeviceMuted(deviceID: deviceID) + self.originalSystemVolume = getDeviceVolume(deviceID: deviceID) + + FileHandle.standardError.write("[AccessibilityService] Original mute state: \(String(describing: self.originalSystemMuteState)), Original volume: \(String(describing: self.originalSystemVolume)).\\n".data(using: .utf8)!) + + // Attempt to mute + let muteStatus = setDeviceMute(deviceID: deviceID, mute: true) + if muteStatus == noErr { + FileHandle.standardError.write("[AccessibilityService] System audio muted successfully via mute property.\\n".data(using: .utf8)!) + return true + } else { + FileHandle.standardError.write("[AccessibilityService] Failed to set mute property (status: \(muteStatus)). Attempting to set volume to 0.\\n".data(using: .utf8)!) + let volumeStatus = setDeviceVolume(deviceID: deviceID, volume: 0.0) + if volumeStatus == noErr { + FileHandle.standardError.write("[AccessibilityService] System audio silenced by setting volume to 0.\\n".data(using: .utf8)!) + } else { + FileHandle.standardError.write("[AccessibilityService] Failed to silence system audio by setting volume to 0 (status: \(volumeStatus)).\\n".data(using: .utf8)!) + } + return false + } + } + + public func restoreSystemAudio() -> Bool { + FileHandle.standardError.write("[AccessibilityService] Attempting to restore system audio.\\n".data(using: .utf8)!) + guard let deviceID = getDefaultOutputDeviceID() else { + FileHandle.standardError.write("[AccessibilityService] Could not get default output device to restore audio.\\n".data(using: .utf8)!) + return false + } + + if let originalMute = self.originalSystemMuteState { + let muteStatus = setDeviceMute(deviceID: deviceID, mute: originalMute) + if muteStatus == noErr { + FileHandle.standardError.write("[AccessibilityService] System mute state restored to \(originalMute).\\n".data(using: .utf8)!) + } else { + FileHandle.standardError.write("[AccessibilityService] Failed to restore original mute state (status: \(muteStatus)).\\n".data(using: .utf8)!) + } + } + + let shouldRestoreVolume = self.originalSystemVolume != nil && (self.originalSystemMuteState == false || self.originalSystemMuteState == nil) + + if shouldRestoreVolume, let originalVolume = self.originalSystemVolume { + let volumeStatus = setDeviceVolume(deviceID: deviceID, volume: originalVolume) + if volumeStatus == noErr { + FileHandle.standardError.write("[AccessibilityService] System volume restored to \(originalVolume).\\n".data(using: .utf8)!) + } else { + FileHandle.standardError.write("[AccessibilityService] Failed to restore original volume (status: \(volumeStatus)).\\n".data(using: .utf8)!) + } + } + + self.originalSystemMuteState = nil + self.originalSystemVolume = nil + FileHandle.standardError.write("[AccessibilityService] System audio restoration attempt complete. Stored states cleared.\\n".data(using: .utf8)!) + return true + } + + // Pastes the given text into the active application + public func pasteText(transcript: String) -> Bool { + FileHandle.standardError.write("[AccessibilityService] Attempting to paste transcript: \(transcript).\n".data(using: .utf8)!) + + let pasteboard = NSPasteboard.general + let originalPasteboardItems = pasteboard.pasteboardItems?.compactMap { item -> NSPasteboardItem? in + let newItem = NSPasteboardItem() + var hasData = false + for type in item.types ?? [] { + if let data = item.data(forType: type) { + newItem.setData(data, forType: type) + hasData = true + } + } + return hasData ? newItem : nil + } ?? [] + + let originalChangeCount = pasteboard.changeCount // Save change count to detect external modifications + + pasteboard.clearContents() + let success = pasteboard.setString(transcript, forType: .string) + + if !success { + FileHandle.standardError.write("[AccessibilityService] Failed to set string on pasteboard.\n".data(using: .utf8)!) + // Restore original content before returning + restorePasteboard(pasteboard: pasteboard, items: originalPasteboardItems, originalChangeCount: originalChangeCount) + return false + } + + // Simulate Cmd+V + // Using deprecated kVK_Command might still work but kCGEventFlagMaskCommand is preferred. + // Virtual key code for 'v' is 9. + let vKeyCode: CGKeyCode = 9 + + let source = CGEventSource(stateID: .hidSystemState) + + let cmdDown = CGEvent(keyboardEventSource: source, virtualKey: CGKeyCode(55), keyDown: true) // 55 is kVK_Command + cmdDown?.flags = .maskCommand + + let vDown = CGEvent(keyboardEventSource: source, virtualKey: vKeyCode, keyDown: true) + vDown?.flags = .maskCommand // Keep command flag for the V press as well + + let vUp = CGEvent(keyboardEventSource: source, virtualKey: vKeyCode, keyDown: false) + vUp?.flags = .maskCommand + + let cmdUp = CGEvent(keyboardEventSource: source, virtualKey: CGKeyCode(55), keyDown: false) + // No flags needed for key up typically, or just .maskCommand if it was held + + if cmdDown == nil || vDown == nil || vUp == nil || cmdUp == nil { + FileHandle.standardError.write("[AccessibilityService] Failed to create CGEvent for paste.\n".data(using: .utf8)!) + restorePasteboard(pasteboard: pasteboard, items: originalPasteboardItems, originalChangeCount: originalChangeCount) + return false + } + + let loc: CGEventTapLocation = .cgSessionEventTap + + cmdDown!.post(tap: loc) + vDown!.post(tap: loc) + vUp!.post(tap: loc) + cmdUp!.post(tap: loc) + + FileHandle.standardError.write("[AccessibilityService] Paste keyboard events posted.\\n".data(using: .utf8)!) + + // Restore the original pasteboard content after a short delay + // to allow the paste action to complete. + DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) { // 200ms delay + self.restorePasteboard(pasteboard: pasteboard, items: originalPasteboardItems, originalChangeCount: originalChangeCount) + } + + return true + } + + private func restorePasteboard(pasteboard: NSPasteboard, items: [NSPasteboardItem], originalChangeCount: Int) { + // Only restore if our temporary content is still the active content on the pasteboard. + // This means the changeCount should be exactly one greater than when we saved it, + // indicating our setString operation was the last modification. + if pasteboard.changeCount == originalChangeCount + 1 { + pasteboard.clearContents() + if !items.isEmpty { + pasteboard.writeObjects(items) + } + FileHandle.standardError.write("[AccessibilityService] Original pasteboard content restored.\\n".data(using: .utf8)!) + } else { + // If changeCount is different, it means another app or the user has modified the pasteboard + // after we set our transcript but before this restoration block was executed. + // In this case, we should not interfere with the new pasteboard content. + FileHandle.standardError.write("[AccessibilityService] Pasteboard changed by another process or a new copy occurred (expected changeCount: \(originalChangeCount + 1), current: \(pasteboard.changeCount)); not restoring original content to avoid conflict.\\n".data(using: .utf8)!) + } + } + + // Define kVK_Function if not available from a system framework directly in this context. + // 0x3F is the virtual key code for the Fn key on Apple keyboards. + private let kVK_Function: CGKeyCode = 0x3F + + // Determines whether a keyboard event should be forwarded to the Electron application. + // This method should be called from the CGEventTap callback in main.swift or RpcHandler.swift. + public func shouldForwardKeyboardEvent(event: CGEvent) -> Bool { + let type = event.type + let keyCode = CGKeyCode(event.getIntegerValueField(.keyboardEventKeycode)) + + // Uncomment for verbose logging from Swift helper: + // FileHandle.standardError.write("[AccessibilityService] shouldForwardKeyboardEvent: type=\(type.rawValue), keyCode=\(keyCode), flags=\(event.flags.rawValue)\n".data(using: .utf8)!) + + if type == .flagsChanged { + // Always forward flagsChanged events. These are crucial for Electron to know + // the state of modifier keys, including when the Fn key itself is pressed or released, + // which is used to control recording. + // FileHandle.standardError.write("[AccessibilityService] Forwarding flagsChanged event.\n".data(using: .utf8)!) + return true + } + + if type == .keyDown || type == .keyUp { + // For keyDown and keyUp events, only forward if the event is FOR THE Fn KEY ITSELF. + if keyCode == kVK_Function { + // FileHandle.standardError.write("[AccessibilityService] Forwarding \(type == .keyDown ? "keyDown" : "keyUp") event because it IS the Fn key (keyCode: \(keyCode)).\n".data(using: .utf8)!) + return true + } else { + // FileHandle.standardError.write("[AccessibilityService] Suppressing \(type == .keyDown ? "keyDown" : "keyUp") event for keyCode \(keyCode) because it is NOT the Fn key.\n".data(using: .utf8)!) + return false + } + } + + // For any other event types (e.g., mouse events, system-defined), don't forward by default. + // FileHandle.standardError.write("[AccessibilityService] Suppressing event of unhandled type: \(type.rawValue).\n".data(using: .utf8)!) + return false + } +} diff --git a/packages/native-helpers/swift-helper/Sources/SwiftHelper/AnyCodable.swift b/packages/native-helpers/swift-helper/Sources/SwiftHelper/AnyCodable.swift new file mode 100644 index 0000000..3e4747d --- /dev/null +++ b/packages/native-helpers/swift-helper/Sources/SwiftHelper/AnyCodable.swift @@ -0,0 +1,74 @@ +import Foundation + +/** + A type-erased wrapper for any `Codable` value. + + This is useful for decoding and encoding JSON where the type of a value is not known statically, + or can be one of several types. + */ +public struct AnyCodable: Codable { + public let value: Any + + public init(_ value: T?) { + self.value = value ?? () + } + + public init(from decoder: Decoder) throws { + let container = try decoder.singleValueContainer() + + if container.decodeNil() { + self.value = () // Represent nil or null as an empty tuple or a specific marker + } else if let bool = try? container.decode(Bool.self) { + self.value = bool + } else if let int = try? container.decode(Int.self) { + self.value = int + } else if let double = try? container.decode(Double.self) { + self.value = double + } else if let string = try? container.decode(String.self) { + self.value = string + } else if let array = try? container.decode([AnyCodable].self) { + self.value = array.map { $0.value } + } else if let dictionary = try? container.decode([String: AnyCodable].self) { + self.value = dictionary.mapValues { $0.value } + } else { + throw DecodingError.dataCorruptedError(in: container, debugDescription: "AnyCodable value cannot be decoded") + } + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.singleValueContainer() + + switch value { + case let bool as Bool: + try container.encode(bool) + case let int as Int: + try container.encode(int) + case let double as Double: + try container.encode(double) + case let string as String: + try container.encode(string) + case let array as [Any]: + try container.encode(array.map { AnyCodable($0) }) + case let dictionary as [String: Any]: + try container.encode(dictionary.mapValues { AnyCodable($0) }) + case Optional.none: // Handles nil + try container.encodeNil() + case is (): // Handles the empty tuple used for nil in init(from:) + try container.encodeNil() + default: + // For other Codable types, attempt to encode them directly if possible, + // or throw an error if they are not directly encodable this way. + // This basic AnyCodable might need extension for custom objects not fitting above. + // A common approach is to require T to be Encodable in init or have specific handling. + // For simplicity, this example focuses on JSON primitives, arrays, and dictionaries. + throw EncodingError.invalidValue(value, EncodingError.Context(codingPath: container.codingPath, debugDescription: "AnyCodable value cannot be encoded")) + } + } +} + +// Helper to get underlying data if it's a dictionary or array, for re-decoding +extension AnyCodable { + func jsonData() throws -> Data { + return try JSONSerialization.data(withJSONObject: self.value, options: []) + } +} diff --git a/packages/native-helpers/swift-helper/Sources/SwiftHelper/JSONHelpers.swift b/packages/native-helpers/swift-helper/Sources/SwiftHelper/JSONHelpers.swift new file mode 100644 index 0000000..87a583b --- /dev/null +++ b/packages/native-helpers/swift-helper/Sources/SwiftHelper/JSONHelpers.swift @@ -0,0 +1,20 @@ +import Foundation + +// Shared JSON helper functions to avoid redeclaration errors across generated files +enum JSONHelpers { + static func newJSONDecoder() -> JSONDecoder { + let decoder = JSONDecoder() + if #available(iOS 10.0, OSX 10.12, tvOS 10.0, watchOS 3.0, *) { + decoder.dateDecodingStrategy = .iso8601 + } + return decoder + } + + static func newJSONEncoder() -> JSONEncoder { + let encoder = JSONEncoder() + if #available(iOS 10.0, OSX 10.12, tvOS 10.0, watchOS 3.0, *) { + encoder.dateEncodingStrategy = .iso8601 + } + return encoder + } +} \ No newline at end of file diff --git a/packages/native-helpers/swift-helper/Sources/SwiftHelper/Resources/rec-start.mp3 b/packages/native-helpers/swift-helper/Sources/SwiftHelper/Resources/rec-start.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..72bdf450cfa31de708a2996e6d446d16de106a55 GIT binary patch literal 3393 zcmd^C_gB-&`koX+NP!q25Tt|>y7)@E=ykR}k6BD#X0 zSXP>N6+uFkz92=x6@pj*S1&7|6yu6(w0zXX8 zGc36UUYE{+*F~?v`TF1Cx6?0ex&*u1Nv@y?@G<+&! zv_xfQaJ~9?;iPk(JHNXr?7m0FPT%>{)oZp|nxP$y&c%x7%jfxx#O*)VVim@MBV6I< z@Vmr!f$&Ct&=UbFlQHxuUVx^HFt4_4iLD2ZWg2?tT46m5N@MaX?qL6HR zNDAk_hLA(ogy0y1t2xsoJ$k1nPo*3fRzFaE)^TtYZV%F*IXZ&^V%9p7W3q)wRN3i%s?|Fk-Qbye_+7wt>G3|ARbEK{ zzYR-2{2~hB{1og8CNqvQw+1)mlCFe@eh##7cq~l3bdG<`@O)vAT1?B))fqb3I3bPz zmPLEfdLjiJzdh*C=*P<=5#{?{vrTzLXeJ|)Ptz&t&bd0@LknNqWk>5XM?B1_VCel| zC{;#o($Kc>j2L)mnIHPtgcxv+l_$VS?BUeeEgzL8FCD&F_;T>j5hL@X-mxtg-bbh| z5ti;zXzgWV>F)cxrQUC?z5~z0aQ({W#ozoGA^G_kS9B0G0|IuI$|5k8i5k|m)FaJ%JPP^#EjeDaLw6yxt#Kh_gfuPc! zjFK{r32C`(X>ueuRqBGMHlX`nbHc@w312T!tllD!;@PuH3$pE`NO7q;+e)u3$LnhI z^kxkgTnTY=x=qKr0R!ZX=x4ef7Ccdxu~)7^rGBiZ=;^WiB0Ln>I&!&Yax zEOINmbvLpAEh4G)8z-lXq35&85k_qt9)$gl*tylO&WnBQr>rAco;GodydMl@XN`?o zb_*v1*@nEhXR#qH<&-tG9VfFL3bwrMzoHaGRMBf!82G8?g%{Cgwbw@YcPqNz!LI{3 ztiWZ18(5qVW$a*PlW*{@QmzyF+92ztzL%%wF9ln{euZZ>yD(iWI*O;XPIkx-TGGyw zzieHGb^NJJ&q;T8k9NVY+jMjcL-_##pH!*p3A#UD9lPWCIMefw55|5gll~`8`pe_+ zqMPSb9Fm; z*f!i)nYrvK3L3 zb1nm^g*?-e%sZ$S!eG)csKc3~r>Y~m+8-aw`S{kTuUgkC)*!S+s)x6i%~|xKFy&NG z+kD||F#PH{^a_TpgV^9xj&CS{pi6Y;z9xKuo$lR|WNgb7hxRhcgK))}`zmwd`yZv! zw*NHIDn-HD)&_j@EUnhc=M}6xhzJZ{x9lZPI!FVRVsTW8*O_8n=Glus81g5`F|~Ux zPcUoP9la-aYY7Jy&&U%tY(%43Z&z**J(Ns}bW+yR#LmB)@0}OsswwSFUSzXWX6>R7 z&>~HPhUeTgvLKJDddwQUym$2`{1YO=f@)Kj01B#mp-m9H{a|hE8`Ed zlk$9gJ%Zi~7oNjMHfu=$kYjuchAC1;oQ_}<<(_QIbfZ%PGT^vnzE|e>mjO?w%Jy$h ztPfe^=-?UCkJaI-bP%yWzzuBAodcEt0fUN$TZ60& z?X1#%{V&q03CyXM7$@87tgpwv?_2n?slPuHUjCK57myXi=q)?4o%}=gag)3L$&J=G zbdEZ(W)!qd&u=iyV#9Jov24=fMxnt=jwtU1d?N955-^i;|EpOnpg|a9p5Qp7NR^}8 z+)^XYA|p#7CgZ@2_64&r6Vm{cLUA|a9IouI)^-9QAd#P-qK+R7#Sr9P>URn!OxP^M zd1{0*L@fH1yyIksXbJyjzA5Wtqs^Z47v%6c`TdGDk9dBw)p)6Bm*0eI#qq(rtO)70 zxoNu{Zx<)VM!;WBzk)X_a{HO0A_(~oB=8H}6qgfZ19QB;USJ7$< zOIoN@SGk4y>g7ZjUQUpR7}5{b1CXsR=I(KaEV!h{dTxOse(h&VN8GFA0*{GmD1IXo z?LsO_D|_TRp=(_4MMsRh8>V8BdagWA4bfopP{NQ+x&Wm^>&TXDcrg4%l+qj3tHJlHx&X_ULgnO3Vz{deYFun%WNQ3x= z=Oqe+5yK*yk)}EIY=s8&K3o0W`A5rC;VGn_AxU%1Lr{oM{K_ddd_Y4! zzlwseE*mGy;`R7{ekUCJ@rOvVpEoS^O|`E9BTYJ6oCVktu`PK8nnY|106;s9$p2xz zCpG?JT|q7FpGrxrSvtQe0ER~^i@K_E0Fv7ih&H*~o7;lA|yZu@rE!#aEIv%Y=4vwnN; z|8jGpAi%mA`ZAf$(x)l_2oHv*GsV=LWKJ{;i%1A1lDGYu@|%NJat;9ipC`7fZ4Qx6 zVTt7crgh9(@y;Au8d{`D9k{%o{F3%23x||J@^D0kY|8qi!h}dPu{<~Ta&C_G>Rpd% z3t%%uAF1daXvDi3ynVT&sZwTt=4)Eo6qGi_CZbW>kuXG&J@lTAmtC0R^p$Qz!T_D5 z#0GSrPoK5tiE!N_Zq|zGcaigK5ey4BS0B%74LMl4Umufb>$`T=;^y}YOXHaJ)8asP z+qmbi4Q6wEv~{?w!5yafJwvoU0V>ZtcFbVycW`GjKhSaM5q|MkAI)&V&)0+{klAS@X3=EA`=oCeUsKTmY0RBXo>b|8b z>7_#N>uoZ_2(!&t;)$>Ixz00wW~)6Xoszvae{o8!c~4zpaf^3*O37P?1Xg47a{GPD zhWD2~HE9A_s6^c$TWV>A*uRF!vk>9;Xn|y-pjlPAavvrFT zttm`fla4ROj^3XNIbCd4)f{}KcPVr2?y0Xzj2rkEvsV+vCJn910XKp^#(D-s8J7o8 zy<+li$IBn^o(9(Efc_YgCV|6Y{wz=4*B1&ppjqCjOx^>IJl+i_}lD={0#;r7$GUma4J4?H_@!E|O zDv5`^&~KA#|Gz_Y97%rbc=4JgmGYGc{e# zGw|?fh%9-1WsVvFc;{P=i`$69A!@UoxTIncW6Oh?BJPYc`dYKLyb zV}!%~UCpv)COb-w*y?~Ttze}^$7Gp&&YlO=&ZTCR+bWv0ciGg`+HswGh=F55@>B#d zRU!Plx=Dv@?j1ez_H{x9S>n5{ofnFY(`1fu9Fxa%IUs`Spu5nZL4$r^X_p)Heb;r4XXFr?^wlJJTg-Z z?dogU9YU%_q-nGJ44&Xmo_7khI?MosMO3jahnopDI_aSl_j^RR5N0i0F;zsEE=g66 zlP;?GsCTB6WK`vWul2&CDn&L(-@u483Nyhs+M^|*CCJ>`Ad_M0D9>5I8$4j-kSwfy z1!<|akfd*Ra=h->f<^KBD{$%=6Z1BZ}c`>f9my3k`aWY z8ku`qg>Pxkt{Hmbzm=J2%RIy{CiMqMZ-_d5RTcyd4DFNdZvb#Z08M(T#?Q)e(b z_iCOS!PXIrhvTkj-7bTm_a~H7Oh&qcOziqn$qyv;!_t3UZOyBFk$m%6yYH=pcO!V( zTL_x;PJQ7=Lct!3wvjYZ2>DxMq(S*K)a`G{n_lWy3$rMmrjFVb-R3ds@p2($S_uBI zDdm2kswIkzBTd_4a{h@R^4J7hE1sM()4uY37T43jyTQFaZ>F=c>Wcr;Wmiv}QcTMU(jDR_40s3J>W5DI3mkInlKVV03td5Ag!#P?)}nE@V(y2^aMLfUk%&$0 z$I?VNeGhhzE}E;(r^^snpRdu51U=?x>d(QEY8a1=LS1@IZpRvHP&6;sr*go)$n{y{ zlWQ9eJa3(pbS!D`KRfUK_TCGP3#GNug22%buPPanQ)i)@YtSsisDtJfcCxJTLzc|P zq++IIp`mboE@JPb1o{Q)knCYDPHZ(}F0M&k=RhQZ+f);a8w{nxiU*_+erx6anlJtD zs{mL*o8YUc(fxONzKB-QC1KQ%j>gLJxqkASU4`jB8M(R+nd(mCzC2$~va-9DlLNQZ z55Hf~cTG?cRVz@BJLEH;XYjRQ_>6!slk4h^-6Ru;X)8EWaLf1BsgR+meOipkU`9E8abwX#A#MPu5gPKGs5-f2_suuuOB^^uSUps|AyVn2n I{*DU#3%#Feh5!Hn literal 0 HcmV?d00001 diff --git a/packages/native-helpers/swift-helper/Sources/SwiftHelper/RpcHandler.swift b/packages/native-helpers/swift-helper/Sources/SwiftHelper/RpcHandler.swift new file mode 100644 index 0000000..2820ceb --- /dev/null +++ b/packages/native-helpers/swift-helper/Sources/SwiftHelper/RpcHandler.swift @@ -0,0 +1,247 @@ +import Foundation +import AVFoundation // ADDED + +// Assuming models like RPCRequestSchema, RPCResponseSchema, Error, +// GetAccessibilityTreeDetailsParamsSchema, GetAccessibilityTreeDetailsResultSchema, JSONAny +// are available in the module (e.g., from models.swift) + +class IOBridge: NSObject, AVAudioPlayerDelegate { + private let jsonEncoder: JSONEncoder + private let jsonDecoder: JSONDecoder + private let accessibilityService: AccessibilityService + private var audioPlayer: AVAudioPlayer? + private var audioCompletionHandler: (() -> Void)? + + init(jsonEncoder: JSONEncoder, jsonDecoder: JSONDecoder) { + self.jsonEncoder = jsonEncoder + self.jsonDecoder = jsonDecoder + self.accessibilityService = AccessibilityService() + } + + private func playSound(named soundName: String, completion: (() -> Void)? = nil) { + if audioPlayer?.isPlaying == true { + FileHandle.standardError.write("[IOBridge] Sound '\(audioPlayer?.url?.lastPathComponent ?? "previous")' is playing. Stopping it before playing \(soundName).\n".data(using: .utf8)!) + audioPlayer?.delegate = nil + audioPlayer?.stop() + } + audioPlayer = nil + self.audioCompletionHandler = nil + + self.audioCompletionHandler = completion + + guard let soundURL = Bundle.main.url(forResource: soundName, withExtension: "mp3", subdirectory: "Resources") else { + FileHandle.standardError.write("[IOBridge] Error: \(soundName).mp3 not found in Resources subdirectory. Completion will not be called.\n".data(using: .utf8)!) + self.audioCompletionHandler = nil + return + } + + do { + // Initialize the audio player. It's important to keep a reference to it + // for the duration of the playback, hence the class property. + audioPlayer = try AVAudioPlayer(contentsOf: soundURL) + audioPlayer?.delegate = self + + if audioPlayer?.play() == true { + FileHandle.standardError.write("[IOBridge] Playing sound: \(soundName).mp3. Delegate will handle completion.\n".data(using: .utf8)!) + } else { + FileHandle.standardError.write("[IOBridge] Failed to start playing sound: \(soundName).mp3 (audioPlayer.play() returned false or player is nil). Completion will not be called.\n".data(using: .utf8)!) + self.audioCompletionHandler = nil + } + } catch { + FileHandle.standardError.write("[IOBridge] Error initializing AVAudioPlayer for \(soundName).mp3: \(error.localizedDescription). Completion will not be called.\n".data(using: .utf8)!) + self.audioCompletionHandler = nil + } + } + + // Handles a single RPC Request + func handleRpcRequest(_ request: RPCRequestSchema) { + var rpcResponse: RPCResponseSchema + + switch request.method { + case .getAccessibilityTreeDetails: + var accessibilityParams: GetAccessibilityTreeDetailsParamsSchema? = nil + FileHandle.standardError.write("[IOBridge] Handling getAccessibilityTreeDetails for ID: \(request.id)\n".data(using: .utf8)!) + if let paramsAnyCodable = request.params { + do { + let paramsData = try jsonEncoder.encode(paramsAnyCodable) + accessibilityParams = try jsonDecoder.decode(GetAccessibilityTreeDetailsParamsSchema.self, from: paramsData) + FileHandle.standardError.write("[IOBridge] Decoded accessibilityParams.rootID: \(accessibilityParams?.rootID ?? "nil") for ID: \(request.id)\n".data(using: .utf8)!) + } catch { + FileHandle.standardError.write("[IOBridge] Error decoding getAccessibilityTreeDetails params: \(error.localizedDescription)\n".data(using: .utf8)!) + let errPayload = Error(code: -32602, data: request.params, message: "Invalid params: \(error.localizedDescription)") + rpcResponse = RPCResponseSchema(error: errPayload, id: request.id, result: nil) + sendRpcResponse(rpcResponse) + return + } + } + + // Fetch REAL accessibility tree data using the service + let actualTreeData: AccessibilityElementNode? = accessibilityService.fetchFullAccessibilityTree(rootId: accessibilityParams?.rootID) + + FileHandle.standardError.write("[IOBridge] Fetched actualTreeData from AccessibilityService. Is nil? \(actualTreeData == nil). For ID: \(request.id)\n".data(using: .utf8)!) + + var treeAsJsonAny: JSONAny? = nil + if let dataToEncode = actualTreeData { // dataToEncode is AccessibilityElementNode? + do { + let encodedData = try jsonEncoder.encode(dataToEncode) // Encodes AccessibilityElementNode + treeAsJsonAny = try jsonDecoder.decode(JSONAny.self, from: encodedData) + if let treeDataForLog = try? jsonEncoder.encode(treeAsJsonAny), let treeStringForLog = String(data: treeDataForLog, encoding: .utf8) { + FileHandle.standardError.write("[IOBridge] treeAsJsonAny (after encoding actualTreeData): \(treeStringForLog) for ID: \(request.id)\n".data(using: .utf8)!) + } + } catch { + FileHandle.standardError.write("[IOBridge] Error encoding actualTreeData to JSONAny: \(error.localizedDescription) for ID: \(request.id)\n".data(using: .utf8)!) + } + } + + let resultPayload = GetAccessibilityTreeDetailsResultSchema(tree: treeAsJsonAny) + do { + let resultPayloadForLogData = try jsonEncoder.encode(resultPayload) + if let resultPayloadStringForLog = String(data: resultPayloadForLogData, encoding: .utf8) { + FileHandle.standardError.write("[IOBridge] GetAccessibilityTreeDetailsResultSchema (resultPayload) before final encoding: \(resultPayloadStringForLog) for ID: \(request.id)\n".data(using: .utf8)!) + } + } catch { + FileHandle.standardError.write("[IOBridge] Error encoding resultPayload for logging: \(error.localizedDescription) for ID: \(request.id)\n".data(using: .utf8)!) + } + + var resultAsJsonAny: JSONAny? = nil + do { + let resultPayloadData = try jsonEncoder.encode(resultPayload) + resultAsJsonAny = try jsonDecoder.decode(JSONAny.self, from: resultPayloadData) + } catch { + FileHandle.standardError.write("Error encoding GetAccessibilityTreeDetailsResultSchema to JSONAny: \(error.localizedDescription)\n".data(using: .utf8)!) + } + rpcResponse = RPCResponseSchema(error: nil, id: request.id, result: resultAsJsonAny) + + case .pasteText: // Corrected to use enum case + FileHandle.standardError.write("[IOBridge] Handling pasteText for ID: \(request.id)\n".data(using: .utf8)!) + guard let paramsAnyCodable = request.params else { + let errPayload = Error(code: -32602, data: nil, message: "Missing params for pasteText") + rpcResponse = RPCResponseSchema(error: errPayload, id: request.id, result: nil) + sendRpcResponse(rpcResponse) + return + } + + do { + let paramsData = try jsonEncoder.encode(paramsAnyCodable) + // Corrected to use generated Swift model name from models.swift + let pasteParams = try jsonDecoder.decode(PasteTextParamsSchema.self, from: paramsData) + FileHandle.standardError.write("[IOBridge] Decoded pasteParams.transcript for ID: \(request.id)\n".data(using: .utf8)!) + + // Call the actual paste function (to be implemented in AccessibilityService or similar) + let success = accessibilityService.pasteText(transcript: pasteParams.transcript) + + // Corrected to use generated Swift model name from models.swift + let resultPayload = PasteTextResultSchema(message: success ? "Pasted successfully" : "Paste failed", success: success) + let resultData = try jsonEncoder.encode(resultPayload) + let resultAsJsonAny = try jsonDecoder.decode(JSONAny.self, from: resultData) + rpcResponse = RPCResponseSchema(error: nil, id: request.id, result: resultAsJsonAny) + + } catch { + FileHandle.standardError.write("[IOBridge] Error processing pasteText params or operation: \(error.localizedDescription) for ID: \(request.id)\n".data(using: .utf8)!) + let errPayload = Error(code: -32602, data: request.params, message: "Invalid params or error during paste: \(error.localizedDescription)") + rpcResponse = RPCResponseSchema(error: errPayload, id: request.id, result: nil) + } + + case .muteSystemAudio: + FileHandle.standardError.write("[IOBridge] Handling muteSystemAudio for ID: \(request.id)\n".data(using: .utf8)!) + + playSound(named: "rec-start") { [weak self] in + guard let self = self else { + FileHandle.standardError.write("[IOBridge] self is nil in playSound completion for muteSystemAudio. ID: \(request.id)\n".data(using: .utf8)!) + return + } + + FileHandle.standardError.write("[IOBridge] rec-start.mp3 finished playing successfully. Proceeding to mute system audio. ID: \(request.id)\n".data(using: .utf8)!) + let success = self.accessibilityService.muteSystemAudio() + let resultPayload = MuteSystemAudioResultSchema(message: success ? "Mute command sent" : "Failed to send mute command", success: success) + + var responseToSend: RPCResponseSchema + do { + let resultData = try self.jsonEncoder.encode(resultPayload) + let resultAsJsonAny = try self.jsonDecoder.decode(JSONAny.self, from: resultData) + responseToSend = RPCResponseSchema(error: nil, id: request.id, result: resultAsJsonAny) + } catch { + FileHandle.standardError.write("[IOBridge] Error encoding muteSystemAudio result: \(error.localizedDescription) for ID: \(request.id)\n".data(using: .utf8)!) + let errPayload = Error(code: -32603, data: nil, message: "Error encoding result: \(error.localizedDescription)") + responseToSend = RPCResponseSchema(error: errPayload, id: request.id, result: nil) + } + self.sendRpcResponse(responseToSend) + } + return + + case .restoreSystemAudio: + FileHandle.standardError.write("[IOBridge] Handling restoreSystemAudio for ID: \(request.id)\n".data(using: .utf8)!) + + let success = accessibilityService.restoreSystemAudio() + if success { // Play sound only if restore was successful + playSound(named: "rec-stop") + } + let resultPayload = RestoreSystemAudioResultSchema(message: success ? "Restore command sent" : "Failed to send restore command", success: success) + + do { + let resultData = try jsonEncoder.encode(resultPayload) + let resultAsJsonAny = try jsonDecoder.decode(JSONAny.self, from: resultData) + rpcResponse = RPCResponseSchema(error: nil, id: request.id, result: resultAsJsonAny) + } catch { + FileHandle.standardError.write("[IOBridge] Error encoding pauseSystemAudio result: \(error.localizedDescription) for ID: \(request.id)\n".data(using: .utf8)!) + let errPayload = Error(code: -32603, data: nil, message: "Error encoding result: \(error.localizedDescription)") + rpcResponse = RPCResponseSchema(error: nil, id: request.id, result: nil) + } + + default: + FileHandle.standardError.write("[IOBridge] Method not found: \(request.method) for ID: \(request.id)\n".data(using: .utf8)!) + let errPayload = Error(code: -32601, data: nil, message: "Method not found: \(request.method)") + rpcResponse = RPCResponseSchema(error: errPayload, id: request.id, result: nil) + } + sendRpcResponse(rpcResponse) + } + + private func sendRpcResponse(_ response: RPCResponseSchema) { + do { + let responseData = try jsonEncoder.encode(response) + if let responseString = String(data: responseData, encoding: .utf8) { + FileHandle.standardError.write("[Swift Biz Logic] FINAL JSON RESPONSE to stdout: \(responseString)\n".data(using: .utf8)!) + print(responseString) + fflush(stdout) + } + } catch { + FileHandle.standardError.write("Error encoding RpcResponse: \(error.localizedDescription)\n".data(using: .utf8)!) + } + } + + // Main loop for processing RPC requests from stdin + func processRpcRequests() { + FileHandle.standardError.write("IOBridge: Starting RPC request processing loop.\n".data(using: .utf8)!) + while let line = readLine(strippingNewline: true) { + guard !line.isEmpty, let data = line.data(using: .utf8) else { + FileHandle.standardError.write("Warning: Received empty or non-UTF8 line on stdin.\n".data(using: .utf8)!) + continue + } + + do { + let rpcRequest = try jsonDecoder.decode(RPCRequestSchema.self, from: data) + FileHandle.standardError.write("IOBridge: Received RPC Request ID \(rpcRequest.id), Method: \(rpcRequest.method)\n".data(using: .utf8)!) + handleRpcRequest(rpcRequest) + } catch { + FileHandle.standardError.write("Error decoding RpcRequest from stdin: \(error.localizedDescription). Line: \(line)\n".data(using: .utf8)!) + // Consider sending a parse error if ID can be extracted + } + } + FileHandle.standardError.write("IOBridge: RPC request processing loop finished (stdin closed).\n".data(using: .utf8)!) + } + + // MARK: - AVAudioPlayerDelegate + func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) { + FileHandle.standardError.write("[IOBridge] Sound playback finished (player URL: \(player.url?.lastPathComponent ?? "unknown"), successfully: \(flag)).\n".data(using: .utf8)!) + + let handlerToCall = audioCompletionHandler + audioCompletionHandler = nil + + if flag { + FileHandle.standardError.write("[IOBridge] Sound finished successfully. Executing completion handler.\n".data(using: .utf8)!) + handlerToCall?() + } else { + FileHandle.standardError.write("[IOBridge] Sound did not finish successfully (e.g., stopped or error). Not executing completion handler.\n".data(using: .utf8)!) + } + } +} diff --git a/packages/native-helpers/swift-helper/Sources/SwiftHelper/main.swift b/packages/native-helpers/swift-helper/Sources/SwiftHelper/main.swift new file mode 100644 index 0000000..bbb4e30 --- /dev/null +++ b/packages/native-helpers/swift-helper/Sources/SwiftHelper/main.swift @@ -0,0 +1,123 @@ +import Foundation +import CoreGraphics + +// Define a struct for the key event data +struct KeyEventData: Codable { + let keyCode: CGKeyCode + let eventType: String // "keyDown" or "keyUp" + // Add other relevant data like modifiers if needed + // let flags: CGEventFlags +} + +// Function to handle the event tap +func eventTapCallback(proxy: CGEventTapProxy, type: CGEventType, event: CGEvent, refcon: UnsafeMutableRawPointer?) -> Unmanaged? { + guard let refcon = refcon else { + return Unmanaged.passRetained(event) + } + let anInstance = Unmanaged.fromOpaque(refcon).takeUnretainedValue() + + if type == .keyDown || type == .keyUp { + let keyCode = event.getIntegerValueField(.keyboardEventKeycode) + let eventTypeString = (type == .keyDown) ? "keyDown" : "keyUp" + + let keyEvent = KeyEventData(keyCode: CGKeyCode(keyCode), eventType: eventTypeString) + + anInstance.sendKeyEvent(keyEvent) + } else if type == .tapDisabledByTimeout || type == .tapDisabledByUserInput { + // Re-enable the tap if it times out or is disabled by user input + if let tap = anInstance.eventTap { + CGEvent.tapEnable(tap: tap, enable: true) + } + } + + return Unmanaged.passRetained(event) +} + +class KeyTapHelper { + var eventTap: CFMachPort? + let outputPipe = Pipe() + let errorPipe = Pipe() // For logging errors from the helper + + init() { + // Redirect stdout to the pipe for IPC + // dup2(outputPipe.fileHandleForWriting.fileDescriptor, STDOUT_FILENO) + // For debugging, you might want to print to stderr of the helper itself + // dup2(errorPipe.fileHandleForWriting.fileDescriptor, STDERR_FILENO) + } + + func sendKeyEvent(_ eventData: KeyEventData) { + let encoder = JSONEncoder() + do { + let jsonData = try encoder.encode(eventData) + if let jsonString = String(data: jsonData, encoding: .utf8) { + // Print to stdout, which will be captured by the Electron process + print(jsonString) + fflush(stdout) // Ensure the output is sent immediately + } + } catch { + // Log errors to the helper's stderr + let errorMsg = "Error encoding KeyEventData: \(error)\n" + if let data = errorMsg.data(using: .utf8) { + FileHandle.standardError.write(data) + } + } + } + + func start() { + // The Unmanaged.passUnretained(self).toOpaque() passes a reference to self + // to the callback, so it can call instance methods. + let selfPtr = Unmanaged.passUnretained(self).toOpaque() + + // Create an event tap. + // We want to listen to keyDown and keyUp events. + let eventMask = (1 << CGEventType.keyDown.rawValue) | (1 << CGEventType.keyUp.rawValue) + + guard let tap = CGEvent.tapCreate( + tap: .cgSessionEventTap, // Tap all events in the current session + place: .headInsertEventTap, // Insert the tap at the head of the event tap list + options: .defaultTap, // Default options + eventsOfInterest: CGEventMask(eventMask), + callback: eventTapCallback, + userInfo: selfPtr // Pass a pointer to the KeyTapHelper instance + ) else { + let errorMsg = "Failed to create event tap\n" + if let data = errorMsg.data(using: .utf8) { + FileHandle.standardError.write(data) + } + exit(1) + } + + self.eventTap = tap + + // Create a run loop source and add it to the current run loop. + let runLoopSource = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, tap, 0) + CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, .commonModes) + + // Enable the event tap. + CGEvent.tapEnable(tap: tap, enable: true) + + // Keep the program running. + // This will also print a message to stderr if the helper starts + let startMsg = "KeyTapHelper started and listening for events...\n" + if let data = startMsg.data(using: .utf8) { + FileHandle.standardError.write(data) + } + CFRunLoopRun() + } + + deinit { + if let tap = eventTap { + CGEvent.tapEnable(tap: tap, enable: false) + // CFMachPortInvalidate(tap) // This might be needed for complete cleanup + // CFRelease(tap) // And this + } + let endMsg = "KeyTapHelper stopping.\n" + if let data = endMsg.data(using: .utf8) { + FileHandle.standardError.write(data) + } + } +} + +// Create an instance of the helper and start it. +let helper = KeyTapHelper() +helper.start() diff --git a/packages/native-helpers/swift-helper/package.json b/packages/native-helpers/swift-helper/package.json new file mode 100644 index 0000000..323b36f --- /dev/null +++ b/packages/native-helpers/swift-helper/package.json @@ -0,0 +1,28 @@ +{ + "name": "@amical/swift-helper", + "version": "1.0.0", + "description": "Swift native helper for accessibility APIs and system integration", + "private": true, + "scripts": { + "build": "turbo run build:native", + "build:native": "swift build --configuration release && mkdir -p bin && cp .build/release/SwiftHelper bin/SwiftHelper", + "clean": "rm -rf .build bin", + "dev": "swift build --configuration debug && mkdir -p bin && cp .build/debug/SwiftHelper bin/SwiftHelper" + }, + "files": [ + "bin/*" + ], + "keywords": [ + "swift", + "native", + "accessibility", + "macos" + ], + "os": [ + "darwin" + ], + "cpu": [ + "x64", + "arm64" + ] +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ae2820f..1eae3a4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -25,82 +25,82 @@ importers: version: 5.0.1(react-hook-form@7.56.4(react@19.1.0)) '@radix-ui/react-accordion': specifier: ^1.2.10 - version: 1.2.10(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.2.11(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-alert-dialog': specifier: ^1.1.13 - version: 1.1.13(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.14(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-aspect-ratio': specifier: ^1.1.6 - version: 1.1.6(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-avatar': specifier: ^1.1.9 - version: 1.1.9(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.10(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-checkbox': specifier: ^1.3.1 - version: 1.3.1(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.3.2(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-collapsible': specifier: ^1.1.10 - version: 1.1.10(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.11(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-context-menu': specifier: ^2.2.14 - version: 2.2.14(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 2.2.15(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-dialog': specifier: ^1.1.13 - version: 1.1.13(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.14(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-dropdown-menu': specifier: ^2.1.14 - version: 2.1.14(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 2.1.15(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-hover-card': specifier: ^1.1.13 - version: 1.1.13(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.14(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-label': specifier: ^2.1.6 - version: 2.1.6(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 2.1.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-menubar': specifier: ^1.1.14 - version: 1.1.14(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.15(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-navigation-menu': specifier: ^1.2.12 - version: 1.2.12(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.2.13(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-popover': specifier: ^1.1.13 - version: 1.1.13(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.14(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-progress': specifier: ^1.1.6 - version: 1.1.6(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-radio-group': specifier: ^1.3.6 - version: 1.3.6(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.3.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-scroll-area': specifier: ^1.2.8 - version: 1.2.8(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.2.9(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-select': specifier: ^2.2.4 - version: 2.2.4(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 2.2.5(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-separator': specifier: ^1.1.6 - version: 1.1.6(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-slider': specifier: ^1.3.4 - version: 1.3.4(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.3.5(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-slot': specifier: ^1.2.2 - version: 1.2.2(@types/react@19.1.3)(react@19.1.0) + version: 1.2.3(@types/react@19.1.5)(react@19.1.0) '@radix-ui/react-switch': specifier: ^1.2.4 - version: 1.2.4(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.2.5(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-tabs': specifier: ^1.1.11 - version: 1.1.11(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.12(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-toggle': specifier: ^1.1.8 - version: 1.1.8(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.9(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-toggle-group': specifier: ^1.1.9 - version: 1.1.9(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.10(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-tooltip': specifier: ^1.2.6 - version: 1.2.6(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.2.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@ricky0123/vad-web': specifier: ^0.0.24 version: 0.0.24 @@ -127,7 +127,7 @@ importers: version: 2.1.1 cmdk: specifier: ^1.1.1 - version: 1.1.1(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.1(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) date-fns: specifier: ^4.1.0 version: 4.1.0 @@ -151,7 +151,7 @@ importers: version: 8.6.0(react@19.1.0) framer-motion: specifier: ^12.10.5 - version: 12.12.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 12.12.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) input-otp: specifier: ^1.4.2 version: 1.4.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -166,7 +166,7 @@ importers: version: 0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) openai: specifier: ^4.98.0 - version: 4.100.0(encoding@0.1.13)(ws@8.17.1)(zod@3.24.4) + version: 4.103.0(encoding@0.1.13)(zod@3.25.24) react: specifier: ^19.1.0 version: 19.1.0 @@ -196,13 +196,13 @@ importers: version: 3.3.0 tw-animate-css: specifier: ^1.2.9 - version: 1.2.9 + version: 1.3.0 uuid: specifier: ^11.1.0 version: 11.1.0 vaul: specifier: ^1.1.2 - version: 1.1.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.2(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) devDependencies: '@electron-forge/cli': specifier: ^7.8.1 @@ -233,40 +233,40 @@ importers: version: 1.8.0 '@tailwindcss/vite': specifier: ^4.1.6 - version: 4.1.7(vite@5.4.19(@types/node@16.18.126)(lightningcss@1.29.2)) + version: 4.1.7(vite@5.4.19(@types/node@16.18.126)(lightningcss@1.30.1)) '@types/react': specifier: ^19.1.3 - version: 19.1.3 + version: 19.1.5 '@types/react-dom': specifier: ^19.1.3 - version: 19.1.3(@types/react@19.1.3) + version: 19.1.5(@types/react@19.1.5) '@typescript-eslint/eslint-plugin': specifier: ^5.62.0 - version: 5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) + version: 5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) '@typescript-eslint/parser': specifier: ^5.62.0 - version: 5.62.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) + version: 5.62.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) electron: specifier: 36.2.0 version: 36.2.0 eslint: specifier: ^9.26.0 - version: 9.26.0(jiti@2.4.2) + version: 9.27.0(jiti@2.4.2) eslint-config-prettier: specifier: ^9.1.0 - version: 9.1.0(eslint@9.26.0(jiti@2.4.2)) + version: 9.1.0(eslint@9.27.0(jiti@2.4.2)) eslint-plugin-import: specifier: ^2.31.0 - version: 2.31.0(@typescript-eslint/parser@5.62.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.26.0(jiti@2.4.2)) + version: 2.31.0(@typescript-eslint/parser@5.62.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2)) eslint-plugin-prettier: specifier: ^5.4.0 - version: 5.4.0(eslint-config-prettier@9.1.0(eslint@9.26.0(jiti@2.4.2)))(eslint@9.26.0(jiti@2.4.2))(prettier@3.5.3) + version: 5.4.0(eslint-config-prettier@9.1.0(eslint@9.27.0(jiti@2.4.2)))(eslint@9.27.0(jiti@2.4.2))(prettier@3.5.3) prettier: specifier: ^3.5.3 version: 3.5.3 quicktype: - specifier: ^23.1.4 - version: 23.2.5(encoding@0.1.13) + specifier: 23.1.4 + version: 23.1.4(encoding@0.1.13) tailwindcss: specifier: ^4.1.6 version: 4.1.7 @@ -278,13 +278,13 @@ importers: version: 5.8.3 vite: specifier: ^5.4.19 - version: 5.4.19(@types/node@16.18.126)(lightningcss@1.29.2) + version: 5.4.19(@types/node@16.18.126)(lightningcss@1.30.1) zod: specifier: ^3.24.4 - version: 3.24.4 + version: 3.25.24 zod-to-json-schema: specifier: ^3.24.5 - version: 3.24.5(zod@3.24.4) + version: 3.24.5(zod@3.25.24) apps/www: dependencies: @@ -293,22 +293,22 @@ importers: version: 15.3.2(next@15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0) '@radix-ui/react-accordion': specifier: ^1.2.10 - version: 1.2.10(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.2.11(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-checkbox': specifier: ^1.3.1 - version: 1.3.1(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.3.2(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-dialog': specifier: ^1.1.13 - version: 1.1.13(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.14(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-label': specifier: ^2.1.6 - version: 2.1.6(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 2.1.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-slot': specifier: ^1.2.2 - version: 1.2.2(@types/react@19.1.3)(react@19.1.0) + version: 1.2.3(@types/react@19.1.5)(react@19.1.0) '@radix-ui/react-tooltip': specifier: ^1.2.6 - version: 1.2.6(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.2.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) class-variance-authority: specifier: ^0.7.1 version: 0.7.1 @@ -317,13 +317,13 @@ importers: version: 2.1.1 fumadocs-core: specifier: 15.3.0 - version: 15.3.0(@types/react@19.1.3)(next@15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 15.3.0(@types/react@19.1.5)(next@15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) fumadocs-mdx: specifier: 11.6.3 - version: 11.6.3(acorn@8.14.1)(fumadocs-core@15.3.0(@types/react@19.1.3)(next@15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(next@15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)) + version: 11.6.3(acorn@8.14.1)(fumadocs-core@15.3.0(@types/react@19.1.5)(next@15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(next@15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)) fumadocs-ui: specifier: 15.3.0 - version: 15.3.0(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(next@15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(tailwindcss@4.1.5) + version: 15.3.0(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(next@15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(tailwindcss@4.1.7) lucide-react: specifier: ^0.509.0 version: 0.509.0(react@19.1.0) @@ -344,11 +344,11 @@ importers: version: 4.0.3 tailwind-merge: specifier: ^3.2.0 - version: 3.2.0 + version: 3.3.0 devDependencies: '@tailwindcss/postcss': specifier: ^4.1.5 - version: 4.1.5 + version: 4.1.7 '@types/mdx': specifier: ^2.0.13 version: 2.0.13 @@ -357,10 +357,10 @@ importers: version: 22.15.12 '@types/react': specifier: ^19.1.3 - version: 19.1.3 + version: 19.1.5 '@types/react-dom': specifier: ^19.1.3 - version: 19.1.3(@types/react@19.1.3) + version: 19.1.5(@types/react@19.1.5) globby: specifier: ^14.1.0 version: 14.1.0 @@ -372,13 +372,13 @@ importers: version: 1.0.41 tailwindcss: specifier: ^4.1.5 - version: 4.1.5 + version: 4.1.7 tsx: specifier: ^4.19.4 version: 4.19.4 tw-animate-css: specifier: ^1.2.9 - version: 1.2.9 + version: 1.3.0 typescript: specifier: ^5.8.3 version: 5.8.3 @@ -387,37 +387,39 @@ importers: devDependencies: '@eslint/js': specifier: ^9.26.0 - version: 9.26.0 + version: 9.27.0 '@next/eslint-plugin-next': specifier: ^15.3.0 - version: 15.3.0 + version: 15.3.2 eslint: specifier: ^9.26.0 - version: 9.26.0(jiti@2.4.2) + version: 9.27.0(jiti@2.4.2) eslint-config-prettier: specifier: ^10.1.1 - version: 10.1.1(eslint@9.26.0(jiti@2.4.2)) + version: 10.1.5(eslint@9.27.0(jiti@2.4.2)) eslint-plugin-only-warn: specifier: ^1.1.0 version: 1.1.0 eslint-plugin-react: specifier: ^7.37.4 - version: 7.37.4(eslint@9.26.0(jiti@2.4.2)) + version: 7.37.5(eslint@9.27.0(jiti@2.4.2)) eslint-plugin-react-hooks: specifier: ^5.2.0 - version: 5.2.0(eslint@9.26.0(jiti@2.4.2)) + version: 5.2.0(eslint@9.27.0(jiti@2.4.2)) eslint-plugin-turbo: specifier: ^2.5.0 - version: 2.5.0(eslint@9.26.0(jiti@2.4.2))(turbo@2.5.3) + version: 2.5.3(eslint@9.27.0(jiti@2.4.2))(turbo@2.5.3) globals: specifier: ^16.0.0 - version: 16.0.0 + version: 16.1.0 typescript: specifier: ^5.8.2 - version: 5.8.2 + version: 5.8.3 typescript-eslint: specifier: ^8.31.0 - version: 8.31.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.2) + version: 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + + packages/native-helpers/swift-helper: {} packages/typescript-config: {} @@ -438,10 +440,10 @@ importers: version: link:../typescript-config '@turbo/gen': specifier: ^2.5.0 - version: 2.5.0(@types/node@22.15.3)(typescript@5.8.2) + version: 2.5.3(@types/node@22.15.12)(typescript@5.8.2) '@types/node': specifier: ^22.15.3 - version: 22.15.3 + version: 22.15.12 '@types/react': specifier: 19.1.0 version: 19.1.0 @@ -450,7 +452,7 @@ importers: version: 19.1.1(@types/react@19.1.0) eslint: specifier: ^9.26.0 - version: 9.26.0(jiti@2.4.2) + version: 9.27.0(jiti@2.4.2) typescript: specifier: 5.8.2 version: 5.8.2 @@ -478,8 +480,8 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - '@babel/runtime-corejs3@7.27.0': - resolution: {integrity: sha512-UWjX6t+v+0ckwZ50Y5ShZLnlk95pP5MyW/pon9tiYzl3+18pkTHTFNTKr7rQbfRXPkowt2QAn30o1b6oswszew==} + '@babel/runtime-corejs3@7.27.1': + resolution: {integrity: sha512-909rVuj3phpjW6y0MCXAZ5iNeORePa6ldJvp2baWGcTjwqbBDDz6xoS5JHJ7lS88NlwLYj07ImL/8IUMtDZzTA==} engines: {node: '>=6.9.0'} '@babel/runtime@7.27.1': @@ -635,8 +637,8 @@ packages: engines: {node: '>=14.14'} hasBin: true - '@emnapi/runtime@1.4.1': - resolution: {integrity: sha512-LMshMVP0ZhACNjQNYXiU1iZJ6QCcv0lUdPDPugqGvCGXt5xtRVBPdtA0qU12pEXZzpWAhWlZYptfdAFq10DOVQ==} + '@emnapi/runtime@1.4.3': + resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} '@esbuild-kit/core-utils@3.3.2': resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} @@ -1084,24 +1086,24 @@ packages: resolution: {integrity: sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.13.0': - resolution: {integrity: sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==} + '@eslint/core@0.14.0': + resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/eslintrc@3.3.1': resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.26.0': - resolution: {integrity: sha512-I9XlJawFdSMvWjDt6wksMCrgns5ggLNfFwFvnShsleWruvXM514Qxk8V246efTw+eo9JABvVz+u3q2RiAowKxQ==} + '@eslint/js@9.27.0': + resolution: {integrity: sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==} 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.2.8': - resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==} + '@eslint/plugin-kit@0.3.1': + resolution: {integrity: sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@floating-ui/core@1.7.0': @@ -1152,18 +1154,18 @@ packages: resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} engines: {node: '>=18.18'} - '@humanwhocodes/retry@0.4.2': - resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} - '@img/sharp-darwin-arm64@0.34.1': - resolution: {integrity: sha512-pn44xgBtgpEbZsu+lWf2KNb6OAf70X68k+yk69Ic2Xz11zHR/w24/U49XT7AeRwJ0Px+mhALhU5LPci1Aymk7A==} + '@img/sharp-darwin-arm64@0.34.2': + resolution: {integrity: sha512-OfXHZPppddivUJnqyKoi5YVeHRkkNE2zUFT2gbpKxp/JZCFYEYubnMg+gOp6lWfasPrTS+KPosKqdI+ELYVDtg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [darwin] - '@img/sharp-darwin-x64@0.34.1': - resolution: {integrity: sha512-VfuYgG2r8BpYiOUN+BfYeFo69nP/MIwAtSJ7/Zpxc5QF3KS22z8Pvg3FkrSFJBPNQ7mmcUcYQFBmEQp7eu1F8Q==} + '@img/sharp-darwin-x64@0.34.2': + resolution: {integrity: sha512-dYvWqmjU9VxqXmjEtjmvHnGqF8GrVjM2Epj9rJ6BUIXvk8slvNDJbhGFvIoXzkDhrJC2jUxNLz/GUjjvSzfw+g==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [darwin] @@ -1213,55 +1215,61 @@ packages: cpu: [x64] os: [linux] - '@img/sharp-linux-arm64@0.34.1': - resolution: {integrity: sha512-kX2c+vbvaXC6vly1RDf/IWNXxrlxLNpBVWkdpRq5Ka7OOKj6nr66etKy2IENf6FtOgklkg9ZdGpEu9kwdlcwOQ==} + '@img/sharp-linux-arm64@0.34.2': + resolution: {integrity: sha512-D8n8wgWmPDakc83LORcfJepdOSN6MvWNzzz2ux0MnIbOqdieRZwVYY32zxVx+IFUT8er5KPcyU3XXsn+GzG/0Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - '@img/sharp-linux-arm@0.34.1': - resolution: {integrity: sha512-anKiszvACti2sGy9CirTlNyk7BjjZPiML1jt2ZkTdcvpLU1YH6CXwRAZCA2UmRXnhiIftXQ7+Oh62Ji25W72jA==} + '@img/sharp-linux-arm@0.34.2': + resolution: {integrity: sha512-0DZzkvuEOqQUP9mo2kjjKNok5AmnOr1jB2XYjkaoNRwpAYMDzRmAqUIa1nRi58S2WswqSfPOWLNOr0FDT3H5RQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] - '@img/sharp-linux-s390x@0.34.1': - resolution: {integrity: sha512-7s0KX2tI9mZI2buRipKIw2X1ufdTeaRgwmRabt5bi9chYfhur+/C1OXg3TKg/eag1W+6CCWLVmSauV1owmRPxA==} + '@img/sharp-linux-s390x@0.34.2': + resolution: {integrity: sha512-EGZ1xwhBI7dNISwxjChqBGELCWMGDvmxZXKjQRuqMrakhO8QoMgqCrdjnAqJq/CScxfRn+Bb7suXBElKQpPDiw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] - '@img/sharp-linux-x64@0.34.1': - resolution: {integrity: sha512-wExv7SH9nmoBW3Wr2gvQopX1k8q2g5V5Iag8Zk6AVENsjwd+3adjwxtp3Dcu2QhOXr8W9NusBU6XcQUohBZ5MA==} + '@img/sharp-linux-x64@0.34.2': + resolution: {integrity: sha512-sD7J+h5nFLMMmOXYH4DD9UtSNBD05tWSSdWAcEyzqW8Cn5UxXvsHAxmxSesYUsTOBmUnjtxghKDl15EvfqLFbQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - '@img/sharp-linuxmusl-arm64@0.34.1': - resolution: {integrity: sha512-DfvyxzHxw4WGdPiTF0SOHnm11Xv4aQexvqhRDAoD00MzHekAj9a/jADXeXYCDFH/DzYruwHbXU7uz+H+nWmSOQ==} + '@img/sharp-linuxmusl-arm64@0.34.2': + resolution: {integrity: sha512-NEE2vQ6wcxYav1/A22OOxoSOGiKnNmDzCYFOZ949xFmrWZOVII1Bp3NqVVpvj+3UeHMFyN5eP/V5hzViQ5CZNA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - '@img/sharp-linuxmusl-x64@0.34.1': - resolution: {integrity: sha512-pax/kTR407vNb9qaSIiWVnQplPcGU8LRIJpDT5o8PdAx5aAA7AS3X9PS8Isw1/WfqgQorPotjrZL3Pqh6C5EBg==} + '@img/sharp-linuxmusl-x64@0.34.2': + resolution: {integrity: sha512-DOYMrDm5E6/8bm/yQLCWyuDJwUnlevR8xtF8bs+gjZ7cyUNYXiSf/E8Kp0Ss5xasIaXSHzb888V1BE4i1hFhAA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - '@img/sharp-wasm32@0.34.1': - resolution: {integrity: sha512-YDybQnYrLQfEpzGOQe7OKcyLUCML4YOXl428gOOzBgN6Gw0rv8dpsJ7PqTHxBnXnwXr8S1mYFSLSa727tpz0xg==} + '@img/sharp-wasm32@0.34.2': + resolution: {integrity: sha512-/VI4mdlJ9zkaq53MbIG6rZY+QRN3MLbR6usYlgITEzi4Rpx5S6LFKsycOQjkOGmqTNmkIdLjEvooFKwww6OpdQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [wasm32] - '@img/sharp-win32-ia32@0.34.1': - resolution: {integrity: sha512-WKf/NAZITnonBf3U1LfdjoMgNO5JYRSlhovhRhMxXVdvWYveM4kM3L8m35onYIdh75cOMCo1BexgVQcCDzyoWw==} + '@img/sharp-win32-arm64@0.34.2': + resolution: {integrity: sha512-cfP/r9FdS63VA5k0xiqaNaEoGxBg9k7uE+RQGzuK9fHt7jib4zAVVseR9LsE4gJcNWgT6APKMNnCcnyOtmSEUQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [win32] + + '@img/sharp-win32-ia32@0.34.2': + resolution: {integrity: sha512-QLjGGvAbj0X/FXl8n1WbtQ6iVBpWU7JO94u/P2M4a8CFYsvQi4GW2mRy/JqkRx0qpBzaOdKJKw8uc930EX2AHw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ia32] os: [win32] - '@img/sharp-win32-x64@0.34.1': - resolution: {integrity: sha512-hw1iIAHpNE8q3uMIRCgGOeDoz9KtFNarFLQclLxr/LK1VBkj8nby18RjFvr6aP7USRYAjTZW6yisnBWMX571Tw==} + '@img/sharp-win32-x64@0.34.2': + resolution: {integrity: sha512-aUdT6zEYtDKCaxkofmmJDJYGCf0+pJg3eU9/oBuqvEeoB9dKI6ZLc/1iLJCTuJQDO4ptntAlkUmHgGjyuobZbw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [win32] @@ -1309,15 +1317,11 @@ packages: '@mdx-js/mdx@3.1.0': resolution: {integrity: sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==} - '@modelcontextprotocol/sdk@1.11.0': - resolution: {integrity: sha512-k/1pb70eD638anoi0e8wUGAlbMJXyvdV4p62Ko+EZ7eBe1xMx8Uhak1R5DgfoofsK5IBBnRwsYGTaLZl+6/+RQ==} - engines: {node: '>=18'} - '@next/env@15.3.1': resolution: {integrity: sha512-cwK27QdzrMblHSn9DZRV+DQscHXRuJv6MydlJRpFSqJWZrTYMLzKDeyueJNN9MGd8NNiUKzDQADAf+dMLXX7YQ==} - '@next/eslint-plugin-next@15.3.0': - resolution: {integrity: sha512-511UUcpWw5GWTyKfzW58U2F/bYJyjLE9e3SlnGK/zSXq7RqLlqFO8B9bitJjumLpj317fycC96KZ2RZsjGNfBw==} + '@next/eslint-plugin-next@15.3.2': + resolution: {integrity: sha512-ijVRTXBgnHT33aWnDtmlG+LJD+5vhc9AKTJPquGG5NKXjpKNjc62woIhFtrAcWdBobt8kqjCoaJ0q6sDQoX7aQ==} '@next/swc-darwin-arm64@15.3.1': resolution: {integrity: sha512-hjDw4f4/nla+6wysBL07z52Gs55Gttp5Bsk5/8AncQLJoisvTBP0pRIBK/B16/KqQyH+uN4Ww8KkcAqJODYH3w==} @@ -1398,9 +1402,9 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} deprecated: This functionality has been moved to @npmcli/fs - '@orama/orama@3.1.6': - resolution: {integrity: sha512-qtSrqCqRU93SjEBedz987tvWao1YQSELjBhGkHYGVP7Dg0lBWP6d+uZEIt5gxTAYio/YWWlhivmRABvRfPLmnQ==} - engines: {node: '>= 16.0.0'} + '@orama/orama@3.1.7': + resolution: {integrity: sha512-6yB0117ZjsgNevZw3LP+bkrZa9mU/POPVaXgzMPOBbBc35w2P3R+1vMMhEfC06kYCpd5bf0jodBaTkYQW5TVeQ==} + engines: {node: '>= 20.0.0'} '@paralleldrive/cuid2@2.2.2': resolution: {integrity: sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==} @@ -1445,8 +1449,8 @@ packages: '@radix-ui/primitive@1.1.2': resolution: {integrity: sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==} - '@radix-ui/react-accordion@1.2.10': - resolution: {integrity: sha512-x+URzV1siKmeXPSUIQ22L81qp2eOhjpy3tgteF+zOr4d1u0qJnFuyBF4MoQRhmKP6ivDxlvDAvqaF77gh7DOIw==} + '@radix-ui/react-accordion@1.2.11': + resolution: {integrity: sha512-l3W5D54emV2ues7jjeG1xcyN7S3jnK3zE2zHqgn0CmMsy9lNJwmgcrmaxS+7ipw15FAivzKNzH3d5EcGoFKw0A==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1458,8 +1462,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-alert-dialog@1.1.13': - resolution: {integrity: sha512-/uPs78OwxGxslYOG5TKeUsv9fZC0vo376cXSADdKirTmsLJU2au6L3n34c3p6W26rFDDDze/hwy4fYeNd0qdGA==} + '@radix-ui/react-alert-dialog@1.1.14': + resolution: {integrity: sha512-IOZfZ3nPvN6lXpJTBCunFQPRSvK8MDgSc1FB85xnIpUKOw9en0dJj8JmCAxV7BiZdtYlUpmrQjoTFkVYtdoWzQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1471,8 +1475,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-arrow@1.1.6': - resolution: {integrity: sha512-2JMfHJf/eVnwq+2dewT3C0acmCWD3XiVA1Da+jTDqo342UlU13WvXtqHhG+yJw5JeQmu4ue2eMy6gcEArLBlcw==} + '@radix-ui/react-arrow@1.1.7': + resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1484,8 +1488,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-aspect-ratio@1.1.6': - resolution: {integrity: sha512-cZvNiIKqWQjf3DsQk1+wktF3DD73kUbWQ2E/XSh8m2IcpFGwg4IiIvGlVNdovxuozK/9+4QXd2zVlzUMiexSDg==} + '@radix-ui/react-aspect-ratio@1.1.7': + resolution: {integrity: sha512-Yq6lvO9HQyPwev1onK1daHCHqXVLzPhSVjmsNjCa2Zcxy2f7uJD2itDtxknv6FzAKCwD1qQkeVDmX/cev13n/g==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1497,8 +1501,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-avatar@1.1.9': - resolution: {integrity: sha512-10tQokfvZdFvnvDkcOJPjm2pWiP8A0R4T83MoD7tb15bC/k2GU7B1YBuzJi8lNQ8V1QqhP8ocNqp27ByZaNagQ==} + '@radix-ui/react-avatar@1.1.10': + resolution: {integrity: sha512-V8piFfWapM5OmNCXTzVQY+E1rDa53zY+MQ4Y7356v4fFz6vqCyUtIz2rUD44ZEdwg78/jKmMJHj07+C/Z/rcog==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1510,8 +1514,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-checkbox@1.3.1': - resolution: {integrity: sha512-xTaLKAO+XXMPK/BpVTSaAAhlefmvMSACjIhK9mGsImvX2ljcTDm8VGR1CuS1uYcNdR5J+oiOhoJZc5un6bh3VQ==} + '@radix-ui/react-checkbox@1.3.2': + resolution: {integrity: sha512-yd+dI56KZqawxKZrJ31eENUwqc1QSqg4OZ15rybGjF2ZNwMO+wCyHzAVLRp9qoYJf7kYy0YpZ2b0JCzJ42HZpA==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1523,8 +1527,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-collapsible@1.1.10': - resolution: {integrity: sha512-O2mcG3gZNkJ/Ena34HurA3llPOEA/M4dJtIRMa6y/cknRDC8XY5UZBInKTsUwW5cUue9A4k0wi1XU5fKBzKe1w==} + '@radix-ui/react-collapsible@1.1.11': + resolution: {integrity: sha512-2qrRsVGSCYasSz1RFOorXwl0H7g7J1frQtgpQgYrt+MOidtPAINHn9CPovQXb83r8ahapdx3Tu0fa/pdFFSdPg==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1536,8 +1540,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-collection@1.1.6': - resolution: {integrity: sha512-PbhRFK4lIEw9ADonj48tiYWzkllz81TM7KVYyyMMw2cwHO7D5h4XKEblL8NlaRisTK3QTe6tBEhDccFUryxHBQ==} + '@radix-ui/react-collection@1.1.7': + resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1558,8 +1562,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-context-menu@2.2.14': - resolution: {integrity: sha512-RUHvrJE2qKAd9pQ50HZZsePio4SMWEh8v6FWQwg/4t6K1fuxfb4Ec40VEVvni6V7nFxmj9srU4UZc7aYp8x0LQ==} + '@radix-ui/react-context-menu@2.2.15': + resolution: {integrity: sha512-UsQUMjcYTsBjTSXw0P3GO0werEQvUY2plgRQuKoCTtkNr45q1DiL51j4m7gxhABzZ0BadoXNsIbg7F3KwiUBbw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1580,8 +1584,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-dialog@1.1.13': - resolution: {integrity: sha512-ARFmqUyhIVS3+riWzwGTe7JLjqwqgnODBUZdqpWar/z1WFs9z76fuOs/2BOWCR+YboRn4/WN9aoaGVwqNRr8VA==} + '@radix-ui/react-dialog@1.1.14': + resolution: {integrity: sha512-+CpweKjqpzTmwRwcYECQcNYbI8V9VSQt0SNFKeEBLgfucbsLssU6Ppq7wUdNXEGb573bMjFhVjKVll8rmV6zMw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1602,8 +1606,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-dismissable-layer@1.1.9': - resolution: {integrity: sha512-way197PiTvNp+WBP7svMJasHl+vibhWGQDb6Mgf5mhEWJkgb85z7Lfl9TUdkqpWsf8GRNmoopx9ZxCyDzmgRMQ==} + '@radix-ui/react-dismissable-layer@1.1.10': + resolution: {integrity: sha512-IM1zzRV4W3HtVgftdQiiOmA0AdJlCtMLe00FXaHwgt3rAnNsIyDqshvkIW3hj/iu5hu8ERP7KIYki6NkqDxAwQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1615,8 +1619,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-dropdown-menu@2.1.14': - resolution: {integrity: sha512-lzuyNjoWOoaMFE/VC5FnAAYM16JmQA8ZmucOXtlhm2kKR5TSU95YLAueQ4JYuRmUJmBvSqXaVFGIfuukybwZJQ==} + '@radix-ui/react-dropdown-menu@2.1.15': + resolution: {integrity: sha512-mIBnOjgwo9AH3FyKaSWoSu/dYj6VdhJ7frEPiGTeXCdUFHjl9h3mFh2wwhEtINOmYXWhdpf1rY2minFsmaNgVQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1637,8 +1641,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-focus-scope@1.1.6': - resolution: {integrity: sha512-r9zpYNUQY+2jWHWZGyddQLL9YHkM/XvSFHVcWs7bdVuxMAnCwTAuy6Pf47Z4nw7dYcUou1vg/VgjjrrH03VeBw==} + '@radix-ui/react-focus-scope@1.1.7': + resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1650,8 +1654,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-hover-card@1.1.13': - resolution: {integrity: sha512-Wtjvx0d/6Bgd/jAYS1mW6IPSUQ25y0hkUSOS1z5/4+U8+DJPwKroqJlM/AlVFl3LywGoruiPmcvB9Aks9mSOQw==} + '@radix-ui/react-hover-card@1.1.14': + resolution: {integrity: sha512-CPYZ24Mhirm+g6D8jArmLzjYu4Eyg3TTUHswR26QgzXBHBe64BO/RHOJKzmF/Dxb4y4f9PKyJdwm/O/AhNkb+Q==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1672,8 +1676,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-label@2.1.6': - resolution: {integrity: sha512-S/hv1mTlgcPX2gCTJrWuTjSXf7ER3Zf7zWGtOprxhIIY93Qin3n5VgNA0Ez9AgrK/lEtlYgzLd4f5x6AVar4Yw==} + '@radix-ui/react-label@2.1.7': + resolution: {integrity: sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1685,8 +1689,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-menu@2.1.14': - resolution: {integrity: sha512-0zSiBAIFq9GSKoSH5PdEaQeRB3RnEGxC+H2P0egtnKoKKLNBH8VBHyVO6/jskhjAezhOIplyRUj7U2lds9A+Yg==} + '@radix-ui/react-menu@2.1.15': + resolution: {integrity: sha512-tVlmA3Vb9n8SZSd+YSbuFR66l87Wiy4du+YE+0hzKQEANA+7cWKH1WgqcEX4pXqxUFQKrWQGHdvEfw00TjFiew==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1698,8 +1702,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-menubar@1.1.14': - resolution: {integrity: sha512-nWLOS7EG3iYhT/zlE/Pbip17rrMnV/0AS7ueb3pKHTSAnpA6/N9rXQYowulZw4owZ9P+qSilHsFzSx/kU7yplQ==} + '@radix-ui/react-menubar@1.1.15': + resolution: {integrity: sha512-Z71C7LGD+YDYo3TV81paUs8f3Zbmkvg6VLRQpKYfzioOE6n7fOhA3ApK/V/2Odolxjoc4ENk8AYCjohCNayd5A==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1711,8 +1715,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-navigation-menu@1.2.12': - resolution: {integrity: sha512-iExvawdu7n6DidDJRU5pMTdi+Z3DaVPN4UZbAGuTs7nJA8P4RvvkEz+XYI2UJjb/Hh23RrH19DakgZNLdaq9Bw==} + '@radix-ui/react-navigation-menu@1.2.13': + resolution: {integrity: sha512-WG8wWfDiJlSF5hELjwfjSGOXcBR/ZMhBFCGYe8vERpC39CQYZeq1PQ2kaYHdye3V95d06H89KGMsVCIE4LWo3g==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1724,8 +1728,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-popover@1.1.13': - resolution: {integrity: sha512-84uqQV3omKDR076izYgcha6gdpN8m3z6w/AeJ83MSBJYVG/AbOHdLjAgsPZkeC/kt+k64moXFCnio8BbqXszlw==} + '@radix-ui/react-popover@1.1.14': + resolution: {integrity: sha512-ODz16+1iIbGUfFEfKx2HTPKizg2MN39uIOV8MXeHnmdd3i/N9Wt7vU46wbHsqA0xoaQyXVcs0KIlBdOA2Y95bw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1737,8 +1741,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-popper@1.2.6': - resolution: {integrity: sha512-7iqXaOWIjDBfIG7aq8CUEeCSsQMLFdn7VEE8TaFz704DtEzpPHR7w/uuzRflvKgltqSAImgcmxQ7fFX3X7wasg==} + '@radix-ui/react-popper@1.2.7': + resolution: {integrity: sha512-IUFAccz1JyKcf/RjB552PlWwxjeCJB8/4KxT7EhBHOJM+mN7LdW+B3kacJXILm32xawcMMjb2i0cIZpo+f9kiQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1750,8 +1754,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-portal@1.1.8': - resolution: {integrity: sha512-hQsTUIn7p7fxCPvao/q6wpbxmCwgLrlz+nOrJgC+RwfZqWY/WN+UMqkXzrtKbPrF82P43eCTl3ekeKuyAQbFeg==} + '@radix-ui/react-portal@1.1.9': + resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1776,8 +1780,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-primitive@2.1.2': - resolution: {integrity: sha512-uHa+l/lKfxuDD2zjN/0peM/RhhSmRjr5YWdk/37EnSv1nJ88uvG85DPexSm8HdFQROd2VdERJ6ynXbkCFi+APw==} + '@radix-ui/react-primitive@2.1.3': + resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1789,8 +1793,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-progress@1.1.6': - resolution: {integrity: sha512-QzN9a36nKk2eZKMf9EBCia35x3TT+SOgZuzQBVIHyRrmYYi73VYBRK3zKwdJ6az/F5IZ6QlacGJBg7zfB85liA==} + '@radix-ui/react-progress@1.1.7': + resolution: {integrity: sha512-vPdg/tF6YC/ynuBIJlk1mm7Le0VgW6ub6J2UWnTQ7/D23KXcPI1qy+0vBkgKgd38RCMJavBXpB83HPNFMTb0Fg==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1802,8 +1806,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-radio-group@1.3.6': - resolution: {integrity: sha512-1tfTAqnYZNVwSpFhCT273nzK8qGBReeYnNTPspCggqk1fvIrfVxJekIuBFidNivzpdiMqDwVGnQvHqXrRPM4Og==} + '@radix-ui/react-radio-group@1.3.7': + resolution: {integrity: sha512-9w5XhD0KPOrm92OTTE0SysH3sYzHsSTHNvZgUBo/VZ80VdYyB5RneDbc0dKpURS24IxkoFRu/hI0i4XyfFwY6g==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1815,8 +1819,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-roving-focus@1.1.9': - resolution: {integrity: sha512-ZzrIFnMYHHCNqSNCsuN6l7wlewBEq0O0BCSBkabJMFXVO51LRUTq71gLP1UxFvmrXElqmPjA5VX7IqC9VpazAQ==} + '@radix-ui/react-roving-focus@1.1.10': + resolution: {integrity: sha512-dT9aOXUen9JSsxnMPv/0VqySQf5eDQ6LCk5Sw28kamz8wSOW2bJdlX2Bg5VUIIcV+6XlHpWTIuTPCf/UNIyq8Q==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1828,8 +1832,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-scroll-area@1.2.8': - resolution: {integrity: sha512-K5h1RkYA6M0Sn61BV5LQs686zqBsSC0sGzL4/Gw4mNnjzrQcGSc6YXfC6CRFNaGydSdv5+M8cb0eNsOGo0OXtQ==} + '@radix-ui/react-scroll-area@1.2.9': + resolution: {integrity: sha512-YSjEfBXnhUELsO2VzjdtYYD4CfQjvao+lhhrX5XsHD7/cyUNzljF1FHEbgTPN7LH2MClfwRMIsYlqTYpKTTe2A==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1841,8 +1845,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-select@2.2.4': - resolution: {integrity: sha512-/OOm58Gil4Ev5zT8LyVzqfBcij4dTHYdeyuF5lMHZ2bIp0Lk9oETocYiJ5QC0dHekEQnK6L/FNJCceeb4AkZ6Q==} + '@radix-ui/react-select@2.2.5': + resolution: {integrity: sha512-HnMTdXEVuuyzx63ME0ut4+sEMYW6oouHWNGUZc7ddvUWIcfCva/AMoqEW/3wnEllriMWBa0RHspCYnfCWJQYmA==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1854,8 +1858,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-separator@1.1.6': - resolution: {integrity: sha512-Izof3lPpbCfTM7WDta+LRkz31jem890VjEvpVRoWQNKpDUMMVffuyq854XPGP1KYGWWmjmYvHvPFeocWhFCy1w==} + '@radix-ui/react-separator@1.1.7': + resolution: {integrity: sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1867,8 +1871,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-slider@1.3.4': - resolution: {integrity: sha512-Cp6hEmQtRJFci285vkdIJ+HCDLTRDk+25VhFwa1fcubywjMUE3PynBgtN5RLudOgSCYMlT4jizCXdmV+8J7Y2w==} + '@radix-ui/react-slider@1.3.5': + resolution: {integrity: sha512-rkfe2pU2NBAYfGaxa3Mqosi7VZEWX5CxKaanRv0vZd4Zhl9fvQrg0VM93dv3xGLGfrHuoTRF3JXH8nb9g+B3fw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1880,8 +1884,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-slot@1.2.2': - resolution: {integrity: sha512-y7TBO4xN4Y94FvcWIOIh18fM4R1A8S4q1jhoz4PNzOoHsFcN8pogcFmZrTYAm4F9VRUrWP/Mw7xSKybIeRI+CQ==} + '@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 @@ -1889,8 +1893,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-switch@1.2.4': - resolution: {integrity: sha512-yZCky6XZFnR7pcGonJkr9VyNRu46KcYAbyg1v/gVVCZUr8UJ4x+RpncC27hHtiZ15jC+3WS8Yg/JSgyIHnYYsQ==} + '@radix-ui/react-switch@1.2.5': + resolution: {integrity: sha512-5ijLkak6ZMylXsaImpZ8u4Rlf5grRmoc0p0QeX9VJtlrM4f5m3nCTX8tWga/zOA8PZYIR/t0p2Mnvd7InrJ6yQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1902,8 +1906,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-tabs@1.1.11': - resolution: {integrity: sha512-4FiKSVoXqPP/KfzlB7lwwqoFV6EPwkrrqGp9cUYXjwDYHhvpnqq79P+EPHKcdoTE7Rl8w/+6s9rTlsfXHES9GA==} + '@radix-ui/react-tabs@1.1.12': + resolution: {integrity: sha512-GTVAlRVrQrSw3cEARM0nAx73ixrWDPNZAruETn3oHCNP6SbZ/hNxdxp+u7VkIEv3/sFoLq1PfcHrl7Pnp0CDpw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1915,8 +1919,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-toggle-group@1.1.9': - resolution: {integrity: sha512-HJ6gXdYVN38q/5KDdCcd+JTuXUyFZBMJbwXaU/82/Gi+V2ps6KpiZ2sQecAeZCV80POGRfkUBdUIj6hIdF6/MQ==} + '@radix-ui/react-toggle-group@1.1.10': + resolution: {integrity: sha512-kiU694Km3WFLTC75DdqgM/3Jauf3rD9wxeS9XtyWFKsBUeZA337lC+6uUazT7I1DhanZ5gyD5Stf8uf2dbQxOQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1928,8 +1932,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-toggle@1.1.8': - resolution: {integrity: sha512-hrpa59m3zDnsa35LrTOH5s/a3iGv/VD+KKQjjiCTo/W4r0XwPpiWQvAv6Xl1nupSoaZeNNxW6sJH9ZydsjKdYQ==} + '@radix-ui/react-toggle@1.1.9': + resolution: {integrity: sha512-ZoFkBBz9zv9GWer7wIjvdRxmh2wyc2oKWw6C6CseWd6/yq1DK/l5lJ+wnsmFwJZbBYqr02mrf8A2q/CVCuM3ZA==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1941,8 +1945,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-tooltip@1.2.6': - resolution: {integrity: sha512-zYb+9dc9tkoN2JjBDIIPLQtk3gGyz8FMKoqYTb8EMVQ5a5hBcdHPECrsZVI4NpPAUOixhkoqg7Hj5ry5USowfA==} + '@radix-ui/react-tooltip@1.2.7': + resolution: {integrity: sha512-Ap+fNYwKTYJ9pzqW+Xe2HtMRbQ/EeWkj2qykZ6SuEV4iS/o1bZI5ssJbk4D2r8XuDuOBVz/tIx2JObtuqU+5Zw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -2035,8 +2039,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-visually-hidden@1.2.2': - resolution: {integrity: sha512-ORCmRUbNiZIv6uV5mhFrhsIKw4UX/N3syZtyqvry61tbGm4JlgQuSn0hk5TwCARsCjkcnuRkSdCE3xfb+ADHew==} + '@radix-ui/react-visually-hidden@1.2.3': + resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -2157,29 +2161,29 @@ packages: '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - '@shikijs/core@3.4.0': - resolution: {integrity: sha512-0YOzTSRDn/IAfQWtK791gs1u8v87HNGToU6IwcA3K7nPoVOrS2Dh6X6A6YfXgPTSkTwR5y6myk0MnI0htjnwrA==} + '@shikijs/core@3.4.2': + resolution: {integrity: sha512-AG8vnSi1W2pbgR2B911EfGqtLE9c4hQBYkv/x7Z+Kt0VxhgQKcW7UNDVYsu9YxwV6u+OJrvdJrMq6DNWoBjihQ==} - '@shikijs/engine-javascript@3.4.0': - resolution: {integrity: sha512-1ywDoe+z/TPQKj9Jw0eU61B003J9DqUFRfH+DVSzdwPUFhR7yOmfyLzUrFz0yw8JxFg/NgzXoQyyykXgO21n5Q==} + '@shikijs/engine-javascript@3.4.2': + resolution: {integrity: sha512-1/adJbSMBOkpScCE/SB6XkjJU17ANln3Wky7lOmrnpl+zBdQ1qXUJg2GXTYVHRq+2j3hd1DesmElTXYDgtfSOQ==} - '@shikijs/engine-oniguruma@3.4.0': - resolution: {integrity: sha512-zwcWlZ4OQuJ/+1t32ClTtyTU1AiDkK1lhtviRWoq/hFqPjCNyLj22bIg9rB7BfoZKOEOfrsGz7No33BPCf+WlQ==} + '@shikijs/engine-oniguruma@3.4.2': + resolution: {integrity: sha512-zcZKMnNndgRa3ORja6Iemsr3DrLtkX3cAF7lTJkdMB6v9alhlBsX9uNiCpqofNrXOvpA3h6lHcLJxgCIhVOU5Q==} - '@shikijs/langs@3.4.0': - resolution: {integrity: sha512-bQkR+8LllaM2duU9BBRQU0GqFTx7TuF5kKlw/7uiGKoK140n1xlLAwCgXwSxAjJ7Htk9tXTFwnnsJTCU5nDPXQ==} + '@shikijs/langs@3.4.2': + resolution: {integrity: sha512-H6azIAM+OXD98yztIfs/KH5H4PU39t+SREhmM8LaNXyUrqj2mx+zVkr8MWYqjceSjDw9I1jawm1WdFqU806rMA==} - '@shikijs/rehype@3.4.0': - resolution: {integrity: sha512-wm7RTSmrcmjZg+F9JRrsH0Brwi36joUMXkUWIDmBGW+XExNEi8Xjmmp2NOBXa3DujZtnL6Dbcg7V6gtZabGoXw==} + '@shikijs/rehype@3.4.2': + resolution: {integrity: sha512-atbsrT3UKs25OdKVbNoHyKO9ZP7KEBPlo1oanPGMkvUL0fLictpxMPz6vPE2YTeHhpwz7EMrA4K4FHRY8XAReg==} - '@shikijs/themes@3.4.0': - resolution: {integrity: sha512-YPP4PKNFcFGLxItpbU0ZW1Osyuk8AyZ24YEFaq04CFsuCbcqydMvMUTi40V2dkc0qs1U2uZFrnU6s5zI6IH+uA==} + '@shikijs/themes@3.4.2': + resolution: {integrity: sha512-qAEuAQh+brd8Jyej2UDDf+b4V2g1Rm8aBIdvt32XhDPrHvDkEnpb7Kzc9hSuHUxz0Iuflmq7elaDuQAP9bHIhg==} - '@shikijs/transformers@3.4.0': - resolution: {integrity: sha512-GrGaOj1/I6h75IU0VvjdWDpqGCynx0bqHzd1rErBTGxrcmusYIBhrV7aEySWyJ6HHb9figeXfcNxUFS1HKUfBw==} + '@shikijs/transformers@3.4.2': + resolution: {integrity: sha512-I5baLVi/ynLEOZoWSAMlACHNnG+yw5HDmse0oe+GW6U1u+ULdEB3UHiVWaHoJSSONV7tlcVxuaMy74sREDkSvg==} - '@shikijs/types@3.4.0': - resolution: {integrity: sha512-EUT/0lGiE//7j5N/yTMNMT3eCWNcHJLrRKxT0NDXWIfdfSmFJKfPX7nMmRBrQnWboAzIsUziCThrYMMhjbMS1A==} + '@shikijs/types@3.4.2': + resolution: {integrity: sha512-zHC1l7L+eQlDXLnxvM9R91Efh2V4+rN3oMVS2swCBssbj2U/FBwybD1eeLaq8yl/iwT+zih8iUbTBCgGZOYlVg==} '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} @@ -2211,132 +2215,63 @@ packages: resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} engines: {node: '>=10'} - '@tailwindcss/node@4.1.5': - resolution: {integrity: sha512-CBhSWo0vLnWhXIvpD0qsPephiaUYfHUX3U9anwDaHZAeuGpTiB3XmsxPAN6qX7bFhipyGBqOa1QYQVVhkOUGxg==} - '@tailwindcss/node@4.1.7': resolution: {integrity: sha512-9rsOpdY9idRI2NH6CL4wORFY0+Q6fnx9XP9Ju+iq/0wJwGD5IByIgFmwVbyy4ymuyprj8Qh4ErxMKTUL4uNh3g==} - '@tailwindcss/oxide-android-arm64@4.1.5': - resolution: {integrity: sha512-LVvM0GirXHED02j7hSECm8l9GGJ1RfgpWCW+DRn5TvSaxVsv28gRtoL4aWKGnXqwvI3zu1GABeDNDVZeDPOQrw==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [android] - '@tailwindcss/oxide-android-arm64@4.1.7': resolution: {integrity: sha512-IWA410JZ8fF7kACus6BrUwY2Z1t1hm0+ZWNEzykKmMNM09wQooOcN/VXr0p/WJdtHZ90PvJf2AIBS/Ceqx1emg==} engines: {node: '>= 10'} cpu: [arm64] os: [android] - '@tailwindcss/oxide-darwin-arm64@4.1.5': - resolution: {integrity: sha512-//TfCA3pNrgnw4rRJOqavW7XUk8gsg9ddi8cwcsWXp99tzdBAZW0WXrD8wDyNbqjW316Pk2hiN/NJx/KWHl8oA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - '@tailwindcss/oxide-darwin-arm64@4.1.7': resolution: {integrity: sha512-81jUw9To7fimGGkuJ2W5h3/oGonTOZKZ8C2ghm/TTxbwvfSiFSDPd6/A/KE2N7Jp4mv3Ps9OFqg2fEKgZFfsvg==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@tailwindcss/oxide-darwin-x64@4.1.5': - resolution: {integrity: sha512-XQorp3Q6/WzRd9OalgHgaqgEbjP3qjHrlSUb5k1EuS1Z9NE9+BbzSORraO+ecW432cbCN7RVGGL/lSnHxcd+7Q==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - '@tailwindcss/oxide-darwin-x64@4.1.7': resolution: {integrity: sha512-q77rWjEyGHV4PdDBtrzO0tgBBPlQWKY7wZK0cUok/HaGgbNKecegNxCGikuPJn5wFAlIywC3v+WMBt0PEBtwGw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@tailwindcss/oxide-freebsd-x64@4.1.5': - resolution: {integrity: sha512-bPrLWbxo8gAo97ZmrCbOdtlz/Dkuy8NK97aFbVpkJ2nJ2Jo/rsCbu0TlGx8joCuA3q6vMWTSn01JY46iwG+clg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [freebsd] - '@tailwindcss/oxide-freebsd-x64@4.1.7': resolution: {integrity: sha512-RfmdbbK6G6ptgF4qqbzoxmH+PKfP4KSVs7SRlTwcbRgBwezJkAO3Qta/7gDy10Q2DcUVkKxFLXUQO6J3CRvBGw==} engines: {node: '>= 10'} cpu: [x64] os: [freebsd] - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.5': - resolution: {integrity: sha512-1gtQJY9JzMAhgAfvd/ZaVOjh/Ju/nCoAsvOVJenWZfs05wb8zq+GOTnZALWGqKIYEtyNpCzvMk+ocGpxwdvaVg==} - engines: {node: '>= 10'} - cpu: [arm] - os: [linux] - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.7': resolution: {integrity: sha512-OZqsGvpwOa13lVd1z6JVwQXadEobmesxQ4AxhrwRiPuE04quvZHWn/LnihMg7/XkN+dTioXp/VMu/p6A5eZP3g==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@tailwindcss/oxide-linux-arm64-gnu@4.1.5': - resolution: {integrity: sha512-dtlaHU2v7MtdxBXoqhxwsWjav7oim7Whc6S9wq/i/uUMTWAzq/gijq1InSgn2yTnh43kR+SFvcSyEF0GCNu1PQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - '@tailwindcss/oxide-linux-arm64-gnu@4.1.7': resolution: {integrity: sha512-voMvBTnJSfKecJxGkoeAyW/2XRToLZ227LxswLAwKY7YslG/Xkw9/tJNH+3IVh5bdYzYE7DfiaPbRkSHFxY1xA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-arm64-musl@4.1.5': - resolution: {integrity: sha512-fg0F6nAeYcJ3CriqDT1iVrqALMwD37+sLzXs8Rjy8Z1ZHshJoYceodfyUwGJEsQoTyWbliFNRs2wMQNXtT7MVA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - '@tailwindcss/oxide-linux-arm64-musl@4.1.7': resolution: {integrity: sha512-PjGuNNmJeKHnP58M7XyjJyla8LPo+RmwHQpBI+W/OxqrwojyuCQ+GUtygu7jUqTEexejZHr/z3nBc/gTiXBj4A==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-x64-gnu@4.1.5': - resolution: {integrity: sha512-SO+F2YEIAHa1AITwc8oPwMOWhgorPzzcbhWEb+4oLi953h45FklDmM8dPSZ7hNHpIk9p/SCZKUYn35t5fjGtHA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - '@tailwindcss/oxide-linux-x64-gnu@4.1.7': resolution: {integrity: sha512-HMs+Va+ZR3gC3mLZE00gXxtBo3JoSQxtu9lobbZd+DmfkIxR54NO7Z+UQNPsa0P/ITn1TevtFxXTpsRU7qEvWg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tailwindcss/oxide-linux-x64-musl@4.1.5': - resolution: {integrity: sha512-6UbBBplywkk/R+PqqioskUeXfKcBht3KU7juTi1UszJLx0KPXUo10v2Ok04iBJIaDPkIFkUOVboXms5Yxvaz+g==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - '@tailwindcss/oxide-linux-x64-musl@4.1.7': resolution: {integrity: sha512-MHZ6jyNlutdHH8rd+YTdr3QbXrHXqwIhHw9e7yXEBcQdluGwhpQY2Eku8UZK6ReLaWtQ4gijIv5QoM5eE+qlsA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tailwindcss/oxide-wasm32-wasi@4.1.5': - resolution: {integrity: sha512-hwALf2K9FHuiXTPqmo1KeOb83fTRNbe9r/Ixv9ZNQ/R24yw8Ge1HOWDDgTdtzntIaIUJG5dfXCf4g9AD4RiyhQ==} - 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-wasm32-wasi@4.1.7': resolution: {integrity: sha512-ANaSKt74ZRzE2TvJmUcbFQ8zS201cIPxUDm5qez5rLEwWkie2SkGtA4P+GPTj+u8N6JbPrC8MtY8RmJA35Oo+A==} engines: {node: '>=14.0.0'} @@ -2349,40 +2284,24 @@ packages: - '@emnapi/wasi-threads' - tslib - '@tailwindcss/oxide-win32-arm64-msvc@4.1.5': - resolution: {integrity: sha512-oDKncffWzaovJbkuR7/OTNFRJQVdiw/n8HnzaCItrNQUeQgjy7oUiYpsm9HUBgpmvmDpSSbGaCa2Evzvk3eFmA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - '@tailwindcss/oxide-win32-arm64-msvc@4.1.7': resolution: {integrity: sha512-HUiSiXQ9gLJBAPCMVRk2RT1ZrBjto7WvqsPBwUrNK2BcdSxMnk19h4pjZjI7zgPhDxlAbJSumTC4ljeA9y0tEw==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@tailwindcss/oxide-win32-x64-msvc@4.1.5': - resolution: {integrity: sha512-WiR4dtyrFdbb+ov0LK+7XsFOsG+0xs0PKZKkt41KDn9jYpO7baE3bXiudPVkTqUEwNfiglCygQHl2jklvSBi7Q==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - '@tailwindcss/oxide-win32-x64-msvc@4.1.7': resolution: {integrity: sha512-rYHGmvoHiLJ8hWucSfSOEmdCBIGZIq7SpkPRSqLsH2Ab2YUNgKeAPT1Fi2cx3+hnYOrAb0jp9cRyode3bBW4mQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@tailwindcss/oxide@4.1.5': - resolution: {integrity: sha512-1n4br1znquEvyW/QuqMKQZlBen+jxAbvyduU87RS8R3tUSvByAkcaMTkJepNIrTlYhD+U25K4iiCIxE6BGdRYA==} - engines: {node: '>= 10'} - '@tailwindcss/oxide@4.1.7': resolution: {integrity: sha512-5SF95Ctm9DFiUyjUPnDGkoKItPX/k+xifcQhcqX5RA85m50jw1pT/KzjdvlqxRja45Y52nR4MR9fD1JYd7f8NQ==} engines: {node: '>= 10'} - '@tailwindcss/postcss@4.1.5': - resolution: {integrity: sha512-5lAC2/pzuyfhsFgk6I58HcNy6vPK3dV/PoPxSDuOTVbDvCddYHzHiJZZInGIY0venvzzfrTEUAXJFULAfFmObg==} + '@tailwindcss/postcss@4.1.7': + resolution: {integrity: sha512-88g3qmNZn7jDgrrcp3ZXEQfp9CVox7xjP1HN2TFKI03CltPVd/c61ydn5qJJL8FYunn0OqBaW5HNUga0kmPVvw==} '@tailwindcss/vite@4.1.7': resolution: {integrity: sha512-tYa2fO3zDe41I7WqijyVbRd8oWT0aEID1Eokz5hMT6wShLIHj3yvwj9XbfuloHP9glZ6H+aG2AN/+ZrxJ1Y5RQ==} @@ -2408,11 +2327,13 @@ packages: '@tsconfig/node16@1.0.4': resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - '@turbo/gen@2.5.0': - resolution: {integrity: sha512-03vzgbv01lzadCCMaEUgXyqGhZuHaI+Umsrjisiyi81oCJF/HygxgHR0FBf21dVssSiEa2opmzcp4RHQmIz0Wg==} + '@turbo/gen@2.5.3': + resolution: {integrity: sha512-Pek4Amm5HcBzHkR0GdnMmRZlMwIRkgKW2SZ4/BfN+CY8BolJH6Wesjg1FkFEYD/DqnqeKUf98YWDsxmfILrpSA==} + hasBin: true - '@turbo/workspaces@2.5.0': - resolution: {integrity: sha512-u/IOgWVJ6orFG0MDJ8UeIEOWjhfEBsMskhxC8pg2nRlu1qbEAGIerjhZFk+bEqSTHW1o+fxYr8ix0KEtX4M9Vg==} + '@turbo/workspaces@2.5.3': + resolution: {integrity: sha512-Kqo+gKJleFB+GkKiSHCCb4RB46VDBTWRKdp08RQ4rtL60+SU89M6F7gpTGG/4nL2eYD98mOKp3Lyzfk/Auht7A==} + hasBin: true '@types/better-sqlite3@7.6.13': resolution: {integrity: sha512-NMv9ASNARoKksWtsq/SHakpYAYnhBrQgGD8zkLYk/jaK8jUGn08CfEdTRgYhMypUQAfzSP8W6gNLe0q19/t4VA==} @@ -2504,30 +2425,27 @@ packages: '@types/node@16.18.126': resolution: {integrity: sha512-OTcgaiwfGFBKacvfwuHzzn1KLxH/er8mluiy8/uM3sGXHaRe73RrSIj01jow9t4kJEW633Ov+cOexXeiApTyAw==} - '@types/node@18.19.101': - resolution: {integrity: sha512-Ykg7fcE3+cOQlLUv2Ds3zil6DVjriGQaSN/kEpl5HQ3DIGM6W0F2n9+GkWV4bRt7KjLymgzNdTnSKCbFUUJ7Kw==} + '@types/node@18.19.103': + resolution: {integrity: sha512-hHTHp+sEz6SxFsp+SA+Tqrua3AbmlAw+Y//aEwdHrdZkYVRWdvWD3y5uPZ0flYOkgskaFWqZ/YGFm3FaFQ0pRw==} '@types/node@22.15.12': resolution: {integrity: sha512-K0fpC/ZVeb8G9rm7bH7vI0KAec4XHEhBam616nVJCV51bKzJ6oA3luG4WdKoaztxe70QaNjS/xBmcDLmr4PiGw==} - '@types/node@22.15.3': - resolution: {integrity: sha512-lX7HFZeHf4QG/J7tBZqrCAXwz9J5RD56Y6MpP0eJkka8p+K0RY/yBTW7CYFJ4VGCclxqOLKmiGP5juQc6MKgcw==} - '@types/react-dom@19.1.1': resolution: {integrity: sha512-jFf/woGTVTjUJsl2O7hcopJ1r0upqoq/vIOoCj0yLh3RIXxWcljlpuZ+vEBRXsymD1jhfeJrlyTy/S1UW+4y1w==} peerDependencies: '@types/react': ^19.0.0 - '@types/react-dom@19.1.3': - resolution: {integrity: sha512-rJXC08OG0h3W6wDMFxQrZF00Kq6qQvw0djHRdzl3U5DnIERz0MRce3WVc7IS6JYBwtaP/DwYtRRjVlvivNveKg==} + '@types/react-dom@19.1.5': + resolution: {integrity: sha512-CMCjrWucUBZvohgZxkjd6S9h0nZxXjzus6yDfUb+xLxYM7VvjKNH1tQrE9GWLql1XoOP4/Ds3bwFqShHUYraGg==} peerDependencies: '@types/react': ^19.0.0 '@types/react@19.1.0': resolution: {integrity: sha512-UaicktuQI+9UKyA4njtDOGBD/67t8YEBt2xdfqu8+gP9hqPUPsiXlNPcpS2gVdjmis5GKPG3fCxbQLVgxsQZ8w==} - '@types/react@19.1.3': - resolution: {integrity: sha512-dLWQ+Z0CkIvK1J8+wrDPwGxEYFA4RAyHoZPxHVGspYmFVnwGSNT24cGIhFJrtfRnWVuW8X7NO52gCXmhkVUWGQ==} + '@types/react@19.1.5': + resolution: {integrity: sha512-piErsCVVbpMMT2r7wbawdZsq4xMvIAhQuac2gedQHysu1TZYEigE6pnFfgZT+/jQnrRuF5r+SHzuehFjfRjr4g==} '@types/responselike@1.0.3': resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} @@ -2567,8 +2485,8 @@ packages: typescript: optional: true - '@typescript-eslint/eslint-plugin@8.31.0': - resolution: {integrity: sha512-evaQJZ/J/S4wisevDvC1KFZkPzRetH8kYZbkgcTRyql3mcKsf+ZFDV1BVWUGTCAW5pQHoqn5gK5b8kn7ou9aFQ==} + '@typescript-eslint/eslint-plugin@8.32.1': + resolution: {integrity: sha512-6u6Plg9nP/J1GRpe/vcjjabo6Uc5YQPAMxsgQyGC/I0RuukiG1wIe3+Vtg3IrSCVJDmqK3j8adrtzXSENRtFgg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 @@ -2585,8 +2503,8 @@ packages: typescript: optional: true - '@typescript-eslint/parser@8.31.0': - resolution: {integrity: sha512-67kYYShjBR0jNI5vsf/c3WG4u+zDnCTHTPqVMQguffaWWFs7artgwKmfwdifl+r6XyM5LYLas/dInj2T0SgJyw==} + '@typescript-eslint/parser@8.32.1': + resolution: {integrity: sha512-LKMrmwCPoLhM45Z00O1ulb6jwyVr2kr3XJp+G+tSEZcbauNnScewcQwtJqXDhXeYPDEjZ8C1SjXm015CirEmGg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -2596,8 +2514,8 @@ packages: resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@typescript-eslint/scope-manager@8.31.0': - resolution: {integrity: sha512-knO8UyF78Nt8O/B64i7TlGXod69ko7z6vJD9uhSlm0qkAbGeRUSudcm0+K/4CrRjrpiHfBCjMWlc08Vav1xwcw==} + '@typescript-eslint/scope-manager@8.32.1': + resolution: {integrity: sha512-7IsIaIDeZn7kffk7qXC3o6Z4UblZJKV3UBpkvRNpr5NSyLji7tvTcvmnMNYuYLyh26mN8W723xpo3i4MlD33vA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/type-utils@5.62.0': @@ -2610,8 +2528,8 @@ packages: typescript: optional: true - '@typescript-eslint/type-utils@8.31.0': - resolution: {integrity: sha512-DJ1N1GdjI7IS7uRlzJuEDCgDQix3ZVYVtgeWEyhyn4iaoitpMBX6Ndd488mXSx0xah/cONAkEaYyylDyAeHMHg==} + '@typescript-eslint/type-utils@8.32.1': + resolution: {integrity: sha512-mv9YpQGA8iIsl5KyUPi+FGLm7+bA4fgXaeRcFKRDRwDMu4iwrSHeDPipwueNXhdIIZltwCJv+NkxftECbIZWfA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -2621,8 +2539,8 @@ packages: resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@typescript-eslint/types@8.31.0': - resolution: {integrity: sha512-Ch8oSjVyYyJxPQk8pMiP2FFGYatqXQfQIaMp+TpuuLlDachRWpUAeEu1u9B/v/8LToehUIWyiKcA/w5hUFRKuQ==} + '@typescript-eslint/types@8.32.1': + resolution: {integrity: sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@5.62.0': @@ -2634,8 +2552,8 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@8.31.0': - resolution: {integrity: sha512-xLmgn4Yl46xi6aDSZ9KkyfhhtnYI15/CvHbpOy/eR5NWhK/BK8wc709KKwhAR0m4ZKRP7h07bm4BWUYOCuRpQQ==} + '@typescript-eslint/typescript-estree@8.32.1': + resolution: {integrity: sha512-Y3AP9EIfYwBb4kWGb+simvPaqQoT5oJuzzj9m0i6FCY6SPvlomY2Ei4UEMm7+FXtlNJbor80ximyslzaQF6xhg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' @@ -2646,8 +2564,8 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - '@typescript-eslint/utils@8.31.0': - resolution: {integrity: sha512-qi6uPLt9cjTFxAb1zGNgTob4x9ur7xC6mHQJ8GwEzGMGE9tYniublmJaowOJ9V2jUzxrltTPfdG2nKlWsq0+Ww==} + '@typescript-eslint/utils@8.32.1': + resolution: {integrity: sha512-DsSFNIgLSrc89gpq1LJB7Hm1YpuhK086DRDJSNrewcGvYloWW1vZLHBTIvarKZDcAORIy/uWNx8Gad+4oMpkSA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -2657,8 +2575,8 @@ packages: resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@typescript-eslint/visitor-keys@8.31.0': - resolution: {integrity: sha512-QcGHmlRHWOl93o64ZUMNewCdwKGU6WItOU52H0djgNmn1EOrhVudrDzXz4OycCRSCPwFCDrE2iIt5vmuUdHxuQ==} + '@typescript-eslint/visitor-keys@8.32.1': + resolution: {integrity: sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.3.0': @@ -2679,10 +2597,6 @@ packages: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} - accepts@2.0.0: - resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} - engines: {node: '>= 0.6'} - acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -2700,6 +2614,7 @@ packages: acorn@8.14.1: resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} engines: {node: '>=0.4.0'} + hasBin: true agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} @@ -2782,8 +2697,8 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - aria-hidden@1.2.4: - resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==} + aria-hidden@1.2.6: + resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} engines: {node: '>=10'} array-back@3.1.0: @@ -2912,10 +2827,6 @@ packages: resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - body-parser@2.2.0: - resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==} - engines: {node: '>=18'} - boolean@3.2.0: resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. @@ -2984,8 +2895,8 @@ packages: camel-case@3.0.0: resolution: {integrity: sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==} - caniuse-lite@1.0.30001713: - resolution: {integrity: sha512-wCIWIg+A4Xr7NfhTuHdX+/FKh3+Op3LBbSp2N5Pfx6T/LhdQy3GTyoTg48BReaW/MyMNZAkTadsBtai3ldWK0Q==} + caniuse-lite@1.0.30001718: + resolution: {integrity: sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -3209,10 +3120,6 @@ packages: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} - content-disposition@1.0.0: - resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==} - engines: {node: '>= 0.6'} - content-type@1.0.5: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} @@ -3227,10 +3134,6 @@ packages: cookie-signature@1.0.7: resolution: {integrity: sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==} - cookie-signature@1.2.2: - resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} - engines: {node: '>=6.6.0'} - cookie@0.4.0: resolution: {integrity: sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==} engines: {node: '>= 0.6'} @@ -3243,8 +3146,8 @@ packages: resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} engines: {node: '>= 0.6'} - core-js-pure@3.41.0: - resolution: {integrity: sha512-71Gzp96T9YPk63aUvE5Q5qP+DryB4ZloUZPSOebGM88VNw8VNfvdA7z6kGA8iGOTEzAomsRidp4jXSmUIJsL+Q==} + core-js-pure@3.42.0: + resolution: {integrity: sha512-007bM04u91fF4kMgwom2I5cQxAFIy8jVulgr9eozILl/SZE53QOqnW/+vviC+wQWLv+AunBG+8Q0TLoeSsSxRQ==} cors@2.8.5: resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} @@ -3388,8 +3291,8 @@ packages: supports-color: optional: true - debug@4.4.0: - resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + debug@4.4.1: + resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -3461,10 +3364,6 @@ packages: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - detect-libc@2.0.3: - resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} - engines: {node: '>=8'} - detect-libc@2.0.4: resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} engines: {node: '>=8'} @@ -3711,8 +3610,8 @@ packages: error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - es-abstract@1.23.9: - resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} + es-abstract@1.23.10: + resolution: {integrity: sha512-MtUbM072wlJNyeYAe0mhzrD+M6DIJa96CZAOBBrhDbgKnB4MApIKefcyAB1eOdYn8cUNZgvwBvEzdoAYsxgEIw==} engines: {node: '>= 0.4'} es-define-property@1.0.1: @@ -3794,9 +3693,10 @@ packages: escodegen@2.1.0: resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} engines: {node: '>=6.0'} + hasBin: true - eslint-config-prettier@10.1.1: - resolution: {integrity: sha512-4EQQr6wXwS+ZJSzaR5ZCrYgLxqvUjdXctaEtBqHcbkW944B1NQyO4qpdHQbXBONfwxXdkAY81HH4+LUfrg+zPw==} + eslint-config-prettier@10.1.5: + resolution: {integrity: sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw==} hasBin: true peerDependencies: eslint: '>=7.0.0' @@ -3865,14 +3765,14 @@ packages: peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 - eslint-plugin-react@7.37.4: - resolution: {integrity: sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==} + eslint-plugin-react@7.37.5: + resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==} engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - eslint-plugin-turbo@2.5.0: - resolution: {integrity: sha512-qQk54MrUZv0gnpxV23sccTc+FL3UJ8q7vG7HmXuS2RP8gdjWDwI1CCJTJD8EdRIDjsMxF0xi0AKcMY0CwIlXVg==} + eslint-plugin-turbo@2.5.3: + resolution: {integrity: sha512-DlXZd+LgpDlxH/6IsiAXLhy82x0jeJDm0XBEqP6Le08uy0HBQkjCUt7SmXNp8esAtX9RYe6oDClbNbmI1jtK5g==} peerDependencies: eslint: '>6.6.0' turbo: '>2.0.0' @@ -3893,8 +3793,8 @@ packages: resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.26.0: - resolution: {integrity: sha512-Hx0MOjPh6uK9oq9nVsATZKE/Wlbai7KFjfCuw9UHaguDW3x+HF0O5nIi3ud39TWgrTjTO5nHxmL3R1eANinWHQ==} + eslint@9.27.0: + resolution: {integrity: sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -3910,6 +3810,7 @@ packages: esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} + hasBin: true esquery@1.6.0: resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} @@ -3973,14 +3874,6 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} - eventsource-parser@3.0.1: - resolution: {integrity: sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==} - engines: {node: '>=18.0.0'} - - eventsource@3.0.6: - resolution: {integrity: sha512-l19WpE2m9hSuyP06+FbuUUf1G+R0SFLrtQfbRb9PRr+oimOfxQhgGCbVaXg5IvZyyTThJsxh6L/srkMiCeBPDA==} - engines: {node: '>=18.0.0'} - execa@1.0.0: resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} engines: {node: '>=6'} @@ -3996,12 +3889,6 @@ packages: exponential-backoff@3.1.2: resolution: {integrity: sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==} - express-rate-limit@7.5.0: - resolution: {integrity: sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==} - engines: {node: '>= 16'} - peerDependencies: - express: ^4.11 || 5 || ^5.0.0-beta.1 - express-session@1.18.1: resolution: {integrity: sha512-a5mtTqEaZvBCL9A9aqkrtfz+3SMDhOVUnjafjo+s7A9Txkq+SVX2DLvSp1Zrv4uCXa3lMSK3viWnh9Gg07PBUA==} engines: {node: '>= 0.8.0'} @@ -4016,10 +3903,6 @@ packages: resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} engines: {node: '>= 0.10.0'} - express@5.1.0: - resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==} - engines: {node: '>= 18'} - extend-shallow@2.0.1: resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} engines: {node: '>=0.10.0'} @@ -4096,10 +3979,6 @@ packages: resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} engines: {node: '>= 0.8'} - finalhandler@2.1.0: - resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==} - engines: {node: '>= 0.8'} - find-replace@3.0.0: resolution: {integrity: sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==} engines: {node: '>=4.0.0'} @@ -4151,8 +4030,8 @@ packages: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} - framer-motion@12.12.1: - resolution: {integrity: sha512-PFw4/GCREHI2suK/NlPSUxd+x6Rkp80uQsfCRFSOQNrm5pZif7eGtmG1VaD/UF1fW9tRBy5AaS77StatB3OJDg==} + framer-motion@12.12.2: + resolution: {integrity: sha512-qCszZCiGWkilL40E3VuhIJJC/CS3SIBl2IHyGK8FU30nOUhTmhBNWPrNFyozAWH/bXxwzi19vJHIGVdALF0LCg==} peerDependencies: '@emotion/is-prop-valid': '*' react: ^18.0.0 || ^19.0.0 @@ -4169,10 +4048,6 @@ packages: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} - fresh@2.0.0: - resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} - engines: {node: '>= 0.8'} - fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} @@ -4313,8 +4188,8 @@ packages: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} - get-tsconfig@4.10.0: - resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} + get-tsconfig@4.10.1: + resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} get-uri@6.0.4: resolution: {integrity: sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==} @@ -4355,8 +4230,8 @@ packages: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} - globals@16.0.0: - resolution: {integrity: sha512-iInW14XItCXET01CQFqudPOWP2jYMl7T+QRQT+UNcR/iQncN/F0UNpgd76iFkBPgNQb4+X3LV9tLJYzwh+Gl3A==} + globals@16.1.0: + resolution: {integrity: sha512-aibexHNbb/jiUSObBgpHLj+sIuUmJnYcgXBlrfsiDZ9rt4aF2TFRbyLgZ2iFQuVZ1K5Mx3FVkbKRSgKrbK3K2g==} engines: {node: '>=18'} globalthis@1.0.4: @@ -4412,6 +4287,7 @@ packages: handlebars@4.7.8: resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} engines: {node: '>=0.4.7'} + hasBin: true has-bigints@1.1.0: resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} @@ -4736,9 +4612,6 @@ packages: is-promise@2.2.2: resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} - is-promise@4.0.0: - resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} - is-regex@1.2.1: resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} engines: {node: '>= 0.4'} @@ -4829,6 +4702,7 @@ packages: js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true jsbn@1.1.0: resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} @@ -4886,130 +4760,66 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - lightningcss-darwin-arm64@1.29.2: - resolution: {integrity: sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [darwin] - 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.29.2: - resolution: {integrity: sha512-j5qYxamyQw4kDXX5hnnCKMf3mLlHvG44f24Qyi2965/Ycz829MYqjrVg2H8BidybHBp9kom4D7DR5VqCKDXS0w==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - 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.29.2: - resolution: {integrity: sha512-wDk7M2tM78Ii8ek9YjnY8MjV5f5JN2qNVO+/0BAGZRvXKtQrBC4/cn4ssQIpKIPP44YXw6gFdpUF+Ps+RGsCwg==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [freebsd] - 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.29.2: - resolution: {integrity: sha512-IRUrOrAF2Z+KExdExe3Rz7NSTuuJ2HvCGlMKoquK5pjvo2JY4Rybr+NrKnq0U0hZnx5AnGsuFHjGnNT14w26sg==} - engines: {node: '>= 12.0.0'} - cpu: [arm] - os: [linux] - 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.29.2: - resolution: {integrity: sha512-KKCpOlmhdjvUTX/mBuaKemp0oeDIBBLFiU5Fnqxh1/DZ4JPZi4evEH7TKoSBFOSOV3J7iEmmBaw/8dpiUvRKlQ==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - 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.29.2: - resolution: {integrity: sha512-Q64eM1bPlOOUgxFmoPUefqzY1yV3ctFPE6d/Vt7WzLW4rKTv7MyYNky+FWxRpLkNASTnKQUaiMJ87zNODIrrKQ==} - 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.29.2: - resolution: {integrity: sha512-0v6idDCPG6epLXtBH/RPkHvYx74CVziHo6TMYga8O2EiQApnUPZsbR9nFNrg2cgBzk1AYqEd95TlrsL7nYABQg==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - 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.29.2: - resolution: {integrity: sha512-rMpz2yawkgGT8RULc5S4WiZopVMOFWjiItBT7aSfDX4NQav6M44rhn5hjtkKzB+wMTRlLLqxkeYEtQ3dd9696w==} - 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.29.2: - resolution: {integrity: sha512-nL7zRW6evGQqYVu/bKGK+zShyz8OVzsCotFgc7judbt6wnB2KbiKKJwBE4SGoDBQ1O94RjW4asrCjQL4i8Fhbw==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [win32] - 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.29.2: - resolution: {integrity: sha512-EdIUW3B2vLuHmv7urfzMI/h2fmlnOQBk1xlsDxkN1tCWKjNFjfLhGxYk8C8mzpSfr+A6jFFIi8fU6LbQGsRWjA==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - 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.29.2: - resolution: {integrity: sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA==} - engines: {node: '>= 12.0.0'} - lightningcss@1.30.1: resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==} engines: {node: '>= 12.0.0'} @@ -5041,6 +4851,7 @@ packages: lodash.get@4.4.2: resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + deprecated: This package is deprecated. Use the optional chaining (?.) operator instead. lodash.isarguments@3.1.0: resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==} @@ -5071,6 +4882,7 @@ packages: loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true lower-case-first@1.0.2: resolution: {integrity: sha512-UuxaYakO7XeONbKrZf5FEgkantPf5DUqDayzP5VXZrtRPdH86s4kN47I8B3TW10S4QKiE3ziHNf3kRN//okHjA==} @@ -5181,10 +4993,6 @@ packages: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} - media-typer@1.1.0: - resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} - engines: {node: '>= 0.8'} - mem@4.3.0: resolution: {integrity: sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==} engines: {node: '>=6'} @@ -5192,10 +5000,6 @@ packages: merge-descriptors@1.0.3: resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} - merge-descriptors@2.0.0: - resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} - engines: {node: '>=18'} - merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -5332,10 +5136,6 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} - mime-types@3.0.1: - resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} - engines: {node: '>= 0.6'} - mime@1.6.0: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} engines: {node: '>=4'} @@ -5416,6 +5216,7 @@ packages: mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true mkdirp@1.0.4: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} @@ -5593,8 +5394,8 @@ packages: resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} engines: {node: '>= 0.4'} - object.entries@1.1.8: - resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} + object.entries@1.1.9: + resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} engines: {node: '>= 0.4'} object.fromentries@2.0.8: @@ -5639,8 +5440,8 @@ packages: onnxruntime-web@1.14.0: resolution: {integrity: sha512-Kcqf43UMfW8mCydVGcX9OMXI2VN17c0p6XvR7IPSZzBf/6lteBzXHvcEVWDPmCKuGombl997HgLqj91F11DzXw==} - openai@4.100.0: - resolution: {integrity: sha512-9soq/wukv3utxcuD7TWFqKdKp0INWdeyhUCvxwrne5KwnxaCp4eHL4GdT/tMFhYolxgNhxFzg5GFwM331Z5CZg==} + openai@4.103.0: + resolution: {integrity: sha512-eWcz9kdurkGOFDtd5ySS5y251H2uBgq9+1a2lTBnjMMzlexJ40Am5t6Mu76SSE87VvitPa0dkIAp75F+dZVC0g==} hasBin: true peerDependencies: ws: ^8.18.0 @@ -5789,10 +5590,6 @@ packages: path-to-regexp@6.3.0: resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} - path-to-regexp@8.2.0: - resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==} - engines: {node: '>=16'} - path-type@2.0.0: resolution: {integrity: sha512-dUnb5dXUf+kzhC/W/F4e5/SkluXIFf5VUHolW1Eg1irn1hGWjPGdsRcvYJ1nD6lhk8Ir7VM0bHJKsYTx8Jx9OQ==} engines: {node: '>=4'} @@ -5826,10 +5623,6 @@ packages: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} - pkce-challenge@5.0.0: - resolution: {integrity: sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==} - engines: {node: '>=16.20.0'} - platform@1.3.6: resolution: {integrity: sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==} @@ -5878,6 +5671,7 @@ packages: prettier@3.5.3: resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} engines: {node: '>=14'} + hasBin: true proc-log@2.0.1: resolution: {integrity: sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==} @@ -5985,17 +5779,17 @@ packages: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} engines: {node: '>=10'} - quicktype-core@23.2.5: - resolution: {integrity: sha512-vbeDPIrhK3TIwU592+c5l5EAknqLhquWCEFzDeuC3cPuuK8dblMcfsnfnT5Cj7FeopDMI93Bq3ql0cMG90yFkg==} + quicktype-core@23.1.4: + resolution: {integrity: sha512-Yp+y96V2T72bFk5AXqOqTy5iq3bAOeQiVxA72BKYacmXC3TtRxf2wSl4I3gVdCmqZ0JxnQPoqazq31DTn55ROg==} - quicktype-graphql-input@23.2.5: - resolution: {integrity: sha512-PNLxMqd6cjFs/EuXvVcgQnJPyon0Yp22CqujR8I7X4CRrDgoivG8NIBWOhZ1mdzTZJbe7Cas0h9RVltEdpyKIQ==} + quicktype-graphql-input@23.1.4: + resolution: {integrity: sha512-7gPNHLYd24noSRAcNjjyyCqponM/54X8QX6u5iX+w/N2vUY3vzoDkp5nlr26Rrz30SFtoepswzHMqbDs3QnedQ==} - quicktype-typescript-input@23.2.5: - resolution: {integrity: sha512-bLivZDfBfKKS5Iqcqb6pMyncKH9xerY2f9uZ+p6YoN7M44iDXo8W0yG55L1mAg6d40tWrMkgvtaBmsHL3i2n/Q==} + quicktype-typescript-input@23.1.4: + resolution: {integrity: sha512-Kqw1FRccgOezsSVdT/wTAmOKEDwNpm324x3VHzF+m8u/TahcGwmQhgDO8iGJjZ2pHs1uaopui2RvfPKJF27zJA==} - quicktype@23.2.5: - resolution: {integrity: sha512-G6bvD5sGD1Fr/9HHH4juuwZ0l5JUIQDySuzR89pI1Rcw0IN2K5MVsKfiNQgQhfJP0gbE3wspFKWiYKSkCWUaJQ==} + quicktype@23.1.4: + resolution: {integrity: sha512-oCOrOJAlaLPWSTrqVSv9H3X8MVaIpK5u2W1vrMTWnBRcnrrDSOPkL58g0Z2QOU8C0g8z7bC1RKKeAnl7ISI43Q==} engines: {node: '>=18.12.0'} hasBin: true @@ -6011,10 +5805,6 @@ packages: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} - raw-body@3.0.0: - resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==} - engines: {node: '>= 0.8'} - rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true @@ -6058,8 +5848,8 @@ packages: '@types/react': optional: true - react-remove-scroll@2.6.3: - resolution: {integrity: sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==} + react-remove-scroll@2.7.0: + resolution: {integrity: sha512-sGsQtcjMqdQyijAHytfGEELB8FufGbfXIsvUTe+NLx1GDRJCXtCFLBLUI1eyZCKXXvbEU2C6gai0PZKoIE9Vbg==} engines: {node: '>=10'} peerDependencies: '@types/react': '*' @@ -6166,9 +5956,6 @@ packages: resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} engines: {node: '>= 0.4'} - regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - regex-recursion@6.0.2: resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} @@ -6235,9 +6022,11 @@ packages: resolve@1.22.10: resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} engines: {node: '>= 0.4'} + hasBin: true resolve@2.0.0-next.5: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true response-time@2.3.3: resolution: {integrity: sha512-SsjjOPHl/FfrTQNgmc5oen8Hr1Jxpn6LlHNXxCIFdYMHuK1kMeYMobb9XN3mvxaGQm3dbegqYFMX4+GDORfbWg==} @@ -6273,6 +6062,7 @@ packages: rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true rndm@1.2.0: resolution: {integrity: sha512-fJhQQI5tLrQvYIYFpOnFinzv9dwmR7hRnUz1XqP3OJ1jIweTNOd6aTO4jwQSgcBSFUB+/KHJxuGneime+FdzOw==} @@ -6286,10 +6076,6 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - router@2.2.0: - resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} - engines: {node: '>= 18'} - run-async@2.4.1: resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} engines: {node: '>=0.12.0'} @@ -6348,14 +6134,15 @@ packages: semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true semver@7.6.2: resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} engines: {node: '>=10'} hasBin: true - semver@7.7.1: - resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + semver@7.7.2: + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} engines: {node: '>=10'} hasBin: true @@ -6363,10 +6150,6 @@ packages: resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} engines: {node: '>= 0.8.0'} - send@1.2.0: - resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==} - engines: {node: '>= 18'} - sentence-case@2.1.1: resolution: {integrity: sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ==} @@ -6386,10 +6169,6 @@ packages: resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} engines: {node: '>= 0.8.0'} - serve-static@2.2.0: - resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==} - engines: {node: '>= 18'} - server@1.0.41: resolution: {integrity: sha512-KZ+fAkiU6BJlhmz949jd6NLPrypR6uxADtWmfnI+jcNhjn5aO8Eiexbd/qB++Vcs6RZww4yYydY/RQad43IGgA==} engines: {node: '>=10.0.0'} @@ -6418,8 +6197,8 @@ packages: setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - sharp@0.34.1: - resolution: {integrity: sha512-1j0w61+eVxu7DawFJtnfYcvSv6qPFvfTaqzTQ2BLknVhHTwGS8sc63ZBF4rzkWMBVKybo4S5OBtDdZahh2A1xg==} + sharp@0.34.2: + resolution: {integrity: sha512-lszvBmB9QURERtyKT2bNmsgxXK0ShJrL/fvqlonCo7e6xBF8nT8xU6pW+PMIbLsz0RxQk3rgH9kd8UmvOzlMJg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} shebang-command@1.2.0: @@ -6438,8 +6217,8 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shiki@3.4.0: - resolution: {integrity: sha512-Ni80XHcqhOEXv5mmDAvf5p6PAJqbUc/RzFeaOqk+zP5DLvTPS3j0ckvA+MI87qoxTQ5RGJDVTbdl/ENLSyyAnQ==} + shiki@3.4.2: + resolution: {integrity: sha512-wuxzZzQG8kvZndD7nustrNFIKYJ1jJoWIPaBpVe2+KHSvtzMi4SBjOxrigs8qeqce/l3U0cwiC+VAkLKSunHQQ==} side-channel-list@1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} @@ -6714,24 +6493,18 @@ packages: resolution: {integrity: sha512-iK5/YhZxq5GO5z8wb0bY1317uDF3Zjpha0QFFLA8/trAoiLbQD0HUbMesEaxyzUgDxi2QlcbM8IvqOlEjgoXBA==} engines: {node: '>=12.17'} - tailwind-merge@3.2.0: - resolution: {integrity: sha512-FQT/OVqCD+7edmmJpsgCsY820RTD5AkBryuG5IUqR5YQZSdj5xlH5nLgH7YPths7WsLPSpSBNneJdM8aS8aeFA==} - tailwind-merge@3.3.0: resolution: {integrity: sha512-fyW/pEfcQSiigd5SNn0nApUOxx0zB/dm6UDU/rEwc2c3sX2smWUNbapHv+QRqLGVp9GWX3THIa7MUGPo+YkDzQ==} - tailwindcss@4.1.5: - resolution: {integrity: sha512-nYtSPfWGDiWgCkwQG/m+aX83XCwf62sBgg3bIlNiiOcggnS1x3uVRDAuyelBFL+vJdOPPCGElxv9DjHJjRHiVA==} - tailwindcss@4.1.7: resolution: {integrity: sha512-kr1o/ErIdNhTz8uzAYL7TpaUuzKIE6QPQ4qmSdxnoX/lo+5wmUHQA6h3L5yIqEImSRnAAURDirLu/BgiXGPAhg==} - tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + tapable@2.2.2: + resolution: {integrity: sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==} engines: {node: '>=6'} - tar-fs@2.1.2: - resolution: {integrity: sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA==} + tar-fs@2.1.3: + resolution: {integrity: sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==} tar-stream@2.2.0: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} @@ -6900,8 +6673,8 @@ packages: resolution: {integrity: sha512-iHuaNcq5GZZnr3XDZNuu2LSyCzAOPwDuo5Qt+q64DfsTP1i3T2bKfxJhni2ZQxsvAoxRbuUK5QetJki4qc5aYA==} hasBin: true - tw-animate-css@1.2.9: - resolution: {integrity: sha512-9O4k1at9pMQff9EAcCEuy1UNO43JmaPQvq+0lwza9Y0BQ6LB38NiMj+qHqjoQf40355MX+gs6wtlR6H9WsSXFg==} + tw-animate-css@1.3.0: + resolution: {integrity: sha512-jrJ0XenzS9KVuDThJDvnhalbl4IYiMQ/XvpA0a2FL8KmlK+6CSMviO7ROY/I7z1NnUs5NnDhlM6fXmF40xPxzw==} type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} @@ -6927,10 +6700,6 @@ packages: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} - type-is@2.0.1: - resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} - engines: {node: '>= 0.6'} - typed-array-buffer@1.0.3: resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} engines: {node: '>= 0.4'} @@ -6947,8 +6716,8 @@ packages: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} - typescript-eslint@8.31.0: - resolution: {integrity: sha512-u+93F0sB0An8WEAPtwxVhFby573E8ckdjwUUQUj9QA4v8JAvgtoDdIyYR3XFwFHq2W1KJ1AurwJCO+w+Y1ixyQ==} + typescript-eslint@8.32.1: + resolution: {integrity: sha512-D7el+eaDHAmXvrZBy1zpzSNIRqnCOrkwTgZxTu3MUqRWk8k0q9m9Ho4+vPf7iHtgUfrK/o8IZaEApsxPlHTFCg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -6967,6 +6736,7 @@ packages: typescript@5.8.2: resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} engines: {node: '>=14.17'} + hasBin: true typescript@5.8.3: resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} @@ -6984,6 +6754,7 @@ packages: uglify-js@3.19.3: resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} engines: {node: '>=0.8.0'} + hasBin: true uid-safe@2.1.5: resolution: {integrity: sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==} @@ -7207,8 +6978,8 @@ packages: resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} engines: {node: '>= 0.4'} - which-typed-array@1.1.18: - resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==} + which-typed-array@1.1.19: + resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} engines: {node: '>= 0.4'} which@1.3.1: @@ -7218,6 +6989,7 @@ packages: which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} + hasBin: true wide-align@1.1.5: resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} @@ -7344,8 +7116,8 @@ packages: peerDependencies: zod: ^3.24.1 - zod@3.24.4: - resolution: {integrity: sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==} + zod@3.25.24: + resolution: {integrity: sha512-E77RpEqxeBGBVbcK/5QKQsLM+3u6aN7pVgiGJENbwYfdsExPS/xyyUMfmeM3eY32LBCIjuzv6XU505sHn2t+Kw==} zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} @@ -7367,10 +7139,9 @@ snapshots: dependencies: '@babel/types': 7.27.1 - '@babel/runtime-corejs3@7.27.0': + '@babel/runtime-corejs3@7.27.1': dependencies: - core-js-pure: 3.41.0 - regenerator-runtime: 0.14.1 + core-js-pure: 3.42.0 '@babel/runtime@7.27.1': {} @@ -7393,11 +7164,11 @@ snapshots: '@electron/get': 3.1.0 chalk: 4.1.2 commander: 11.1.0 - debug: 4.4.0 + debug: 4.4.1 fs-extra: 10.1.0 listr2: 7.0.2 log-symbols: 4.1.0 - semver: 7.7.1 + semver: 7.7.2 transitivePeerDependencies: - bluebird - encoding @@ -7409,11 +7180,11 @@ snapshots: '@electron/rebuild': 3.7.2 '@malept/cross-spawn-promise': 2.0.0 chalk: 4.1.2 - debug: 4.4.0 + debug: 4.4.1 find-up: 5.0.0 fs-extra: 10.1.0 log-symbols: 4.1.0 - semver: 7.7.1 + semver: 7.7.2 transitivePeerDependencies: - bluebird - supports-color @@ -7436,7 +7207,7 @@ snapshots: '@electron/rebuild': 3.7.2 '@malept/cross-spawn-promise': 2.0.0 chalk: 4.1.2 - debug: 4.4.0 + debug: 4.4.1 fast-glob: 3.3.3 filenamify: 4.3.0 find-up: 5.0.0 @@ -7450,7 +7221,7 @@ snapshots: log-symbols: 4.1.0 node-fetch: 2.7.0(encoding@0.1.13) rechoir: 0.8.0 - semver: 7.7.1 + semver: 7.7.2 source-map-support: 0.5.21 sudo-prompt: 9.2.1 username: 5.1.0 @@ -7541,7 +7312,7 @@ snapshots: '@electron-forge/shared-types': 7.8.1 '@electron-forge/web-multi-logger': 7.8.1 chalk: 4.1.2 - debug: 4.4.0 + debug: 4.4.1 fs-extra: 10.1.0 listr2: 7.0.2 transitivePeerDependencies: @@ -7572,7 +7343,7 @@ snapshots: '@electron-forge/core-utils': 7.8.1 '@electron-forge/shared-types': 7.8.1 '@malept/cross-spawn-promise': 2.0.0 - debug: 4.4.0 + debug: 4.4.1 fs-extra: 10.1.0 username: 5.1.0 transitivePeerDependencies: @@ -7645,7 +7416,7 @@ snapshots: '@electron/get@2.0.3': dependencies: - debug: 4.4.0 + debug: 4.4.1 env-paths: 2.2.1 fs-extra: 8.1.0 got: 11.8.6 @@ -7659,7 +7430,7 @@ snapshots: '@electron/get@3.1.0': dependencies: - debug: 4.4.0 + debug: 4.4.1 env-paths: 2.2.1 fs-extra: 8.1.0 got: 11.8.6 @@ -7680,7 +7451,7 @@ snapshots: make-fetch-happen: 10.2.1 nopt: 6.0.0 proc-log: 2.0.1 - semver: 7.7.1 + semver: 7.7.2 tar: 6.2.1 which: 2.0.2 transitivePeerDependencies: @@ -7689,7 +7460,7 @@ snapshots: '@electron/notarize@2.5.0': dependencies: - debug: 4.4.0 + debug: 4.4.1 fs-extra: 9.1.0 promise-retry: 2.0.1 transitivePeerDependencies: @@ -7698,7 +7469,7 @@ snapshots: '@electron/osx-sign@1.3.3': dependencies: compare-version: 0.1.2 - debug: 4.4.0 + debug: 4.4.1 fs-extra: 10.1.0 isbinaryfile: 4.0.10 minimist: 1.2.8 @@ -7714,7 +7485,7 @@ snapshots: '@electron/osx-sign': 1.3.3 '@electron/universal': 2.0.3 '@electron/windows-sign': 1.2.2 - debug: 4.4.0 + debug: 4.4.1 extract-zip: 2.0.1 filenamify: 4.3.0 fs-extra: 11.3.0 @@ -7725,7 +7496,7 @@ snapshots: plist: 3.1.0 resedit: 2.0.3 resolve: 1.22.10 - semver: 7.7.1 + semver: 7.7.2 yargs-parser: 21.1.1 transitivePeerDependencies: - supports-color @@ -7735,15 +7506,15 @@ snapshots: '@electron/node-gyp': https://codeload.github.com/electron/node-gyp/tar.gz/06b29aafb7708acef8b3669835c8a7857ebc92d2 '@malept/cross-spawn-promise': 2.0.0 chalk: 4.1.2 - debug: 4.4.0 - detect-libc: 2.0.3 + debug: 4.4.1 + detect-libc: 2.0.4 fs-extra: 10.1.0 got: 11.8.6 node-abi: 3.75.0 node-api-version: 0.2.1 ora: 5.4.1 read-binary-file-arch: 1.0.6 - semver: 7.7.1 + semver: 7.7.2 tar: 6.2.1 yargs: 17.7.2 transitivePeerDependencies: @@ -7754,7 +7525,7 @@ snapshots: dependencies: '@electron/asar': 3.4.1 '@malept/cross-spawn-promise': 2.0.0 - debug: 4.4.0 + debug: 4.4.1 dir-compare: 4.2.0 fs-extra: 11.3.0 minimatch: 9.0.5 @@ -7765,14 +7536,14 @@ snapshots: '@electron/windows-sign@1.2.2': dependencies: cross-dirname: 0.1.0 - debug: 4.4.0 + debug: 4.4.1 fs-extra: 11.3.0 minimist: 1.2.8 postject: 1.0.0-alpha.6 transitivePeerDependencies: - supports-color - '@emnapi/runtime@1.4.1': + '@emnapi/runtime@1.4.3': dependencies: tslib: 2.8.1 optional: true @@ -7785,7 +7556,7 @@ snapshots: '@esbuild-kit/esm-loader@2.6.5': dependencies: '@esbuild-kit/core-utils': 3.3.2 - get-tsconfig: 4.10.0 + get-tsconfig: 4.10.1 '@esbuild/aix-ppc64@0.21.5': optional: true @@ -7997,9 +7768,9 @@ snapshots: '@esbuild/win32-x64@0.25.4': optional: true - '@eslint-community/eslint-utils@4.7.0(eslint@9.26.0(jiti@2.4.2))': + '@eslint-community/eslint-utils@4.7.0(eslint@9.27.0(jiti@2.4.2))': dependencies: - eslint: 9.26.0(jiti@2.4.2) + eslint: 9.27.0(jiti@2.4.2) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -8007,21 +7778,21 @@ snapshots: '@eslint/config-array@0.20.0': dependencies: '@eslint/object-schema': 2.1.6 - debug: 4.4.0 + debug: 4.4.1 minimatch: 3.1.2 transitivePeerDependencies: - supports-color '@eslint/config-helpers@0.2.2': {} - '@eslint/core@0.13.0': + '@eslint/core@0.14.0': dependencies: '@types/json-schema': 7.0.15 '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 - debug: 4.4.0 + debug: 4.4.1 espree: 10.3.0 globals: 14.0.0 ignore: 5.3.2 @@ -8032,13 +7803,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.26.0': {} + '@eslint/js@9.27.0': {} '@eslint/object-schema@2.1.6': {} - '@eslint/plugin-kit@0.2.8': + '@eslint/plugin-kit@0.3.1': dependencies: - '@eslint/core': 0.13.0 + '@eslint/core': 0.14.0 levn: 0.4.1 '@floating-ui/core@1.7.0': @@ -8084,14 +7855,14 @@ snapshots: '@humanwhocodes/retry@0.3.1': {} - '@humanwhocodes/retry@0.4.2': {} + '@humanwhocodes/retry@0.4.3': {} - '@img/sharp-darwin-arm64@0.34.1': + '@img/sharp-darwin-arm64@0.34.2': optionalDependencies: '@img/sharp-libvips-darwin-arm64': 1.1.0 optional: true - '@img/sharp-darwin-x64@0.34.1': + '@img/sharp-darwin-x64@0.34.2': optionalDependencies: '@img/sharp-libvips-darwin-x64': 1.1.0 optional: true @@ -8123,45 +7894,48 @@ snapshots: '@img/sharp-libvips-linuxmusl-x64@1.1.0': optional: true - '@img/sharp-linux-arm64@0.34.1': + '@img/sharp-linux-arm64@0.34.2': optionalDependencies: '@img/sharp-libvips-linux-arm64': 1.1.0 optional: true - '@img/sharp-linux-arm@0.34.1': + '@img/sharp-linux-arm@0.34.2': optionalDependencies: '@img/sharp-libvips-linux-arm': 1.1.0 optional: true - '@img/sharp-linux-s390x@0.34.1': + '@img/sharp-linux-s390x@0.34.2': optionalDependencies: '@img/sharp-libvips-linux-s390x': 1.1.0 optional: true - '@img/sharp-linux-x64@0.34.1': + '@img/sharp-linux-x64@0.34.2': optionalDependencies: '@img/sharp-libvips-linux-x64': 1.1.0 optional: true - '@img/sharp-linuxmusl-arm64@0.34.1': + '@img/sharp-linuxmusl-arm64@0.34.2': optionalDependencies: '@img/sharp-libvips-linuxmusl-arm64': 1.1.0 optional: true - '@img/sharp-linuxmusl-x64@0.34.1': + '@img/sharp-linuxmusl-x64@0.34.2': optionalDependencies: '@img/sharp-libvips-linuxmusl-x64': 1.1.0 optional: true - '@img/sharp-wasm32@0.34.1': + '@img/sharp-wasm32@0.34.2': dependencies: - '@emnapi/runtime': 1.4.1 + '@emnapi/runtime': 1.4.3 + optional: true + + '@img/sharp-win32-arm64@0.34.2': optional: true - '@img/sharp-win32-ia32@0.34.1': + '@img/sharp-win32-ia32@0.34.2': optional: true - '@img/sharp-win32-x64@0.34.1': + '@img/sharp-win32-x64@0.34.2': optional: true '@ioredis/commands@1.2.0': {} @@ -8245,24 +8019,9 @@ snapshots: - acorn - supports-color - '@modelcontextprotocol/sdk@1.11.0': - dependencies: - content-type: 1.0.5 - cors: 2.8.5 - cross-spawn: 7.0.6 - eventsource: 3.0.6 - express: 5.1.0 - express-rate-limit: 7.5.0(express@5.1.0) - pkce-challenge: 5.0.0 - raw-body: 3.0.0 - zod: 3.24.4 - zod-to-json-schema: 3.24.5(zod@3.24.4) - transitivePeerDependencies: - - supports-color - '@next/env@15.3.1': {} - '@next/eslint-plugin-next@15.3.0': + '@next/eslint-plugin-next@15.3.2': dependencies: fast-glob: 3.3.1 @@ -8313,14 +8072,14 @@ snapshots: '@npmcli/fs@2.1.2': dependencies: '@gar/promisify': 1.1.3 - semver: 7.7.1 + semver: 7.7.2 '@npmcli/move-file@2.0.1': dependencies: mkdirp: 1.0.4 rimraf: 3.0.2 - '@orama/orama@3.1.6': {} + '@orama/orama@3.1.7': {} '@paralleldrive/cuid2@2.2.2': dependencies: @@ -8355,652 +8114,652 @@ snapshots: '@radix-ui/primitive@1.1.2': {} - '@radix-ui/react-accordion@1.2.10(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-accordion@1.2.11(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collapsible': 1.1.10(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-collection': 1.1.6(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-collapsible': 1.1.11(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.5)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.3 - '@types/react-dom': 19.1.3(@types/react@19.1.3) + '@types/react': 19.1.5 + '@types/react-dom': 19.1.5(@types/react@19.1.5) - '@radix-ui/react-alert-dialog@1.1.13(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-alert-dialog@1.1.14(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-dialog': 1.1.13(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-dialog': 1.1.14(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.5)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.3 - '@types/react-dom': 19.1.3(@types/react@19.1.3) + '@types/react': 19.1.5 + '@types/react-dom': 19.1.5(@types/react@19.1.5) - '@radix-ui/react-arrow@1.1.6(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.3 - '@types/react-dom': 19.1.3(@types/react@19.1.3) + '@types/react': 19.1.5 + '@types/react-dom': 19.1.5(@types/react@19.1.5) - '@radix-ui/react-aspect-ratio@1.1.6(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-aspect-ratio@1.1.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.3 - '@types/react-dom': 19.1.3(@types/react@19.1.3) + '@types/react': 19.1.5 + '@types/react-dom': 19.1.5(@types/react@19.1.5) - '@radix-ui/react-avatar@1.1.9(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-avatar@1.1.10(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.5)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.3 - '@types/react-dom': 19.1.3(@types/react@19.1.3) + '@types/react': 19.1.5 + '@types/react-dom': 19.1.5(@types/react@19.1.5) - '@radix-ui/react-checkbox@1.3.1(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-checkbox@1.3.2(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.5)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.3 - '@types/react-dom': 19.1.3(@types/react@19.1.3) + '@types/react': 19.1.5 + '@types/react-dom': 19.1.5(@types/react@19.1.5) - '@radix-ui/react-collapsible@1.1.10(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-collapsible@1.1.11(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.5)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.3 - '@types/react-dom': 19.1.3(@types/react@19.1.3) + '@types/react': 19.1.5 + '@types/react-dom': 19.1.5(@types/react@19.1.5) - '@radix-ui/react-collection@1.1.6(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-collection@1.1.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.5)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.3 - '@types/react-dom': 19.1.3(@types/react@19.1.3) + '@types/react': 19.1.5 + '@types/react-dom': 19.1.5(@types/react@19.1.5) - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.3)(react@19.1.0)': + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.5)(react@19.1.0)': dependencies: react: 19.1.0 optionalDependencies: - '@types/react': 19.1.3 + '@types/react': 19.1.5 - '@radix-ui/react-context-menu@2.2.14(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-context-menu@2.2.15(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-menu': 2.1.14(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-menu': 2.1.15(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.5)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.3 - '@types/react-dom': 19.1.3(@types/react@19.1.3) + '@types/react': 19.1.5 + '@types/react-dom': 19.1.5(@types/react@19.1.5) - '@radix-ui/react-context@1.1.2(@types/react@19.1.3)(react@19.1.0)': + '@radix-ui/react-context@1.1.2(@types/react@19.1.5)(react@19.1.0)': dependencies: react: 19.1.0 optionalDependencies: - '@types/react': 19.1.3 + '@types/react': 19.1.5 - '@radix-ui/react-dialog@1.1.13(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-dialog@1.1.14(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.9(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.6(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-portal': 1.1.8(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.3)(react@19.1.0) - aria-hidden: 1.2.4 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.5)(react@19.1.0) + aria-hidden: 1.2.6 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - react-remove-scroll: 2.6.3(@types/react@19.1.3)(react@19.1.0) + react-remove-scroll: 2.7.0(@types/react@19.1.5)(react@19.1.0) optionalDependencies: - '@types/react': 19.1.3 - '@types/react-dom': 19.1.3(@types/react@19.1.3) + '@types/react': 19.1.5 + '@types/react-dom': 19.1.5(@types/react@19.1.5) - '@radix-ui/react-direction@1.1.1(@types/react@19.1.3)(react@19.1.0)': + '@radix-ui/react-direction@1.1.1(@types/react@19.1.5)(react@19.1.0)': dependencies: react: 19.1.0 optionalDependencies: - '@types/react': 19.1.3 + '@types/react': 19.1.5 - '@radix-ui/react-dismissable-layer@1.1.9(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-dismissable-layer@1.1.10(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.5)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.3 - '@types/react-dom': 19.1.3(@types/react@19.1.3) + '@types/react': 19.1.5 + '@types/react-dom': 19.1.5(@types/react@19.1.5) - '@radix-ui/react-dropdown-menu@2.1.14(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-dropdown-menu@2.1.15(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-menu': 2.1.14(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-menu': 2.1.15(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.5)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.3 - '@types/react-dom': 19.1.3(@types/react@19.1.3) + '@types/react': 19.1.5 + '@types/react-dom': 19.1.5(@types/react@19.1.5) - '@radix-ui/react-focus-guards@1.1.2(@types/react@19.1.3)(react@19.1.0)': + '@radix-ui/react-focus-guards@1.1.2(@types/react@19.1.5)(react@19.1.0)': dependencies: react: 19.1.0 optionalDependencies: - '@types/react': 19.1.3 + '@types/react': 19.1.5 - '@radix-ui/react-focus-scope@1.1.6(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.5)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.3 - '@types/react-dom': 19.1.3(@types/react@19.1.3) + '@types/react': 19.1.5 + '@types/react-dom': 19.1.5(@types/react@19.1.5) - '@radix-ui/react-hover-card@1.1.13(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-hover-card@1.1.14(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.9(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-popper': 1.2.6(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.8(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.5)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.3 - '@types/react-dom': 19.1.3(@types/react@19.1.3) + '@types/react': 19.1.5 + '@types/react-dom': 19.1.5(@types/react@19.1.5) - '@radix-ui/react-id@1.1.1(@types/react@19.1.3)(react@19.1.0)': + '@radix-ui/react-id@1.1.1(@types/react@19.1.5)(react@19.1.0)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.5)(react@19.1.0) react: 19.1.0 optionalDependencies: - '@types/react': 19.1.3 + '@types/react': 19.1.5 - '@radix-ui/react-label@2.1.6(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-label@2.1.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.3 - '@types/react-dom': 19.1.3(@types/react@19.1.3) + '@types/react': 19.1.5 + '@types/react-dom': 19.1.5(@types/react@19.1.5) - '@radix-ui/react-menu@2.1.14(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-menu@2.1.15(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.6(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.9(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.6(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-popper': 1.2.6(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.8(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.9(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.3)(react@19.1.0) - aria-hidden: 1.2.4 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-roving-focus': 1.1.10(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.5)(react@19.1.0) + aria-hidden: 1.2.6 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - react-remove-scroll: 2.6.3(@types/react@19.1.3)(react@19.1.0) + react-remove-scroll: 2.7.0(@types/react@19.1.5)(react@19.1.0) optionalDependencies: - '@types/react': 19.1.3 - '@types/react-dom': 19.1.3(@types/react@19.1.3) + '@types/react': 19.1.5 + '@types/react-dom': 19.1.5(@types/react@19.1.5) - '@radix-ui/react-menubar@1.1.14(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-menubar@1.1.15(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.6(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-menu': 2.1.14(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.9(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-menu': 2.1.15(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-roving-focus': 1.1.10(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.5)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.3 - '@types/react-dom': 19.1.3(@types/react@19.1.3) + '@types/react': 19.1.5 + '@types/react-dom': 19.1.5(@types/react@19.1.5) - '@radix-ui/react-navigation-menu@1.2.12(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-navigation-menu@1.2.13(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.6(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.9(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-visually-hidden': 1.2.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.3 - '@types/react-dom': 19.1.3(@types/react@19.1.3) + '@types/react': 19.1.5 + '@types/react-dom': 19.1.5(@types/react@19.1.5) - '@radix-ui/react-popover@1.1.13(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-popover@1.1.14(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.9(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.6(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-popper': 1.2.6(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.8(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.3)(react@19.1.0) - aria-hidden: 1.2.4 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.5)(react@19.1.0) + aria-hidden: 1.2.6 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - react-remove-scroll: 2.6.3(@types/react@19.1.3)(react@19.1.0) + react-remove-scroll: 2.7.0(@types/react@19.1.5)(react@19.1.0) optionalDependencies: - '@types/react': 19.1.3 - '@types/react-dom': 19.1.3(@types/react@19.1.3) + '@types/react': 19.1.5 + '@types/react-dom': 19.1.5(@types/react@19.1.5) - '@radix-ui/react-popper@1.2.6(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-popper@1.2.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@floating-ui/react-dom': 2.1.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-arrow': 1.1.6(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-use-rect': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.5)(react@19.1.0) '@radix-ui/rect': 1.1.1 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.3 - '@types/react-dom': 19.1.3(@types/react@19.1.3) + '@types/react': 19.1.5 + '@types/react-dom': 19.1.5(@types/react@19.1.5) - '@radix-ui/react-portal@1.1.8(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.5)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.3 - '@types/react-dom': 19.1.3(@types/react@19.1.3) + '@types/react': 19.1.5 + '@types/react-dom': 19.1.5(@types/react@19.1.5) - '@radix-ui/react-presence@1.1.4(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-presence@1.1.4(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.5)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.3 - '@types/react-dom': 19.1.3(@types/react@19.1.3) + '@types/react': 19.1.5 + '@types/react-dom': 19.1.5(@types/react@19.1.5) - '@radix-ui/react-primitive@2.1.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@radix-ui/react-slot': 1.2.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.5)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.3 - '@types/react-dom': 19.1.3(@types/react@19.1.3) + '@types/react': 19.1.5 + '@types/react-dom': 19.1.5(@types/react@19.1.5) - '@radix-ui/react-progress@1.1.6(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-progress@1.1.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.3 - '@types/react-dom': 19.1.3(@types/react@19.1.3) + '@types/react': 19.1.5 + '@types/react-dom': 19.1.5(@types/react@19.1.5) - '@radix-ui/react-radio-group@1.3.6(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-radio-group@1.3.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.9(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-roving-focus': 1.1.10(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.5)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.3 - '@types/react-dom': 19.1.3(@types/react@19.1.3) + '@types/react': 19.1.5 + '@types/react-dom': 19.1.5(@types/react@19.1.5) - '@radix-ui/react-roving-focus@1.1.9(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-roving-focus@1.1.10(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.6(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.5)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.3 - '@types/react-dom': 19.1.3(@types/react@19.1.3) + '@types/react': 19.1.5 + '@types/react-dom': 19.1.5(@types/react@19.1.5) - '@radix-ui/react-scroll-area@1.2.8(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-scroll-area@1.2.9(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.5)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.3 - '@types/react-dom': 19.1.3(@types/react@19.1.3) + '@types/react': 19.1.5 + '@types/react-dom': 19.1.5(@types/react@19.1.5) - '@radix-ui/react-select@2.2.4(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-select@2.2.5(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.6(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.9(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.6(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-popper': 1.2.6(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.8(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-visually-hidden': 1.2.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - aria-hidden: 1.2.4 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + aria-hidden: 1.2.6 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - react-remove-scroll: 2.6.3(@types/react@19.1.3)(react@19.1.0) + react-remove-scroll: 2.7.0(@types/react@19.1.5)(react@19.1.0) optionalDependencies: - '@types/react': 19.1.3 - '@types/react-dom': 19.1.3(@types/react@19.1.3) + '@types/react': 19.1.5 + '@types/react-dom': 19.1.5(@types/react@19.1.5) - '@radix-ui/react-separator@1.1.6(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-separator@1.1.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.3 - '@types/react-dom': 19.1.3(@types/react@19.1.3) + '@types/react': 19.1.5 + '@types/react-dom': 19.1.5(@types/react@19.1.5) - '@radix-ui/react-slider@1.3.4(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-slider@1.3.5(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.6(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.5)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.3 - '@types/react-dom': 19.1.3(@types/react@19.1.3) + '@types/react': 19.1.5 + '@types/react-dom': 19.1.5(@types/react@19.1.5) - '@radix-ui/react-slot@1.2.2(@types/react@19.1.3)(react@19.1.0)': + '@radix-ui/react-slot@1.2.3(@types/react@19.1.5)(react@19.1.0)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0) react: 19.1.0 optionalDependencies: - '@types/react': 19.1.3 + '@types/react': 19.1.5 - '@radix-ui/react-switch@1.2.4(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-switch@1.2.5(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.5)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.3 - '@types/react-dom': 19.1.3(@types/react@19.1.3) + '@types/react': 19.1.5 + '@types/react-dom': 19.1.5(@types/react@19.1.5) - '@radix-ui/react-tabs@1.1.11(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-tabs@1.1.12(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.9(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-roving-focus': 1.1.10(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.5)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.3 - '@types/react-dom': 19.1.3(@types/react@19.1.3) + '@types/react': 19.1.5 + '@types/react-dom': 19.1.5(@types/react@19.1.5) - '@radix-ui/react-toggle-group@1.1.9(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-toggle-group@1.1.10(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.9(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-toggle': 1.1.8(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-roving-focus': 1.1.10(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-toggle': 1.1.9(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.5)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.3 - '@types/react-dom': 19.1.3(@types/react@19.1.3) + '@types/react': 19.1.5 + '@types/react-dom': 19.1.5(@types/react@19.1.5) - '@radix-ui/react-toggle@1.1.8(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-toggle@1.1.9(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.5)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.3 - '@types/react-dom': 19.1.3(@types/react@19.1.3) + '@types/react': 19.1.5 + '@types/react-dom': 19.1.5(@types/react@19.1.5) - '@radix-ui/react-tooltip@1.2.6(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-tooltip@1.2.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.9(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-popper': 1.2.6(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.8(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-visually-hidden': 1.2.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.3 - '@types/react-dom': 19.1.3(@types/react@19.1.3) + '@types/react': 19.1.5 + '@types/react-dom': 19.1.5(@types/react@19.1.5) - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.3)(react@19.1.0)': + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.5)(react@19.1.0)': dependencies: react: 19.1.0 optionalDependencies: - '@types/react': 19.1.3 + '@types/react': 19.1.5 - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.3)(react@19.1.0)': + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.5)(react@19.1.0)': dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.5)(react@19.1.0) react: 19.1.0 optionalDependencies: - '@types/react': 19.1.3 + '@types/react': 19.1.5 - '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.3)(react@19.1.0)': + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.5)(react@19.1.0)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.5)(react@19.1.0) react: 19.1.0 optionalDependencies: - '@types/react': 19.1.3 + '@types/react': 19.1.5 - '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.3)(react@19.1.0)': + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.5)(react@19.1.0)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.5)(react@19.1.0) react: 19.1.0 optionalDependencies: - '@types/react': 19.1.3 + '@types/react': 19.1.5 - '@radix-ui/react-use-is-hydrated@0.1.0(@types/react@19.1.3)(react@19.1.0)': + '@radix-ui/react-use-is-hydrated@0.1.0(@types/react@19.1.5)(react@19.1.0)': dependencies: react: 19.1.0 use-sync-external-store: 1.5.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.3 + '@types/react': 19.1.5 - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.3)(react@19.1.0)': + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.5)(react@19.1.0)': dependencies: react: 19.1.0 optionalDependencies: - '@types/react': 19.1.3 + '@types/react': 19.1.5 - '@radix-ui/react-use-previous@1.1.1(@types/react@19.1.3)(react@19.1.0)': + '@radix-ui/react-use-previous@1.1.1(@types/react@19.1.5)(react@19.1.0)': dependencies: react: 19.1.0 optionalDependencies: - '@types/react': 19.1.3 + '@types/react': 19.1.5 - '@radix-ui/react-use-rect@1.1.1(@types/react@19.1.3)(react@19.1.0)': + '@radix-ui/react-use-rect@1.1.1(@types/react@19.1.5)(react@19.1.0)': dependencies: '@radix-ui/rect': 1.1.1 react: 19.1.0 optionalDependencies: - '@types/react': 19.1.3 + '@types/react': 19.1.5 - '@radix-ui/react-use-size@1.1.1(@types/react@19.1.3)(react@19.1.0)': + '@radix-ui/react-use-size@1.1.1(@types/react@19.1.5)(react@19.1.0)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.3)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.5)(react@19.1.0) react: 19.1.0 optionalDependencies: - '@types/react': 19.1.3 + '@types/react': 19.1.5 - '@radix-ui/react-visually-hidden@1.2.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.3 - '@types/react-dom': 19.1.3(@types/react@19.1.3) + '@types/react': 19.1.5 + '@types/react-dom': 19.1.5(@types/react@19.1.5) '@radix-ui/rect@1.1.1': {} @@ -9070,47 +8829,47 @@ snapshots: '@rtsao/scc@1.1.0': {} - '@shikijs/core@3.4.0': + '@shikijs/core@3.4.2': dependencies: - '@shikijs/types': 3.4.0 + '@shikijs/types': 3.4.2 '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 hast-util-to-html: 9.0.5 - '@shikijs/engine-javascript@3.4.0': + '@shikijs/engine-javascript@3.4.2': dependencies: - '@shikijs/types': 3.4.0 + '@shikijs/types': 3.4.2 '@shikijs/vscode-textmate': 10.0.2 oniguruma-to-es: 4.3.3 - '@shikijs/engine-oniguruma@3.4.0': + '@shikijs/engine-oniguruma@3.4.2': dependencies: - '@shikijs/types': 3.4.0 + '@shikijs/types': 3.4.2 '@shikijs/vscode-textmate': 10.0.2 - '@shikijs/langs@3.4.0': + '@shikijs/langs@3.4.2': dependencies: - '@shikijs/types': 3.4.0 + '@shikijs/types': 3.4.2 - '@shikijs/rehype@3.4.0': + '@shikijs/rehype@3.4.2': dependencies: - '@shikijs/types': 3.4.0 + '@shikijs/types': 3.4.2 '@types/hast': 3.0.4 hast-util-to-string: 3.0.1 - shiki: 3.4.0 + shiki: 3.4.2 unified: 11.0.5 unist-util-visit: 5.0.0 - '@shikijs/themes@3.4.0': + '@shikijs/themes@3.4.2': dependencies: - '@shikijs/types': 3.4.0 + '@shikijs/types': 3.4.2 - '@shikijs/transformers@3.4.0': + '@shikijs/transformers@3.4.2': dependencies: - '@shikijs/core': 3.4.0 - '@shikijs/types': 3.4.0 + '@shikijs/core': 3.4.2 + '@shikijs/types': 3.4.2 - '@shikijs/types@3.4.0': + '@shikijs/types@3.4.2': dependencies: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 @@ -9137,13 +8896,6 @@ snapshots: dependencies: defer-to-connect: 2.0.1 - '@tailwindcss/node@4.1.5': - dependencies: - enhanced-resolve: 5.18.1 - jiti: 2.4.2 - lightningcss: 1.29.2 - tailwindcss: 4.1.5 - '@tailwindcss/node@4.1.7': dependencies: '@ampproject/remapping': 2.3.0 @@ -9154,93 +8906,42 @@ snapshots: source-map-js: 1.2.1 tailwindcss: 4.1.7 - '@tailwindcss/oxide-android-arm64@4.1.5': - optional: true - '@tailwindcss/oxide-android-arm64@4.1.7': optional: true - '@tailwindcss/oxide-darwin-arm64@4.1.5': - optional: true - '@tailwindcss/oxide-darwin-arm64@4.1.7': optional: true - '@tailwindcss/oxide-darwin-x64@4.1.5': - optional: true - '@tailwindcss/oxide-darwin-x64@4.1.7': optional: true - '@tailwindcss/oxide-freebsd-x64@4.1.5': - optional: true - '@tailwindcss/oxide-freebsd-x64@4.1.7': optional: true - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.5': - optional: true - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.7': optional: true - '@tailwindcss/oxide-linux-arm64-gnu@4.1.5': - optional: true - '@tailwindcss/oxide-linux-arm64-gnu@4.1.7': optional: true - '@tailwindcss/oxide-linux-arm64-musl@4.1.5': - optional: true - '@tailwindcss/oxide-linux-arm64-musl@4.1.7': optional: true - '@tailwindcss/oxide-linux-x64-gnu@4.1.5': - optional: true - '@tailwindcss/oxide-linux-x64-gnu@4.1.7': optional: true - '@tailwindcss/oxide-linux-x64-musl@4.1.5': - optional: true - '@tailwindcss/oxide-linux-x64-musl@4.1.7': optional: true - '@tailwindcss/oxide-wasm32-wasi@4.1.5': - optional: true - '@tailwindcss/oxide-wasm32-wasi@4.1.7': optional: true - '@tailwindcss/oxide-win32-arm64-msvc@4.1.5': - optional: true - '@tailwindcss/oxide-win32-arm64-msvc@4.1.7': optional: true - '@tailwindcss/oxide-win32-x64-msvc@4.1.5': - optional: true - '@tailwindcss/oxide-win32-x64-msvc@4.1.7': optional: true - '@tailwindcss/oxide@4.1.5': - optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.1.5 - '@tailwindcss/oxide-darwin-arm64': 4.1.5 - '@tailwindcss/oxide-darwin-x64': 4.1.5 - '@tailwindcss/oxide-freebsd-x64': 4.1.5 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.5 - '@tailwindcss/oxide-linux-arm64-gnu': 4.1.5 - '@tailwindcss/oxide-linux-arm64-musl': 4.1.5 - '@tailwindcss/oxide-linux-x64-gnu': 4.1.5 - '@tailwindcss/oxide-linux-x64-musl': 4.1.5 - '@tailwindcss/oxide-wasm32-wasi': 4.1.5 - '@tailwindcss/oxide-win32-arm64-msvc': 4.1.5 - '@tailwindcss/oxide-win32-x64-msvc': 4.1.5 - '@tailwindcss/oxide@4.1.7': dependencies: detect-libc: 2.0.4 @@ -9259,20 +8960,20 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.1.7 '@tailwindcss/oxide-win32-x64-msvc': 4.1.7 - '@tailwindcss/postcss@4.1.5': + '@tailwindcss/postcss@4.1.7': dependencies: '@alloc/quick-lru': 5.2.0 - '@tailwindcss/node': 4.1.5 - '@tailwindcss/oxide': 4.1.5 + '@tailwindcss/node': 4.1.7 + '@tailwindcss/oxide': 4.1.7 postcss: 8.5.3 - tailwindcss: 4.1.5 + tailwindcss: 4.1.7 - '@tailwindcss/vite@4.1.7(vite@5.4.19(@types/node@16.18.126)(lightningcss@1.29.2))': + '@tailwindcss/vite@4.1.7(vite@5.4.19(@types/node@16.18.126)(lightningcss@1.30.1))': dependencies: '@tailwindcss/node': 4.1.7 '@tailwindcss/oxide': 4.1.7 tailwindcss: 4.1.7 - vite: 5.4.19(@types/node@16.18.126)(lightningcss@1.29.2) + vite: 5.4.19(@types/node@16.18.126)(lightningcss@1.30.1) '@tootallnate/once@2.0.0': {} @@ -9286,9 +8987,9 @@ snapshots: '@tsconfig/node16@1.0.4': {} - '@turbo/gen@2.5.0(@types/node@22.15.3)(typescript@5.8.2)': + '@turbo/gen@2.5.3(@types/node@22.15.12)(typescript@5.8.2)': dependencies: - '@turbo/workspaces': 2.5.0 + '@turbo/workspaces': 2.5.3 commander: 10.0.1 fs-extra: 10.1.0 inquirer: 8.2.6 @@ -9296,7 +8997,7 @@ snapshots: node-plop: 0.26.3 picocolors: 1.0.1 proxy-agent: 6.5.0 - ts-node: 10.9.2(@types/node@22.15.3)(typescript@5.8.2) + ts-node: 10.9.2(@types/node@22.15.12)(typescript@5.8.2) update-check: 1.5.4 validate-npm-package-name: 5.0.1 transitivePeerDependencies: @@ -9306,7 +9007,7 @@ snapshots: - supports-color - typescript - '@turbo/workspaces@2.5.0': + '@turbo/workspaces@2.5.3': dependencies: commander: 10.0.1 execa: 5.1.1 @@ -9417,7 +9118,7 @@ snapshots: '@types/node@16.18.126': {} - '@types/node@18.19.101': + '@types/node@18.19.103': dependencies: undici-types: 5.26.5 @@ -9425,23 +9126,19 @@ snapshots: dependencies: undici-types: 6.21.0 - '@types/node@22.15.3': - dependencies: - undici-types: 6.21.0 - '@types/react-dom@19.1.1(@types/react@19.1.0)': dependencies: '@types/react': 19.1.0 - '@types/react-dom@19.1.3(@types/react@19.1.3)': + '@types/react-dom@19.1.5(@types/react@19.1.5)': dependencies: - '@types/react': 19.1.3 + '@types/react': 19.1.5 '@types/react@19.1.0': dependencies: csstype: 3.1.3 - '@types/react@19.1.3': + '@types/react@19.1.5': dependencies: csstype: 3.1.3 @@ -9472,63 +9169,63 @@ snapshots: '@types/node': 22.15.12 optional: true - '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 5.62.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/parser': 5.62.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 5.62.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) - debug: 4.4.0 - eslint: 9.26.0(jiti@2.4.2) + '@typescript-eslint/type-utils': 5.62.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 5.62.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + debug: 4.4.1 + eslint: 9.27.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 5.3.2 natural-compare-lite: 1.4.0 - semver: 7.7.1 + semver: 7.7.2 tsutils: 3.21.0(typescript@5.8.3) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.31.0(@typescript-eslint/parser@8.31.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.2)': + '@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.31.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.2) - '@typescript-eslint/scope-manager': 8.31.0 - '@typescript-eslint/type-utils': 8.31.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.2) - '@typescript-eslint/utils': 8.31.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.2) - '@typescript-eslint/visitor-keys': 8.31.0 - eslint: 9.26.0(jiti@2.4.2) + '@typescript-eslint/parser': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.32.1 + '@typescript-eslint/type-utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.32.1 + eslint: 9.27.0(jiti@2.4.2) graphemer: 1.4.0 - ignore: 5.3.2 + ignore: 7.0.4 natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.8.2) - typescript: 5.8.2 + ts-api-utils: 2.1.0(typescript@5.8.3) + typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@5.62.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/parser@5.62.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.8.3) - debug: 4.4.0 - eslint: 9.26.0(jiti@2.4.2) + debug: 4.4.1 + eslint: 9.27.0(jiti@2.4.2) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.31.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.2)': + '@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@typescript-eslint/scope-manager': 8.31.0 - '@typescript-eslint/types': 8.31.0 - '@typescript-eslint/typescript-estree': 8.31.0(typescript@5.8.2) - '@typescript-eslint/visitor-keys': 8.31.0 - debug: 4.4.0 - eslint: 9.26.0(jiti@2.4.2) - typescript: 5.8.2 + '@typescript-eslint/scope-manager': 8.32.1 + '@typescript-eslint/types': 8.32.1 + '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.32.1 + debug: 4.4.1 + eslint: 9.27.0(jiti@2.4.2) + typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -9537,89 +9234,89 @@ snapshots: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - '@typescript-eslint/scope-manager@8.31.0': + '@typescript-eslint/scope-manager@8.32.1': dependencies: - '@typescript-eslint/types': 8.31.0 - '@typescript-eslint/visitor-keys': 8.31.0 + '@typescript-eslint/types': 8.32.1 + '@typescript-eslint/visitor-keys': 8.32.1 - '@typescript-eslint/type-utils@5.62.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/type-utils@5.62.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.8.3) - '@typescript-eslint/utils': 5.62.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) - debug: 4.4.0 - eslint: 9.26.0(jiti@2.4.2) + '@typescript-eslint/utils': 5.62.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + debug: 4.4.1 + eslint: 9.27.0(jiti@2.4.2) tsutils: 3.21.0(typescript@5.8.3) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.31.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.2)': + '@typescript-eslint/type-utils@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@typescript-eslint/typescript-estree': 8.31.0(typescript@5.8.2) - '@typescript-eslint/utils': 8.31.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.2) - debug: 4.4.0 - eslint: 9.26.0(jiti@2.4.2) - ts-api-utils: 2.1.0(typescript@5.8.2) - typescript: 5.8.2 + '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) + '@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + debug: 4.4.1 + eslint: 9.27.0(jiti@2.4.2) + ts-api-utils: 2.1.0(typescript@5.8.3) + typescript: 5.8.3 transitivePeerDependencies: - supports-color '@typescript-eslint/types@5.62.0': {} - '@typescript-eslint/types@8.31.0': {} + '@typescript-eslint/types@8.32.1': {} '@typescript-eslint/typescript-estree@5.62.0(typescript@5.8.3)': dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.4.0 + debug: 4.4.1 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.7.1 + semver: 7.7.2 tsutils: 3.21.0(typescript@5.8.3) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.31.0(typescript@5.8.2)': + '@typescript-eslint/typescript-estree@8.32.1(typescript@5.8.3)': dependencies: - '@typescript-eslint/types': 8.31.0 - '@typescript-eslint/visitor-keys': 8.31.0 - debug: 4.4.0 + '@typescript-eslint/types': 8.32.1 + '@typescript-eslint/visitor-keys': 8.32.1 + debug: 4.4.1 fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.7.1 - ts-api-utils: 2.1.0(typescript@5.8.2) - typescript: 5.8.2 + semver: 7.7.2 + ts-api-utils: 2.1.0(typescript@5.8.3) + typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@5.62.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/utils@5.62.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0(jiti@2.4.2)) '@types/json-schema': 7.0.15 '@types/semver': 7.7.0 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.8.3) - eslint: 9.26.0(jiti@2.4.2) + eslint: 9.27.0(jiti@2.4.2) eslint-scope: 5.1.1 - semver: 7.7.1 + semver: 7.7.2 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/utils@8.31.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.2)': + '@typescript-eslint/utils@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.31.0 - '@typescript-eslint/types': 8.31.0 - '@typescript-eslint/typescript-estree': 8.31.0(typescript@5.8.2) - eslint: 9.26.0(jiti@2.4.2) - typescript: 5.8.2 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0(jiti@2.4.2)) + '@typescript-eslint/scope-manager': 8.32.1 + '@typescript-eslint/types': 8.32.1 + '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) + eslint: 9.27.0(jiti@2.4.2) + typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -9628,9 +9325,9 @@ snapshots: '@typescript-eslint/types': 5.62.0 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@8.31.0': + '@typescript-eslint/visitor-keys@8.32.1': dependencies: - '@typescript-eslint/types': 8.31.0 + '@typescript-eslint/types': 8.32.1 eslint-visitor-keys: 4.2.0 '@ungap/structured-clone@1.3.0': {} @@ -9648,11 +9345,6 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 - accepts@2.0.0: - dependencies: - mime-types: 3.0.1 - negotiator: 1.0.0 - acorn-jsx@5.3.2(acorn@8.14.1): dependencies: acorn: 8.14.1 @@ -9667,7 +9359,7 @@ snapshots: agent-base@6.0.2: dependencies: - debug: 4.4.0 + debug: 4.4.1 transitivePeerDependencies: - supports-color @@ -9738,7 +9430,7 @@ snapshots: argparse@2.0.1: {} - aria-hidden@1.2.4: + aria-hidden@1.2.6: dependencies: tslib: 2.8.1 @@ -9757,7 +9449,7 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.9 + es-abstract: 1.23.10 es-object-atoms: 1.1.1 get-intrinsic: 1.3.0 is-string: 1.1.1 @@ -9768,7 +9460,7 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.9 + es-abstract: 1.23.10 es-errors: 1.3.0 es-object-atoms: 1.1.1 es-shim-unscopables: 1.1.0 @@ -9778,7 +9470,7 @@ snapshots: call-bind: 1.0.8 call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.23.9 + es-abstract: 1.23.10 es-errors: 1.3.0 es-object-atoms: 1.1.1 es-shim-unscopables: 1.1.0 @@ -9787,21 +9479,21 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.9 + es-abstract: 1.23.10 es-shim-unscopables: 1.1.0 array.prototype.flatmap@1.3.3: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.9 + es-abstract: 1.23.10 es-shim-unscopables: 1.1.0 array.prototype.tosorted@1.1.4: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.9 + es-abstract: 1.23.10 es-errors: 1.3.0 es-shim-unscopables: 1.1.0 @@ -9810,7 +9502,7 @@ snapshots: array-buffer-byte-length: 1.0.2 call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.9 + es-abstract: 1.23.10 es-errors: 1.3.0 get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 @@ -9896,20 +9588,6 @@ snapshots: transitivePeerDependencies: - supports-color - body-parser@2.2.0: - dependencies: - bytes: 3.1.2 - content-type: 1.0.5 - debug: 4.4.0 - http-errors: 2.0.0 - iconv-lite: 0.6.3 - on-finished: 2.4.1 - qs: 6.14.0 - raw-body: 3.0.0 - type-is: 2.0.1 - transitivePeerDependencies: - - supports-color - boolean@3.2.0: optional: true @@ -10007,7 +9685,7 @@ snapshots: no-case: 2.3.2 upper-case: 1.1.3 - caniuse-lite@1.0.30001713: {} + caniuse-lite@1.0.30001718: {} ccount@2.0.1: {} @@ -10126,12 +9804,12 @@ snapshots: cluster-key-slot@1.1.2: {} - cmdk@1.1.1(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + cmdk@1.1.1(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-dialog': 1.1.13(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-dialog': 1.1.14(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) transitivePeerDependencies: @@ -10229,7 +9907,7 @@ snapshots: dot-prop: 9.0.0 env-paths: 3.0.0 json-schema-typed: 8.0.1 - semver: 7.7.1 + semver: 7.7.2 uint8array-extras: 1.4.0 connect-redis@7.1.1(express-session@1.18.1): @@ -10252,10 +9930,6 @@ snapshots: dependencies: safe-buffer: 5.2.1 - content-disposition@1.0.0: - dependencies: - safe-buffer: 5.2.1 - content-type@1.0.5: {} cookie-parser@1.4.7: @@ -10267,15 +9941,13 @@ snapshots: cookie-signature@1.0.7: {} - cookie-signature@1.2.2: {} - cookie@0.4.0: {} cookie@0.7.1: {} cookie@0.7.2: {} - core-js-pure@3.41.0: {} + core-js-pure@3.42.0: {} cors@2.8.5: dependencies: @@ -10405,7 +10077,7 @@ snapshots: dependencies: ms: 2.1.3 - debug@4.4.0: + debug@4.4.1: dependencies: ms: 2.1.3 @@ -10470,8 +10142,6 @@ snapshots: destroy@1.2.0: {} - detect-libc@2.0.3: {} - detect-libc@2.0.4: {} detect-node-es@1.1.0: {} @@ -10550,12 +10220,12 @@ snapshots: dependencies: '@electron/asar': 3.4.1 '@malept/cross-spawn-promise': 1.1.1 - debug: 4.4.0 + debug: 4.4.1 fs-extra: 9.1.0 glob: 7.2.3 lodash: 4.17.21 parse-author: 2.0.0 - semver: 7.7.1 + semver: 7.7.2 tmp-promise: 3.0.3 optionalDependencies: '@types/fs-extra': 9.0.13 @@ -10566,7 +10236,7 @@ snapshots: electron-installer-debian@3.2.0: dependencies: '@malept/cross-spawn-promise': 1.1.1 - debug: 4.4.0 + debug: 4.4.1 electron-installer-common: 0.10.4 fs-extra: 9.1.0 get-folder-size: 2.0.1 @@ -10580,7 +10250,7 @@ snapshots: electron-installer-redhat@3.4.0: dependencies: '@malept/cross-spawn-promise': 1.1.1 - debug: 4.4.0 + debug: 4.4.1 electron-installer-common: 0.10.4 fs-extra: 9.1.0 lodash: 4.17.21 @@ -10604,7 +10274,7 @@ snapshots: electron-winstaller@5.4.0: dependencies: '@electron/asar': 3.4.1 - debug: 4.4.0 + debug: 4.4.1 fs-extra: 7.0.1 lodash: 4.17.21 temp: 0.9.4 @@ -10672,7 +10342,7 @@ snapshots: enhanced-resolve@5.18.1: dependencies: graceful-fs: 4.2.11 - tapable: 2.2.1 + tapable: 2.2.2 env-paths@2.2.1: {} @@ -10684,7 +10354,7 @@ snapshots: dependencies: is-arrayish: 0.2.1 - es-abstract@1.23.9: + es-abstract@1.23.10: dependencies: array-buffer-byte-length: 1.0.2 arraybuffer.prototype.slice: 1.0.4 @@ -10736,7 +10406,7 @@ snapshots: typed-array-byte-offset: 1.0.4 typed-array-length: 1.0.7 unbox-primitive: 1.1.0 - which-typed-array: 1.1.18 + which-typed-array: 1.1.19 es-define-property@1.0.1: {} @@ -10747,7 +10417,7 @@ snapshots: call-bind: 1.0.8 call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.23.9 + es-abstract: 1.23.10 es-errors: 1.3.0 es-set-tostringtag: 2.1.0 function-bind: 1.1.2 @@ -10801,7 +10471,7 @@ snapshots: esbuild-register@3.6.0(esbuild@0.25.4): dependencies: - debug: 4.4.0 + debug: 4.4.1 esbuild: 0.25.4 transitivePeerDependencies: - supports-color @@ -10903,13 +10573,13 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-prettier@10.1.1(eslint@9.26.0(jiti@2.4.2)): + eslint-config-prettier@10.1.5(eslint@9.27.0(jiti@2.4.2)): dependencies: - eslint: 9.26.0(jiti@2.4.2) + eslint: 9.27.0(jiti@2.4.2) - eslint-config-prettier@9.1.0(eslint@9.26.0(jiti@2.4.2)): + eslint-config-prettier@9.1.0(eslint@9.27.0(jiti@2.4.2)): dependencies: - eslint: 9.26.0(jiti@2.4.2) + eslint: 9.27.0(jiti@2.4.2) eslint-import-resolver-node@0.3.9: dependencies: @@ -10919,17 +10589,17 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@5.62.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.26.0(jiti@2.4.2)): + eslint-module-utils@2.12.0(@typescript-eslint/parser@5.62.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.27.0(jiti@2.4.2)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 5.62.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.26.0(jiti@2.4.2) + '@typescript-eslint/parser': 5.62.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + eslint: 9.27.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@5.62.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.26.0(jiti@2.4.2)): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@5.62.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -10938,9 +10608,9 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.26.0(jiti@2.4.2) + eslint: 9.27.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@5.62.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.26.0(jiti@2.4.2)) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@5.62.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.27.0(jiti@2.4.2)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -10952,7 +10622,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 5.62.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/parser': 5.62.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -10960,20 +10630,20 @@ snapshots: eslint-plugin-only-warn@1.1.0: {} - eslint-plugin-prettier@5.4.0(eslint-config-prettier@9.1.0(eslint@9.26.0(jiti@2.4.2)))(eslint@9.26.0(jiti@2.4.2))(prettier@3.5.3): + eslint-plugin-prettier@5.4.0(eslint-config-prettier@9.1.0(eslint@9.27.0(jiti@2.4.2)))(eslint@9.27.0(jiti@2.4.2))(prettier@3.5.3): dependencies: - eslint: 9.26.0(jiti@2.4.2) + eslint: 9.27.0(jiti@2.4.2) prettier: 3.5.3 prettier-linter-helpers: 1.0.0 synckit: 0.11.6 optionalDependencies: - eslint-config-prettier: 9.1.0(eslint@9.26.0(jiti@2.4.2)) + eslint-config-prettier: 9.1.0(eslint@9.27.0(jiti@2.4.2)) - eslint-plugin-react-hooks@5.2.0(eslint@9.26.0(jiti@2.4.2)): + eslint-plugin-react-hooks@5.2.0(eslint@9.27.0(jiti@2.4.2)): dependencies: - eslint: 9.26.0(jiti@2.4.2) + eslint: 9.27.0(jiti@2.4.2) - eslint-plugin-react@7.37.4(eslint@9.26.0(jiti@2.4.2)): + eslint-plugin-react@7.37.5(eslint@9.27.0(jiti@2.4.2)): dependencies: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 @@ -10981,12 +10651,12 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.2.1 - eslint: 9.26.0(jiti@2.4.2) + eslint: 9.27.0(jiti@2.4.2) estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 minimatch: 3.1.2 - object.entries: 1.1.8 + object.entries: 1.1.9 object.fromentries: 2.0.8 object.values: 1.2.1 prop-types: 15.8.1 @@ -10995,10 +10665,10 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-turbo@2.5.0(eslint@9.26.0(jiti@2.4.2))(turbo@2.5.3): + eslint-plugin-turbo@2.5.3(eslint@9.27.0(jiti@2.4.2))(turbo@2.5.3): dependencies: dotenv: 16.0.3 - eslint: 9.26.0(jiti@2.4.2) + eslint: 9.27.0(jiti@2.4.2) turbo: 2.5.3 eslint-scope@5.1.1: @@ -11015,26 +10685,25 @@ snapshots: eslint-visitor-keys@4.2.0: {} - eslint@9.26.0(jiti@2.4.2): + eslint@9.27.0(jiti@2.4.2): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.20.0 '@eslint/config-helpers': 0.2.2 - '@eslint/core': 0.13.0 + '@eslint/core': 0.14.0 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.26.0 - '@eslint/plugin-kit': 0.2.8 + '@eslint/js': 9.27.0 + '@eslint/plugin-kit': 0.3.1 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.2 - '@modelcontextprotocol/sdk': 1.11.0 + '@humanwhocodes/retry': 0.4.3 '@types/estree': 1.0.7 '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.0 + debug: 4.4.1 escape-string-regexp: 4.0.0 eslint-scope: 8.3.0 eslint-visitor-keys: 4.2.0 @@ -11053,7 +10722,6 @@ snapshots: minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.4 - zod: 3.24.4 optionalDependencies: jiti: 2.4.2 transitivePeerDependencies: @@ -11128,12 +10796,6 @@ snapshots: events@3.3.0: {} - eventsource-parser@3.0.1: {} - - eventsource@3.0.6: - dependencies: - eventsource-parser: 3.0.1 - execa@1.0.0: dependencies: cross-spawn: 6.0.6 @@ -11160,10 +10822,6 @@ snapshots: exponential-backoff@3.1.2: {} - express-rate-limit@7.5.0(express@5.1.0): - dependencies: - express: 5.1.0 - express-session@1.18.1: dependencies: cookie: 0.7.2 @@ -11221,38 +10879,6 @@ snapshots: transitivePeerDependencies: - supports-color - express@5.1.0: - dependencies: - accepts: 2.0.0 - body-parser: 2.2.0 - content-disposition: 1.0.0 - content-type: 1.0.5 - cookie: 0.7.2 - cookie-signature: 1.2.2 - debug: 4.4.0 - encodeurl: 2.0.0 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 2.1.0 - fresh: 2.0.0 - http-errors: 2.0.0 - merge-descriptors: 2.0.0 - mime-types: 3.0.1 - on-finished: 2.4.1 - once: 1.4.0 - parseurl: 1.3.3 - proxy-addr: 2.0.7 - qs: 6.14.0 - range-parser: 1.2.1 - router: 2.2.0 - send: 1.2.0 - serve-static: 2.2.0 - statuses: 2.0.1 - type-is: 2.0.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - extend-shallow@2.0.1: dependencies: is-extendable: 0.1.1 @@ -11267,7 +10893,7 @@ snapshots: extract-zip@2.0.1: dependencies: - debug: 4.4.0 + debug: 4.4.1 get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -11345,17 +10971,6 @@ snapshots: transitivePeerDependencies: - supports-color - finalhandler@2.1.0: - dependencies: - debug: 4.4.0 - encodeurl: 2.0.0 - escape-html: 1.0.3 - on-finished: 2.4.1 - parseurl: 1.3.3 - statuses: 2.0.1 - transitivePeerDependencies: - - supports-color - find-replace@3.0.0: dependencies: array-back: 3.1.0 @@ -11380,7 +10995,7 @@ snapshots: flora-colossus@2.0.0: dependencies: - debug: 4.4.0 + debug: 4.4.1 fs-extra: 10.1.0 transitivePeerDependencies: - supports-color @@ -11414,7 +11029,7 @@ snapshots: forwarded@0.2.0: {} - framer-motion@12.12.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + framer-motion@12.12.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: motion-dom: 12.12.1 motion-utils: 12.12.1 @@ -11425,8 +11040,6 @@ snapshots: fresh@0.5.2: {} - fresh@2.0.0: {} - fs-constants@1.0.0: {} fs-extra@10.1.0: @@ -11470,22 +11083,22 @@ snapshots: fsevents@2.3.3: optional: true - fumadocs-core@15.3.0(@types/react@19.1.3)(next@15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + fumadocs-core@15.3.0(@types/react@19.1.5)(next@15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: '@formatjs/intl-localematcher': 0.6.1 - '@orama/orama': 3.1.6 - '@shikijs/rehype': 3.4.0 - '@shikijs/transformers': 3.4.0 + '@orama/orama': 3.1.7 + '@shikijs/rehype': 3.4.2 + '@shikijs/transformers': 3.4.2 github-slugger: 2.0.0 hast-util-to-estree: 3.1.3 hast-util-to-jsx-runtime: 2.3.6 image-size: 2.0.2 negotiator: 1.0.0 - react-remove-scroll: 2.6.3(@types/react@19.1.3)(react@19.1.0) + react-remove-scroll: 2.7.0(@types/react@19.1.5)(react@19.1.0) remark: 15.0.1 remark-gfm: 4.0.1 scroll-into-view-if-needed: 3.1.0 - shiki: 3.4.0 + shiki: 3.4.2 unist-util-visit: 5.0.0 optionalDependencies: next: 15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -11495,7 +11108,7 @@ snapshots: - '@types/react' - supports-color - fumadocs-mdx@11.6.3(acorn@8.14.1)(fumadocs-core@15.3.0(@types/react@19.1.3)(next@15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(next@15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)): + fumadocs-mdx@11.6.3(acorn@8.14.1)(fumadocs-core@15.3.0(@types/react@19.1.5)(next@15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(next@15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)): dependencies: '@mdx-js/mdx': 3.1.0(acorn@8.14.1) '@standard-schema/spec': 1.0.0 @@ -11504,32 +11117,32 @@ snapshots: esbuild: 0.25.4 estree-util-value-to-estree: 3.4.0 fast-glob: 3.3.3 - fumadocs-core: 15.3.0(@types/react@19.1.3)(next@15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + fumadocs-core: 15.3.0(@types/react@19.1.5)(next@15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) gray-matter: 4.0.3 js-yaml: 4.1.0 lru-cache: 11.1.0 next: 15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) picocolors: 1.1.1 unist-util-visit: 5.0.0 - zod: 3.24.4 + zod: 3.25.24 transitivePeerDependencies: - acorn - supports-color - fumadocs-ui@15.3.0(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(next@15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(tailwindcss@4.1.5): - dependencies: - '@radix-ui/react-accordion': 1.2.10(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-collapsible': 1.1.10(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-dialog': 1.1.13(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-navigation-menu': 1.2.12(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-popover': 1.1.13(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-scroll-area': 1.2.8(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.2(@types/react@19.1.3)(react@19.1.0) - '@radix-ui/react-tabs': 1.1.11(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + fumadocs-ui@15.3.0(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(next@15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(tailwindcss@4.1.7): + dependencies: + '@radix-ui/react-accordion': 1.2.11(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-collapsible': 1.1.11(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-dialog': 1.1.14(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-navigation-menu': 1.2.13(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-popover': 1.1.14(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-scroll-area': 1.2.9(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.5)(react@19.1.0) + '@radix-ui/react-tabs': 1.1.12(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) class-variance-authority: 0.7.1 - fumadocs-core: 15.3.0(@types/react@19.1.3)(next@15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + fumadocs-core: 15.3.0(@types/react@19.1.5)(next@15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) lodash.merge: 4.6.2 next: 15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) next-themes: 0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -11537,10 +11150,10 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) react-medium-image-zoom: 5.2.14(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react-remove-scroll: 2.6.3(@types/react@19.1.3)(react@19.1.0) - tailwind-merge: 3.2.0 + react-remove-scroll: 2.7.0(@types/react@19.1.5)(react@19.1.0) + tailwind-merge: 3.3.0 optionalDependencies: - tailwindcss: 4.1.5 + tailwindcss: 4.1.7 transitivePeerDependencies: - '@oramacloud/client' - '@types/react' @@ -11563,7 +11176,7 @@ snapshots: galactus@1.0.0: dependencies: - debug: 4.4.0 + debug: 4.4.1 flora-colossus: 2.0.0 fs-extra: 10.1.0 transitivePeerDependencies: @@ -11636,7 +11249,7 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.3.0 - get-tsconfig@4.10.0: + get-tsconfig@4.10.1: dependencies: resolve-pkg-maps: 1.0.0 @@ -11644,7 +11257,7 @@ snapshots: dependencies: basic-ftp: 5.0.5 data-uri-to-buffer: 6.0.2 - debug: 4.4.0 + debug: 4.4.1 transitivePeerDependencies: - supports-color @@ -11683,7 +11296,7 @@ snapshots: es6-error: 4.1.1 matcher: 3.0.0 roarr: 2.15.4 - semver: 7.7.1 + semver: 7.7.2 serialize-error: 7.0.1 optional: true @@ -11693,7 +11306,7 @@ snapshots: globals@14.0.0: {} - globals@16.0.0: {} + globals@16.1.0: {} globalthis@1.0.4: dependencies: @@ -11919,14 +11532,14 @@ snapshots: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.4.0 + debug: 4.4.1 transitivePeerDependencies: - supports-color http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.3 - debug: 4.4.0 + debug: 4.4.1 transitivePeerDependencies: - supports-color @@ -11938,14 +11551,14 @@ snapshots: https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.4.0 + debug: 4.4.1 transitivePeerDependencies: - supports-color https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.3 - debug: 4.4.0 + debug: 4.4.1 transitivePeerDependencies: - supports-color @@ -11962,6 +11575,7 @@ snapshots: iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 + optional: true ieee754@1.2.1: {} @@ -12050,7 +11664,7 @@ snapshots: dependencies: '@ioredis/commands': 1.2.0 cluster-key-slot: 1.1.2 - debug: 4.4.0 + debug: 4.4.1 denque: 2.1.0 lodash.defaults: 4.2.0 lodash.isarguments: 3.1.0 @@ -12176,8 +11790,6 @@ snapshots: is-promise@2.2.2: {} - is-promise@4.0.0: {} - is-regex@1.2.1: dependencies: call-bound: 1.0.4 @@ -12208,7 +11820,7 @@ snapshots: is-typed-array@1.1.15: dependencies: - which-typed-array: 1.1.18 + which-typed-array: 1.1.19 is-unicode-supported@0.1.0: {} @@ -12322,84 +11934,39 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - lightningcss-darwin-arm64@1.29.2: - optional: true - lightningcss-darwin-arm64@1.30.1: optional: true - lightningcss-darwin-x64@1.29.2: - optional: true - lightningcss-darwin-x64@1.30.1: optional: true - lightningcss-freebsd-x64@1.29.2: - optional: true - lightningcss-freebsd-x64@1.30.1: optional: true - lightningcss-linux-arm-gnueabihf@1.29.2: - optional: true - lightningcss-linux-arm-gnueabihf@1.30.1: optional: true - lightningcss-linux-arm64-gnu@1.29.2: - optional: true - lightningcss-linux-arm64-gnu@1.30.1: optional: true - lightningcss-linux-arm64-musl@1.29.2: - optional: true - lightningcss-linux-arm64-musl@1.30.1: optional: true - lightningcss-linux-x64-gnu@1.29.2: - optional: true - lightningcss-linux-x64-gnu@1.30.1: optional: true - lightningcss-linux-x64-musl@1.29.2: - optional: true - lightningcss-linux-x64-musl@1.30.1: optional: true - lightningcss-win32-arm64-msvc@1.29.2: - optional: true - lightningcss-win32-arm64-msvc@1.30.1: optional: true - lightningcss-win32-x64-msvc@1.29.2: - optional: true - lightningcss-win32-x64-msvc@1.30.1: optional: true - lightningcss@1.29.2: - dependencies: - detect-libc: 2.0.3 - optionalDependencies: - lightningcss-darwin-arm64: 1.29.2 - lightningcss-darwin-x64: 1.29.2 - lightningcss-freebsd-x64: 1.29.2 - lightningcss-linux-arm-gnueabihf: 1.29.2 - lightningcss-linux-arm64-gnu: 1.29.2 - lightningcss-linux-arm64-musl: 1.29.2 - lightningcss-linux-x64-gnu: 1.29.2 - lightningcss-linux-x64-musl: 1.29.2 - lightningcss-win32-arm64-msvc: 1.29.2 - lightningcss-win32-x64-msvc: 1.29.2 - lightningcss@1.30.1: dependencies: - detect-libc: 2.0.3 + detect-libc: 2.0.4 optionalDependencies: lightningcss-darwin-arm64: 1.30.1 lightningcss-darwin-x64: 1.30.1 @@ -12706,8 +12273,6 @@ snapshots: media-typer@0.3.0: {} - media-typer@1.1.0: {} - mem@4.3.0: dependencies: map-age-cleaner: 0.1.3 @@ -12716,8 +12281,6 @@ snapshots: merge-descriptors@1.0.3: {} - merge-descriptors@2.0.0: {} - merge-stream@2.0.0: {} merge2@1.4.1: {} @@ -12978,7 +12541,7 @@ snapshots: micromark@4.0.2: dependencies: '@types/debug': 4.1.12 - debug: 4.4.0 + debug: 4.4.1 decode-named-character-reference: 1.1.0 devlop: 1.1.0 micromark-core-commonmark: 2.0.3 @@ -13010,10 +12573,6 @@ snapshots: dependencies: mime-db: 1.52.0 - mime-types@3.0.1: - dependencies: - mime-db: 1.54.0 - mime@1.6.0: {} mimic-fn@2.1.0: {} @@ -13146,7 +12705,7 @@ snapshots: '@swc/counter': 0.1.3 '@swc/helpers': 0.5.15 busboy: 1.6.0 - caniuse-lite: 1.0.30001713 + caniuse-lite: 1.0.30001718 postcss: 8.4.31 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) @@ -13160,7 +12719,7 @@ snapshots: '@next/swc-linux-x64-musl': 15.3.1 '@next/swc-win32-arm64-msvc': 15.3.1 '@next/swc-win32-x64-msvc': 15.3.1 - sharp: 0.34.1 + sharp: 0.34.2 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros @@ -13173,13 +12732,13 @@ snapshots: node-abi@3.75.0: dependencies: - semver: 7.7.1 + semver: 7.7.2 node-addon-api@4.3.0: {} node-api-version@0.2.1: dependencies: - semver: 7.7.1 + semver: 7.7.2 node-domexception@1.0.0: {} @@ -13191,7 +12750,7 @@ snapshots: node-plop@0.26.3: dependencies: - '@babel/runtime-corejs3': 7.27.0 + '@babel/runtime-corejs3': 7.27.1 '@types/inquirer': 6.5.0 change-case: 3.1.0 del: 5.1.0 @@ -13246,9 +12805,10 @@ snapshots: has-symbols: 1.1.0 object-keys: 1.1.1 - object.entries@1.1.8: + object.entries@1.1.9: dependencies: call-bind: 1.0.8 + call-bound: 1.0.4 define-properties: 1.2.1 es-object-atoms: 1.1.1 @@ -13256,14 +12816,14 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.9 + es-abstract: 1.23.10 es-object-atoms: 1.1.1 object.groupby@1.0.3: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.9 + es-abstract: 1.23.10 object.values@1.2.1: dependencies: @@ -13309,9 +12869,9 @@ snapshots: onnxruntime-common: 1.14.0 platform: 1.3.6 - openai@4.100.0(encoding@0.1.13)(ws@8.17.1)(zod@3.24.4): + openai@4.103.0(encoding@0.1.13)(zod@3.25.24): dependencies: - '@types/node': 18.19.101 + '@types/node': 18.19.103 '@types/node-fetch': 2.6.12 abort-controller: 3.0.0 agentkeepalive: 4.6.0 @@ -13319,8 +12879,7 @@ snapshots: formdata-node: 4.4.1 node-fetch: 2.7.0(encoding@0.1.13) optionalDependencies: - ws: 8.17.1 - zod: 3.24.4 + zod: 3.25.24 transitivePeerDependencies: - encoding @@ -13402,7 +12961,7 @@ snapshots: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 agent-base: 7.1.3 - debug: 4.4.0 + debug: 4.4.1 get-uri: 6.0.4 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 @@ -13475,8 +13034,6 @@ snapshots: path-to-regexp@6.3.0: {} - path-to-regexp@8.2.0: {} - path-type@2.0.0: dependencies: pify: 2.3.0 @@ -13497,8 +13054,6 @@ snapshots: pify@2.3.0: {} - pkce-challenge@5.0.0: {} - platform@1.3.6: {} plist@3.1.0: @@ -13534,7 +13089,7 @@ snapshots: prebuild-install@7.1.3: dependencies: - detect-libc: 2.0.3 + detect-libc: 2.0.4 expand-template: 2.0.3 github-from-package: 0.0.0 minimist: 1.2.8 @@ -13544,7 +13099,7 @@ snapshots: pump: 3.0.2 rc: 1.2.8 simple-get: 4.0.1 - tar-fs: 2.1.2 + tar-fs: 2.1.3 tunnel-agent: 0.6.0 prelude-ls@1.2.1: {} @@ -13604,7 +13159,7 @@ snapshots: proxy-agent@6.5.0: dependencies: agent-base: 7.1.3 - debug: 4.4.0 + debug: 4.4.1 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 lru-cache: 7.18.3 @@ -13702,7 +13257,7 @@ snapshots: quick-lru@5.1.1: {} - quicktype-core@23.2.5(encoding@0.1.13): + quicktype-core@23.1.4(encoding@0.1.13): dependencies: '@glideapps/ts-necessities': 2.2.3 browser-or-node: 3.0.0 @@ -13721,25 +13276,25 @@ snapshots: transitivePeerDependencies: - encoding - quicktype-graphql-input@23.2.5(encoding@0.1.13): + quicktype-graphql-input@23.1.4(encoding@0.1.13): dependencies: collection-utils: 1.0.1 graphql: 0.11.7 - quicktype-core: 23.2.5(encoding@0.1.13) + quicktype-core: 23.1.4(encoding@0.1.13) transitivePeerDependencies: - encoding - quicktype-typescript-input@23.2.5(encoding@0.1.13): + quicktype-typescript-input@23.1.4(encoding@0.1.13): dependencies: '@mark.probst/typescript-json-schema': 0.55.0 - quicktype-core: 23.2.5(encoding@0.1.13) + quicktype-core: 23.1.4(encoding@0.1.13) typescript: 4.9.5 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' - encoding - quicktype@23.2.5(encoding@0.1.13): + quicktype@23.1.4(encoding@0.1.13): dependencies: '@glideapps/ts-necessities': 2.4.0 chalk: 4.1.2 @@ -13750,13 +13305,13 @@ snapshots: graphql: 0.11.7 lodash: 4.17.21 moment: 2.30.1 - quicktype-core: 23.2.5(encoding@0.1.13) - quicktype-graphql-input: 23.2.5(encoding@0.1.13) - quicktype-typescript-input: 23.2.5(encoding@0.1.13) + quicktype-core: 23.1.4(encoding@0.1.13) + quicktype-graphql-input: 23.1.4(encoding@0.1.13) + quicktype-typescript-input: 23.1.4(encoding@0.1.13) readable-stream: 4.7.0 stream-json: 1.8.0 string-to-stream: 3.0.1 - typescript: 5.8.3 + typescript: 4.9.5 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' @@ -13773,13 +13328,6 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 - raw-body@3.0.0: - dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.6.3 - unpipe: 1.0.0 - rc@1.2.8: dependencies: deep-extend: 0.6.0 @@ -13810,24 +13358,24 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - react-remove-scroll-bar@2.3.8(@types/react@19.1.3)(react@19.1.0): + react-remove-scroll-bar@2.3.8(@types/react@19.1.5)(react@19.1.0): dependencies: react: 19.1.0 - react-style-singleton: 2.2.3(@types/react@19.1.3)(react@19.1.0) + react-style-singleton: 2.2.3(@types/react@19.1.5)(react@19.1.0) tslib: 2.8.1 optionalDependencies: - '@types/react': 19.1.3 + '@types/react': 19.1.5 - react-remove-scroll@2.6.3(@types/react@19.1.3)(react@19.1.0): + react-remove-scroll@2.7.0(@types/react@19.1.5)(react@19.1.0): dependencies: react: 19.1.0 - react-remove-scroll-bar: 2.3.8(@types/react@19.1.3)(react@19.1.0) - react-style-singleton: 2.2.3(@types/react@19.1.3)(react@19.1.0) + react-remove-scroll-bar: 2.3.8(@types/react@19.1.5)(react@19.1.0) + react-style-singleton: 2.2.3(@types/react@19.1.5)(react@19.1.0) tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.1.3)(react@19.1.0) - use-sidecar: 1.1.3(@types/react@19.1.3)(react@19.1.0) + use-callback-ref: 1.3.3(@types/react@19.1.5)(react@19.1.0) + use-sidecar: 1.1.3(@types/react@19.1.5)(react@19.1.0) optionalDependencies: - '@types/react': 19.1.3 + '@types/react': 19.1.5 react-resizable-panels@3.0.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: @@ -13842,13 +13390,13 @@ snapshots: react-dom: 19.1.0(react@19.1.0) react-transition-group: 4.4.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react-style-singleton@2.2.3(@types/react@19.1.3)(react@19.1.0): + react-style-singleton@2.2.3(@types/react@19.1.5)(react@19.1.0): dependencies: get-nonce: 1.0.1 react: 19.1.0 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.1.3 + '@types/react': 19.1.5 react-transition-group@4.4.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: @@ -13863,7 +13411,7 @@ snapshots: read-binary-file-arch@1.0.6: dependencies: - debug: 4.4.0 + debug: 4.4.1 transitivePeerDependencies: - supports-color @@ -13963,15 +13511,13 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.9 + es-abstract: 1.23.10 es-errors: 1.3.0 es-object-atoms: 1.1.1 get-intrinsic: 1.3.0 get-proto: 1.0.1 which-builtin-type: 1.2.1 - regenerator-runtime@0.14.1: {} - regex-recursion@6.0.2: dependencies: regex-utilities: 2.3.0 @@ -14156,16 +13702,6 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.41.0 fsevents: 2.3.3 - router@2.2.0: - dependencies: - debug: 4.4.0 - depd: 2.0.0 - is-promise: 4.0.0 - parseurl: 1.3.3 - path-to-regexp: 8.2.0 - transitivePeerDependencies: - - supports-color - run-async@2.4.1: {} run-parallel@1.2.0: @@ -14227,7 +13763,7 @@ snapshots: semver@7.6.2: {} - semver@7.7.1: {} + semver@7.7.2: {} send@0.19.0: dependencies: @@ -14247,22 +13783,6 @@ snapshots: transitivePeerDependencies: - supports-color - send@1.2.0: - dependencies: - debug: 4.4.0 - encodeurl: 2.0.0 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 2.0.0 - http-errors: 2.0.0 - mime-types: 3.0.1 - ms: 2.1.3 - on-finished: 2.4.1 - range-parser: 1.2.1 - statuses: 2.0.1 - transitivePeerDependencies: - - supports-color - sentence-case@2.1.1: dependencies: no-case: 2.3.2 @@ -14302,15 +13822,6 @@ snapshots: transitivePeerDependencies: - supports-color - serve-static@2.2.0: - dependencies: - encodeurl: 2.0.0 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 1.2.0 - transitivePeerDependencies: - - supports-color - server@1.0.41: dependencies: body-parser: 1.20.3 @@ -14371,14 +13882,14 @@ snapshots: setprototypeof@1.2.0: {} - sharp@0.34.1: + sharp@0.34.2: dependencies: color: 4.2.3 - detect-libc: 2.0.3 - semver: 7.7.1 + detect-libc: 2.0.4 + semver: 7.7.2 optionalDependencies: - '@img/sharp-darwin-arm64': 0.34.1 - '@img/sharp-darwin-x64': 0.34.1 + '@img/sharp-darwin-arm64': 0.34.2 + '@img/sharp-darwin-x64': 0.34.2 '@img/sharp-libvips-darwin-arm64': 1.1.0 '@img/sharp-libvips-darwin-x64': 1.1.0 '@img/sharp-libvips-linux-arm': 1.1.0 @@ -14388,15 +13899,16 @@ snapshots: '@img/sharp-libvips-linux-x64': 1.1.0 '@img/sharp-libvips-linuxmusl-arm64': 1.1.0 '@img/sharp-libvips-linuxmusl-x64': 1.1.0 - '@img/sharp-linux-arm': 0.34.1 - '@img/sharp-linux-arm64': 0.34.1 - '@img/sharp-linux-s390x': 0.34.1 - '@img/sharp-linux-x64': 0.34.1 - '@img/sharp-linuxmusl-arm64': 0.34.1 - '@img/sharp-linuxmusl-x64': 0.34.1 - '@img/sharp-wasm32': 0.34.1 - '@img/sharp-win32-ia32': 0.34.1 - '@img/sharp-win32-x64': 0.34.1 + '@img/sharp-linux-arm': 0.34.2 + '@img/sharp-linux-arm64': 0.34.2 + '@img/sharp-linux-s390x': 0.34.2 + '@img/sharp-linux-x64': 0.34.2 + '@img/sharp-linuxmusl-arm64': 0.34.2 + '@img/sharp-linuxmusl-x64': 0.34.2 + '@img/sharp-wasm32': 0.34.2 + '@img/sharp-win32-arm64': 0.34.2 + '@img/sharp-win32-ia32': 0.34.2 + '@img/sharp-win32-x64': 0.34.2 optional: true shebang-command@1.2.0: @@ -14411,14 +13923,14 @@ snapshots: shebang-regex@3.0.0: {} - shiki@3.4.0: + shiki@3.4.2: dependencies: - '@shikijs/core': 3.4.0 - '@shikijs/engine-javascript': 3.4.0 - '@shikijs/engine-oniguruma': 3.4.0 - '@shikijs/langs': 3.4.0 - '@shikijs/themes': 3.4.0 - '@shikijs/types': 3.4.0 + '@shikijs/core': 3.4.2 + '@shikijs/engine-javascript': 3.4.2 + '@shikijs/engine-oniguruma': 3.4.2 + '@shikijs/langs': 3.4.2 + '@shikijs/themes': 3.4.2 + '@shikijs/types': 3.4.2 '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 @@ -14517,7 +14029,7 @@ snapshots: socks-proxy-agent@7.0.0: dependencies: agent-base: 6.0.2 - debug: 4.4.0 + debug: 4.4.1 socks: 2.8.4 transitivePeerDependencies: - supports-color @@ -14525,7 +14037,7 @@ snapshots: socks-proxy-agent@8.0.5: dependencies: agent-base: 7.1.3 - debug: 4.4.0 + debug: 4.4.1 socks: 2.8.4 transitivePeerDependencies: - supports-color @@ -14612,7 +14124,7 @@ snapshots: call-bind: 1.0.8 call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.23.9 + es-abstract: 1.23.10 es-errors: 1.3.0 es-object-atoms: 1.1.1 get-intrinsic: 1.3.0 @@ -14626,7 +14138,7 @@ snapshots: string.prototype.repeat@1.0.0: dependencies: define-properties: 1.2.1 - es-abstract: 1.23.9 + es-abstract: 1.23.10 string.prototype.trim@1.2.10: dependencies: @@ -14634,7 +14146,7 @@ snapshots: call-bound: 1.0.4 define-data-property: 1.1.4 define-properties: 1.2.1 - es-abstract: 1.23.9 + es-abstract: 1.23.10 es-object-atoms: 1.1.1 has-property-descriptors: 1.0.2 @@ -14703,7 +14215,7 @@ snapshots: sumchecker@3.0.1: dependencies: - debug: 4.4.0 + debug: 4.4.1 transitivePeerDependencies: - supports-color @@ -14731,17 +14243,13 @@ snapshots: array-back: 6.2.2 wordwrapjs: 5.1.0 - tailwind-merge@3.2.0: {} - tailwind-merge@3.3.0: {} - tailwindcss@4.1.5: {} - tailwindcss@4.1.7: {} - tapable@2.2.1: {} + tapable@2.2.2: {} - tar-fs@2.1.2: + tar-fs@2.1.3: dependencies: chownr: 1.1.4 mkdirp-classic: 0.5.3 @@ -14843,9 +14351,9 @@ snapshots: trough@2.2.0: {} - ts-api-utils@2.1.0(typescript@5.8.2): + ts-api-utils@2.1.0(typescript@5.8.3): dependencies: - typescript: 5.8.2 + typescript: 5.8.3 ts-node@10.9.2(@types/node@16.18.126)(typescript@4.9.4): dependencies: @@ -14865,14 +14373,14 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - ts-node@10.9.2(@types/node@22.15.3)(typescript@5.8.2): + ts-node@10.9.2(@types/node@22.15.12)(typescript@5.8.2): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 22.15.3 + '@types/node': 22.15.12 acorn: 8.14.1 acorn-walk: 8.3.4 arg: 4.1.3 @@ -14904,7 +14412,7 @@ snapshots: tsx@4.19.4: dependencies: esbuild: 0.25.4 - get-tsconfig: 4.10.0 + get-tsconfig: 4.10.1 optionalDependencies: fsevents: 2.3.3 @@ -14939,7 +14447,7 @@ snapshots: turbo-windows-64: 2.5.3 turbo-windows-arm64: 2.5.3 - tw-animate-css@1.2.9: {} + tw-animate-css@1.3.0: {} type-check@0.4.0: dependencies: @@ -14959,12 +14467,6 @@ snapshots: media-typer: 0.3.0 mime-types: 2.1.35 - type-is@2.0.1: - dependencies: - content-type: 1.0.5 - media-typer: 1.1.0 - mime-types: 3.0.1 - typed-array-buffer@1.0.3: dependencies: call-bound: 1.0.4 @@ -14998,13 +14500,13 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typescript-eslint@8.31.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.2): + typescript-eslint@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.31.0(@typescript-eslint/parser@8.31.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.2) - '@typescript-eslint/parser': 8.31.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.2) - '@typescript-eslint/utils': 8.31.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.2) - eslint: 9.26.0(jiti@2.4.2) - typescript: 5.8.2 + '@typescript-eslint/eslint-plugin': 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/parser': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + eslint: 9.27.0(jiti@2.4.2) + typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -15124,20 +14626,20 @@ snapshots: urijs@1.19.11: {} - use-callback-ref@1.3.3(@types/react@19.1.3)(react@19.1.0): + use-callback-ref@1.3.3(@types/react@19.1.5)(react@19.1.0): dependencies: react: 19.1.0 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.1.3 + '@types/react': 19.1.5 - use-sidecar@1.1.3(@types/react@19.1.3)(react@19.1.0): + use-sidecar@1.1.3(@types/react@19.1.5)(react@19.1.0): dependencies: detect-node-es: 1.1.0 react: 19.1.0 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.1.3 + '@types/react': 19.1.5 use-sync-external-store@1.5.0(react@19.1.0): dependencies: @@ -15165,9 +14667,9 @@ snapshots: vary@1.1.2: {} - vaul@1.1.2(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + vaul@1.1.2(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: - '@radix-ui/react-dialog': 1.1.13(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-dialog': 1.1.14(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) transitivePeerDependencies: @@ -15201,7 +14703,7 @@ snapshots: d3-time: 3.1.0 d3-timer: 3.0.1 - vite@5.4.19(@types/node@16.18.126)(lightningcss@1.29.2): + vite@5.4.19(@types/node@16.18.126)(lightningcss@1.30.1): dependencies: esbuild: 0.21.5 postcss: 8.5.3 @@ -15209,7 +14711,7 @@ snapshots: optionalDependencies: '@types/node': 16.18.126 fsevents: 2.3.3 - lightningcss: 1.29.2 + lightningcss: 1.30.1 void-elements@3.1.0: {} @@ -15254,7 +14756,7 @@ snapshots: isarray: 2.0.5 which-boxed-primitive: 1.1.1 which-collection: 1.0.2 - which-typed-array: 1.1.18 + which-typed-array: 1.1.19 which-collection@1.0.2: dependencies: @@ -15263,12 +14765,13 @@ snapshots: is-weakmap: 2.0.2 is-weakset: 2.0.4 - which-typed-array@1.1.18: + which-typed-array@1.1.19: dependencies: available-typed-arrays: 1.0.7 call-bind: 1.0.8 call-bound: 1.0.4 for-each: 0.3.5 + get-proto: 1.0.1 gopd: 1.2.0 has-tostringtag: 1.0.2 @@ -15376,10 +14879,10 @@ snapshots: yocto-queue@0.1.0: {} - zod-to-json-schema@3.24.5(zod@3.24.4): + zod-to-json-schema@3.24.5(zod@3.25.24): dependencies: - zod: 3.24.4 + zod: 3.25.24 - zod@3.24.4: {} + zod@3.25.24: {} zwitch@2.0.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 3ff5faa..d654604 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,3 +1,4 @@ packages: - "apps/*" - "packages/*" + - "packages/**" diff --git a/turbo.json b/turbo.json index d508947..6e1acdf 100644 --- a/turbo.json +++ b/turbo.json @@ -5,7 +5,13 @@ "build": { "dependsOn": ["^build"], "inputs": ["$TURBO_DEFAULT$", ".env*"], - "outputs": [".next/**", "!.next/cache/**"] + "outputs": [".next/**", "!.next/cache/**", "bin/**", "out/**"] + }, + "build:native": { + "dependsOn": [], + "inputs": ["Sources/**", "Package.swift", "main.swift", "scripts/**"], + "outputs": ["bin/**"], + "cache": true }, "lint": { "dependsOn": ["^lint"] From 2a438b6c4c0156d426bc4169ccb45fd2e24bc3e2 Mon Sep 17 00:00:00 2001 From: hsingh Date: Sat, 24 May 2025 05:16:07 +0530 Subject: [PATCH 2/4] chore: separate out types into types pkg --- .../helper-envelopes/rpc-request.schema.json | 30 ------- .../helper-envelopes/rpc-response.schema.json | 36 -------- .../helper-events/key-down-event.schema.json | 56 ------------- .../helper-events/key-up-event.schema.json | 56 ------------- ...essibility-tree-details-params.schema.json | 15 ---- ...essibility-tree-details-result.schema.json | 13 --- .../mute-system-audio-params.schema.json | 18 ---- .../paste-text-params.schema.json | 18 ---- .../pause-system-audio-params.schema.json | 18 ---- .../play-system-audio-params.schema.json | 18 ---- .../restore-system-audio-params.schema.json | 18 ---- ...essibility-tree-details-result.schema.json | 13 --- .../mute-system-audio-result.schema.json | 21 ----- .../paste-text-result.schema.json | 21 ----- .../pause-system-audio-result.schema.json | 19 ----- .../play-system-audio-result.schema.json | 19 ----- .../restore-system-audio-result.schema.json | 21 ----- apps/electron/package.json | 16 ++-- apps/electron/scripts/generate-json-schema.ts | 72 ---------------- .../electron/scripts/generate-swift-models.ts | 43 ---------- apps/electron/src/main/main.ts | 2 +- apps/electron/src/main/swift-io-bridge.ts | 33 ++++---- .../helper-requests/mute-system-audio.ts | 5 -- .../src/schemas/helper-requests/paste-text.ts | 7 -- .../helper-requests/restore-system-audio.ts | 5 -- .../get-accessibility-tree-details.ts | 8 -- .../helper-responses/restore-system-audio.ts | 7 -- packages/eslint-config/package.json | 2 +- .../native-helpers/swift-helper/Package.swift | 5 +- .../Sources/SwiftHelper/RpcHandler.swift | 29 ++++--- .../native-helpers/swift-helper/package.json | 4 +- packages/types/.gitignore | 42 ++++++++++ packages/types/package.json | 41 +++++++++ .../types/scripts/generate-json-schemas.ts | 83 +++++++++++++++++++ .../types/scripts/generate-swift-models.ts | 43 ++++++++++ packages/types/src/index.ts | 12 +++ .../types/src/schemas/events/key-events.ts | 2 +- .../get-accessibility-tree-details.ts | 9 ++ .../src/schemas/methods}/mute-system-audio.ts | 7 +- .../types/src/schemas/methods}/paste-text.ts | 13 +-- .../schemas/methods/restore-system-audio.ts | 12 +++ .../types/src/schemas/rpc}/request.ts | 7 +- .../types/src/schemas/rpc}/response.ts | 2 +- packages/types/tsconfig.json | 12 +++ packages/typescript-config/package.json | 2 +- packages/ui/package.json | 6 +- packages/ui/tsconfig.json | 2 +- pnpm-lock.yaml | 56 +++++++++---- 48 files changed, 360 insertions(+), 639 deletions(-) delete mode 100644 apps/electron/generated/schemas/helper-envelopes/rpc-request.schema.json delete mode 100644 apps/electron/generated/schemas/helper-envelopes/rpc-response.schema.json delete mode 100644 apps/electron/generated/schemas/helper-events/key-down-event.schema.json delete mode 100644 apps/electron/generated/schemas/helper-events/key-up-event.schema.json delete mode 100644 apps/electron/generated/schemas/helper-requests/get-accessibility-tree-details-params.schema.json delete mode 100644 apps/electron/generated/schemas/helper-requests/get-accessibility-tree-details-result.schema.json delete mode 100644 apps/electron/generated/schemas/helper-requests/mute-system-audio-params.schema.json delete mode 100644 apps/electron/generated/schemas/helper-requests/paste-text-params.schema.json delete mode 100644 apps/electron/generated/schemas/helper-requests/pause-system-audio-params.schema.json delete mode 100644 apps/electron/generated/schemas/helper-requests/play-system-audio-params.schema.json delete mode 100644 apps/electron/generated/schemas/helper-requests/restore-system-audio-params.schema.json delete mode 100644 apps/electron/generated/schemas/helper-responses/get-accessibility-tree-details-result.schema.json delete mode 100644 apps/electron/generated/schemas/helper-responses/mute-system-audio-result.schema.json delete mode 100644 apps/electron/generated/schemas/helper-responses/paste-text-result.schema.json delete mode 100644 apps/electron/generated/schemas/helper-responses/pause-system-audio-result.schema.json delete mode 100644 apps/electron/generated/schemas/helper-responses/play-system-audio-result.schema.json delete mode 100644 apps/electron/generated/schemas/helper-responses/restore-system-audio-result.schema.json delete mode 100644 apps/electron/scripts/generate-json-schema.ts delete mode 100644 apps/electron/scripts/generate-swift-models.ts delete mode 100644 apps/electron/src/schemas/helper-requests/mute-system-audio.ts delete mode 100644 apps/electron/src/schemas/helper-requests/paste-text.ts delete mode 100644 apps/electron/src/schemas/helper-requests/restore-system-audio.ts delete mode 100644 apps/electron/src/schemas/helper-responses/get-accessibility-tree-details.ts delete mode 100644 apps/electron/src/schemas/helper-responses/restore-system-audio.ts create mode 100644 packages/types/.gitignore create mode 100644 packages/types/package.json create mode 100644 packages/types/scripts/generate-json-schemas.ts create mode 100644 packages/types/scripts/generate-swift-models.ts create mode 100644 packages/types/src/index.ts rename apps/electron/src/schemas/helper-events/key-event.ts => packages/types/src/schemas/events/key-events.ts (99%) rename {apps/electron/src/schemas/helper-requests => packages/types/src/schemas/methods}/get-accessibility-tree-details.ts (51%) rename {apps/electron/src/schemas/helper-responses => packages/types/src/schemas/methods}/mute-system-audio.ts (50%) rename {apps/electron/src/schemas/helper-responses => packages/types/src/schemas/methods}/paste-text.ts (57%) create mode 100644 packages/types/src/schemas/methods/restore-system-audio.ts rename {apps/electron/src/schemas/helper-envelopes => packages/types/src/schemas/rpc}/request.ts (90%) rename {apps/electron/src/schemas/helper-envelopes => packages/types/src/schemas/rpc}/response.ts (85%) create mode 100644 packages/types/tsconfig.json diff --git a/apps/electron/generated/schemas/helper-envelopes/rpc-request.schema.json b/apps/electron/generated/schemas/helper-envelopes/rpc-request.schema.json deleted file mode 100644 index f75d802..0000000 --- a/apps/electron/generated/schemas/helper-envelopes/rpc-request.schema.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "$ref": "#/definitions/RpcRequest", - "definitions": { - "RpcRequest": { - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "method": { - "type": "string", - "enum": [ - "getAccessibilityTreeDetails", - "pasteText", - "muteSystemAudio", - "restoreSystemAudio" - ] - }, - "params": {} - }, - "required": [ - "id", - "method" - ], - "additionalProperties": false - } - }, - "$schema": "http://json-schema.org/draft-07/schema#" -} \ No newline at end of file diff --git a/apps/electron/generated/schemas/helper-envelopes/rpc-response.schema.json b/apps/electron/generated/schemas/helper-envelopes/rpc-response.schema.json deleted file mode 100644 index dfa84f8..0000000 --- a/apps/electron/generated/schemas/helper-envelopes/rpc-response.schema.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "$ref": "#/definitions/RpcResponse", - "definitions": { - "RpcResponse": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "result": {}, - "error": { - "type": "object", - "properties": { - "code": { - "type": "integer" - }, - "message": { - "type": "string" - }, - "data": {} - }, - "required": [ - "code", - "message" - ], - "additionalProperties": false - } - }, - "required": [ - "id" - ], - "additionalProperties": false - } - }, - "$schema": "http://json-schema.org/draft-07/schema#" -} \ No newline at end of file diff --git a/apps/electron/generated/schemas/helper-events/key-down-event.schema.json b/apps/electron/generated/schemas/helper-events/key-down-event.schema.json deleted file mode 100644 index 02f5ed9..0000000 --- a/apps/electron/generated/schemas/helper-events/key-down-event.schema.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "$ref": "#/definitions/KeyDownEvent", - "definitions": { - "KeyDownEvent": { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "keyDown" - }, - "payload": { - "type": "object", - "properties": { - "key": { - "type": "string" - }, - "code": { - "type": "string" - }, - "altKey": { - "type": "boolean" - }, - "ctrlKey": { - "type": "boolean" - }, - "shiftKey": { - "type": "boolean" - }, - "metaKey": { - "type": "boolean" - }, - "keyCode": { - "type": "integer", - "description": "Raw key code, e.g., from CGEvent" - }, - "fnKeyPressed": { - "type": "boolean", - "description": "State of the Fn key." - } - }, - "additionalProperties": false - }, - "timestamp": { - "type": "string", - "format": "date-time" - } - }, - "required": [ - "type", - "payload" - ], - "additionalProperties": false - } - }, - "$schema": "http://json-schema.org/draft-07/schema#" -} \ No newline at end of file diff --git a/apps/electron/generated/schemas/helper-events/key-up-event.schema.json b/apps/electron/generated/schemas/helper-events/key-up-event.schema.json deleted file mode 100644 index 4655a9d..0000000 --- a/apps/electron/generated/schemas/helper-events/key-up-event.schema.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "$ref": "#/definitions/KeyUpEvent", - "definitions": { - "KeyUpEvent": { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "keyUp" - }, - "payload": { - "type": "object", - "properties": { - "key": { - "type": "string" - }, - "code": { - "type": "string" - }, - "altKey": { - "type": "boolean" - }, - "ctrlKey": { - "type": "boolean" - }, - "shiftKey": { - "type": "boolean" - }, - "metaKey": { - "type": "boolean" - }, - "keyCode": { - "type": "integer", - "description": "Raw key code, e.g., from CGEvent" - }, - "fnKeyPressed": { - "type": "boolean", - "description": "State of the Fn key." - } - }, - "additionalProperties": false - }, - "timestamp": { - "type": "string", - "format": "date-time" - } - }, - "required": [ - "type", - "payload" - ], - "additionalProperties": false - } - }, - "$schema": "http://json-schema.org/draft-07/schema#" -} \ No newline at end of file diff --git a/apps/electron/generated/schemas/helper-requests/get-accessibility-tree-details-params.schema.json b/apps/electron/generated/schemas/helper-requests/get-accessibility-tree-details-params.schema.json deleted file mode 100644 index 3109668..0000000 --- a/apps/electron/generated/schemas/helper-requests/get-accessibility-tree-details-params.schema.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "$ref": "#/definitions/GetAccessibilityTreeDetailsParams", - "definitions": { - "GetAccessibilityTreeDetailsParams": { - "type": "object", - "properties": { - "rootId": { - "type": "string" - } - }, - "additionalProperties": false - } - }, - "$schema": "http://json-schema.org/draft-07/schema#" -} \ No newline at end of file diff --git a/apps/electron/generated/schemas/helper-requests/get-accessibility-tree-details-result.schema.json b/apps/electron/generated/schemas/helper-requests/get-accessibility-tree-details-result.schema.json deleted file mode 100644 index f434107..0000000 --- a/apps/electron/generated/schemas/helper-requests/get-accessibility-tree-details-result.schema.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "$ref": "#/definitions/GetAccessibilityTreeDetailsResult", - "definitions": { - "GetAccessibilityTreeDetailsResult": { - "type": "object", - "properties": { - "tree": {} - }, - "additionalProperties": false - } - }, - "$schema": "http://json-schema.org/draft-07/schema#" -} diff --git a/apps/electron/generated/schemas/helper-requests/mute-system-audio-params.schema.json b/apps/electron/generated/schemas/helper-requests/mute-system-audio-params.schema.json deleted file mode 100644 index 6503285..0000000 --- a/apps/electron/generated/schemas/helper-requests/mute-system-audio-params.schema.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "$ref": "#/definitions/MuteSystemAudioParams", - "definitions": { - "MuteSystemAudioParams": { - "anyOf": [ - { - "not": {} - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - } - }, - "$schema": "http://json-schema.org/draft-07/schema#" -} \ No newline at end of file diff --git a/apps/electron/generated/schemas/helper-requests/paste-text-params.schema.json b/apps/electron/generated/schemas/helper-requests/paste-text-params.schema.json deleted file mode 100644 index 47f1380..0000000 --- a/apps/electron/generated/schemas/helper-requests/paste-text-params.schema.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "$ref": "#/definitions/PasteTextParams", - "definitions": { - "PasteTextParams": { - "type": "object", - "properties": { - "transcript": { - "type": "string" - } - }, - "required": [ - "transcript" - ], - "additionalProperties": false - } - }, - "$schema": "http://json-schema.org/draft-07/schema#" -} \ No newline at end of file diff --git a/apps/electron/generated/schemas/helper-requests/pause-system-audio-params.schema.json b/apps/electron/generated/schemas/helper-requests/pause-system-audio-params.schema.json deleted file mode 100644 index 4dba305..0000000 --- a/apps/electron/generated/schemas/helper-requests/pause-system-audio-params.schema.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "$ref": "#/definitions/PauseSystemAudioParams", - "definitions": { - "PauseSystemAudioParams": { - "anyOf": [ - { - "not": {} - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - } - }, - "$schema": "http://json-schema.org/draft-07/schema#" -} diff --git a/apps/electron/generated/schemas/helper-requests/play-system-audio-params.schema.json b/apps/electron/generated/schemas/helper-requests/play-system-audio-params.schema.json deleted file mode 100644 index 30263a3..0000000 --- a/apps/electron/generated/schemas/helper-requests/play-system-audio-params.schema.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "$ref": "#/definitions/PlaySystemAudioParams", - "definitions": { - "PlaySystemAudioParams": { - "anyOf": [ - { - "not": {} - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - } - }, - "$schema": "http://json-schema.org/draft-07/schema#" -} diff --git a/apps/electron/generated/schemas/helper-requests/restore-system-audio-params.schema.json b/apps/electron/generated/schemas/helper-requests/restore-system-audio-params.schema.json deleted file mode 100644 index 5bcaf66..0000000 --- a/apps/electron/generated/schemas/helper-requests/restore-system-audio-params.schema.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "$ref": "#/definitions/RestoreSystemAudioParams", - "definitions": { - "RestoreSystemAudioParams": { - "anyOf": [ - { - "not": {} - }, - { - "type": "object", - "properties": {}, - "additionalProperties": false - } - ] - } - }, - "$schema": "http://json-schema.org/draft-07/schema#" -} \ No newline at end of file diff --git a/apps/electron/generated/schemas/helper-responses/get-accessibility-tree-details-result.schema.json b/apps/electron/generated/schemas/helper-responses/get-accessibility-tree-details-result.schema.json deleted file mode 100644 index 192a742..0000000 --- a/apps/electron/generated/schemas/helper-responses/get-accessibility-tree-details-result.schema.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "$ref": "#/definitions/GetAccessibilityTreeDetailsResult", - "definitions": { - "GetAccessibilityTreeDetailsResult": { - "type": "object", - "properties": { - "tree": {} - }, - "additionalProperties": false - } - }, - "$schema": "http://json-schema.org/draft-07/schema#" -} \ No newline at end of file diff --git a/apps/electron/generated/schemas/helper-responses/mute-system-audio-result.schema.json b/apps/electron/generated/schemas/helper-responses/mute-system-audio-result.schema.json deleted file mode 100644 index b21ed39..0000000 --- a/apps/electron/generated/schemas/helper-responses/mute-system-audio-result.schema.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "$ref": "#/definitions/MuteSystemAudioResult", - "definitions": { - "MuteSystemAudioResult": { - "type": "object", - "properties": { - "success": { - "type": "boolean" - }, - "message": { - "type": "string" - } - }, - "required": [ - "success" - ], - "additionalProperties": false - } - }, - "$schema": "http://json-schema.org/draft-07/schema#" -} \ No newline at end of file diff --git a/apps/electron/generated/schemas/helper-responses/paste-text-result.schema.json b/apps/electron/generated/schemas/helper-responses/paste-text-result.schema.json deleted file mode 100644 index ef11e72..0000000 --- a/apps/electron/generated/schemas/helper-responses/paste-text-result.schema.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "$ref": "#/definitions/PasteTextResult", - "definitions": { - "PasteTextResult": { - "type": "object", - "properties": { - "success": { - "type": "boolean" - }, - "message": { - "type": "string" - } - }, - "required": [ - "success" - ], - "additionalProperties": false - } - }, - "$schema": "http://json-schema.org/draft-07/schema#" -} \ No newline at end of file diff --git a/apps/electron/generated/schemas/helper-responses/pause-system-audio-result.schema.json b/apps/electron/generated/schemas/helper-responses/pause-system-audio-result.schema.json deleted file mode 100644 index ed2e744..0000000 --- a/apps/electron/generated/schemas/helper-responses/pause-system-audio-result.schema.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "$ref": "#/definitions/PauseSystemAudioResult", - "definitions": { - "PauseSystemAudioResult": { - "type": "object", - "properties": { - "success": { - "type": "boolean" - }, - "message": { - "type": "string" - } - }, - "required": ["success"], - "additionalProperties": false - } - }, - "$schema": "http://json-schema.org/draft-07/schema#" -} diff --git a/apps/electron/generated/schemas/helper-responses/play-system-audio-result.schema.json b/apps/electron/generated/schemas/helper-responses/play-system-audio-result.schema.json deleted file mode 100644 index 0fab991..0000000 --- a/apps/electron/generated/schemas/helper-responses/play-system-audio-result.schema.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "$ref": "#/definitions/PlaySystemAudioResult", - "definitions": { - "PlaySystemAudioResult": { - "type": "object", - "properties": { - "success": { - "type": "boolean" - }, - "message": { - "type": "string" - } - }, - "required": ["success"], - "additionalProperties": false - } - }, - "$schema": "http://json-schema.org/draft-07/schema#" -} diff --git a/apps/electron/generated/schemas/helper-responses/restore-system-audio-result.schema.json b/apps/electron/generated/schemas/helper-responses/restore-system-audio-result.schema.json deleted file mode 100644 index 38e3e70..0000000 --- a/apps/electron/generated/schemas/helper-responses/restore-system-audio-result.schema.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "$ref": "#/definitions/RestoreSystemAudioResult", - "definitions": { - "RestoreSystemAudioResult": { - "type": "object", - "properties": { - "success": { - "type": "boolean" - }, - "message": { - "type": "string" - } - }, - "required": [ - "success" - ], - "additionalProperties": false - } - }, - "$schema": "http://json-schema.org/draft-07/schema#" -} \ No newline at end of file diff --git a/apps/electron/package.json b/apps/electron/package.json index 0167217..d4c62e4 100644 --- a/apps/electron/package.json +++ b/apps/electron/package.json @@ -1,8 +1,7 @@ { - "name": "amical-app", - "productName": "amical-app", + "name": "@amical/electron", "version": "1.0.0", - "description": "My Electron application description", + "description": "Amical Electron application", "main": ".vite/build/main.js", "scripts": { "start": "pnpm build:swift-helper && electron-forge start", @@ -13,10 +12,7 @@ "format": "prettier --write \"**/*.{js,jsx,ts,tsx,json,md}\"", "db:generate": "drizzle-kit generate:sqlite", "db:push": "drizzle-kit push:sqlite", - "schema:generate-json": "tsx scripts/generate-json-schema.ts", - "schema:generate-swift": "tsx scripts/generate-swift-models.js", - "schema:generate-all": "pnpm schema:generate-json && pnpm schema:generate-swift", - "build:swift-helper": "pnpm schema:generate-all && pnpm --filter @amical/swift-helper build", + "build:swift-helper": "pnpm --filter @amical/swift-helper build", "dev": "pnpm start", "prepare": "pnpm build:swift-helper" }, @@ -49,15 +45,13 @@ "eslint-plugin-import": "^2.31.0", "eslint-plugin-prettier": "^5.4.0", "prettier": "^3.5.3", - "quicktype": "23.1.4", "tailwindcss": "^4.1.6", "tsx": "^4.19.4", "typescript": "~5.8.3", - "vite": "^5.4.19", - "zod": "^3.24.4", - "zod-to-json-schema": "^3.24.5" + "vite": "^5.4.19" }, "dependencies": { + "@amical/types": "workspace:*", "@hookform/resolvers": "^5.0.1", "@radix-ui/react-accordion": "^1.2.10", "@radix-ui/react-alert-dialog": "^1.1.13", diff --git a/apps/electron/scripts/generate-json-schema.ts b/apps/electron/scripts/generate-json-schema.ts deleted file mode 100644 index cbacd82..0000000 --- a/apps/electron/scripts/generate-json-schema.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { writeFileSync, mkdirSync, existsSync } from 'fs'; -import path from 'path'; -import { zodToJsonSchema } from 'zod-to-json-schema'; - -// Import new Zod schemas -import { RpcRequestSchema } from '../src/schemas/helper-envelopes/request'; -import { RpcResponseSchema } from '../src/schemas/helper-envelopes/response'; -import { GetAccessibilityTreeDetailsParamsSchema } from '../src/schemas/helper-requests/get-accessibility-tree-details'; -import { GetAccessibilityTreeDetailsResultSchema } from '../src/schemas/helper-responses/get-accessibility-tree-details'; -import { KeyDownEventSchema, KeyUpEventSchema } from '../src/schemas/helper-events/key-event'; -import { PasteTextParamsSchema } from '../src/schemas/helper-requests/paste-text'; -import { PasteTextResultSchema } from '../src/schemas/helper-responses/paste-text'; -import { RestoreSystemAudioParamsSchema } from '../src/schemas/helper-requests/restore-system-audio'; -import { RestoreSystemAudioResultSchema } from '../src/schemas/helper-responses/restore-system-audio'; -import { MuteSystemAudioParamsSchema } from '../src/schemas/helper-requests/mute-system-audio'; -import { MuteSystemAudioResultSchema } from '../src/schemas/helper-responses/mute-system-audio'; - -// Output directory as per rpc.md -const baseOutputDir = 'generated/schemas'; - -const schemasToGenerate = [ - { zod: RpcRequestSchema, name: 'RpcRequest', category: 'helper-envelopes' }, - { zod: RpcResponseSchema, name: 'RpcResponse', category: 'helper-envelopes' }, - { - zod: GetAccessibilityTreeDetailsParamsSchema, - name: 'GetAccessibilityTreeDetailsParams', - category: 'helper-requests', - }, - { - zod: GetAccessibilityTreeDetailsResultSchema, - name: 'GetAccessibilityTreeDetailsResult', - category: 'helper-responses', - }, - { zod: KeyDownEventSchema, name: 'KeyDownEvent', category: 'helper-events' }, // For unsolicited events - { zod: KeyUpEventSchema, name: 'KeyUpEvent', category: 'helper-events' }, // For unsolicited events - { zod: PasteTextParamsSchema, name: 'PasteTextParams', category: 'helper-requests' }, - { zod: PasteTextResultSchema, name: 'PasteTextResult', category: 'helper-responses' }, - { - zod: RestoreSystemAudioParamsSchema, - name: 'RestoreSystemAudioParams', - category: 'helper-requests', - }, - { - zod: RestoreSystemAudioResultSchema, - name: 'RestoreSystemAudioResult', - category: 'helper-responses', - }, - { zod: MuteSystemAudioParamsSchema, name: 'MuteSystemAudioParams', category: 'helper-requests' }, - { zod: MuteSystemAudioResultSchema, name: 'MuteSystemAudioResult', category: 'helper-responses' }, -]; - -schemasToGenerate.forEach(({ zod, name, category }) => { - const schemaOutputDir = path.join(baseOutputDir, category); - - // Ensure the output directory for the category exists - if (!existsSync(schemaOutputDir)) { - mkdirSync(schemaOutputDir, { recursive: true }); - } - - // Convert PascalCase or camelCase name to kebab-case for the filename - const kebabCaseName = name - .replace(/([A-Z])/g, (match, p1, offset) => (offset > 0 ? '-' : '') + p1.toLowerCase()) - .replace(/^-/, ''); // Remove leading dash if first letter was uppercase - - const outputPath = path.join(schemaOutputDir, `${kebabCaseName}.schema.json`); - const jsonSchema = zodToJsonSchema(zod, name); - - writeFileSync(outputPath, JSON.stringify(jsonSchema, null, 2)); - console.log(`Generated JSON schema for ${name} at ${outputPath}`); -}); - -console.log(`All JSON schemas generated successfully in ${baseOutputDir}`); diff --git a/apps/electron/scripts/generate-swift-models.ts b/apps/electron/scripts/generate-swift-models.ts deleted file mode 100644 index 8ee6545..0000000 --- a/apps/electron/scripts/generate-swift-models.ts +++ /dev/null @@ -1,43 +0,0 @@ -const { execSync } = require('child_process'); -const fs = require('fs'); -const path = require('path'); - -const generatedDir = '../../packages/native-helpers/swift-helper/Sources/SwiftHelper/models/generated'; - -try { - // Remove existing generated models and create the directory - if (fs.existsSync(generatedDir)) { - fs.rmSync(generatedDir, { recursive: true, force: true }); - } - fs.mkdirSync(generatedDir, { recursive: true }); - - console.log('Directory created/cleaned successfully.'); - - // Generate Swift models from JSON schemas using quicktype - const commands = [ - 'quicktype --src-lang schema --lang swift ' + - '-o ../../packages/native-helpers/swift-helper/Sources/SwiftHelper/models/generated/models.swift ' + - 'generated/schemas/helper-envelopes/rpc-request.schema.json ' + - 'generated/schemas/helper-envelopes/rpc-response.schema.json ' + - 'generated/schemas/helper-requests/get-accessibility-tree-details-params.schema.json ' + - 'generated/schemas/helper-responses/get-accessibility-tree-details-result.schema.json ' + - 'generated/schemas/helper-requests/paste-text-params.schema.json ' + - 'generated/schemas/helper-responses/paste-text-result.schema.json ' + - 'generated/schemas/helper-requests/mute-system-audio-params.schema.json ' + - 'generated/schemas/helper-responses/mute-system-audio-result.schema.json ' + - 'generated/schemas/helper-requests/restore-system-audio-params.schema.json ' + - 'generated/schemas/helper-responses/restore-system-audio-result.schema.json ' + - 'generated/schemas/helper-events/key-down-event.schema.json ' + - 'generated/schemas/helper-events/key-up-event.schema.json', - ]; - - commands.forEach((command) => { - console.log(`Executing: ${command}`); - execSync(command, { stdio: 'inherit' }); - }); - - console.log('Swift models generated successfully.'); -} catch (error) { - console.error('Error generating Swift models:', error); - process.exit(1); -} diff --git a/apps/electron/src/main/main.ts b/apps/electron/src/main/main.ts index 37af02c..0c4ca81 100644 --- a/apps/electron/src/main/main.ts +++ b/apps/electron/src/main/main.ts @@ -15,7 +15,7 @@ import dotenv from 'dotenv'; import started from 'electron-squirrel-startup'; import Store from 'electron-store'; //import { runMigrations } from '../db/migrate'; -import { HelperEvent, KeyEventPayload } from '../schemas/helper-events/key-event'; // ADD THIS IMPORT +import { HelperEvent, KeyEventPayload } from '@amical/types'; dotenv.config(); // Load .env file import { AudioCapture } from '../modules/audio/audio-capture'; diff --git a/apps/electron/src/main/swift-io-bridge.ts b/apps/electron/src/main/swift-io-bridge.ts index fe65d44..ee6bd3f 100644 --- a/apps/electron/src/main/swift-io-bridge.ts +++ b/apps/electron/src/main/swift-io-bridge.ts @@ -6,28 +6,23 @@ import { app, app as electronApp } from 'electron'; // electronApp for app.getAp import split2 from 'split2'; import { v4 as uuid } from 'uuid'; -import { RpcRequestSchema, RpcRequest } from '../schemas/helper-envelopes/request'; -import { RpcResponseSchema, RpcResponse } from '../schemas/helper-envelopes/response'; -import { HelperEventSchema, HelperEvent } from '../schemas/helper-events/key-event'; - -import { - GetAccessibilityTreeDetailsParamsSchema, - GetAccessibilityTreeDetailsParams, -} from '../schemas/helper-requests/get-accessibility-tree-details'; -import { - PasteTextParams, - PasteTextParamsSchema, // Assuming you might use this for validation if needed client-side -} from '../schemas/helper-requests/paste-text'; import { EventEmitter } from 'events'; import { + RpcRequestSchema, + RpcRequest, + RpcResponseSchema, + RpcResponse, + HelperEventSchema, + HelperEvent, + GetAccessibilityTreeDetailsParams, GetAccessibilityTreeDetailsResult, - GetAccessibilityTreeDetailsResultSchema, -} from '../schemas/helper-responses/get-accessibility-tree-details'; -import { PasteTextResult } from '../schemas/helper-responses/paste-text'; -import { MuteSystemAudioResult } from '../schemas/helper-responses/mute-system-audio'; -import { MuteSystemAudioParams } from '../schemas/helper-requests/mute-system-audio'; -import { RestoreSystemAudioResult } from '../schemas/helper-responses/restore-system-audio'; -import { RestoreSystemAudioParams } from '../schemas/helper-requests/restore-system-audio'; + PasteTextParams, + PasteTextResult, + MuteSystemAudioParams, + MuteSystemAudioResult, + RestoreSystemAudioParams, + RestoreSystemAudioResult, +} from '@amical/types'; // Define the interface for RPC methods interface RPCMethods { diff --git a/apps/electron/src/schemas/helper-requests/mute-system-audio.ts b/apps/electron/src/schemas/helper-requests/mute-system-audio.ts deleted file mode 100644 index 078c56c..0000000 --- a/apps/electron/src/schemas/helper-requests/mute-system-audio.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { z } from 'zod'; - -// No parameters needed for a simple pause toggle -export const MuteSystemAudioParamsSchema = z.object({}).optional(); -export type MuteSystemAudioParams = z.infer; diff --git a/apps/electron/src/schemas/helper-requests/paste-text.ts b/apps/electron/src/schemas/helper-requests/paste-text.ts deleted file mode 100644 index 4e0a616..0000000 --- a/apps/electron/src/schemas/helper-requests/paste-text.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { z } from 'zod'; - -export const PasteTextParamsSchema = z.object({ - transcript: z.string(), -}); - -export type PasteTextParams = z.infer; diff --git a/apps/electron/src/schemas/helper-requests/restore-system-audio.ts b/apps/electron/src/schemas/helper-requests/restore-system-audio.ts deleted file mode 100644 index 526d5b6..0000000 --- a/apps/electron/src/schemas/helper-requests/restore-system-audio.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { z } from 'zod'; - -// No parameters needed for a simple play toggle -export const RestoreSystemAudioParamsSchema = z.object({}).optional(); -export type RestoreSystemAudioParams = z.infer; diff --git a/apps/electron/src/schemas/helper-responses/get-accessibility-tree-details.ts b/apps/electron/src/schemas/helper-responses/get-accessibility-tree-details.ts deleted file mode 100644 index 320be20..0000000 --- a/apps/electron/src/schemas/helper-responses/get-accessibility-tree-details.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { z } from 'zod'; - -export const GetAccessibilityTreeDetailsResultSchema = z.object({ - tree: z.any(), // Replace with your tree schema once defined -}); -export type GetAccessibilityTreeDetailsResult = z.infer< - typeof GetAccessibilityTreeDetailsResultSchema ->; diff --git a/apps/electron/src/schemas/helper-responses/restore-system-audio.ts b/apps/electron/src/schemas/helper-responses/restore-system-audio.ts deleted file mode 100644 index a6a83cf..0000000 --- a/apps/electron/src/schemas/helper-responses/restore-system-audio.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { z } from 'zod'; - -export const RestoreSystemAudioResultSchema = z.object({ - success: z.boolean(), - message: z.string().optional(), -}); -export type RestoreSystemAudioResult = z.infer; diff --git a/packages/eslint-config/package.json b/packages/eslint-config/package.json index d4f9c5c..55c4a3f 100644 --- a/packages/eslint-config/package.json +++ b/packages/eslint-config/package.json @@ -1,5 +1,5 @@ { - "name": "@repo/eslint-config", + "name": "@amical/eslint-config", "version": "0.0.0", "type": "module", "private": true, diff --git a/packages/native-helpers/swift-helper/Package.swift b/packages/native-helpers/swift-helper/Package.swift index 6e77ac9..748be46 100644 --- a/packages/native-helpers/swift-helper/Package.swift +++ b/packages/native-helpers/swift-helper/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:5.3 +// swift-tools-version:5.9 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription @@ -19,7 +19,8 @@ let package = Package( name: "SwiftHelper", dependencies: [], resources: [ - .process("Resources") // This line tells SPM to copy the Resources folder + .embedInCode("Resources/rec-start.mp3"), + .embedInCode("Resources/rec-stop.mp3") ] ) ] diff --git a/packages/native-helpers/swift-helper/Sources/SwiftHelper/RpcHandler.swift b/packages/native-helpers/swift-helper/Sources/SwiftHelper/RpcHandler.swift index 2820ceb..261bbd4 100644 --- a/packages/native-helpers/swift-helper/Sources/SwiftHelper/RpcHandler.swift +++ b/packages/native-helpers/swift-helper/Sources/SwiftHelper/RpcHandler.swift @@ -1,10 +1,6 @@ import Foundation import AVFoundation // ADDED -// Assuming models like RPCRequestSchema, RPCResponseSchema, Error, -// GetAccessibilityTreeDetailsParamsSchema, GetAccessibilityTreeDetailsResultSchema, JSONAny -// are available in the module (e.g., from models.swift) - class IOBridge: NSObject, AVAudioPlayerDelegate { private let jsonEncoder: JSONEncoder private let jsonDecoder: JSONDecoder @@ -29,26 +25,35 @@ class IOBridge: NSObject, AVAudioPlayerDelegate { self.audioCompletionHandler = completion - guard let soundURL = Bundle.main.url(forResource: soundName, withExtension: "mp3", subdirectory: "Resources") else { - FileHandle.standardError.write("[IOBridge] Error: \(soundName).mp3 not found in Resources subdirectory. Completion will not be called.\n".data(using: .utf8)!) + // Get the embedded audio data + let audioData: [UInt8] + switch soundName { + case "rec-start": + audioData = PackageResources.rec_start_mp3 + case "rec-stop": + audioData = PackageResources.rec_stop_mp3 + default: + FileHandle.standardError.write("[IOBridge] Error: Unknown sound name '\(soundName)'. Completion will not be called.\n".data(using: .utf8)!) self.audioCompletionHandler = nil return } do { - // Initialize the audio player. It's important to keep a reference to it - // for the duration of the playback, hence the class property. - audioPlayer = try AVAudioPlayer(contentsOf: soundURL) + // Convert embedded data to Data object + let soundData = Data(audioData) + + // Initialize the audio player with the embedded data + audioPlayer = try AVAudioPlayer(data: soundData) audioPlayer?.delegate = self if audioPlayer?.play() == true { - FileHandle.standardError.write("[IOBridge] Playing sound: \(soundName).mp3. Delegate will handle completion.\n".data(using: .utf8)!) + FileHandle.standardError.write("[IOBridge] Playing embedded sound: \(soundName).mp3. Delegate will handle completion.\n".data(using: .utf8)!) } else { - FileHandle.standardError.write("[IOBridge] Failed to start playing sound: \(soundName).mp3 (audioPlayer.play() returned false or player is nil). Completion will not be called.\n".data(using: .utf8)!) + FileHandle.standardError.write("[IOBridge] Failed to start playing embedded sound: \(soundName).mp3 (audioPlayer.play() returned false or player is nil). Completion will not be called.\n".data(using: .utf8)!) self.audioCompletionHandler = nil } } catch { - FileHandle.standardError.write("[IOBridge] Error initializing AVAudioPlayer for \(soundName).mp3: \(error.localizedDescription). Completion will not be called.\n".data(using: .utf8)!) + FileHandle.standardError.write("[IOBridge] Error initializing AVAudioPlayer for embedded \(soundName).mp3: \(error.localizedDescription). Completion will not be called.\n".data(using: .utf8)!) self.audioCompletionHandler = nil } } diff --git a/packages/native-helpers/swift-helper/package.json b/packages/native-helpers/swift-helper/package.json index 323b36f..d6e88c9 100644 --- a/packages/native-helpers/swift-helper/package.json +++ b/packages/native-helpers/swift-helper/package.json @@ -4,10 +4,10 @@ "description": "Swift native helper for accessibility APIs and system integration", "private": true, "scripts": { - "build": "turbo run build:native", + "build": "pnpm --filter @amical/types generate:all && turbo run build:native", "build:native": "swift build --configuration release && mkdir -p bin && cp .build/release/SwiftHelper bin/SwiftHelper", "clean": "rm -rf .build bin", - "dev": "swift build --configuration debug && mkdir -p bin && cp .build/debug/SwiftHelper bin/SwiftHelper" + "dev": "pnpm --filter @amical/types generate:all && swift build --configuration debug && mkdir -p bin && cp .build/debug/SwiftHelper bin/SwiftHelper" }, "files": [ "bin/*" diff --git a/packages/types/.gitignore b/packages/types/.gitignore new file mode 100644 index 0000000..b542d4f --- /dev/null +++ b/packages/types/.gitignore @@ -0,0 +1,42 @@ +# Build output +dist/ +*.tsbuildinfo + +# Generated files +generated/ + +# Dependencies +node_modules/ + +# IDE files +.vscode/ +.idea/ +*.swp +*.swo +*~ + +# Logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Coverage directory used by tools like istanbul +coverage/ +*.lcov + +# nyc test coverage +.nyc_output + +# ESLint cache +.eslintcache + +# Turbo cache +.turbo/ \ No newline at end of file diff --git a/packages/types/package.json b/packages/types/package.json new file mode 100644 index 0000000..100d9e4 --- /dev/null +++ b/packages/types/package.json @@ -0,0 +1,41 @@ +{ + "name": "@amical/types", + "version": "1.0.0", + "description": "Shared type definitions and schema generation for Amical", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "scripts": { + "build": "tsc", + "dev": "tsc --watch", + "clean": "rm -rf dist generated", + "generate:json-schemas": "tsx scripts/generate-json-schemas.ts", + "generate:swift": "tsx scripts/generate-swift-models.ts", + "generate:all": "pnpm run generate:json-schemas && pnpm run generate:swift", + "lint": "eslint --ext .ts .", + "check-types": "tsc --noEmit" + }, + "keywords": ["amical", "types", "schemas", "rpc"], + "license": "MIT", + "devDependencies": { + "@amical/typescript-config": "workspace:*", + "@amical/eslint-config": "workspace:*", + "eslint": "^9.26.0", + "quicktype": "23.1.4", + "tsx": "^4.19.4", + "typescript": "~5.8.3", + "zod-to-json-schema": "^3.24.5" + }, + "dependencies": { + "zod": "^3.24.4" + }, + "exports": { + ".": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + }, + "./schemas/*": { + "types": "./dist/schemas/*.d.ts", + "default": "./dist/schemas/*.js" + } + } +} \ No newline at end of file diff --git a/packages/types/scripts/generate-json-schemas.ts b/packages/types/scripts/generate-json-schemas.ts new file mode 100644 index 0000000..977dfe4 --- /dev/null +++ b/packages/types/scripts/generate-json-schemas.ts @@ -0,0 +1,83 @@ +import { writeFileSync, mkdirSync, existsSync } from 'fs'; +import path from 'path'; +import { zodToJsonSchema } from 'zod-to-json-schema'; + +// Import schemas from the types package +import { RpcRequestSchema } from '../src/schemas/rpc/request'; +import { RpcResponseSchema } from '../src/schemas/rpc/response'; +import { + GetAccessibilityTreeDetailsParamsSchema, + GetAccessibilityTreeDetailsResultSchema +} from '../src/schemas/methods/get-accessibility-tree-details'; +import { + PasteTextParamsSchema, + PasteTextResultSchema +} from '../src/schemas/methods/paste-text'; +import { + MuteSystemAudioParamsSchema, + MuteSystemAudioResultSchema +} from '../src/schemas/methods/mute-system-audio'; +import { + RestoreSystemAudioParamsSchema, + RestoreSystemAudioResultSchema +} from '../src/schemas/methods/restore-system-audio'; +import { + KeyDownEventSchema, + KeyUpEventSchema +} from '../src/schemas/events/key-events'; + +// Output directory +const baseOutputDir = 'generated/json-schemas'; + +const schemasToGenerate = [ + { zod: RpcRequestSchema, name: 'RpcRequest', category: 'rpc' }, + { zod: RpcResponseSchema, name: 'RpcResponse', category: 'rpc' }, + { + zod: GetAccessibilityTreeDetailsParamsSchema, + name: 'GetAccessibilityTreeDetailsParams', + category: 'methods', + }, + { + zod: GetAccessibilityTreeDetailsResultSchema, + name: 'GetAccessibilityTreeDetailsResult', + category: 'methods', + }, + { zod: KeyDownEventSchema, name: 'KeyDownEvent', category: 'events' }, + { zod: KeyUpEventSchema, name: 'KeyUpEvent', category: 'events' }, + { zod: PasteTextParamsSchema, name: 'PasteTextParams', category: 'methods' }, + { zod: PasteTextResultSchema, name: 'PasteTextResult', category: 'methods' }, + { + zod: RestoreSystemAudioParamsSchema, + name: 'RestoreSystemAudioParams', + category: 'methods', + }, + { + zod: RestoreSystemAudioResultSchema, + name: 'RestoreSystemAudioResult', + category: 'methods', + }, + { zod: MuteSystemAudioParamsSchema, name: 'MuteSystemAudioParams', category: 'methods' }, + { zod: MuteSystemAudioResultSchema, name: 'MuteSystemAudioResult', category: 'methods' }, +]; + +schemasToGenerate.forEach(({ zod, name, category }) => { + const schemaOutputDir = path.join(baseOutputDir, category); + + // Ensure the output directory for the category exists + if (!existsSync(schemaOutputDir)) { + mkdirSync(schemaOutputDir, { recursive: true }); + } + + // Convert PascalCase or camelCase name to kebab-case for the filename + const kebabCaseName = name + .replace(/([A-Z])/g, (match, p1, offset) => (offset > 0 ? '-' : '') + p1.toLowerCase()) + .replace(/^-/, ''); // Remove leading dash if first letter was uppercase + + const outputPath = path.join(schemaOutputDir, `${kebabCaseName}.schema.json`); + const jsonSchema = zodToJsonSchema(zod, name); + + writeFileSync(outputPath, JSON.stringify(jsonSchema, null, 2)); + console.log(`Generated JSON schema for ${name} at ${outputPath}`); +}); + +console.log(`All JSON schemas generated successfully in ${baseOutputDir}`); \ No newline at end of file diff --git a/packages/types/scripts/generate-swift-models.ts b/packages/types/scripts/generate-swift-models.ts new file mode 100644 index 0000000..d42d284 --- /dev/null +++ b/packages/types/scripts/generate-swift-models.ts @@ -0,0 +1,43 @@ +const { execSync } = require('child_process'); +const fs = require('fs'); +const path = require('path'); + +const generatedDir = '../native-helpers/swift-helper/Sources/SwiftHelper/models/generated'; + +try { + // Remove existing generated models and create the directory + if (fs.existsSync(generatedDir)) { + fs.rmSync(generatedDir, { recursive: true, force: true }); + } + fs.mkdirSync(generatedDir, { recursive: true }); + + console.log('Directory created/cleaned successfully.'); + + // Generate Swift models from JSON schemas using quicktype + const commands = [ + 'quicktype --src-lang schema --lang swift ' + + `-o ${generatedDir}/models.swift ` + + 'generated/json-schemas/rpc/rpc-request.schema.json ' + + 'generated/json-schemas/rpc/rpc-response.schema.json ' + + 'generated/json-schemas/methods/get-accessibility-tree-details-params.schema.json ' + + 'generated/json-schemas/methods/get-accessibility-tree-details-result.schema.json ' + + 'generated/json-schemas/methods/paste-text-params.schema.json ' + + 'generated/json-schemas/methods/paste-text-result.schema.json ' + + 'generated/json-schemas/methods/mute-system-audio-params.schema.json ' + + 'generated/json-schemas/methods/mute-system-audio-result.schema.json ' + + 'generated/json-schemas/methods/restore-system-audio-params.schema.json ' + + 'generated/json-schemas/methods/restore-system-audio-result.schema.json ' + + 'generated/json-schemas/events/key-down-event.schema.json ' + + 'generated/json-schemas/events/key-up-event.schema.json', + ]; + + commands.forEach((command) => { + console.log(`Executing: ${command}`); + execSync(command, { stdio: 'inherit' }); + }); + + console.log('Swift models generated successfully.'); +} catch (error) { + console.error('Error generating Swift models:', error); + process.exit(1); +} \ No newline at end of file diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts new file mode 100644 index 0000000..41125a5 --- /dev/null +++ b/packages/types/src/index.ts @@ -0,0 +1,12 @@ +// RPC Envelopes +export * from './schemas/rpc/request'; +export * from './schemas/rpc/response'; + +// Method Schemas (params + results) +export * from './schemas/methods/get-accessibility-tree-details'; +export * from './schemas/methods/paste-text'; +export * from './schemas/methods/mute-system-audio'; +export * from './schemas/methods/restore-system-audio'; + +// Event Schemas +export * from './schemas/events/key-events'; \ No newline at end of file diff --git a/apps/electron/src/schemas/helper-events/key-event.ts b/packages/types/src/schemas/events/key-events.ts similarity index 99% rename from apps/electron/src/schemas/helper-events/key-event.ts rename to packages/types/src/schemas/events/key-events.ts index 47b2934..64d4e38 100644 --- a/apps/electron/src/schemas/helper-events/key-event.ts +++ b/packages/types/src/schemas/events/key-events.ts @@ -60,4 +60,4 @@ export const EventSchema = z.object({ data: z.any(), }); export type Event = z.infer; -*/ +*/ \ No newline at end of file diff --git a/apps/electron/src/schemas/helper-requests/get-accessibility-tree-details.ts b/packages/types/src/schemas/methods/get-accessibility-tree-details.ts similarity index 51% rename from apps/electron/src/schemas/helper-requests/get-accessibility-tree-details.ts rename to packages/types/src/schemas/methods/get-accessibility-tree-details.ts index e50a797..97ed1fe 100644 --- a/apps/electron/src/schemas/helper-requests/get-accessibility-tree-details.ts +++ b/packages/types/src/schemas/methods/get-accessibility-tree-details.ts @@ -1,8 +1,17 @@ import { z } from 'zod'; +// Request params export const GetAccessibilityTreeDetailsParamsSchema = z.object({ rootId: z.string().optional(), // Making rootId optional, maybe we want the whole tree }); export type GetAccessibilityTreeDetailsParams = z.infer< typeof GetAccessibilityTreeDetailsParamsSchema >; + +// Response result +export const GetAccessibilityTreeDetailsResultSchema = z.object({ + tree: z.any(), // Replace with your tree schema once defined +}); +export type GetAccessibilityTreeDetailsResult = z.infer< + typeof GetAccessibilityTreeDetailsResultSchema +>; \ No newline at end of file diff --git a/apps/electron/src/schemas/helper-responses/mute-system-audio.ts b/packages/types/src/schemas/methods/mute-system-audio.ts similarity index 50% rename from apps/electron/src/schemas/helper-responses/mute-system-audio.ts rename to packages/types/src/schemas/methods/mute-system-audio.ts index 030cb47..2e06384 100644 --- a/apps/electron/src/schemas/helper-responses/mute-system-audio.ts +++ b/packages/types/src/schemas/methods/mute-system-audio.ts @@ -1,7 +1,12 @@ import { z } from 'zod'; +// Request params +export const MuteSystemAudioParamsSchema = z.object({}).optional(); +export type MuteSystemAudioParams = z.infer; + +// Response result export const MuteSystemAudioResultSchema = z.object({ success: z.boolean(), message: z.string().optional(), }); -export type MuteSystemAudioResult = z.infer; +export type MuteSystemAudioResult = z.infer; \ No newline at end of file diff --git a/apps/electron/src/schemas/helper-responses/paste-text.ts b/packages/types/src/schemas/methods/paste-text.ts similarity index 57% rename from apps/electron/src/schemas/helper-responses/paste-text.ts rename to packages/types/src/schemas/methods/paste-text.ts index 81195b1..4682ce9 100644 --- a/apps/electron/src/schemas/helper-responses/paste-text.ts +++ b/packages/types/src/schemas/methods/paste-text.ts @@ -1,11 +1,14 @@ -// It's good practice to also define a result schema, even if it's simple - import { z } from 'zod'; -// For paste, the result might just be a success boolean or empty if no specific data is returned. +// Request params +export const PasteTextParamsSchema = z.object({ + transcript: z.string(), +}); +export type PasteTextParams = z.infer; + +// Response result export const PasteTextResultSchema = z.object({ success: z.boolean(), message: z.string().optional(), // Optional message for errors or status }); - -export type PasteTextResult = z.infer; +export type PasteTextResult = z.infer; \ No newline at end of file diff --git a/packages/types/src/schemas/methods/restore-system-audio.ts b/packages/types/src/schemas/methods/restore-system-audio.ts new file mode 100644 index 0000000..18e6fff --- /dev/null +++ b/packages/types/src/schemas/methods/restore-system-audio.ts @@ -0,0 +1,12 @@ +import { z } from 'zod'; + +// Request params +export const RestoreSystemAudioParamsSchema = z.object({}).optional(); +export type RestoreSystemAudioParams = z.infer; + +// Response result +export const RestoreSystemAudioResultSchema = z.object({ + success: z.boolean(), + message: z.string().optional(), +}); +export type RestoreSystemAudioResult = z.infer; \ No newline at end of file diff --git a/apps/electron/src/schemas/helper-envelopes/request.ts b/packages/types/src/schemas/rpc/request.ts similarity index 90% rename from apps/electron/src/schemas/helper-envelopes/request.ts rename to packages/types/src/schemas/rpc/request.ts index 4060a54..23b210a 100644 --- a/apps/electron/src/schemas/helper-envelopes/request.ts +++ b/packages/types/src/schemas/rpc/request.ts @@ -1,7 +1,6 @@ import { z } from 'zod'; -import { GetAccessibilityTreeDetailsParamsSchema } from '../helper-requests/get-accessibility-tree-details'; -import { PasteTextParamsSchema } from '../helper-requests/paste-text'; -// Removed incorrect import for AnyCodable +import { GetAccessibilityTreeDetailsParamsSchema } from '../methods/get-accessibility-tree-details'; +import { PasteTextParamsSchema } from '../methods/paste-text'; // Define a union of all possible RPC method names const RPCMethodNameSchema = z.union([ @@ -58,4 +57,4 @@ export const SetLogLevelRequestSchema = RpcRequestSchema.extend({ params: SetLogLevelParamsSchema, }); export type SetLogLevelRequest = z.infer; -*/ +*/ \ No newline at end of file diff --git a/apps/electron/src/schemas/helper-envelopes/response.ts b/packages/types/src/schemas/rpc/response.ts similarity index 85% rename from apps/electron/src/schemas/helper-envelopes/response.ts rename to packages/types/src/schemas/rpc/response.ts index cc862ac..529fbdf 100644 --- a/apps/electron/src/schemas/helper-envelopes/response.ts +++ b/packages/types/src/schemas/rpc/response.ts @@ -8,4 +8,4 @@ export const RpcResponseSchema = z.object({ .object({ code: z.number().int(), message: z.string(), data: z.any().optional() }) // Changed code to int .optional(), }); -export type RpcResponse = z.infer; +export type RpcResponse = z.infer; \ No newline at end of file diff --git a/packages/types/tsconfig.json b/packages/types/tsconfig.json new file mode 100644 index 0000000..faa2751 --- /dev/null +++ b/packages/types/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "@amical/typescript-config/base.json", + "compilerOptions": { + "outDir": "./dist", + "rootDir": "./src", + "declaration": true, + "declarationMap": true, + "sourceMap": true + }, + "include": ["src/**/*"], + "exclude": ["dist", "generated", "scripts"] +} \ No newline at end of file diff --git a/packages/typescript-config/package.json b/packages/typescript-config/package.json index 27c0e60..48e7c94 100644 --- a/packages/typescript-config/package.json +++ b/packages/typescript-config/package.json @@ -1,5 +1,5 @@ { - "name": "@repo/typescript-config", + "name": "@amical/typescript-config", "version": "0.0.0", "private": true, "license": "MIT", diff --git a/packages/ui/package.json b/packages/ui/package.json index 4030824..894c555 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,5 +1,5 @@ { - "name": "@repo/ui", + "name": "@amical/ui", "version": "0.0.0", "private": true, "exports": { @@ -11,8 +11,8 @@ "check-types": "tsc --noEmit" }, "devDependencies": { - "@repo/eslint-config": "workspace:*", - "@repo/typescript-config": "workspace:*", + "@amical/eslint-config": "workspace:*", + "@amical/typescript-config": "workspace:*", "@turbo/gen": "^2.5.0", "@types/node": "^22.15.3", "@types/react": "19.1.0", diff --git a/packages/ui/tsconfig.json b/packages/ui/tsconfig.json index ca86687..63f7af0 100644 --- a/packages/ui/tsconfig.json +++ b/packages/ui/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "@repo/typescript-config/react-library.json", + "extends": "@amical/typescript-config/react-library.json", "compilerOptions": { "outDir": "dist" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1eae3a4..eacb29f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,9 @@ importers: apps/electron: dependencies: + '@amical/types': + specifier: workspace:* + version: link:../../packages/types '@hookform/resolvers': specifier: ^5.0.1 version: 5.0.1(react-hook-form@7.56.4(react@19.1.0)) @@ -233,7 +236,7 @@ importers: version: 1.8.0 '@tailwindcss/vite': specifier: ^4.1.6 - version: 4.1.7(vite@5.4.19(@types/node@16.18.126)(lightningcss@1.30.1)) + version: 4.1.7(vite@5.4.19(@types/node@22.15.12)(lightningcss@1.30.1)) '@types/react': specifier: ^19.1.3 version: 19.1.5 @@ -264,9 +267,6 @@ importers: prettier: specifier: ^3.5.3 version: 3.5.3 - quicktype: - specifier: 23.1.4 - version: 23.1.4(encoding@0.1.13) tailwindcss: specifier: ^4.1.6 version: 4.1.7 @@ -278,13 +278,7 @@ importers: version: 5.8.3 vite: specifier: ^5.4.19 - version: 5.4.19(@types/node@16.18.126)(lightningcss@1.30.1) - zod: - specifier: ^3.24.4 - version: 3.25.24 - zod-to-json-schema: - specifier: ^3.24.5 - version: 3.24.5(zod@3.25.24) + version: 5.4.19(@types/node@22.15.12)(lightningcss@1.30.1) apps/www: dependencies: @@ -421,6 +415,34 @@ importers: packages/native-helpers/swift-helper: {} + packages/types: + dependencies: + zod: + specifier: ^3.24.4 + version: 3.25.24 + devDependencies: + '@amical/eslint-config': + specifier: workspace:* + version: link:../eslint-config + '@amical/typescript-config': + specifier: workspace:* + version: link:../typescript-config + eslint: + specifier: ^9.26.0 + version: 9.27.0(jiti@2.4.2) + quicktype: + specifier: 23.1.4 + version: 23.1.4(encoding@0.1.13) + tsx: + specifier: ^4.19.4 + version: 4.19.4 + typescript: + specifier: ~5.8.3 + version: 5.8.3 + zod-to-json-schema: + specifier: ^3.24.5 + version: 3.24.5(zod@3.25.24) + packages/typescript-config: {} packages/ui: @@ -432,10 +454,10 @@ importers: specifier: ^19.1.0 version: 19.1.0(react@19.1.0) devDependencies: - '@repo/eslint-config': + '@amical/eslint-config': specifier: workspace:* version: link:../eslint-config - '@repo/typescript-config': + '@amical/typescript-config': specifier: workspace:* version: link:../typescript-config '@turbo/gen': @@ -8968,12 +8990,12 @@ snapshots: postcss: 8.5.3 tailwindcss: 4.1.7 - '@tailwindcss/vite@4.1.7(vite@5.4.19(@types/node@16.18.126)(lightningcss@1.30.1))': + '@tailwindcss/vite@4.1.7(vite@5.4.19(@types/node@22.15.12)(lightningcss@1.30.1))': dependencies: '@tailwindcss/node': 4.1.7 '@tailwindcss/oxide': 4.1.7 tailwindcss: 4.1.7 - vite: 5.4.19(@types/node@16.18.126)(lightningcss@1.30.1) + vite: 5.4.19(@types/node@22.15.12)(lightningcss@1.30.1) '@tootallnate/once@2.0.0': {} @@ -14703,13 +14725,13 @@ snapshots: d3-time: 3.1.0 d3-timer: 3.0.1 - vite@5.4.19(@types/node@16.18.126)(lightningcss@1.30.1): + vite@5.4.19(@types/node@22.15.12)(lightningcss@1.30.1): dependencies: esbuild: 0.21.5 postcss: 8.5.3 rollup: 4.41.0 optionalDependencies: - '@types/node': 16.18.126 + '@types/node': 22.15.12 fsevents: 2.3.3 lightningcss: 1.30.1 From e61af4231d6cbf590dc389d52dd5bf05ce04f46c Mon Sep 17 00:00:00 2001 From: hsingh Date: Sat, 24 May 2025 05:22:15 +0530 Subject: [PATCH 3/4] chore: only build apps/www for now --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 81413dd..c647684 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -46,4 +46,4 @@ jobs: run: pnpm install - name: Build - run: pnpm build \ No newline at end of file + run: pnpm --filter @amical/www build \ No newline at end of file From 2e01a8f3388f1fb549698409b2ffe5acd60615e0 Mon Sep 17 00:00:00 2001 From: hsingh Date: Sat, 24 May 2025 05:28:54 +0530 Subject: [PATCH 4/4] chore: don't build swift helper as part of pnpm i --- .github/workflows/ci.yml | 2 +- apps/electron/package.json | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c647684..d4d17ff 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -43,7 +43,7 @@ jobs: ${{ runner.os }}-pnpm-store- - name: Install dependencies - run: pnpm install + run: pnpm --filter @amical/www install - name: Build run: pnpm --filter @amical/www build \ No newline at end of file diff --git a/apps/electron/package.json b/apps/electron/package.json index d4c62e4..b1f885a 100644 --- a/apps/electron/package.json +++ b/apps/electron/package.json @@ -13,8 +13,7 @@ "db:generate": "drizzle-kit generate:sqlite", "db:push": "drizzle-kit push:sqlite", "build:swift-helper": "pnpm --filter @amical/swift-helper build", - "dev": "pnpm start", - "prepare": "pnpm build:swift-helper" + "dev": "pnpm start" }, "keywords": [], "license": "MIT",