diff --git a/apps/desktop/src-tauri/DEEPLINKS.md b/apps/desktop/src-tauri/DEEPLINKS.md new file mode 100644 index 0000000000..2f2f937b1e --- /dev/null +++ b/apps/desktop/src-tauri/DEEPLINKS.md @@ -0,0 +1,71 @@ +# Cap Desktop Deeplinks + +Cap Desktop registers the `cap-desktop://` URL scheme. + +## Recording controls + +### Start recording + +```bash +open 'cap-desktop://record/start?mode=studio&capture_type=screen&target=Built-in%20Display&capture_system_audio=true&mic_label=External%20Microphone' +``` + +Query params: +- `mode`: `studio` or `instant` (default: `studio`) +- `capture_type`: `screen` or `window` (required) +- `target`: screen/window name exactly as shown in Cap (required) +- `capture_system_audio`: `true` / `false` (optional) +- `mic_label`: microphone label exactly as shown in Cap (optional) +- `mic_off=true` disables microphone input and cannot be combined with `mic_label` +- omitting `mic_label`, `device_id`, `model_id`, `off`, and `mic_off` keeps the current Cap inputs unchanged +- camera: + - `device_id=` or `model_id=` + - `off=true` to disable camera + +### Stop / pause / resume / toggle / restart + +```bash +open 'cap-desktop://record/stop' +open 'cap-desktop://record/pause' +open 'cap-desktop://record/resume' +open 'cap-desktop://record/toggle-pause' +open 'cap-desktop://record/restart' +``` + +## Device switching + +### Switch microphone + +```bash +open 'cap-desktop://device/microphone?label=External%20Microphone' +``` + +To disable microphone input: + +```bash +open 'cap-desktop://device/microphone?off=true' +``` + +### Switch camera + +```bash +open 'cap-desktop://device/camera?device_id=YOUR_DEVICE_ID' +open 'cap-desktop://device/camera?model_id=VID:PID' +open 'cap-desktop://device/camera?off=true' +``` + +`off=true` cannot be combined with `device_id` or `model_id`. + +## Settings + +```bash +open 'cap-desktop://settings/open?page=hotkeys' +``` + +## Backward compatibility + +Legacy JSON payload links remain supported: + +```bash +open 'cap-desktop://action?value={...json...}' +``` diff --git a/apps/desktop/src-tauri/src/deeplink_actions.rs b/apps/desktop/src-tauri/src/deeplink_actions.rs index a117028487..8d155472c4 100644 --- a/apps/desktop/src-tauri/src/deeplink_actions.rs +++ b/apps/desktop/src-tauri/src/deeplink_actions.rs @@ -2,9 +2,12 @@ use cap_recording::{ RecordingMode, feeds::camera::DeviceOrModelID, sources::screen_capture::ScreenCaptureTarget, }; use serde::{Deserialize, Serialize}; -use std::path::{Path, PathBuf}; +use std::{ + collections::HashMap, + path::{Path, PathBuf}, +}; use tauri::{AppHandle, Manager, Url}; -use tracing::trace; +use tracing::{error, trace}; use crate::{App, ArcLock, recording::StartRecordingInputs, windows::ShowCapWindow}; @@ -25,7 +28,26 @@ pub enum DeepLinkAction { capture_system_audio: bool, mode: RecordingMode, }, + StartRecordingPath { + capture_mode: CaptureMode, + camera: Option, + apply_camera: bool, + mic_label: Option, + apply_mic: bool, + capture_system_audio: bool, + mode: RecordingMode, + }, StopRecording, + PauseRecording, + ResumeRecording, + TogglePauseRecording, + RestartRecording, + SwitchMicrophone { + mic_label: Option, + }, + SwitchCamera { + camera: Option, + }, OpenEditor { project_path: PathBuf, }, @@ -44,12 +66,11 @@ pub fn handle(app_handle: &AppHandle, urls: Vec) { DeepLinkAction::try_from(&url) .map_err(|e| match e { ActionParseFromUrlError::ParseFailed(msg) => { - eprintln!("Failed to parse deep link \"{}\": {}", &url, msg) + error!("Failed to parse deep link \"{}\": {}", &url, msg) } ActionParseFromUrlError::Invalid => { - eprintln!("Invalid deep link format \"{}\"", &url) + error!("Invalid deep link format \"{}\"", &url) } - // Likely login action, not handled here. ActionParseFromUrlError::NotAction => {} }) .ok() @@ -64,18 +85,136 @@ pub fn handle(app_handle: &AppHandle, urls: Vec) { tauri::async_runtime::spawn(async move { for action in actions { if let Err(e) = action.execute(&app_handle).await { - eprintln!("Failed to handle deep link action: {e}"); + error!("Failed to handle deep link action: {e}"); } } }); } +#[derive(Debug)] pub enum ActionParseFromUrlError { ParseFailed(String), Invalid, NotAction, } +fn parse_optional_string(value: Option<&String>) -> Option { + value + .map(|value| value.trim()) + .filter(|value| !value.is_empty()) + .map(ToString::to_string) +} + +fn parse_bool(value: Option<&String>, default: bool) -> Result { + let Some(value) = value else { + return Ok(default); + }; + + match value.trim().to_ascii_lowercase().as_str() { + "1" | "true" | "yes" | "on" => Ok(true), + "0" | "false" | "no" | "off" => Ok(false), + _ => Err(ActionParseFromUrlError::ParseFailed(format!( + "invalid boolean value '{value}'" + ))), + } +} + +fn parse_mode(value: Option<&String>) -> Result { + match value + .map(|value| value.trim().to_ascii_lowercase()) + .as_deref() + .unwrap_or("studio") + { + "studio" => Ok(RecordingMode::Studio), + "instant" => Ok(RecordingMode::Instant), + other => Err(ActionParseFromUrlError::ParseFailed(format!( + "invalid mode '{other}', expected 'studio' or 'instant'" + ))), + } +} + +fn query_map(url: &Url) -> HashMap { + url.query_pairs() + .map(|(key, value)| (key.to_string(), value.to_string())) + .collect() +} + +fn path_action(url: &Url) -> Option<(String, String)> { + if url.scheme() != "cap-desktop" { + return None; + } + + let domain = url.domain()?.to_string(); + let mut segments = url.path_segments()?; + let action = segments.next()?.trim().to_string(); + + if action.is_empty() { + return None; + } + + Some((domain, action)) +} + +fn parse_camera_from_query( + query: &HashMap, +) -> Result, ActionParseFromUrlError> { + let device_id = parse_optional_string(query.get("device_id")); + let model_id = parse_optional_string(query.get("model_id")); + let off = parse_bool(query.get("off"), false)?; + + if off && (device_id.is_some() || model_id.is_some()) { + return Err(ActionParseFromUrlError::ParseFailed( + "camera deep link cannot combine 'off=true' with 'device_id' or 'model_id'".to_string(), + )); + } + + if off { + return Ok(None); + } + + match (device_id, model_id) { + (Some(device_id), None) => Ok(Some(DeviceOrModelID::DeviceID(device_id))), + (None, Some(model_id)) => { + let parsed_model_id = model_id.try_into().map_err(|_| { + ActionParseFromUrlError::ParseFailed( + "invalid 'model_id' format, expected 'VID:PID'".to_string(), + ) + })?; + Ok(Some(DeviceOrModelID::ModelID(parsed_model_id))) + } + (None, None) => Ok(None), + (Some(_), Some(_)) => Err(ActionParseFromUrlError::ParseFailed( + "camera deep link can specify only one of 'device_id' or 'model_id'".to_string(), + )), + } +} + +fn parse_microphone_from_query( + query: &HashMap, + label_key: &str, + off_key: &str, +) -> Result<(Option, bool), ActionParseFromUrlError> { + let label_present = query.contains_key(label_key); + let label = parse_optional_string(query.get(label_key)); + let off = parse_bool(query.get(off_key), false)?; + + if off && label_present { + return Err(ActionParseFromUrlError::ParseFailed(format!( + "microphone deep link cannot combine '{off_key}=true' with '{label_key}'" + ))); + } + + if off { + return Ok((None, true)); + } + + if label_present { + return Ok((label, true)); + } + + Ok((None, false)) +} + impl TryFrom<&Url> for DeepLinkAction { type Error = ActionParseFromUrlError; @@ -88,14 +227,81 @@ impl TryFrom<&Url> for DeepLinkAction { .map_err(|_| ActionParseFromUrlError::Invalid); } + if let Some((domain, action)) = path_action(url) { + let query = query_map(url); + + return match (domain.as_str(), action.as_str()) { + ("record", "start") => { + let capture_type = parse_optional_string(query.get("capture_type")) + .ok_or_else(|| { + ActionParseFromUrlError::ParseFailed( + "missing required query parameter 'capture_type'".to_string(), + ) + })? + .to_ascii_lowercase(); + let target = parse_optional_string(query.get("target")).ok_or_else(|| { + ActionParseFromUrlError::ParseFailed( + "missing required query parameter 'target'".to_string(), + ) + })?; + let capture_mode = match capture_type.as_str() { + "screen" => CaptureMode::Screen(target), + "window" => CaptureMode::Window(target), + _ => { + return Err(ActionParseFromUrlError::ParseFailed( + "capture_type must be 'screen' or 'window'".to_string(), + )); + } + }; + let apply_camera = query.contains_key("device_id") + || query.contains_key("model_id") + || query.contains_key("off"); + let (mic_label, apply_mic) = + parse_microphone_from_query(&query, "mic_label", "mic_off")?; + + Ok(Self::StartRecordingPath { + capture_mode, + camera: parse_camera_from_query(&query)?, + apply_camera, + mic_label, + apply_mic, + capture_system_audio: parse_bool( + query.get("capture_system_audio"), + false, + )?, + mode: parse_mode(query.get("mode"))?, + }) + } + ("record", "stop") => Ok(Self::StopRecording), + ("record", "pause") => Ok(Self::PauseRecording), + ("record", "resume") => Ok(Self::ResumeRecording), + ("record", "toggle-pause") => Ok(Self::TogglePauseRecording), + ("record", "restart") => Ok(Self::RestartRecording), + ("device", "microphone") => { + let (mic_label, _) = parse_microphone_from_query(&query, "label", "off")?; + Ok(Self::SwitchMicrophone { mic_label }) + } + ("device", "camera") => Ok(Self::SwitchCamera { + camera: parse_camera_from_query(&query)?, + }), + ("settings", "open") => Ok(Self::OpenSettings { + page: parse_optional_string(query.get("page")), + }), + _ => Err(ActionParseFromUrlError::NotAction), + }; + } + + if url.scheme() != "cap-desktop" { + return Err(ActionParseFromUrlError::NotAction); + } + match url.domain() { - Some(v) if v != "action" => Err(ActionParseFromUrlError::NotAction), - _ => Err(ActionParseFromUrlError::Invalid), + Some("action") => Ok(()), + Some(_) => Err(ActionParseFromUrlError::NotAction), + None => Err(ActionParseFromUrlError::Invalid), }?; - let params = url - .query_pairs() - .collect::>(); + let params = url.query_pairs().collect::>(); let json_value = params .get("value") .ok_or(ActionParseFromUrlError::Invalid)?; @@ -123,13 +329,55 @@ impl DeepLinkAction { let capture_target: ScreenCaptureTarget = match capture_mode { CaptureMode::Screen(name) => cap_recording::screen_capture::list_displays() .into_iter() - .find(|(s, _)| s.name == name) - .map(|(s, _)| ScreenCaptureTarget::Display { id: s.id }) + .find(|(screen, _)| screen.name == name) + .map(|(screen, _)| ScreenCaptureTarget::Display { id: screen.id }) .ok_or(format!("No screen with name \"{}\"", &name))?, CaptureMode::Window(name) => cap_recording::screen_capture::list_windows() .into_iter() - .find(|(w, _)| w.name == name) - .map(|(w, _)| ScreenCaptureTarget::Window { id: w.id }) + .find(|(window, _)| window.name == name) + .map(|(window, _)| ScreenCaptureTarget::Window { id: window.id }) + .ok_or(format!("No window with name \"{}\"", &name))?, + }; + + let inputs = StartRecordingInputs { + mode, + capture_target, + capture_system_audio, + organization_id: None, + }; + + crate::recording::start_recording(app.clone(), state, inputs) + .await + .map(|_| ()) + } + DeepLinkAction::StartRecordingPath { + capture_mode, + camera, + apply_camera, + mic_label, + apply_mic, + capture_system_audio, + mode, + } => { + let state = app.state::>(); + + if apply_camera { + crate::set_camera_input(app.clone(), state.clone(), camera, None).await?; + } + if apply_mic { + crate::set_mic_input(state.clone(), mic_label).await?; + } + + let capture_target: ScreenCaptureTarget = match capture_mode { + CaptureMode::Screen(name) => cap_recording::screen_capture::list_displays() + .into_iter() + .find(|(screen, _)| screen.name == name) + .map(|(screen, _)| ScreenCaptureTarget::Display { id: screen.id }) + .ok_or(format!("No screen with name \"{}\"", &name))?, + CaptureMode::Window(name) => cap_recording::screen_capture::list_windows() + .into_iter() + .find(|(window, _)| window.name == name) + .map(|(window, _)| ScreenCaptureTarget::Window { id: window.id }) .ok_or(format!("No window with name \"{}\"", &name))?, }; @@ -147,6 +395,26 @@ impl DeepLinkAction { DeepLinkAction::StopRecording => { crate::recording::stop_recording(app.clone(), app.state()).await } + DeepLinkAction::PauseRecording => { + crate::recording::pause_recording(app.clone(), app.state()).await + } + DeepLinkAction::ResumeRecording => { + crate::recording::resume_recording(app.clone(), app.state()).await + } + DeepLinkAction::TogglePauseRecording => { + crate::recording::toggle_pause_recording(app.clone(), app.state()).await + } + DeepLinkAction::RestartRecording => { + crate::recording::restart_recording(app.clone(), app.state()) + .await + .map(|_| ()) + } + DeepLinkAction::SwitchMicrophone { mic_label } => { + crate::set_mic_input(app.state(), mic_label).await + } + DeepLinkAction::SwitchCamera { camera } => { + crate::set_camera_input(app.clone(), app.state::>(), camera, None).await + } DeepLinkAction::OpenEditor { project_path } => { crate::open_project_from_path(Path::new(&project_path), app.clone()) } @@ -156,3 +424,94 @@ impl DeepLinkAction { } } } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn parses_start_recording_path_deeplink() { + let url = Url::parse( + "cap-desktop://record/start?mode=studio&capture_type=screen&target=Built-in+Display&capture_system_audio=true&mic_label=MacBook+Mic", + ) + .unwrap(); + + let action = DeepLinkAction::try_from(&url).unwrap(); + + match action { + DeepLinkAction::StartRecordingPath { + capture_mode, + mic_label, + apply_camera, + apply_mic, + capture_system_audio, + mode, + .. + } => { + assert!(matches!(mode, RecordingMode::Studio)); + assert!(capture_system_audio); + assert_eq!(mic_label, Some("MacBook Mic".to_string())); + assert!(apply_mic); + assert!(!apply_camera); + assert!(matches!(capture_mode, CaptureMode::Screen(name) if name == "Built-in Display")); + } + _ => panic!("expected StartRecordingPath action"), + } + } + + #[test] + fn parses_switch_camera_device_id() { + let url = Url::parse("cap-desktop://device/camera?device_id=abc").unwrap(); + let action = DeepLinkAction::try_from(&url).unwrap(); + + assert!(matches!( + action, + DeepLinkAction::SwitchCamera { + camera: Some(DeviceOrModelID::DeviceID(id)) + } if id == "abc" + )); + } + + #[test] + fn rejects_camera_with_both_device_and_model_id() { + let url = Url::parse("cap-desktop://device/camera?device_id=abc&model_id=def").unwrap(); + let action = DeepLinkAction::try_from(&url); + + assert!(matches!(action, Err(ActionParseFromUrlError::ParseFailed(_)))); + } + + #[test] + fn rejects_camera_off_with_device_id() { + let url = Url::parse("cap-desktop://device/camera?off=true&device_id=abc").unwrap(); + let action = DeepLinkAction::try_from(&url); + + assert!(matches!(action, Err(ActionParseFromUrlError::ParseFailed(_)))); + } + + #[test] + fn parses_switch_microphone_off() { + let url = Url::parse("cap-desktop://device/microphone?off=true").unwrap(); + let action = DeepLinkAction::try_from(&url).unwrap(); + + assert!(matches!( + action, + DeepLinkAction::SwitchMicrophone { mic_label: None } + )); + } + + #[test] + fn keeps_legacy_action_json_deeplink() { + let url = Url::parse("cap-desktop://action?value=%22stop_recording%22").unwrap(); + let action = DeepLinkAction::try_from(&url).unwrap(); + + assert!(matches!(action, DeepLinkAction::StopRecording)); + } + + #[test] + fn rejects_wrong_scheme() { + let url = Url::parse("cap://record/stop").unwrap(); + let action = DeepLinkAction::try_from(&url); + + assert!(matches!(action, Err(ActionParseFromUrlError::NotAction))); + } +} diff --git a/apps/raycast/README.md b/apps/raycast/README.md new file mode 100644 index 0000000000..0488f14cb2 --- /dev/null +++ b/apps/raycast/README.md @@ -0,0 +1,19 @@ +# Cap Raycast Extension + +This extension controls Cap with `cap-desktop://` deeplinks. + +Commands: +- Start recording +- Stop recording +- Pause recording +- Resume recording +- Toggle pause recording +- Restart recording +- Switch microphone +- Switch camera +- Open settings + +Notes: +- Target names and device identifiers must match what Cap expects. +- The extension never uses `cap://`; it always sends `cap-desktop://` deeplinks. +- Camera switching supports `device_id`, `model_id`, or `off=true`. diff --git a/apps/raycast/demo/cap-raycast-demo.mp4 b/apps/raycast/demo/cap-raycast-demo.mp4 new file mode 100644 index 0000000000..7b07e919bb Binary files /dev/null and b/apps/raycast/demo/cap-raycast-demo.mp4 differ diff --git a/apps/raycast/icon.png b/apps/raycast/icon.png new file mode 100644 index 0000000000..b1ac1ef7d8 Binary files /dev/null and b/apps/raycast/icon.png differ diff --git a/apps/raycast/package.json b/apps/raycast/package.json new file mode 100644 index 0000000000..0090f9c721 --- /dev/null +++ b/apps/raycast/package.json @@ -0,0 +1,89 @@ +{ + "name": "@cap/raycast", + "version": "0.0.1", + "private": true, + "type": "module", + "scripts": { + "build": "ray build", + "lint": "ray lint", + "dev": "ray develop", + "typecheck": "tsc --noEmit" + }, + "raycast": { + "schemaVersion": 1, + "title": "Cap Recorder", + "description": "Control Cap through cap-desktop deeplinks", + "icon": "icon.png", + "author": "Cap", + "categories": [ + "Productivity" + ], + "commands": [ + { + "name": "start-recording", + "title": "Start Cap Recording", + "description": "Start a Cap recording via deeplink", + "mode": "view" + }, + { + "name": "stop-recording", + "title": "Stop Cap Recording", + "description": "Stop the current Cap recording", + "mode": "no-view" + }, + { + "name": "pause-recording", + "title": "Pause Cap Recording", + "description": "Pause the current Cap recording", + "mode": "no-view" + }, + { + "name": "resume-recording", + "title": "Resume Cap Recording", + "description": "Resume the current Cap recording", + "mode": "no-view" + }, + { + "name": "toggle-pause-recording", + "title": "Toggle Pause Cap Recording", + "description": "Toggle pause for the current Cap recording", + "mode": "no-view" + }, + { + "name": "restart-recording", + "title": "Restart Cap Recording", + "description": "Restart the current Cap recording", + "mode": "no-view" + }, + { + "name": "switch-microphone", + "title": "Switch Cap Microphone", + "description": "Switch the active microphone in Cap", + "mode": "view" + }, + { + "name": "switch-camera", + "title": "Switch Cap Camera", + "description": "Switch the active camera in Cap", + "mode": "view" + }, + { + "name": "open-settings", + "title": "Open Cap Settings", + "description": "Open Cap settings via deeplink", + "mode": "view" + } + ] + }, + "dependencies": { + "@raycast/api": "^1.95.0", + "react": "19.0.0" + }, + "devDependencies": { + "@raycast/eslint-config": "^2.0.2", + "@types/node": "22.13.10", + "@types/react": "19.0.10", + "eslint": "^8.57.0", + "typescript": "^5.8.3" + } +} diff --git a/apps/raycast/src/deeplink.ts b/apps/raycast/src/deeplink.ts new file mode 100644 index 0000000000..b16e052d4f --- /dev/null +++ b/apps/raycast/src/deeplink.ts @@ -0,0 +1,53 @@ +import { execFile } from "node:child_process"; +import { closeMainWindow, showHUD, showToast, Toast } from "@raycast/api"; + +function openUrl(url: string): Promise { + return new Promise((resolve, reject) => { + execFile("open", [url], (error) => { + if (error) { + reject(error); + return; + } + resolve(); + }); + }); +} + +export function buildCapUrl( + path: string, + params?: Record, +) { + const normalizedPath = path.replace(/^\/+/, ""); + const url = new URL(`cap-desktop://${normalizedPath}`); + + if (params) { + for (const [key, value] of Object.entries(params)) { + const normalizedValue = value?.trim(); + if (normalizedValue) { + url.searchParams.set(key, normalizedValue); + } + } + } + + return url.toString(); +} + +export async function sendCapDeepLink( + path: string, + params?: Record, +) { + const url = buildCapUrl(path, params); + + try { + await openUrl(url); + await closeMainWindow(); + await showHUD("Sent to Cap"); + } catch (error) { + await showToast({ + style: Toast.Style.Failure, + title: "Failed to open Cap deeplink", + message: error instanceof Error ? error.message : String(error), + }); + throw error; + } +} diff --git a/apps/raycast/src/form.ts b/apps/raycast/src/form.ts new file mode 100644 index 0000000000..91cbc67cb1 --- /dev/null +++ b/apps/raycast/src/form.ts @@ -0,0 +1,13 @@ +export type FormValues = Record; + +export function getString(values: FormValues, id: string) { + const value = values[id]; + return typeof value === "string" ? value : ""; +} + +export function getStringArray(values: FormValues, id: string) { + const value = values[id]; + return Array.isArray(value) + ? value.filter((item): item is string => typeof item === "string") + : []; +} diff --git a/apps/raycast/src/open-settings.tsx b/apps/raycast/src/open-settings.tsx new file mode 100644 index 0000000000..26bb21790a --- /dev/null +++ b/apps/raycast/src/open-settings.tsx @@ -0,0 +1,30 @@ +import { Action, ActionPanel, Form } from "@raycast/api"; +import { useId } from "react"; +import { sendCapDeepLink } from "./deeplink"; +import { type FormValues, getString } from "./form"; + +export default function Command() { + const pageId = useId(); + + async function onSubmit(values: FormValues) { + await sendCapDeepLink("settings/open", { + page: getString(values, pageId), + }); + } + + return ( +
+ + + } + > + + + ); +} diff --git a/apps/raycast/src/pause-recording.ts b/apps/raycast/src/pause-recording.ts new file mode 100644 index 0000000000..84548d7d30 --- /dev/null +++ b/apps/raycast/src/pause-recording.ts @@ -0,0 +1,5 @@ +import { sendCapDeepLink } from "./deeplink"; + +export default async function Command() { + await sendCapDeepLink("record/pause"); +} diff --git a/apps/raycast/src/restart-recording.ts b/apps/raycast/src/restart-recording.ts new file mode 100644 index 0000000000..baabd58d31 --- /dev/null +++ b/apps/raycast/src/restart-recording.ts @@ -0,0 +1,5 @@ +import { sendCapDeepLink } from "./deeplink"; + +export default async function Command() { + await sendCapDeepLink("record/restart"); +} diff --git a/apps/raycast/src/resume-recording.ts b/apps/raycast/src/resume-recording.ts new file mode 100644 index 0000000000..e944c4618d --- /dev/null +++ b/apps/raycast/src/resume-recording.ts @@ -0,0 +1,5 @@ +import { sendCapDeepLink } from "./deeplink"; + +export default async function Command() { + await sendCapDeepLink("record/resume"); +} diff --git a/apps/raycast/src/start-recording.tsx b/apps/raycast/src/start-recording.tsx new file mode 100644 index 0000000000..90a9b74e7e --- /dev/null +++ b/apps/raycast/src/start-recording.tsx @@ -0,0 +1,136 @@ +import { Action, ActionPanel, Form, showToast, Toast } from "@raycast/api"; +import { useId, useState } from "react"; +import { sendCapDeepLink } from "./deeplink"; +import { type FormValues, getString, getStringArray } from "./form"; + +export default function Command() { + const [cameraSource, setCameraSource] = useState("keep"); + const modeId = useId(); + const captureTypeId = useId(); + const targetId = useId(); + const captureSystemAudioId = useId(); + const micLabelId = useId(); + const cameraSourceId = useId(); + const cameraDeviceId = useId(); + const cameraModelId = useId(); + + async function onSubmit(values: FormValues) { + const target = getString(values, targetId).trim(); + + if (!target) { + await showToast({ + style: Toast.Style.Failure, + title: "Target is required", + message: "Use the exact screen or window name shown in Cap.", + }); + return; + } + + const selectedCameraSource = getString(values, cameraSourceId); + const params: Record = { + mode: getString(values, modeId), + capture_type: getString(values, captureTypeId), + target, + capture_system_audio: getStringArray( + values, + captureSystemAudioId, + ).includes("enabled") + ? "true" + : "false", + mic_label: getString(values, micLabelId), + }; + + if (selectedCameraSource === "device_id") { + const deviceId = getString(values, cameraDeviceId).trim(); + if (!deviceId) { + await showToast({ + style: Toast.Style.Failure, + title: "Camera device ID is required", + }); + return; + } + params.device_id = deviceId; + } + + if (selectedCameraSource === "model_id") { + const modelId = getString(values, cameraModelId).trim(); + if (!modelId) { + await showToast({ + style: Toast.Style.Failure, + title: "Camera model ID is required", + message: "Use the VID:PID format expected by Cap.", + }); + return; + } + params.model_id = modelId; + } + + if (selectedCameraSource === "off") { + params.off = "true"; + } + + await sendCapDeepLink("record/start", params); + } + + return ( +
+ + + } + > + + + + + + + + + + + + + + + + + + + + {cameraSource === "device_id" ? ( + + ) : null} + {cameraSource === "model_id" ? ( + + ) : null} + + ); +} diff --git a/apps/raycast/src/stop-recording.ts b/apps/raycast/src/stop-recording.ts new file mode 100644 index 0000000000..d2ccf1b013 --- /dev/null +++ b/apps/raycast/src/stop-recording.ts @@ -0,0 +1,5 @@ +import { sendCapDeepLink } from "./deeplink"; + +export default async function Command() { + await sendCapDeepLink("record/stop"); +} diff --git a/apps/raycast/src/switch-camera.tsx b/apps/raycast/src/switch-camera.tsx new file mode 100644 index 0000000000..0f93dc4c2f --- /dev/null +++ b/apps/raycast/src/switch-camera.tsx @@ -0,0 +1,83 @@ +import { Action, ActionPanel, Form, showToast, Toast } from "@raycast/api"; +import { useId, useState } from "react"; +import { sendCapDeepLink } from "./deeplink"; +import { type FormValues, getString } from "./form"; + +export default function Command() { + const [cameraSource, setCameraSource] = useState("off"); + const cameraSourceId = useId(); + const cameraDeviceId = useId(); + const cameraModelId = useId(); + + async function onSubmit(values: FormValues) { + const selectedCameraSource = getString(values, cameraSourceId); + const params: Record = {}; + + if (selectedCameraSource === "device_id") { + const deviceId = getString(values, cameraDeviceId).trim(); + if (!deviceId) { + await showToast({ + style: Toast.Style.Failure, + title: "Camera device ID is required", + }); + return; + } + params.device_id = deviceId; + } + + if (selectedCameraSource === "model_id") { + const modelId = getString(values, cameraModelId).trim(); + if (!modelId) { + await showToast({ + style: Toast.Style.Failure, + title: "Camera model ID is required", + message: "Use the VID:PID format expected by Cap.", + }); + return; + } + params.model_id = modelId; + } + + if (selectedCameraSource === "off") { + params.off = "true"; + } + + await sendCapDeepLink("device/camera", params); + } + + return ( +
+ + + } + > + + + + + + {cameraSource === "device_id" ? ( + + ) : null} + {cameraSource === "model_id" ? ( + + ) : null} + + ); +} diff --git a/apps/raycast/src/switch-microphone.tsx b/apps/raycast/src/switch-microphone.tsx new file mode 100644 index 0000000000..6f82cdad2d --- /dev/null +++ b/apps/raycast/src/switch-microphone.tsx @@ -0,0 +1,33 @@ +import { Action, ActionPanel, Form } from "@raycast/api"; +import { useId } from "react"; +import { sendCapDeepLink } from "./deeplink"; +import { type FormValues, getString } from "./form"; + +export default function Command() { + const labelId = useId(); + + async function onSubmit(values: FormValues) { + const label = getString(values, labelId).trim(); + await sendCapDeepLink( + "device/microphone", + label ? { label } : { off: "true" }, + ); + } + + return ( +
+ + + } + > + + + + ); +} diff --git a/apps/raycast/src/toggle-pause-recording.ts b/apps/raycast/src/toggle-pause-recording.ts new file mode 100644 index 0000000000..6ad20f3a31 --- /dev/null +++ b/apps/raycast/src/toggle-pause-recording.ts @@ -0,0 +1,5 @@ +import { sendCapDeepLink } from "./deeplink"; + +export default async function Command() { + await sendCapDeepLink("record/toggle-pause"); +} diff --git a/apps/raycast/tsconfig.json b/apps/raycast/tsconfig.json new file mode 100644 index 0000000000..5203fd5a41 --- /dev/null +++ b/apps/raycast/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "ESNext", + "moduleResolution": "Bundler", + "jsx": "react-jsx", + "strict": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "skipLibCheck": true, + "resolveJsonModule": true, + "types": ["node", "react"] + }, + "include": ["src/**/*"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fb43a78d38..dc9c997b1a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -115,7 +115,7 @@ importers: version: 0.14.10(solid-js@1.9.6) '@solidjs/start': specifier: ^1.1.3 - version: 1.1.3(@testing-library/jest-dom@6.5.0)(@types/node@22.15.17)(jiti@2.6.1)(solid-js@1.9.6)(terser@5.44.0)(vinxi@0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.13)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1))(vite@6.3.5(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1))(yaml@2.8.1) + version: 1.1.3(@testing-library/jest-dom@6.5.0)(@types/node@22.15.17)(jiti@2.6.1)(solid-js@1.9.6)(terser@5.44.0)(vinxi@0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.15)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1))(vite@6.3.5(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1))(yaml@2.8.1) '@tanstack/solid-query': specifier: ^5.51.21 version: 5.75.4(solid-js@1.9.6) @@ -205,7 +205,7 @@ importers: version: 9.0.1 vinxi: specifier: ^0.5.6 - version: 0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.13)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1) + version: 0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.15)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1) webcodecs: specifier: ^0.1.0 version: 0.1.0 @@ -312,6 +312,31 @@ importers: specifier: latest version: 1.3.11 + apps/raycast: + dependencies: + '@raycast/api': + specifier: ^1.95.0 + version: 1.104.12(@types/node@22.13.10)(@types/react@19.0.10) + react: + specifier: 19.0.0 + version: 19.0.0 + devDependencies: + '@raycast/eslint-config': + specifier: ^2.0.2 + version: 2.1.1(eslint@8.57.1)(prettier@3.7.4)(typescript@5.8.3) + '@types/node': + specifier: 22.13.10 + version: 22.13.10 + '@types/react': + specifier: 19.0.10 + version: 19.0.10 + eslint: + specifier: ^8.57.0 + version: 8.57.1 + typescript: + specifier: ^5.8.3 + version: 5.8.3 + apps/storybook: dependencies: '@cap/ui-solid': @@ -356,7 +381,7 @@ importers: version: 1.0.0-beta.7(@storybook/test@8.6.12(storybook@8.6.12(prettier@3.7.4)))(solid-js@1.9.6)(storybook@8.6.12(prettier@3.7.4)) storybook-solidjs-vite: specifier: ^1.0.0-beta.2 - version: 1.0.0-beta.7(@storybook/test@8.6.12(storybook@8.6.12(prettier@3.7.4)))(esbuild@0.25.5)(rollup@4.40.2)(solid-js@1.9.6)(storybook@8.6.12(prettier@3.7.4))(vite-plugin-solid@2.11.6(@testing-library/jest-dom@6.5.0)(solid-js@1.9.6)(vite@6.3.5(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1)))(vite@6.3.5(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.25.5)) + version: 1.0.0-beta.7(@storybook/test@8.6.12(storybook@8.6.12(prettier@3.7.4)))(esbuild@0.25.12)(rollup@4.40.2)(solid-js@1.9.6)(storybook@8.6.12(prettier@3.7.4))(vite-plugin-solid@2.11.6(@testing-library/jest-dom@6.5.0)(solid-js@1.9.6)(vite@6.3.5(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1)))(vite@6.3.5(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.25.12)) typescript: specifier: ^5.8.3 version: 5.8.3 @@ -665,7 +690,7 @@ importers: version: 4.24.11(next@16.2.1(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(nodemailer@6.10.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) next-mdx-remote: specifier: ^6.0.0 - version: 6.0.0(@types/react@19.2.14)(acorn@8.15.0)(react@19.2.4) + version: 6.0.0(@types/react@19.2.14)(acorn@8.16.0)(react@19.2.4) posthog-js: specifier: ^1.215.3 version: 1.240.0 @@ -807,7 +832,7 @@ importers: version: 9.30.1(jiti@2.6.1) eslint-config-next: specifier: 16.2.1 - version: 16.2.1(@typescript-eslint/parser@8.57.2(eslint@9.30.1(jiti@2.6.1))(typescript@5.8.3))(eslint@9.30.1(jiti@2.6.1))(typescript@5.8.3) + version: 16.2.1(eslint@9.30.1(jiti@2.6.1))(typescript@5.8.3) postcss: specifier: ^8.4.23 version: 8.5.3 @@ -2330,8 +2355,8 @@ packages: '@emnapi/core@1.5.0': resolution: {integrity: sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==} - '@emnapi/core@1.9.1': - resolution: {integrity: sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==} + '@emnapi/core@1.9.2': + resolution: {integrity: sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==} '@emnapi/runtime@1.4.3': resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} @@ -2342,14 +2367,14 @@ packages: '@emnapi/runtime@1.7.1': resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} - '@emnapi/runtime@1.9.1': - resolution: {integrity: sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==} + '@emnapi/runtime@1.9.2': + resolution: {integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==} '@emnapi/wasi-threads@1.1.0': resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} - '@emnapi/wasi-threads@1.2.0': - resolution: {integrity: sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==} + '@emnapi/wasi-threads@1.2.1': + resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} '@esbuild-kit/core-utils@3.3.2': resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} @@ -3589,6 +3614,10 @@ packages: resolution: {integrity: sha512-zXhuECFlyep42KZUhWjfvsmXGX39W8K8LFb8AWXM9gSV9dQB+MrJGLKvW6Zw0Ggnbpw0VHTtrhFXYe3Gym18jg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/js@9.39.4': + resolution: {integrity: sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==} + 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} @@ -3967,6 +3996,140 @@ packages: cpu: [x64] os: [win32] + '@inquirer/ansi@1.0.2': + resolution: {integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==} + engines: {node: '>=18'} + + '@inquirer/checkbox@4.3.2': + resolution: {integrity: sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/confirm@5.1.21': + resolution: {integrity: sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/core@10.3.2': + resolution: {integrity: sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/editor@4.2.23': + resolution: {integrity: sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/expand@4.0.23': + resolution: {integrity: sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/external-editor@1.0.3': + resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/figures@1.0.15': + resolution: {integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==} + engines: {node: '>=18'} + + '@inquirer/input@4.3.1': + resolution: {integrity: sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/number@3.0.23': + resolution: {integrity: sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/password@4.0.23': + resolution: {integrity: sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/prompts@7.10.1': + resolution: {integrity: sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/rawlist@4.1.11': + resolution: {integrity: sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/search@3.2.2': + resolution: {integrity: sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/select@4.4.2': + resolution: {integrity: sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/type@3.0.10': + resolution: {integrity: sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + '@internationalized/date@3.8.0': resolution: {integrity: sha512-J51AJ0fEL68hE4CwGPa6E0PO6JDaVLd8aln48xFCSy7CZkZc96dGEGmLs2OEEbBxcsVZtfrqkXJwI2/MSG8yKw==} @@ -3976,14 +4139,6 @@ packages: '@ioredis/commands@1.2.0': resolution: {integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==} - '@isaacs/balanced-match@4.0.1': - resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} - engines: {node: 20 || >=22} - - '@isaacs/brace-expansion@5.0.0': - resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} - engines: {node: 20 || >=22} - '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -4255,8 +4410,8 @@ packages: '@napi-rs/wasm-runtime@1.0.6': resolution: {integrity: sha512-DXj75ewm11LIWUk198QSKUTxjyRjsBwk09MuMk5DGK+GDUtyPhhEHOGP/Xwwj3DjQXXkivoBirmOnKrLfc0+9g==} - '@napi-rs/wasm-runtime@1.1.2': - resolution: {integrity: sha512-sNXv5oLJ7ob93xkZ1XnxisYhGYXfaG9f65/ZgYuAu3qt7b3NadcOEhLvx28hv31PgX8SZJRYrAIPQilQmFpLVw==} + '@napi-rs/wasm-runtime@1.1.3': + resolution: {integrity: sha512-xK9sGVbJWYb08+mTJt3/YV24WxvxpXcXtP6B172paPZ+Ts69Re9dAr7lKwJoeIx8OoeuimEiRZ7umkiUVClmmQ==} peerDependencies: '@emnapi/core': ^1.7.1 '@emnapi/runtime': ^1.7.1 @@ -4529,14 +4684,26 @@ packages: engines: {node: ^14.18.0 || >=16.10.0, npm: '>=5.10.0'} hasBin: true + '@oclif/core@4.10.5': + resolution: {integrity: sha512-qcdCF7NrdWPfme6Kr34wwljRCXbCVpL1WVxiNy0Ep6vbWKjxAjFQwuhqkoyL0yjI+KdwtLcOCGn5z2yzdijc8w==} + engines: {node: '>=18.0.0'} + '@oclif/core@4.8.1': resolution: {integrity: sha512-07mq0vKCWNsB85ZHeBMlTAiO0KLFqHyAeRK3bD2K8CI1tX3tiwkWw1lZQZkiw8MUBrhxdROhMkYMY4Q0l7JHqA==} engines: {node: '>=18.0.0'} + '@oclif/plugin-autocomplete@3.2.45': + resolution: {integrity: sha512-ENrUg8rbVCjh40uvi3MC9kGbiUoEf11nyqE59RBzegeeLpRXNo/Zp27L9j1tUmPEqGgfS2/wvHPihNzkpK1FDw==} + engines: {node: '>=18.0.0'} + '@oclif/plugin-help@6.2.37': resolution: {integrity: sha512-5N/X/FzlJaYfpaHwDC0YHzOzKDWa41s9t+4FpCDu4f9OMReds4JeNBaaWk9rlIzdKjh2M6AC5Q18ORfECRkHGA==} engines: {node: '>=18.0.0'} + '@oclif/plugin-not-found@3.2.80': + resolution: {integrity: sha512-yTLjWvR1r/Rd/cO2LxHdMCDoL5sQhBYRUcOMCmxZtWVWhx4rAZ8KVUPDVsb+SvjJDV5ADTDBgt1H52fFx7YWqg==} + engines: {node: '>=18.0.0'} + '@octokit/app@15.1.6': resolution: {integrity: sha512-WELCamoCJo9SN0lf3SWZccf68CF0sBNPQuLYmZ/n87p5qvBJDe9aBtr5dHkh7T9nxWZ608pizwsUbypSzZAiUw==} engines: {node: '>= 18'} @@ -4868,8 +5035,8 @@ packages: resolution: {integrity: sha512-JD6DerIKdJGmRp4jQyX5FlrQjA4tjOw1cvfsPAZXfOOEErMUHjPcPSICS+6WnM0nB0efSFARh0KAZss+bvExOA==} engines: {node: '>=14'} - '@oxc-project/types@0.123.0': - resolution: {integrity: sha512-YtECP/y8Mj1lSHiUWGSRzy/C6teUKlS87dEfuVKT09LgQbUsBW1rNg+MiJ4buGu3yuADV60gbIvo9/HplA56Ew==} + '@oxc-project/types@0.124.0': + resolution: {integrity: sha512-VBFWMTBvHxS11Z5Lvlr3IWgrwhMTXV+Md+EQF0Xf60+wAdsGFTBx7X7K/hP4pi8N7dcm1RvcHwDxZ16Qx8keUg==} '@oxc-project/types@0.94.0': resolution: {integrity: sha512-+UgQT/4o59cZfH6Cp7G0hwmqEQ0wE+AdIwhikdwnhWI9Dp8CgSY081+Q3O67/wq3VJu8mgUEB93J9EHHn70fOw==} @@ -5653,6 +5820,34 @@ packages: '@radix-ui/rect@1.1.1': resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} + '@raycast/api@1.104.12': + resolution: {integrity: sha512-DdrtoksnzLw4q60BgFr/H+PIvIObOfJrW15duTFH7QXVx/0Vxzw9fY7wo+H2gQ2JDDAh9sEMCpc5akP3UxKjTw==} + engines: {node: '>=22.14.0'} + hasBin: true + peerDependencies: + '@types/node': 22.13.10 + '@types/react': 19.0.10 + react-devtools: 6.1.1 + peerDependenciesMeta: + '@types/node': + optional: true + '@types/react': + optional: true + react-devtools: + optional: true + + '@raycast/eslint-config@2.1.1': + resolution: {integrity: sha512-W0kxF+FJ+BYQn0EKIV739j2ZrHEtjo/LclsoZgUWg3t364Dq75XKcjqYFYx+59/DBaamY0amdajlfuDAf6veAg==} + peerDependencies: + eslint: '>=8.23.0' + prettier: '>=2' + typescript: '>=4' + + '@raycast/eslint-plugin@2.1.1': + resolution: {integrity: sha512-r2gs8uIlNp6I2mLOyN/kReGlvigzEeuyQPl4yw7nwLy8Zxjfjhg8txMViaBux8juBWBxbSWq/IfW6ZA50oeOHQ==} + peerDependencies: + eslint: '>=8.23.0' + '@react-email/body@0.0.11': resolution: {integrity: sha512-ZSD2SxVSgUjHGrB0Wi+4tu3MEpB4fYSbezsFNEJk2xCWDBkFiOeEsjTmR5dvi+CxTK691hQTQlHv0XWuP7ENTg==} peerDependencies: @@ -5819,8 +6014,8 @@ packages: cpu: [arm64] os: [android] - '@rolldown/binding-android-arm64@1.0.0-rc.13': - resolution: {integrity: sha512-5ZiiecKH2DXAVJTNN13gNMUcCDg4Jy8ZjbXEsPnqa248wgOVeYRX0iqXXD5Jz4bI9BFHgKsI2qmyJynstbmr+g==} + '@rolldown/binding-android-arm64@1.0.0-rc.15': + resolution: {integrity: sha512-YYe6aWruPZDtHNpwu7+qAHEMbQ/yRl6atqb/AhznLTnD3UY99Q1jE7ihLSahNWkF4EqRPVC4SiR4O0UkLK02tA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] @@ -5831,8 +6026,8 @@ packages: cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-arm64@1.0.0-rc.13': - resolution: {integrity: sha512-tz/v/8G77seu8zAB3A5sK3UFoOl06zcshEzhUO62sAEtrEuW/H1CcyoupOrD+NbQJytYgA4CppXPzlrmp4JZKA==} + '@rolldown/binding-darwin-arm64@1.0.0-rc.15': + resolution: {integrity: sha512-oArR/ig8wNTPYsXL+Mzhs0oxhxfuHRfG7Ikw7jXsw8mYOtk71W0OkF2VEVh699pdmzjPQsTjlD1JIOoHkLP1Fg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] @@ -5843,8 +6038,8 @@ packages: cpu: [x64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-rc.13': - resolution: {integrity: sha512-8DakphqOz8JrMYWTJmWA+vDJxut6LijZ8Xcdc4flOlAhU7PNVwo2MaWBF9iXjJAPo5rC/IxEFZDhJ3GC7NHvug==} + '@rolldown/binding-darwin-x64@1.0.0-rc.15': + resolution: {integrity: sha512-YzeVqOqjPYvUbJSWJ4EDL8ahbmsIXQpgL3JVipmN+MX0XnXMeWomLN3Fb+nwCmP/jfyqte5I3XRSm7OfQrbyxw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] @@ -5855,8 +6050,8 @@ packages: cpu: [x64] os: [freebsd] - '@rolldown/binding-freebsd-x64@1.0.0-rc.13': - resolution: {integrity: sha512-4wBQFfjDuXYN/SVI8inBF3Aa+isq40rc6VMFbk5jcpolUBTe5cYnMsHZ51nFWsx3PVyyNN3vgoESki0Hmr/4BA==} + '@rolldown/binding-freebsd-x64@1.0.0-rc.15': + resolution: {integrity: sha512-9Erhx956jeQ0nNTyif1+QWAXDRD38ZNjr//bSHrt6wDwB+QkAfl2q6Mn1k6OBPerznjRmbM10lgRb1Pli4xZPw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] @@ -5867,8 +6062,8 @@ packages: cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.13': - resolution: {integrity: sha512-JW/e4yPIXLms+jmnbwwy5LA/LxVwZUWLN8xug+V200wzaVi5TEGIWQlh8o91gWYFxW609euI98OCCemmWGuPrw==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.15': + resolution: {integrity: sha512-cVwk0w8QbZJGTnP/AHQBs5yNwmpgGYStL88t4UIaqcvYJWBfS0s3oqVLZPwsPU6M0zlW4GqjP0Zq5MnAGwFeGA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] @@ -5879,8 +6074,8 @@ packages: cpu: [arm64] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.13': - resolution: {integrity: sha512-ZfKWpXiUymDnavepCaM6KG/uGydJ4l2nBmMxg60Ci4CbeefpqjPWpfaZM7PThOhk2dssqBAcwLc6rAyr0uTdXg==} + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.15': + resolution: {integrity: sha512-eBZ/u8iAK9SoHGanqe/jrPnY0JvBN6iXbVOsbO38mbz+ZJsaobExAm1Iu+rxa4S1l2FjG0qEZn4Rc6X8n+9M+w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] @@ -5891,20 +6086,20 @@ packages: cpu: [arm64] os: [linux] - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.13': - resolution: {integrity: sha512-bmRg3O6Z0gq9yodKKWCIpnlH051sEfdVwt+6m5UDffAQMUUqU0xjnQqqAUm+Gu7ofAAly9DqiQDtKu2nPDEABA==} + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.15': + resolution: {integrity: sha512-ZvRYMGrAklV9PEkgt4LQM6MjQX2P58HPAuecwYObY2DhS2t35R0I810bKi0wmaYORt6m/2Sm+Z+nFgb0WhXNcQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.13': - resolution: {integrity: sha512-8Wtnbw4k7pMYN9B/mOEAsQ8HOiq7AZ31Ig4M9BKn2So4xRaFEhtCSa4ZJaOutOWq50zpgR4N5+L/opnlaCx8wQ==} + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.15': + resolution: {integrity: sha512-VDpgGBzgfg5hLg+uBpCLoFG5kVvEyafmfxGUV0UHLcL5irxAK7PKNeC2MwClgk6ZAiNhmo9FLhRYgvMmedLtnQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.13': - resolution: {integrity: sha512-D/0Nlo8mQuxSMohNJUF2lDXWRsFDsHldfRRgD9bRgktj+EndGPj4DOV37LqDKPYS+osdyhZEH7fTakTAEcW7qg==} + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.15': + resolution: {integrity: sha512-y1uXY3qQWCzcPgRJATPSOUP4tCemh4uBdY7e3EZbVwCJTY3gLJWnQABgeUetvED+bt1FQ01OeZwvhLS2bpNrAQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] @@ -5915,8 +6110,8 @@ packages: cpu: [x64] os: [linux] - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.13': - resolution: {integrity: sha512-eRrPvat2YaVQcwwKi/JzOP6MKf1WRnOCr+VaI3cTWz3ZoLcP/654z90lVCJ4dAuMEpPdke0n+qyAqXDZdIC4rA==} + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.15': + resolution: {integrity: sha512-023bTPBod7J3Y/4fzAN6QtpkSABR0rigtrwaP+qSEabUh5zf6ELr9Nc7GujaROuPY3uwdSIXWrvhn1KxOvurWA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] @@ -5927,8 +6122,8 @@ packages: cpu: [x64] os: [linux] - '@rolldown/binding-linux-x64-musl@1.0.0-rc.13': - resolution: {integrity: sha512-PsdONiFRp8hR8KgVjTWjZ9s7uA3uueWL0t74/cKHfM4dR5zXYv4AjB8BvA+QDToqxAFg4ZkcVEqeu5F7inoz5w==} + '@rolldown/binding-linux-x64-musl@1.0.0-rc.15': + resolution: {integrity: sha512-witB2O0/hU4CgfOOKUoeFgQ4GktPi1eEbAhaLAIpgD6+ZnhcPkUtPsoKKHRzmOoWPZue46IThdSgdo4XneOLYw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] @@ -5939,8 +6134,8 @@ packages: cpu: [arm64] os: [openharmony] - '@rolldown/binding-openharmony-arm64@1.0.0-rc.13': - resolution: {integrity: sha512-hCNXgC5dI3TVOLrPT++PKFNZ+1EtS0mLQwfXXXSUD/+rGlB65gZDwN/IDuxLpQP4x8RYYHqGomlUXzpO8aVI2w==} + '@rolldown/binding-openharmony-arm64@1.0.0-rc.15': + resolution: {integrity: sha512-UCL68NJ0Ud5zRipXZE9dF5PmirzJE4E4BCIOOssEnM7wLDsxjc6Qb0sGDxTNRTP53I6MZpygyCpY8Aa8sPfKPg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] @@ -5950,8 +6145,8 @@ packages: engines: {node: '>=14.0.0'} cpu: [wasm32] - '@rolldown/binding-wasm32-wasi@1.0.0-rc.13': - resolution: {integrity: sha512-viLS5C5et8NFtLWw9Sw3M/w4vvnVkbWkO7wSNh3C+7G1+uCkGpr6PcjNDSFcNtmXY/4trjPBqUfcOL+P3sWy/g==} + '@rolldown/binding-wasm32-wasi@1.0.0-rc.15': + resolution: {integrity: sha512-ApLruZq/ig+nhaE7OJm4lDjayUnOHVUa77zGeqnqZ9pn0ovdVbbNPerVibLXDmWeUZXjIYIT8V3xkT58Rm9u5Q==} engines: {node: '>=14.0.0'} cpu: [wasm32] @@ -5961,8 +6156,8 @@ packages: cpu: [arm64] os: [win32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.13': - resolution: {integrity: sha512-Fqa3Tlt1xL4wzmAYxGNFV36Hb+VfPc9PYU+E25DAnswXv3ODDu/yyWjQDbXMo5AGWkQVjLgQExuVu8I/UaZhPQ==} + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.15': + resolution: {integrity: sha512-KmoUoU7HnN+Si5YWJigfTws1jz1bKBYDQKdbLspz0UaqjjFkddHsqorgiW1mxcAj88lYUE6NC/zJNwT+SloqtA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] @@ -5979,8 +6174,8 @@ packages: cpu: [x64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.13': - resolution: {integrity: sha512-/pLI5kPkGEi44TDlnbio3St/5gUFeN51YWNAk/Gnv6mEQBOahRBh52qVFVBpmrnU01n2yysvBML9Ynu7K4kGAQ==} + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.15': + resolution: {integrity: sha512-3P2A8L+x75qavWLe/Dll3EYBJLQmtkJN8rfh+U/eR3MqMgL/h98PhYI+JFfXuDPgPeCB7iZAKiqii5vqOvnA0g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -5988,8 +6183,8 @@ packages: '@rolldown/pluginutils@1.0.0-beta.42': resolution: {integrity: sha512-N7pQzk9CyE7q0bBN/q0J8s6Db279r5kUZc6d7/wWRe9/zXqC52HQovVyu6iXPIDY4BEzzgbVLhVFXrOuGJ22ZQ==} - '@rolldown/pluginutils@1.0.0-rc.13': - resolution: {integrity: sha512-3ngTAv6F/Py35BsYbeeLeecvhMKdsKm4AoOETVhAA+Qc8nrA2I0kF7oa93mE9qnIurngOSpMnQ0x2nQY2FPviA==} + '@rolldown/pluginutils@1.0.0-rc.15': + resolution: {integrity: sha512-UromN0peaE53IaBRe9W7CjrZgXl90fqGpK+mIZbA3qSTeYqg3pqpROBdIPvOG3F5ereDHNwoHBI2e50n1BDr1g==} '@rollup/plugin-alias@5.1.1': resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==} @@ -7900,6 +8095,9 @@ packages: '@types/node@20.19.21': resolution: {integrity: sha512-CsGG2P3I5y48RPMfprQGfy4JPRZ6csfC3ltBZSRItG3ngggmNY/qs2uZKp4p9VbrpqNNSMzUZNFZKzgOGnd/VA==} + '@types/node@22.13.10': + resolution: {integrity: sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==} + '@types/node@22.15.14': resolution: {integrity: sha512-BL1eyu/XWsFGTtDWOYULQEs4KR0qdtYfCxYAUYRoB7JP7h9ETYLgQTww6kH8Sj2C0pFGgrpM0XKv6/kbIzYJ1g==} @@ -7932,6 +8130,9 @@ packages: resolution: {integrity: sha512-UzjzmgY/VH3Str6DcAGTLMA1mVVhGOyARNTANExrirtp+JgxhaIOVDxq4TIRmpSi4voLv+w4HA9CC5GvhhCA0A==} deprecated: This is a stub types definition. react-tooltip provides its own type definitions, so you do not need this installed. + '@types/react@19.0.10': + resolution: {integrity: sha512-JuRQ9KXLEjaUNjTWpzuR231Z2WpIwczOkBEIvbHNCzQefFIT0L8IqE6NV6ULLyC1SI/i234JnDoMkfg+RjQj2g==} + '@types/react@19.1.13': resolution: {integrity: sha512-hHkbU/eoO3EG5/MZkuFSKmYqPbSVk5byPFa3e7y/8TybHiLMACgI8seVYlicwk7H5K/rI2px9xrQp/C+AUDTiQ==} @@ -8928,6 +9129,7 @@ packages: aws-sdk@2.1692.0: resolution: {integrity: sha512-x511uiJ/57FIsbgUe5csJ13k3uzu25uWQE+XqfBis/sB0SFoiElJWXRkgEAUh0U6n40eT3ay5Ue4oPkRMu1LYw==} engines: {node: '>= 10.0.0'} + deprecated: The AWS SDK for JavaScript (v2) has reached end-of-support, and no longer receives updates. Please migrate your code to use AWS SDK for JavaScript (v3). More info https://a.co/cUPnyil aws-ssl-profiles@1.1.2: resolution: {integrity: sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==} @@ -9263,6 +9465,9 @@ packages: character-reference-invalid@2.0.1: resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + chardet@2.1.1: + resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} + check-error@2.1.1: resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} engines: {node: '>= 16'} @@ -9335,6 +9540,10 @@ packages: resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} @@ -10378,6 +10587,12 @@ packages: typescript: optional: true + eslint-config-prettier@10.1.8: + resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + eslint-config-prettier@8.10.0: resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} hasBin: true @@ -10769,6 +10984,9 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-levenshtein@3.0.0: + resolution: {integrity: sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==} + fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} @@ -10790,6 +11008,10 @@ packages: resolution: {integrity: sha512-Z7Fh2nVQSb2d+poDViM063ix2ZGt9jmY1nWhPfHBOK2Hgnb/OW3P4Et3P/81SEej0J7QbWtJqxO05h8QYfK7LQ==} hasBin: true + fastest-levenshtein@1.0.16: + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} + engines: {node: '>= 4.9.1'} + fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} @@ -11447,10 +11669,6 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} - ignore@7.0.4: - resolution: {integrity: sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==} - engines: {node: '>= 4'} - ignore@7.0.5: resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} engines: {node: '>= 4'} @@ -12511,14 +12729,14 @@ packages: engines: {node: '>=16.13'} hasBin: true - minimatch@10.0.3: - resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} - engines: {node: 20 || >=22} - minimatch@10.2.4: resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==} engines: {node: 18 || 20 || >=22} + minimatch@10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} + engines: {node: 18 || 20 || >=22} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -12664,6 +12882,10 @@ packages: resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} hasBin: true + mute-stream@2.0.0: + resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} + engines: {node: ^18.17.0 || >=20.5.0} + mux-embed@5.9.0: resolution: {integrity: sha512-wmunL3uoPhma/tWy8PrDPZkvJpXvSFBwbD3KkC4PG8Ztjfb1X3hRJwGUAQyRz7z99b/ovLm2UTTitrkvStjH4w==} @@ -13769,6 +13991,10 @@ packages: react: '>=16.14.0' react-dom: '>=16.14.0' + react@19.0.0: + resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==} + engines: {node: '>=0.10.0'} + react@19.1.1: resolution: {integrity: sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==} engines: {node: '>=0.10.0'} @@ -14026,8 +14252,8 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - rolldown@1.0.0-rc.13: - resolution: {integrity: sha512-bvVj8YJmf0rq4pSFmH7laLa6pYrhghv3PRzrCdRAr23g66zOKVJ4wkvFtgohtPLWmthgg8/rkaqRHrpUEh0Zbw==} + rolldown@1.0.0-rc.15: + resolution: {integrity: sha512-Ff31guA5zT6WjnGp0SXw76X6hzGRk/OQq2hE+1lcDe+lJdHSgnSX6nK3erbONHyCbpSj9a9E+uX/OvytZoWp2g==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -14764,12 +14990,12 @@ packages: tar@6.2.1: resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} engines: {node: '>=10'} - deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exhorbitant rates) by contacting i@izs.me + deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me tar@7.4.3: resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} engines: {node: '>=18'} - deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exhorbitant rates) by contacting i@izs.me + deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me tauri-plugin-context-menu@0.5.0: resolution: {integrity: sha512-CkAjSyxLx26hTXabG5Unbv+GWeH0XYNQB3zTqRxHpp257mWX8I4oASp8YF5T3zxFQEK++ZHqMZHpLrQ3usShRQ==} @@ -15212,6 +15438,9 @@ packages: undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} @@ -15996,6 +16225,10 @@ packages: '@cloudflare/workers-types': optional: true + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -16145,6 +16378,10 @@ packages: resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==} engines: {node: '>=12.20'} + yoctocolors-cjs@2.1.3: + resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} + engines: {node: '>=18'} + yoctocolors@2.1.1: resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} engines: {node: '>=18'} @@ -17910,9 +18147,9 @@ snapshots: tslib: 2.8.1 optional: true - '@emnapi/core@1.9.1': + '@emnapi/core@1.9.2': dependencies: - '@emnapi/wasi-threads': 1.2.0 + '@emnapi/wasi-threads': 1.2.1 tslib: 2.8.1 optional: true @@ -17931,7 +18168,7 @@ snapshots: tslib: 2.8.1 optional: true - '@emnapi/runtime@1.9.1': + '@emnapi/runtime@1.9.2': dependencies: tslib: 2.8.1 optional: true @@ -17941,7 +18178,7 @@ snapshots: tslib: 2.8.1 optional: true - '@emnapi/wasi-threads@1.2.0': + '@emnapi/wasi-threads@1.2.1': dependencies: tslib: 2.8.1 optional: true @@ -18548,14 +18785,14 @@ snapshots: '@esbuild/win32-x64@0.27.4': optional: true - '@eslint-community/eslint-utils@4.7.0(eslint@8.57.1)': + '@eslint-community/eslint-utils@4.7.0(eslint@9.30.1(jiti@2.6.1))': dependencies: - eslint: 8.57.1 + eslint: 9.30.1(jiti@2.6.1) eslint-visitor-keys: 3.4.3 - '@eslint-community/eslint-utils@4.7.0(eslint@9.30.1(jiti@2.6.1))': + '@eslint-community/eslint-utils@4.9.1(eslint@8.57.1)': dependencies: - eslint: 9.30.1(jiti@2.6.1) + eslint: 8.57.1 eslint-visitor-keys: 3.4.3 '@eslint-community/eslint-utils@4.9.1(eslint@9.30.1(jiti@2.6.1))': @@ -18631,6 +18868,8 @@ snapshots: '@eslint/js@9.30.1': {} + '@eslint/js@9.39.4': {} + '@eslint/object-schema@2.1.6': {} '@eslint/plugin-kit@0.3.3': @@ -18939,6 +19178,131 @@ snapshots: '@img/sharp-win32-x64@0.34.5': optional: true + '@inquirer/ansi@1.0.2': {} + + '@inquirer/checkbox@4.3.2(@types/node@22.13.10)': + dependencies: + '@inquirer/ansi': 1.0.2 + '@inquirer/core': 10.3.2(@types/node@22.13.10) + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@22.13.10) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 22.13.10 + + '@inquirer/confirm@5.1.21(@types/node@22.13.10)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@22.13.10) + '@inquirer/type': 3.0.10(@types/node@22.13.10) + optionalDependencies: + '@types/node': 22.13.10 + + '@inquirer/core@10.3.2(@types/node@22.13.10)': + dependencies: + '@inquirer/ansi': 1.0.2 + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@22.13.10) + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 22.13.10 + + '@inquirer/editor@4.2.23(@types/node@22.13.10)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@22.13.10) + '@inquirer/external-editor': 1.0.3(@types/node@22.13.10) + '@inquirer/type': 3.0.10(@types/node@22.13.10) + optionalDependencies: + '@types/node': 22.13.10 + + '@inquirer/expand@4.0.23(@types/node@22.13.10)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@22.13.10) + '@inquirer/type': 3.0.10(@types/node@22.13.10) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 22.13.10 + + '@inquirer/external-editor@1.0.3(@types/node@22.13.10)': + dependencies: + chardet: 2.1.1 + iconv-lite: 0.7.0 + optionalDependencies: + '@types/node': 22.13.10 + + '@inquirer/figures@1.0.15': {} + + '@inquirer/input@4.3.1(@types/node@22.13.10)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@22.13.10) + '@inquirer/type': 3.0.10(@types/node@22.13.10) + optionalDependencies: + '@types/node': 22.13.10 + + '@inquirer/number@3.0.23(@types/node@22.13.10)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@22.13.10) + '@inquirer/type': 3.0.10(@types/node@22.13.10) + optionalDependencies: + '@types/node': 22.13.10 + + '@inquirer/password@4.0.23(@types/node@22.13.10)': + dependencies: + '@inquirer/ansi': 1.0.2 + '@inquirer/core': 10.3.2(@types/node@22.13.10) + '@inquirer/type': 3.0.10(@types/node@22.13.10) + optionalDependencies: + '@types/node': 22.13.10 + + '@inquirer/prompts@7.10.1(@types/node@22.13.10)': + dependencies: + '@inquirer/checkbox': 4.3.2(@types/node@22.13.10) + '@inquirer/confirm': 5.1.21(@types/node@22.13.10) + '@inquirer/editor': 4.2.23(@types/node@22.13.10) + '@inquirer/expand': 4.0.23(@types/node@22.13.10) + '@inquirer/input': 4.3.1(@types/node@22.13.10) + '@inquirer/number': 3.0.23(@types/node@22.13.10) + '@inquirer/password': 4.0.23(@types/node@22.13.10) + '@inquirer/rawlist': 4.1.11(@types/node@22.13.10) + '@inquirer/search': 3.2.2(@types/node@22.13.10) + '@inquirer/select': 4.4.2(@types/node@22.13.10) + optionalDependencies: + '@types/node': 22.13.10 + + '@inquirer/rawlist@4.1.11(@types/node@22.13.10)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@22.13.10) + '@inquirer/type': 3.0.10(@types/node@22.13.10) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 22.13.10 + + '@inquirer/search@3.2.2(@types/node@22.13.10)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@22.13.10) + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@22.13.10) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 22.13.10 + + '@inquirer/select@4.4.2(@types/node@22.13.10)': + dependencies: + '@inquirer/ansi': 1.0.2 + '@inquirer/core': 10.3.2(@types/node@22.13.10) + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@22.13.10) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 22.13.10 + + '@inquirer/type@3.0.10(@types/node@22.13.10)': + optionalDependencies: + '@types/node': 22.13.10 + '@internationalized/date@3.8.0': dependencies: '@swc/helpers': 0.5.17 @@ -18949,12 +19313,6 @@ snapshots: '@ioredis/commands@1.2.0': {} - '@isaacs/balanced-match@4.0.1': {} - - '@isaacs/brace-expansion@5.0.0': - dependencies: - '@isaacs/balanced-match': 4.0.1 - '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -19086,7 +19444,7 @@ snapshots: '@planetscale/database': 1.19.0 mysql2: 3.15.2 - '@mdx-js/mdx@3.1.0(acorn@8.15.0)': + '@mdx-js/mdx@3.1.0(acorn@8.16.0)': dependencies: '@types/estree': 1.0.8 '@types/estree-jsx': 1.0.5 @@ -19100,7 +19458,7 @@ snapshots: hast-util-to-jsx-runtime: 2.3.6 markdown-extensions: 2.0.0 recma-build-jsx: 1.0.0 - recma-jsx: 1.0.0(acorn@8.15.0) + recma-jsx: 1.0.0(acorn@8.16.0) recma-stringify: 1.0.0 rehype-recma: 1.0.0 remark-mdx: 3.1.0 @@ -19276,8 +19634,8 @@ snapshots: '@napi-rs/wasm-runtime@0.2.9': dependencies: - '@emnapi/core': 1.9.1 - '@emnapi/runtime': 1.9.1 + '@emnapi/core': 1.9.2 + '@emnapi/runtime': 1.9.2 '@tybys/wasm-util': 0.9.0 optional: true @@ -19288,10 +19646,10 @@ snapshots: '@tybys/wasm-util': 0.10.1 optional: true - '@napi-rs/wasm-runtime@1.1.2(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)': + '@napi-rs/wasm-runtime@1.1.3(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': dependencies: - '@emnapi/core': 1.9.1 - '@emnapi/runtime': 1.9.1 + '@emnapi/core': 1.9.2 + '@emnapi/runtime': 1.9.2 '@tybys/wasm-util': 0.10.1 optional: true @@ -19537,7 +19895,7 @@ snapshots: '@npmcli/fs@3.1.1': dependencies: - semver: 7.7.3 + semver: 7.7.4 '@npmcli/git@5.0.8': dependencies: @@ -19571,7 +19929,7 @@ snapshots: json-parse-even-better-errors: 3.0.2 pacote: 18.0.6 proc-log: 4.2.0 - semver: 7.7.3 + semver: 7.7.4 transitivePeerDependencies: - bluebird - supports-color @@ -19588,7 +19946,7 @@ snapshots: json-parse-even-better-errors: 3.0.2 normalize-package-data: 6.0.2 proc-log: 4.2.0 - semver: 7.7.3 + semver: 7.7.4 transitivePeerDependencies: - bluebird @@ -19650,6 +20008,27 @@ snapshots: dependencies: consola: 3.4.2 + '@oclif/core@4.10.5': + dependencies: + ansi-escapes: 4.3.2 + ansis: 3.17.0 + clean-stack: 3.0.1 + cli-spinners: 2.9.2 + debug: 4.4.3(supports-color@8.1.1) + ejs: 3.1.10 + get-package-type: 0.1.0 + indent-string: 4.0.0 + is-wsl: 2.2.0 + lilconfig: 3.1.3 + minimatch: 10.2.5 + semver: 7.7.4 + string-width: 4.2.3 + supports-color: 8.1.1 + tinyglobby: 0.2.15 + widest-line: 3.1.0 + wordwrap: 1.0.0 + wrap-ansi: 7.0.0 + '@oclif/core@4.8.1': dependencies: ansi-escapes: 4.3.2 @@ -19671,9 +20050,27 @@ snapshots: wordwrap: 1.0.0 wrap-ansi: 7.0.0 + '@oclif/plugin-autocomplete@3.2.45': + dependencies: + '@oclif/core': 4.10.5 + ansis: 3.17.0 + debug: 4.4.3(supports-color@8.1.1) + ejs: 3.1.10 + transitivePeerDependencies: + - supports-color + '@oclif/plugin-help@6.2.37': dependencies: - '@oclif/core': 4.8.1 + '@oclif/core': 4.10.5 + + '@oclif/plugin-not-found@3.2.80(@types/node@22.13.10)': + dependencies: + '@inquirer/prompts': 7.10.1(@types/node@22.13.10) + '@oclif/core': 4.10.5 + ansis: 3.17.0 + fast-levenshtein: 3.0.0 + transitivePeerDependencies: + - '@types/node' '@octokit/app@15.1.6': dependencies: @@ -20071,7 +20468,7 @@ snapshots: '@opentelemetry/semantic-conventions@1.37.0': {} - '@oxc-project/types@0.123.0': {} + '@oxc-project/types@0.124.0': {} '@oxc-project/types@0.94.0': {} @@ -20903,6 +21300,41 @@ snapshots: '@radix-ui/rect@1.1.1': {} + '@raycast/api@1.104.12(@types/node@22.13.10)(@types/react@19.0.10)': + dependencies: + '@oclif/core': 4.10.5 + '@oclif/plugin-autocomplete': 3.2.45 + '@oclif/plugin-help': 6.2.37 + '@oclif/plugin-not-found': 3.2.80(@types/node@22.13.10) + esbuild: 0.27.4 + react: 19.0.0 + optionalDependencies: + '@types/node': 22.13.10 + '@types/react': 19.0.10 + transitivePeerDependencies: + - supports-color + + '@raycast/eslint-config@2.1.1(eslint@8.57.1)(prettier@3.7.4)(typescript@5.8.3)': + dependencies: + '@eslint/js': 9.39.4 + '@raycast/eslint-plugin': 2.1.1(eslint@8.57.1)(typescript@5.8.3) + eslint: 8.57.1 + eslint-config-prettier: 10.1.8(eslint@8.57.1) + globals: 16.4.0 + prettier: 3.7.4 + typescript: 5.8.3 + typescript-eslint: 8.57.2(eslint@8.57.1)(typescript@5.8.3) + transitivePeerDependencies: + - supports-color + + '@raycast/eslint-plugin@2.1.1(eslint@8.57.1)(typescript@5.8.3)': + dependencies: + '@typescript-eslint/utils': 8.57.2(eslint@8.57.1)(typescript@5.8.3) + eslint: 8.57.1 + transitivePeerDependencies: + - supports-color + - typescript + '@react-email/body@0.0.11(react@19.1.1)': dependencies: react: 19.1.1 @@ -21162,67 +21594,67 @@ snapshots: '@rolldown/binding-android-arm64@1.0.0-beta.42': optional: true - '@rolldown/binding-android-arm64@1.0.0-rc.13': + '@rolldown/binding-android-arm64@1.0.0-rc.15': optional: true '@rolldown/binding-darwin-arm64@1.0.0-beta.42': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-rc.13': + '@rolldown/binding-darwin-arm64@1.0.0-rc.15': optional: true '@rolldown/binding-darwin-x64@1.0.0-beta.42': optional: true - '@rolldown/binding-darwin-x64@1.0.0-rc.13': + '@rolldown/binding-darwin-x64@1.0.0-rc.15': optional: true '@rolldown/binding-freebsd-x64@1.0.0-beta.42': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-rc.13': + '@rolldown/binding-freebsd-x64@1.0.0-rc.15': optional: true '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.42': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.13': + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.15': optional: true '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.42': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.13': + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.15': optional: true '@rolldown/binding-linux-arm64-musl@1.0.0-beta.42': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.13': + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.15': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.13': + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.15': optional: true - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.13': + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.15': optional: true '@rolldown/binding-linux-x64-gnu@1.0.0-beta.42': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.13': + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.15': optional: true '@rolldown/binding-linux-x64-musl@1.0.0-beta.42': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-rc.13': + '@rolldown/binding-linux-x64-musl@1.0.0-rc.15': optional: true '@rolldown/binding-openharmony-arm64@1.0.0-beta.42': optional: true - '@rolldown/binding-openharmony-arm64@1.0.0-rc.13': + '@rolldown/binding-openharmony-arm64@1.0.0-rc.15': optional: true '@rolldown/binding-wasm32-wasi@1.0.0-beta.42': @@ -21230,17 +21662,17 @@ snapshots: '@napi-rs/wasm-runtime': 1.0.6 optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-rc.13': + '@rolldown/binding-wasm32-wasi@1.0.0-rc.15': dependencies: - '@emnapi/core': 1.9.1 - '@emnapi/runtime': 1.9.1 - '@napi-rs/wasm-runtime': 1.1.2(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) + '@emnapi/core': 1.9.2 + '@emnapi/runtime': 1.9.2 + '@napi-rs/wasm-runtime': 1.1.3(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) optional: true '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.42': optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.13': + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.15': optional: true '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.42': @@ -21249,12 +21681,12 @@ snapshots: '@rolldown/binding-win32-x64-msvc@1.0.0-beta.42': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.13': + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.15': optional: true '@rolldown/pluginutils@1.0.0-beta.42': {} - '@rolldown/pluginutils@1.0.0-rc.13': {} + '@rolldown/pluginutils@1.0.0-rc.15': {} '@rollup/plugin-alias@5.1.1(rollup@4.40.2)': optionalDependencies: @@ -22531,11 +22963,11 @@ snapshots: dependencies: solid-js: 1.9.6 - '@solidjs/start@1.1.3(@testing-library/jest-dom@6.5.0)(@types/node@22.15.17)(jiti@2.6.1)(solid-js@1.9.6)(terser@5.44.0)(vinxi@0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.13)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1))(vite@6.3.5(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1))(yaml@2.8.1)': + '@solidjs/start@1.1.3(@testing-library/jest-dom@6.5.0)(@types/node@22.15.17)(jiti@2.6.1)(solid-js@1.9.6)(terser@5.44.0)(vinxi@0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.15)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1))(vite@6.3.5(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1))(yaml@2.8.1)': dependencies: '@tanstack/server-functions-plugin': 1.119.2(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1) - '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.13)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1)) - '@vinxi/server-components': 0.5.1(vinxi@0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.13)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1)) + '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.15)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1)) + '@vinxi/server-components': 0.5.1(vinxi@0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.15)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1)) defu: 6.1.4 error-stack-parser: 2.1.4 html-to-image: 1.11.13 @@ -22546,7 +22978,7 @@ snapshots: source-map-js: 1.2.1 terracotta: 1.0.6(solid-js@1.9.6) tinyglobby: 0.2.13 - vinxi: 0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.13)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1) + vinxi: 0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.15)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1) vite-plugin-solid: 2.11.6(@testing-library/jest-dom@6.5.0)(solid-js@1.9.6)(vite@6.3.5(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1)) transitivePeerDependencies: - '@testing-library/jest-dom' @@ -22676,9 +23108,9 @@ snapshots: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - '@storybook/builder-vite@10.4.0-alpha.8(esbuild@0.25.5)(rollup@4.40.2)(storybook@8.6.12(prettier@3.7.4))(vite@6.3.5(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.25.5))': + '@storybook/builder-vite@10.4.0-alpha.8(esbuild@0.25.12)(rollup@4.40.2)(storybook@8.6.12(prettier@3.7.4))(vite@6.3.5(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.25.12))': dependencies: - '@storybook/csf-plugin': 10.4.0-alpha.8(esbuild@0.25.5)(rollup@4.40.2)(storybook@8.6.12(prettier@3.7.4))(vite@6.3.5(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.25.5)) + '@storybook/csf-plugin': 10.4.0-alpha.8(esbuild@0.25.12)(rollup@4.40.2)(storybook@8.6.12(prettier@3.7.4))(vite@6.3.5(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.25.12)) storybook: 8.6.12(prettier@3.7.4) ts-dedent: 2.2.0 vite: 6.3.5(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1) @@ -22692,8 +23124,8 @@ snapshots: '@storybook/theming': 8.6.12(storybook@8.6.12(prettier@3.7.4)) better-opn: 3.0.2 browser-assert: 1.2.1 - esbuild: 0.25.5 - esbuild-register: 3.6.0(esbuild@0.25.5) + esbuild: 0.25.12 + esbuild-register: 3.6.0(esbuild@0.25.12) jsdoc-type-pratt-parser: 4.1.0 process: 0.11.10 recast: 0.23.11 @@ -22708,15 +23140,15 @@ snapshots: - supports-color - utf-8-validate - '@storybook/csf-plugin@10.4.0-alpha.8(esbuild@0.25.5)(rollup@4.40.2)(storybook@8.6.12(prettier@3.7.4))(vite@6.3.5(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.25.5))': + '@storybook/csf-plugin@10.4.0-alpha.8(esbuild@0.25.12)(rollup@4.40.2)(storybook@8.6.12(prettier@3.7.4))(vite@6.3.5(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.25.12))': dependencies: storybook: 8.6.12(prettier@3.7.4) unplugin: 2.3.11 optionalDependencies: - esbuild: 0.25.5 + esbuild: 0.25.12 rollup: 4.40.2 vite: 6.3.5(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1) - webpack: 5.101.3(esbuild@0.25.5) + webpack: 5.101.3(esbuild@0.25.12) '@storybook/csf-plugin@8.6.12(storybook@8.6.12(prettier@3.7.4))': dependencies: @@ -23501,7 +23933,7 @@ snapshots: '@types/jsdom@21.1.7': dependencies: - '@types/node': 20.17.43 + '@types/node': 20.19.21 '@types/tough-cookie': 4.0.5 parse5: 7.3.0 @@ -23548,7 +23980,7 @@ snapshots: '@types/node-fetch@2.6.12': dependencies: - '@types/node': 20.17.43 + '@types/node': 20.19.21 form-data: 4.0.2 '@types/node@10.17.60': {} @@ -23567,6 +23999,10 @@ snapshots: dependencies: undici-types: 6.21.0 + '@types/node@22.13.10': + dependencies: + undici-types: 6.20.0 + '@types/node@22.15.14': dependencies: undici-types: 6.21.0 @@ -23601,6 +24037,10 @@ snapshots: - react - react-dom + '@types/react@19.0.10': + dependencies: + csstype: 3.2.3 + '@types/react@19.1.13': dependencies: csstype: 3.2.3 @@ -23673,6 +24113,22 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/eslint-plugin@8.57.2(@typescript-eslint/parser@8.57.2(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.57.2(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.57.2 + '@typescript-eslint/type-utils': 8.57.2(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/utils': 8.57.2(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.57.2 + eslint: 8.57.1 + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.5.0(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/eslint-plugin@8.57.2(@typescript-eslint/parser@8.57.2(eslint@9.30.1(jiti@2.6.1))(typescript@5.8.3))(eslint@9.30.1(jiti@2.6.1))(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.2 @@ -23701,6 +24157,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/parser@8.57.2(eslint@8.57.1)(typescript@5.8.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.57.2 + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.57.2 + debug: 4.4.3(supports-color@8.1.1) + eslint: 8.57.1 + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/parser@8.57.2(eslint@9.30.1(jiti@2.6.1))(typescript@5.8.3)': dependencies: '@typescript-eslint/scope-manager': 8.57.2 @@ -23748,6 +24216,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/type-utils@8.57.2(eslint@8.57.1)(typescript@5.8.3)': + dependencies: + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.8.3) + '@typescript-eslint/utils': 8.57.2(eslint@8.57.1)(typescript@5.8.3) + debug: 4.4.3(supports-color@8.1.1) + eslint: 8.57.1 + ts-api-utils: 2.5.0(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/type-utils@8.57.2(eslint@9.30.1(jiti@2.6.1))(typescript@5.8.3)': dependencies: '@typescript-eslint/types': 8.57.2 @@ -23795,7 +24275,7 @@ snapshots: '@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) + '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1) '@types/json-schema': 7.0.15 '@types/semver': 7.7.0 '@typescript-eslint/scope-manager': 5.62.0 @@ -23808,6 +24288,17 @@ snapshots: - supports-color - typescript + '@typescript-eslint/utils@8.57.2(eslint@8.57.1)(typescript@5.8.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1) + '@typescript-eslint/scope-manager': 8.57.2 + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.8.3) + eslint: 8.57.1 + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/utils@8.57.2(eslint@9.30.1(jiti@2.6.1))(typescript@5.8.3)': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@9.30.1(jiti@2.6.1)) @@ -23922,8 +24413,8 @@ snapshots: dependencies: '@mapbox/node-pre-gyp': 1.0.11(encoding@0.1.13) '@rollup/pluginutils': 5.1.4(rollup@4.40.2) - acorn: 8.15.0 - acorn-import-attributes: 1.9.5(acorn@8.15.0) + acorn: 8.16.0 + acorn-import-attributes: 1.9.5(acorn@8.16.0) async-sema: 3.1.1 bindings: 1.5.0 estree-walker: 2.0.2 @@ -23941,8 +24432,8 @@ snapshots: dependencies: '@mapbox/node-pre-gyp': 2.0.0(encoding@0.1.13) '@rollup/pluginutils': 5.1.4(rollup@4.40.2) - acorn: 8.15.0 - acorn-import-attributes: 1.9.5(acorn@8.15.0) + acorn: 8.16.0 + acorn-import-attributes: 1.9.5(acorn@8.16.0) async-sema: 3.1.1 bindings: 1.5.0 estree-walker: 2.0.2 @@ -24000,7 +24491,7 @@ snapshots: untun: 0.1.3 uqr: 0.1.2 - '@vinxi/plugin-directives@0.5.1(vinxi@0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.13)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1))': + '@vinxi/plugin-directives@0.5.1(vinxi@0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.15)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1))': dependencies: '@babel/parser': 7.27.2 acorn: 8.14.1 @@ -24011,18 +24502,18 @@ snapshots: magicast: 0.2.11 recast: 0.23.11 tslib: 2.8.1 - vinxi: 0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.13)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1) + vinxi: 0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.15)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1) - '@vinxi/server-components@0.5.1(vinxi@0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.13)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1))': + '@vinxi/server-components@0.5.1(vinxi@0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.15)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1))': dependencies: - '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.13)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1)) + '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.15)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1)) acorn: 8.14.1 acorn-loose: 8.5.0 acorn-typescript: 1.4.13(acorn@8.14.1) astring: 1.9.0 magicast: 0.2.11 recast: 0.23.11 - vinxi: 0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.13)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1) + vinxi: 0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.15)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1) '@virtual-grid/core@2.0.1': {} @@ -24675,9 +25166,9 @@ snapshots: mime-types: 3.0.1 negotiator: 1.0.0 - acorn-import-attributes@1.9.5(acorn@8.15.0): + acorn-import-attributes@1.9.5(acorn@8.16.0): dependencies: - acorn: 8.15.0 + acorn: 8.16.0 acorn-import-phases@1.0.4(acorn@8.16.0): dependencies: @@ -24696,9 +25187,13 @@ snapshots: dependencies: acorn: 8.15.0 + acorn-jsx@5.3.2(acorn@8.16.0): + dependencies: + acorn: 8.16.0 + acorn-loose@8.5.0: dependencies: - acorn: 8.15.0 + acorn: 8.16.0 acorn-typescript@1.4.13(acorn@8.14.1): dependencies: @@ -25194,7 +25689,7 @@ snapshots: dependencies: ansi-align: 3.0.1 camelcase: 8.0.0 - chalk: 5.4.1 + chalk: 5.6.2 cli-boxes: 3.0.0 string-width: 7.2.0 type-fest: 4.41.0 @@ -25450,6 +25945,8 @@ snapshots: character-reference-invalid@2.0.1: {} + chardet@2.1.1: {} + check-error@2.1.1: {} chokidar@3.6.0: @@ -25507,6 +26004,8 @@ snapshots: cli-spinners@2.9.2: {} + cli-width@4.1.0: {} + client-only@0.0.1: {} clipboardy@4.0.0: @@ -26409,21 +26908,21 @@ snapshots: esast-util-from-js@2.0.1: dependencies: '@types/estree-jsx': 1.0.5 - acorn: 8.15.0 + acorn: 8.16.0 esast-util-from-estree: 2.0.0 vfile-message: 4.0.2 - esbuild-register@3.6.0(esbuild@0.25.4): + esbuild-register@3.6.0(esbuild@0.25.12): dependencies: debug: 4.4.3(supports-color@8.1.1) - esbuild: 0.25.4 + esbuild: 0.25.12 transitivePeerDependencies: - supports-color - esbuild-register@3.6.0(esbuild@0.25.5): + esbuild-register@3.6.0(esbuild@0.25.4): dependencies: debug: 4.4.3(supports-color@8.1.1) - esbuild: 0.25.5 + esbuild: 0.25.4 transitivePeerDependencies: - supports-color @@ -26682,13 +27181,13 @@ snapshots: - eslint-plugin-import-x - supports-color - eslint-config-next@16.2.1(@typescript-eslint/parser@8.57.2(eslint@9.30.1(jiti@2.6.1))(typescript@5.8.3))(eslint@9.30.1(jiti@2.6.1))(typescript@5.8.3): + eslint-config-next@16.2.1(eslint@9.30.1(jiti@2.6.1))(typescript@5.8.3): dependencies: '@next/eslint-plugin-next': 16.2.1 eslint: 9.30.1(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.30.1(jiti@2.6.1)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.57.2(eslint@9.30.1(jiti@2.6.1))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.30.1(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(eslint@9.30.1(jiti@2.6.1)))(eslint@9.30.1(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(eslint-import-resolver-typescript@3.10.1)(eslint@9.30.1(jiti@2.6.1)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.30.1(jiti@2.6.1)) eslint-plugin-react: 7.37.5(eslint@9.30.1(jiti@2.6.1)) eslint-plugin-react-hooks: 7.0.1(eslint@9.30.1(jiti@2.6.1)) @@ -26702,6 +27201,10 @@ snapshots: - eslint-plugin-import-x - supports-color + eslint-config-prettier@10.1.8(eslint@8.57.1): + dependencies: + eslint: 8.57.1 + eslint-config-prettier@8.10.0(eslint@8.57.1): dependencies: eslint: 8.57.1 @@ -26734,7 +27237,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.30.1(jiti@2.6.1)): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(eslint@9.30.1(jiti@2.6.1)))(eslint@9.30.1(jiti@2.6.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3(supports-color@8.1.1) @@ -26745,7 +27248,7 @@ snapshots: tinyglobby: 0.2.15 unrs-resolver: 1.7.2 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.57.2(eslint@9.30.1(jiti@2.6.1))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.30.1(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(eslint-import-resolver-typescript@3.10.1)(eslint@9.30.1(jiti@2.6.1)) transitivePeerDependencies: - supports-color @@ -26760,14 +27263,13 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.57.2(eslint@9.30.1(jiti@2.6.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.30.1(jiti@2.6.1)): + eslint-module-utils@2.12.1(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(eslint@9.30.1(jiti@2.6.1)))(eslint@9.30.1(jiti@2.6.1)))(eslint@9.30.1(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.57.2(eslint@9.30.1(jiti@2.6.1))(typescript@5.8.3) eslint: 9.30.1(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.30.1(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(eslint@9.30.1(jiti@2.6.1)))(eslint@9.30.1(jiti@2.6.1)) transitivePeerDependencies: - supports-color @@ -26800,7 +27302,7 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.57.2(eslint@9.30.1(jiti@2.6.1))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.30.1(jiti@2.6.1)): + eslint-plugin-import@2.32.0(eslint-import-resolver-typescript@3.10.1)(eslint@9.30.1(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -26811,7 +27313,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.30.1(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.57.2(eslint@9.30.1(jiti@2.6.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.30.1(jiti@2.6.1)) + eslint-module-utils: 2.12.1(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(eslint@9.30.1(jiti@2.6.1)))(eslint@9.30.1(jiti@2.6.1)))(eslint@9.30.1(jiti@2.6.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -26822,8 +27324,6 @@ snapshots: semver: 6.3.1 string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 - optionalDependencies: - '@typescript-eslint/parser': 8.57.2(eslint@9.30.1(jiti@2.6.1))(typescript@5.8.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -27026,8 +27526,8 @@ snapshots: eslint@8.57.1: dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) - '@eslint-community/regexpp': 4.12.1 + '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1) + '@eslint-community/regexpp': 4.12.2 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.57.1 '@humanwhocodes/config-array': 0.13.0 @@ -27037,7 +27537,7 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.1 + debug: 4.4.3(supports-color@8.1.1) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -27125,8 +27625,8 @@ snapshots: espree@9.6.1: dependencies: - acorn: 8.14.1 - acorn-jsx: 5.3.2(acorn@8.14.1) + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) eslint-visitor-keys: 3.4.3 esprima@4.0.1: {} @@ -27375,6 +27875,10 @@ snapshots: fast-levenshtein@2.0.6: {} + fast-levenshtein@3.0.0: + dependencies: + fastest-levenshtein: 1.0.16 + fast-safe-stringify@2.1.1: {} fast-uri@3.0.6: {} @@ -27397,6 +27901,8 @@ snapshots: path-expression-matcher: 1.2.0 strnum: 2.2.2 + fastest-levenshtein@1.0.16: {} + fastq@1.19.1: dependencies: reusify: 1.1.0 @@ -27766,7 +28272,7 @@ snapshots: dependencies: foreground-child: 3.3.1 jackspeak: 4.1.1 - minimatch: 10.0.3 + minimatch: 10.2.4 minipass: 7.1.2 package-json-from-dist: 1.0.1 path-scurry: 2.0.0 @@ -27827,7 +28333,7 @@ snapshots: dependencies: '@sindresorhus/merge-streams': 2.3.0 fast-glob: 3.3.3 - ignore: 7.0.4 + ignore: 7.0.5 path-type: 6.0.0 slash: 5.1.0 unicorn-magic: 0.3.0 @@ -28196,8 +28702,6 @@ snapshots: ignore@5.3.2: {} - ignore@7.0.4: {} - ignore@7.0.5: {} immediate@3.0.6: {} @@ -28211,8 +28715,8 @@ snapshots: import-in-the-middle@1.13.1: dependencies: - acorn: 8.15.0 - acorn-import-attributes: 1.9.5(acorn@8.15.0) + acorn: 8.16.0 + acorn-import-attributes: 1.9.5(acorn@8.16.0) cjs-module-lexer: 1.4.3 module-details-from-path: 1.0.4 @@ -28895,7 +29399,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.7.3 + semver: 7.7.4 make-error@1.3.6: optional: true @@ -29262,8 +29766,8 @@ snapshots: micromark-extension-mdxjs@3.0.0: dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) micromark-extension-mdx-expression: 3.0.1 micromark-extension-mdx-jsx: 3.0.2 micromark-extension-mdx-md: 2.0.0 @@ -29478,11 +29982,11 @@ snapshots: - bufferutil - utf-8-validate - minimatch@10.0.3: + minimatch@10.2.4: dependencies: - '@isaacs/brace-expansion': 5.0.0 + brace-expansion: 5.0.5 - minimatch@10.2.4: + minimatch@10.2.5: dependencies: brace-expansion: 5.0.5 @@ -29551,14 +30055,14 @@ snapshots: mlly@1.7.4: dependencies: - acorn: 8.15.0 + acorn: 8.16.0 pathe: 2.0.3 pkg-types: 1.3.1 ufo: 1.6.1 mlly@1.8.0: dependencies: - acorn: 8.15.0 + acorn: 8.16.0 pathe: 2.0.3 pkg-types: 1.3.1 ufo: 1.6.1 @@ -29627,6 +30131,8 @@ snapshots: mustache@4.2.0: {} + mute-stream@2.0.0: {} + mux-embed@5.9.0: {} mysql2@3.15.2: @@ -29717,10 +30223,10 @@ snapshots: optionalDependencies: nodemailer: 6.10.1 - next-mdx-remote@6.0.0(@types/react@19.2.14)(acorn@8.15.0)(react@19.2.4): + next-mdx-remote@6.0.0(@types/react@19.2.14)(acorn@8.16.0)(react@19.2.4): dependencies: '@babel/code-frame': 7.27.1 - '@mdx-js/mdx': 3.1.0(acorn@8.15.0) + '@mdx-js/mdx': 3.1.0(acorn@8.16.0) '@mdx-js/react': 3.1.0(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 unist-util-remove: 4.0.0 @@ -29805,7 +30311,7 @@ snapshots: - '@babel/core' - babel-plugin-macros - nitropack@2.11.11(@planetscale/database@1.19.0)(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(mysql2@3.15.2)(rolldown@1.0.0-rc.13)(xml2js@0.6.2): + nitropack@2.11.11(@planetscale/database@1.19.0)(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(mysql2@3.15.2)(rolldown@1.0.0-rc.15)(xml2js@0.6.2): dependencies: '@cloudflare/kv-asset-handler': 0.4.0 '@netlify/functions': 3.1.5(encoding@0.1.13)(rollup@4.40.2) @@ -29831,7 +30337,7 @@ snapshots: defu: 6.1.4 destr: 2.0.5 dot-prop: 9.0.0 - esbuild: 0.25.5 + esbuild: 0.25.12 escape-string-regexp: 5.0.0 etag: 1.8.1 exsolve: 1.0.5 @@ -29859,7 +30365,7 @@ snapshots: pretty-bytes: 6.1.1 radix3: 1.1.2 rollup: 4.40.2 - rollup-plugin-visualizer: 5.14.0(rolldown@1.0.0-rc.13)(rollup@4.40.2) + rollup-plugin-visualizer: 5.14.0(rolldown@1.0.0-rc.15)(rollup@4.40.2) scule: 1.3.0 semver: 7.7.2 serve-placeholder: 2.0.2 @@ -30002,7 +30508,7 @@ snapshots: npm-install-checks@6.3.0: dependencies: - semver: 7.7.3 + semver: 7.7.4 npm-normalize-package-bin@3.0.1: {} @@ -30010,7 +30516,7 @@ snapshots: dependencies: hosted-git-info: 7.0.2 proc-log: 4.2.0 - semver: 7.7.3 + semver: 7.7.4 validate-npm-package-name: 5.0.1 npm-packlist@8.0.2: @@ -30022,7 +30528,7 @@ snapshots: npm-install-checks: 6.3.0 npm-normalize-package-bin: 3.0.1 npm-package-arg: 11.0.3 - semver: 7.7.3 + semver: 7.7.4 npm-registry-fetch@17.1.0: dependencies: @@ -30238,7 +30744,7 @@ snapshots: ora@8.2.0: dependencies: - chalk: 5.4.1 + chalk: 5.6.2 cli-cursor: 5.0.0 cli-spinners: 2.9.2 is-interactive: 2.0.0 @@ -30970,6 +31476,8 @@ snapshots: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) + react@19.0.0: {} + react@19.1.1: {} react@19.2.4: {} @@ -31069,9 +31577,9 @@ snapshots: estree-util-build-jsx: 3.0.1 vfile: 6.0.3 - recma-jsx@1.0.0(acorn@8.15.0): + recma-jsx@1.0.0(acorn@8.16.0): dependencies: - acorn-jsx: 5.3.2(acorn@8.15.0) + acorn-jsx: 5.3.2(acorn@8.16.0) estree-util-to-js: 2.0.0 recma-parse: 1.0.0 recma-stringify: 1.0.0 @@ -31297,7 +31805,7 @@ snapshots: dependencies: glob: 7.2.3 - rolldown-plugin-dts@0.16.11(rolldown@1.0.0-rc.13)(typescript@5.8.3): + rolldown-plugin-dts@0.16.11(rolldown@1.0.0-rc.15)(typescript@5.8.3): dependencies: '@babel/generator': 7.28.3 '@babel/parser': 7.28.4 @@ -31308,7 +31816,7 @@ snapshots: dts-resolver: 2.1.2 get-tsconfig: 4.11.0 magic-string: 0.30.19 - rolldown: 1.0.0-rc.13 + rolldown: 1.0.0-rc.15 optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: @@ -31336,26 +31844,26 @@ snapshots: '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.42 '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.42 - rolldown@1.0.0-rc.13: + rolldown@1.0.0-rc.15: dependencies: - '@oxc-project/types': 0.123.0 - '@rolldown/pluginutils': 1.0.0-rc.13 + '@oxc-project/types': 0.124.0 + '@rolldown/pluginutils': 1.0.0-rc.15 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-rc.13 - '@rolldown/binding-darwin-arm64': 1.0.0-rc.13 - '@rolldown/binding-darwin-x64': 1.0.0-rc.13 - '@rolldown/binding-freebsd-x64': 1.0.0-rc.13 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.13 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.13 - '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.13 - '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.13 - '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.13 - '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.13 - '@rolldown/binding-linux-x64-musl': 1.0.0-rc.13 - '@rolldown/binding-openharmony-arm64': 1.0.0-rc.13 - '@rolldown/binding-wasm32-wasi': 1.0.0-rc.13 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.13 - '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.13 + '@rolldown/binding-android-arm64': 1.0.0-rc.15 + '@rolldown/binding-darwin-arm64': 1.0.0-rc.15 + '@rolldown/binding-darwin-x64': 1.0.0-rc.15 + '@rolldown/binding-freebsd-x64': 1.0.0-rc.15 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.15 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.15 + '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.15 + '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.15 + '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.15 + '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.15 + '@rolldown/binding-linux-x64-musl': 1.0.0-rc.15 + '@rolldown/binding-openharmony-arm64': 1.0.0-rc.15 + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.15 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.15 + '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.15 rollup-plugin-inject@3.0.2: dependencies: @@ -31367,14 +31875,14 @@ snapshots: dependencies: rollup-plugin-inject: 3.0.2 - rollup-plugin-visualizer@5.14.0(rolldown@1.0.0-rc.13)(rollup@4.40.2): + rollup-plugin-visualizer@5.14.0(rolldown@1.0.0-rc.15)(rollup@4.40.2): dependencies: open: 8.4.2 picomatch: 4.0.3 source-map: 0.7.4 yargs: 17.7.2 optionalDependencies: - rolldown: 1.0.0-rc.13 + rolldown: 1.0.0-rc.15 rollup: 4.40.2 rollup-pluginutils@2.8.2: @@ -31998,9 +32506,9 @@ snapshots: stoppable@1.1.0: {} - storybook-solidjs-vite@1.0.0-beta.7(@storybook/test@8.6.12(storybook@8.6.12(prettier@3.7.4)))(esbuild@0.25.5)(rollup@4.40.2)(solid-js@1.9.6)(storybook@8.6.12(prettier@3.7.4))(vite-plugin-solid@2.11.6(@testing-library/jest-dom@6.5.0)(solid-js@1.9.6)(vite@6.3.5(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1)))(vite@6.3.5(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.25.5)): + storybook-solidjs-vite@1.0.0-beta.7(@storybook/test@8.6.12(storybook@8.6.12(prettier@3.7.4)))(esbuild@0.25.12)(rollup@4.40.2)(solid-js@1.9.6)(storybook@8.6.12(prettier@3.7.4))(vite-plugin-solid@2.11.6(@testing-library/jest-dom@6.5.0)(solid-js@1.9.6)(vite@6.3.5(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1)))(vite@6.3.5(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.25.12)): dependencies: - '@storybook/builder-vite': 10.4.0-alpha.8(esbuild@0.25.5)(rollup@4.40.2)(storybook@8.6.12(prettier@3.7.4))(vite@6.3.5(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.25.5)) + '@storybook/builder-vite': 10.4.0-alpha.8(esbuild@0.25.12)(rollup@4.40.2)(storybook@8.6.12(prettier@3.7.4))(vite@6.3.5(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.25.12)) '@storybook/types': 9.0.0-alpha.1(storybook@8.6.12(prettier@3.7.4)) magic-string: 0.30.17 solid-js: 1.9.6 @@ -32161,7 +32669,7 @@ snapshots: stripe@14.25.0: dependencies: - '@types/node': 20.17.43 + '@types/node': 20.19.21 qs: 6.14.0 strnum@1.1.2: {} @@ -32398,22 +32906,22 @@ snapshots: solid-js: 1.9.6 solid-use: 0.9.1(solid-js@1.9.6) - terser-webpack-plugin@5.3.14(esbuild@0.25.5)(webpack@5.101.3(esbuild@0.25.5)): + terser-webpack-plugin@5.3.14(esbuild@0.25.12)(webpack@5.101.3(esbuild@0.25.12)): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 serialize-javascript: 6.0.2 terser: 5.44.0 - webpack: 5.101.3(esbuild@0.25.5) + webpack: 5.101.3(esbuild@0.25.12) optionalDependencies: - esbuild: 0.25.5 + esbuild: 0.25.12 optional: true terser@5.39.0: dependencies: '@jridgewell/source-map': 0.3.6 - acorn: 8.15.0 + acorn: 8.16.0 commander: 2.20.3 source-map-support: 0.5.21 @@ -32641,8 +33149,8 @@ snapshots: diff: 8.0.2 empathic: 2.0.0 hookable: 5.5.3 - rolldown: 1.0.0-rc.13 - rolldown-plugin-dts: 0.16.11(rolldown@1.0.0-rc.13)(typescript@5.8.3) + rolldown: 1.0.0-rc.15 + rolldown-plugin-dts: 0.16.11(rolldown@1.0.0-rc.15)(typescript@5.8.3) semver: 7.7.2 tinyexec: 1.0.1 tinyglobby: 0.2.15 @@ -32792,6 +33300,17 @@ snapshots: typedarray@0.0.6: {} + typescript-eslint@8.57.2(eslint@8.57.1)(typescript@5.8.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.57.2(@typescript-eslint/parser@8.57.2(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/parser': 8.57.2(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.8.3) + '@typescript-eslint/utils': 8.57.2(eslint@8.57.1)(typescript@5.8.3) + eslint: 8.57.1 + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + typescript-eslint@8.57.2(eslint@9.30.1(jiti@2.6.1))(typescript@5.8.3): dependencies: '@typescript-eslint/eslint-plugin': 8.57.2(@typescript-eslint/parser@8.57.2(eslint@9.30.1(jiti@2.6.1))(typescript@5.8.3))(eslint@9.30.1(jiti@2.6.1))(typescript@5.8.3) @@ -32862,6 +33381,8 @@ snapshots: undici-types@6.19.8: {} + undici-types@6.20.0: {} + undici-types@6.21.0: {} undici@5.28.4: @@ -32943,7 +33464,7 @@ snapshots: unimport@5.0.1: dependencies: - acorn: 8.15.0 + acorn: 8.16.0 escape-string-regexp: 5.0.0 estree-walker: 3.0.3 local-pkg: 1.1.1 @@ -33083,7 +33604,7 @@ snapshots: unplugin@2.3.10: dependencies: '@jridgewell/remapping': 2.3.5 - acorn: 8.15.0 + acorn: 8.16.0 picomatch: 4.0.3 webpack-virtual-modules: 0.6.2 @@ -33096,7 +33617,7 @@ snapshots: unplugin@2.3.2: dependencies: - acorn: 8.15.0 + acorn: 8.16.0 picomatch: 4.0.3 webpack-virtual-modules: 0.6.2 @@ -33300,7 +33821,7 @@ snapshots: d3-time: 3.1.0 d3-timer: 3.0.1 - vinxi@0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.13)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1): + vinxi@0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.15)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1): dependencies: '@babel/core': 7.27.1 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.1) @@ -33322,7 +33843,7 @@ snapshots: hookable: 5.5.3 http-proxy: 1.18.1 micromatch: 4.0.8 - nitropack: 2.11.11(@planetscale/database@1.19.0)(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(mysql2@3.15.2)(rolldown@1.0.0-rc.13)(xml2js@0.6.2) + nitropack: 2.11.11(@planetscale/database@1.19.0)(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(mysql2@3.15.2)(rolldown@1.0.0-rc.15)(xml2js@0.6.2) node-fetch-native: 1.6.6 path-to-regexp: 6.3.0 pathe: 1.1.2 @@ -33381,7 +33902,7 @@ snapshots: vite-node@2.1.9(@types/node@22.15.17)(terser@5.44.0): dependencies: cac: 6.7.14 - debug: 4.4.1 + debug: 4.4.3(supports-color@8.1.1) es-module-lexer: 1.7.0 pathe: 1.1.2 vite: 5.4.19(@types/node@22.15.17)(terser@5.44.0) @@ -33650,7 +34171,7 @@ snapshots: webpack-virtual-modules@0.6.2: {} - webpack@5.101.3(esbuild@0.25.5): + webpack@5.101.3(esbuild@0.25.12): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -33674,7 +34195,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.3 tapable: 2.3.0 - terser-webpack-plugin: 5.3.14(esbuild@0.25.5)(webpack@5.101.3(esbuild@0.25.5)) + terser-webpack-plugin: 5.3.14(esbuild@0.25.12)(webpack@5.101.3(esbuild@0.25.12)) watchpack: 2.5.1 webpack-sources: 3.3.3 transitivePeerDependencies: @@ -33879,6 +34400,12 @@ snapshots: - bufferutil - utf-8-validate + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 @@ -33981,6 +34508,8 @@ snapshots: yocto-queue@1.2.1: {} + yoctocolors-cjs@2.1.3: {} + yoctocolors@2.1.1: {} youch-core@0.3.2: