From 2d72d1dbfbea960c0d10b36a0103294325b829f8 Mon Sep 17 00:00:00 2001 From: Diego Temkin <65834932+dtemkin1@users.noreply.github.com> Date: Sun, 8 Jun 2025 13:54:28 -0400 Subject: [PATCH 01/29] add oauth basics --- src/components/Auth.tsx | 26 +++++++++++++++++++++++ src/lib/auth.ts | 35 +++++++++++++++++++++++++++++++ src/root.tsx | 23 +++++++++++++++++++++ src/routes.ts | 3 +++ src/routes/Index.tsx | 18 +++++++++++----- src/routes/callback.ts | 46 +++++++++++++++++++++++++++++++++++++++++ src/routes/login.ts | 16 ++++++++++++++ src/routes/logout.ts | 12 +++++++++++ 8 files changed, 174 insertions(+), 5 deletions(-) create mode 100644 src/components/Auth.tsx create mode 100644 src/lib/auth.ts create mode 100644 src/routes/callback.ts create mode 100644 src/routes/login.ts create mode 100644 src/routes/logout.ts diff --git a/src/components/Auth.tsx b/src/components/Auth.tsx new file mode 100644 index 00000000..13eca10b --- /dev/null +++ b/src/components/Auth.tsx @@ -0,0 +1,26 @@ +import { IconButton } from "@chakra-ui/react"; +import { Tooltip } from "./ui/tooltip"; + +import { LuUser } from "react-icons/lu"; +import { Link } from "react-router"; + +export function AuthButton({ username }: { username: string | null }) { + return ( + + } + > + + + + ); +} diff --git a/src/lib/auth.ts b/src/lib/auth.ts new file mode 100644 index 00000000..03223806 --- /dev/null +++ b/src/lib/auth.ts @@ -0,0 +1,35 @@ +import { createCookieSessionStorage } from "react-router"; + +// https://pilcrowonpaper.com/blog/oauth-guide/ + + +export const FIREROAD_URL = import.meta.env.DEV ? "https://fireroad-dev.mit.edu" : "https://fireroad.mit.edu"; + +export const FIREROAD_LOGIN_URL = `${FIREROAD_URL}/login`; +export const FIREROAD_FETCH_TOKEN_URL = `${FIREROAD_URL}/fetch_token`; +export const FIREROAD_VERIFY_URL = `${FIREROAD_URL}/verify/`; + +export interface SessionData { + academic_id: string; + access_token: string; + current_semester: number; + success: boolean; + username: string; +} + +export interface SessionFlashData { + error: string; +} + +export const { getSession, commitSession, destroySession } = + createCookieSessionStorage( + { + cookie: { + name: "__session", + path: "/", + sameSite: "lax", + secure: import.meta.env.PROD, + secrets: ["secret:3"] + }, + } + ); diff --git a/src/root.tsx b/src/root.tsx index ca366e2d..22b88a39 100644 --- a/src/root.tsx +++ b/src/root.tsx @@ -1,4 +1,5 @@ import { + data, isRouteErrorResponse, Links, Meta, @@ -12,6 +13,7 @@ import { Provider } from "./components/ui/provider"; import { Flex, Spinner, Text, Stack, Code } from "@chakra-ui/react"; import "@fontsource-variable/inter/index.css"; +import { destroySession, FIREROAD_VERIFY_URL, getSession } from "./lib/auth"; // eslint-disable-next-line react-refresh/only-export-components export const links: Route.LinksFunction = () => [ @@ -52,6 +54,27 @@ export function Layout({ children }: { children: React.ReactNode }) { ); } +// eslint-disable-next-line react-refresh/only-export-components +export async function clientLoader() { + const session = await getSession(document.cookie); + + if (session.has("access_token")) { + const response = await fetch(FIREROAD_VERIFY_URL, { + method: "GET", + headers: { + Authorization: `Bearer ${session.get("access_token") ?? ""}`, + }, + }); + + if (!response.ok) { + // token expired + console.log("Token expired!"); + document.cookie = await destroySession(session); + return data(null); + } + } +} + export default function Root() { return ; } diff --git a/src/routes.ts b/src/routes.ts index 8776833a..9b1c29a2 100644 --- a/src/routes.ts +++ b/src/routes.ts @@ -4,4 +4,7 @@ export default [ index("./routes/Index.tsx"), route("overrides/:prefillId?", "./routes/Overrides.tsx"), route("export", "./routes/export.ts"), + route("login", "./routes/login.ts"), + route("callback", "./routes/callback.ts"), + route("logout", "./routes/logout.ts"), ] satisfies RouteConfig; diff --git a/src/routes/Index.tsx b/src/routes/Index.tsx index ea707d33..e5cda905 100644 --- a/src/routes/Index.tsx +++ b/src/routes/Index.tsx @@ -14,6 +14,7 @@ import { TermSwitcher } from "../components/TermSwitcher"; import { FeedbackBanner } from "../components/FeedbackBanner"; import { MatrixLink } from "../components/MatrixLink"; import { PreregLink } from "../components/PreregLink"; +import { AuthButton } from "../components/Auth"; import { LuCalendar } from "react-icons/lu"; import { State } from "../lib/state"; @@ -24,9 +25,12 @@ import { useHydrant, HydrantContext, fetchNoCache } from "../lib/hydrant"; import { getClosestUrlName, type LatestTermInfo } from "../lib/dates"; import type { Route } from "./+types/Index"; +import { getSession } from "../lib/auth"; // eslint-disable-next-line react-refresh/only-export-components export async function clientLoader({ request }: Route.ClientActionArgs) { + const session = await getSession(document.cookie); + const searchParams = new URL(request.url).searchParams; const urlNameOrig = searchParams.get("t"); @@ -65,11 +69,12 @@ export async function clientLoader({ request }: Route.ClientActionArgs) { lastUpdated, latestTerm.semester.urlName, ), + username: session.get("academic_id") ?? null, }; } /** The application entry. */ -function HydrantApp() { +function HydrantApp({ username }: { username: string | null }) { const { state } = useContext(HydrantContext); const [isExporting, setIsExporting] = useState(false); @@ -98,10 +103,13 @@ function HydrantApp() {
- + - + + + +
@@ -146,12 +154,12 @@ export const meta: Route.MetaFunction = () => [ /** The main application. */ export default function App({ loaderData }: Route.ComponentProps) { - const { globalState } = loaderData; + const { globalState, username } = loaderData; const hydrantData = useHydrant({ globalState }); return ( - + ); } diff --git a/src/routes/callback.ts b/src/routes/callback.ts new file mode 100644 index 00000000..1b0f969d --- /dev/null +++ b/src/routes/callback.ts @@ -0,0 +1,46 @@ +/* eslint-disable @typescript-eslint/only-throw-error */ +import { data, replace } from "react-router"; + +import type { SessionData } from "../lib/auth"; +import { commitSession, FIREROAD_FETCH_TOKEN_URL, getSession } from "../lib/auth"; +import type { Route } from "./+types/callback"; + +export async function clientLoader({ request }: Route.ClientLoaderArgs) { + const url = new URL(request.url); + const code = url.searchParams.get("code"); + + if (!code) { + throw data(null, 400) + } + + const fetch_token_url = new URL(FIREROAD_FETCH_TOKEN_URL); + fetch_token_url.searchParams.set("code", code); + + try { + const response = await fetch(fetch_token_url.toString()); + + if (!response.ok) { + // error fetching token + throw data(null, 400) + } + + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + const access_info = (await response.json()).access_info as SessionData;; + + const session = await getSession(document.cookie); + + session.set("academic_id", access_info.academic_id); + session.set("access_token", access_info.access_token); + session.set("current_semester", access_info.current_semester); + session.set("success", access_info.success); + session.set("username", access_info.username); + console.log("Session data set", session.data); + + document.cookie = await commitSession(session); + + return replace("/"); + + } catch { + throw data(null, 500) + } +} diff --git a/src/routes/login.ts b/src/routes/login.ts new file mode 100644 index 00000000..27be2fd3 --- /dev/null +++ b/src/routes/login.ts @@ -0,0 +1,16 @@ +import { redirect } from "react-router"; +import { FIREROAD_LOGIN_URL } from "../lib/auth" + +import type { Route } from "./+types/login"; + + +export function clientLoader({ request }: Route.ClientLoaderArgs) { + const authorizationURL = new URL(FIREROAD_LOGIN_URL); + + const currentUrl = new URL(request.url); + const callbackUrl = new URL(currentUrl.origin + "/callback"); + + authorizationURL.searchParams.set("redirect", callbackUrl.toString()); + + return redirect(authorizationURL.toString()); +} diff --git a/src/routes/logout.ts b/src/routes/logout.ts new file mode 100644 index 00000000..d54e6680 --- /dev/null +++ b/src/routes/logout.ts @@ -0,0 +1,12 @@ +import { replace } from "react-router"; + +import { destroySession, getSession } from "../lib/auth"; +// import type { Route } from "./+types/callback"; + + +export async function clientLoader() { + const session = await getSession(document.cookie); + document.cookie = await destroySession(session); + + return replace("/"); +} From 86ea7fe8bc2de37a3acd2a5c1c7b9e322750fd69 Mon Sep 17 00:00:00 2001 From: Diego Temkin <65834932+dtemkin1@users.noreply.github.com> Date: Sun, 8 Jun 2025 13:57:59 -0400 Subject: [PATCH 02/29] format... --- src/lib/auth.ts | 25 ++++++++++++------------- src/routes/callback.ts | 15 +++++++++------ src/routes/login.ts | 3 +-- src/routes/logout.ts | 1 - 4 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/lib/auth.ts b/src/lib/auth.ts index 03223806..44647035 100644 --- a/src/lib/auth.ts +++ b/src/lib/auth.ts @@ -2,8 +2,9 @@ import { createCookieSessionStorage } from "react-router"; // https://pilcrowonpaper.com/blog/oauth-guide/ - -export const FIREROAD_URL = import.meta.env.DEV ? "https://fireroad-dev.mit.edu" : "https://fireroad.mit.edu"; +export const FIREROAD_URL = import.meta.env.DEV + ? "https://fireroad-dev.mit.edu" + : "https://fireroad.mit.edu"; export const FIREROAD_LOGIN_URL = `${FIREROAD_URL}/login`; export const FIREROAD_FETCH_TOKEN_URL = `${FIREROAD_URL}/fetch_token`; @@ -22,14 +23,12 @@ export interface SessionFlashData { } export const { getSession, commitSession, destroySession } = - createCookieSessionStorage( - { - cookie: { - name: "__session", - path: "/", - sameSite: "lax", - secure: import.meta.env.PROD, - secrets: ["secret:3"] - }, - } - ); + createCookieSessionStorage({ + cookie: { + name: "__session", + path: "/", + sameSite: "lax", + secure: import.meta.env.PROD, + secrets: ["secret:3"], + }, + }); diff --git a/src/routes/callback.ts b/src/routes/callback.ts index 1b0f969d..6c75a934 100644 --- a/src/routes/callback.ts +++ b/src/routes/callback.ts @@ -2,7 +2,11 @@ import { data, replace } from "react-router"; import type { SessionData } from "../lib/auth"; -import { commitSession, FIREROAD_FETCH_TOKEN_URL, getSession } from "../lib/auth"; +import { + commitSession, + FIREROAD_FETCH_TOKEN_URL, + getSession, +} from "../lib/auth"; import type { Route } from "./+types/callback"; export async function clientLoader({ request }: Route.ClientLoaderArgs) { @@ -10,7 +14,7 @@ export async function clientLoader({ request }: Route.ClientLoaderArgs) { const code = url.searchParams.get("code"); if (!code) { - throw data(null, 400) + throw data(null, 400); } const fetch_token_url = new URL(FIREROAD_FETCH_TOKEN_URL); @@ -21,11 +25,11 @@ export async function clientLoader({ request }: Route.ClientLoaderArgs) { if (!response.ok) { // error fetching token - throw data(null, 400) + throw data(null, 400); } // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access - const access_info = (await response.json()).access_info as SessionData;; + const access_info = (await response.json()).access_info as SessionData; const session = await getSession(document.cookie); @@ -39,8 +43,7 @@ export async function clientLoader({ request }: Route.ClientLoaderArgs) { document.cookie = await commitSession(session); return replace("/"); - } catch { - throw data(null, 500) + throw data(null, 500); } } diff --git a/src/routes/login.ts b/src/routes/login.ts index 27be2fd3..506c7138 100644 --- a/src/routes/login.ts +++ b/src/routes/login.ts @@ -1,9 +1,8 @@ import { redirect } from "react-router"; -import { FIREROAD_LOGIN_URL } from "../lib/auth" +import { FIREROAD_LOGIN_URL } from "../lib/auth"; import type { Route } from "./+types/login"; - export function clientLoader({ request }: Route.ClientLoaderArgs) { const authorizationURL = new URL(FIREROAD_LOGIN_URL); diff --git a/src/routes/logout.ts b/src/routes/logout.ts index d54e6680..ec923609 100644 --- a/src/routes/logout.ts +++ b/src/routes/logout.ts @@ -3,7 +3,6 @@ import { replace } from "react-router"; import { destroySession, getSession } from "../lib/auth"; // import type { Route } from "./+types/callback"; - export async function clientLoader() { const session = await getSession(document.cookie); document.cookie = await destroySession(session); From 831acf8770a3b7af5aec97252342fce17c7fc011 Mon Sep 17 00:00:00 2001 From: Diego Temkin <65834932+dtemkin1@users.noreply.github.com> Date: Sun, 8 Jun 2025 15:16:05 -0400 Subject: [PATCH 03/29] add session context --- src/components/Auth.tsx | 7 ++++++- src/lib/auth.ts | 5 +++++ src/root.tsx | 20 +++++++++++++++----- src/routes/Index.tsx | 12 ++++-------- 4 files changed, 30 insertions(+), 14 deletions(-) diff --git a/src/components/Auth.tsx b/src/components/Auth.tsx index 13eca10b..2f5a9fad 100644 --- a/src/components/Auth.tsx +++ b/src/components/Auth.tsx @@ -3,8 +3,13 @@ import { Tooltip } from "./ui/tooltip"; import { LuUser } from "react-icons/lu"; import { Link } from "react-router"; +import { useContext } from "react"; +import { SessionContext } from "../lib/auth"; + +export function AuthButton() { + const session = useContext(SessionContext); + const username = session?.get("username"); -export function AuthButton({ username }: { username: string | null }) { return ( +> | null>(null); diff --git a/src/root.tsx b/src/root.tsx index 22b88a39..880bcecf 100644 --- a/src/root.tsx +++ b/src/root.tsx @@ -1,5 +1,4 @@ import { - data, isRouteErrorResponse, Links, Meta, @@ -13,7 +12,12 @@ import { Provider } from "./components/ui/provider"; import { Flex, Spinner, Text, Stack, Code } from "@chakra-ui/react"; import "@fontsource-variable/inter/index.css"; -import { destroySession, FIREROAD_VERIFY_URL, getSession } from "./lib/auth"; +import { + destroySession, + FIREROAD_VERIFY_URL, + getSession, + SessionContext, +} from "./lib/auth"; // eslint-disable-next-line react-refresh/only-export-components export const links: Route.LinksFunction = () => [ @@ -70,13 +74,19 @@ export async function clientLoader() { // token expired console.log("Token expired!"); document.cookie = await destroySession(session); - return data(null); + return { session: null }; } } + + return { session }; } -export default function Root() { - return ; +export default function Root({ loaderData }: Route.ComponentProps) { + return ( + + + + ); } export function ErrorBoundary({ error }: Route.ErrorBoundaryProps) { diff --git a/src/routes/Index.tsx b/src/routes/Index.tsx index e5cda905..b547cf48 100644 --- a/src/routes/Index.tsx +++ b/src/routes/Index.tsx @@ -25,12 +25,9 @@ import { useHydrant, HydrantContext, fetchNoCache } from "../lib/hydrant"; import { getClosestUrlName, type LatestTermInfo } from "../lib/dates"; import type { Route } from "./+types/Index"; -import { getSession } from "../lib/auth"; // eslint-disable-next-line react-refresh/only-export-components export async function clientLoader({ request }: Route.ClientActionArgs) { - const session = await getSession(document.cookie); - const searchParams = new URL(request.url).searchParams; const urlNameOrig = searchParams.get("t"); @@ -69,12 +66,11 @@ export async function clientLoader({ request }: Route.ClientActionArgs) { lastUpdated, latestTerm.semester.urlName, ), - username: session.get("academic_id") ?? null, }; } /** The application entry. */ -function HydrantApp({ username }: { username: string | null }) { +function HydrantApp() { const { state } = useContext(HydrantContext); const [isExporting, setIsExporting] = useState(false); @@ -108,7 +104,7 @@ function HydrantApp({ username }: { username: string | null }) { - +
@@ -154,12 +150,12 @@ export const meta: Route.MetaFunction = () => [ /** The main application. */ export default function App({ loaderData }: Route.ComponentProps) { - const { globalState, username } = loaderData; + const { globalState } = loaderData; const hydrantData = useHydrant({ globalState }); return ( - + ); } From a935cf0f28b26ca1f4f0b5eaa17ffa5537a3f84b Mon Sep 17 00:00:00 2001 From: Diego Temkin <65834932+dtemkin1@users.noreply.github.com> Date: Sun, 8 Jun 2025 16:24:22 -0400 Subject: [PATCH 04/29] add helpers for favorite courses --- src/lib/auth.ts | 56 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/src/lib/auth.ts b/src/lib/auth.ts index 82d59bef..60d5f2ce 100644 --- a/src/lib/auth.ts +++ b/src/lib/auth.ts @@ -37,3 +37,59 @@ export const { getSession, commitSession, destroySession } = export const SessionContext = createContext > | null>(null); + +// API FUNCTION CALLS + +export const getFavoriteCourses = async (authToken: string) => { + const response = await fetch(`${FIREROAD_URL}/prefs/favorites`, { + headers: { + Authorization: `Bearer ${authToken}`, + }, + }); + + if (!response.ok) { + throw new Error("Failed to fetch favorite courses"); + } + + const result = (await response.json()) as + | { + success: false; + error: string; + } + | { success: true; favorites: string[] }; + + if (!result.success) { + throw new Error("Failed to fetch favorite courses: " + result.error); + } + + return result.favorites; +}; + +export const setFavoriteCourses = async ( + authToken: string, + favorites: string[], +) => { + const response = await fetch(`${FIREROAD_URL}/prefs/favorites`, { + method: "POST", + headers: { + "Content-Type": "application/json", + Authorization: `Bearer ${authToken}`, + }, + body: JSON.stringify(favorites), + }); + + if (!response.ok) { + throw new Error("Failed to set favorite courses"); + } + + const result = (await response.json()) as + | { + success: false; + error: string; + } + | { success: true }; + + if (!result.success) { + throw new Error("Failed to set favorite courses: " + result.error); + } +}; From 1ef65905ab0c370eb3373eb7e006e335a4e36474 Mon Sep 17 00:00:00 2001 From: Diego Temkin <65834932+dtemkin1@users.noreply.github.com> Date: Sun, 8 Jun 2025 17:08:13 -0400 Subject: [PATCH 05/29] make starred classes global --- src/lib/state.ts | 24 ++++++++++++++++++++---- src/lib/store.ts | 10 +++++++++- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/src/lib/state.ts b/src/lib/state.ts index f44026e1..7f05a52d 100644 --- a/src/lib/state.ts +++ b/src/lib/state.ts @@ -288,7 +288,7 @@ export class State { } else { this.starredClasses.add(cls.number); } - this.store.set("starredClasses", Array.from(this.starredClasses)); + this.store.globalSet("starredClasses", Array.from(this.starredClasses)); this.updateState(); } @@ -485,9 +485,25 @@ export class State { } } // Load starred classes from storage - const storedStarred = this.store.get("starredClasses"); - if (storedStarred) { - this.starredClasses = new Set(storedStarred); + const storedStarred = this.store.globalGet("starredClasses") ?? []; + + // backwards compatibility, change from term store to global store + const storedStarredTerm = this.store.get("starredClasses") as + | string[] + | null; + if (storedStarredTerm) { + const totalStarred = storedStarred.concat(storedStarredTerm); + this.store.globalSet("starredClasses", totalStarred); + + storedStarredTerm.forEach((cls) => { + if (!(cls in storedStarred)) { + storedStarred.push(cls); + } + }); + + this.store.delete("starredClasses"); } + + this.starredClasses = new Set(storedStarred); } } diff --git a/src/lib/store.ts b/src/lib/store.ts index ba2b3201..d3b057bc 100644 --- a/src/lib/store.ts +++ b/src/lib/store.ts @@ -3,12 +3,12 @@ import type { Preferences, Save } from "./schema"; export interface TermStore { saves: Save[]; /** Array of class numbers that are starred */ - starredClasses: string[]; [saveId: string]: unknown[]; } export interface GlobalStore { preferences: Preferences; + starredClasses: string[]; } /** Generic storage. */ @@ -52,4 +52,12 @@ export class Store { JSON.stringify(value), ); } + + delete(key: keyof TermStore): void { + localStorage.removeItem(this.toKey(key.toString(), false)); + } + + globalDelete(key: keyof GlobalStore): void { + localStorage.removeItem(this.toKey(key.toString(), true)); + } } From 80babc75796c99d36fa82cdd1862286b797a5781 Mon Sep 17 00:00:00 2001 From: Diego Temkin <65834932+dtemkin1@users.noreply.github.com> Date: Sun, 8 Jun 2025 18:32:25 -0400 Subject: [PATCH 06/29] add getting favorite courses --- src/components/Auth.tsx | 2 +- src/lib/auth.ts | 4 ++-- src/lib/state.ts | 34 ++++++++++++++++++++++++++++++++++ src/routes/Index.tsx | 8 +++++++- 4 files changed, 44 insertions(+), 4 deletions(-) diff --git a/src/components/Auth.tsx b/src/components/Auth.tsx index 2f5a9fad..f8c2171f 100644 --- a/src/components/Auth.tsx +++ b/src/components/Auth.tsx @@ -8,7 +8,7 @@ import { SessionContext } from "../lib/auth"; export function AuthButton() { const session = useContext(SessionContext); - const username = session?.get("username"); + const username = session?.get("academic_id"); return ( { - const response = await fetch(`${FIREROAD_URL}/prefs/favorites`, { + const response = await fetch(`${FIREROAD_URL}/prefs/favorites/`, { headers: { Authorization: `Bearer ${authToken}`, }, @@ -69,7 +69,7 @@ export const setFavoriteCourses = async ( authToken: string, favorites: string[], ) => { - const response = await fetch(`${FIREROAD_URL}/prefs/favorites`, { + const response = await fetch(`${FIREROAD_URL}/prefs/favorites/`, { method: "POST", headers: { "Content-Type": "application/json", diff --git a/src/lib/state.ts b/src/lib/state.ts index 7f05a52d..e0c6da23 100644 --- a/src/lib/state.ts +++ b/src/lib/state.ts @@ -13,6 +13,7 @@ import { Store } from "./store"; import { sum, urldecode, urlencode } from "./utils"; import type { HydrantState, Preferences, Save } from "./schema"; import { DEFAULT_PREFERENCES } from "./schema"; +import { getFavoriteCourses } from "./auth"; /** * Global State object. Maintains global program state (selected classes, @@ -53,6 +54,8 @@ export class State { private preferences: Preferences = DEFAULT_PREFERENCES; /** Set of starred class numbers */ private starredClasses = new Set(); + /** Current access token */ + private accessToken?: string = undefined; /** React callback to update state. */ callback: ((state: HydrantState) => void) | undefined; @@ -506,4 +509,35 @@ export class State { this.starredClasses = new Set(storedStarred); } + + loadAccessToken(token?: string): void { + if (token === this.accessToken) { + return; // no need to update anything + } + + // token has changed! + if (token) { + // user signed in + getFavoriteCourses(token) + .then((favoriteCourses) => { + favoriteCourses.forEach((cls) => { + if (!this.starredClasses.has(cls)) { + this.starredClasses.add(cls); + } + }); + + this.store.globalSet( + "starredClasses", + Array.from(this.starredClasses), + ); + }) + .catch((err: unknown) => { + console.error("Failed to fetch favorite courses:", err); + }); + } else { + // TODO: user signed out + } + + this.accessToken = token; + } } diff --git a/src/routes/Index.tsx b/src/routes/Index.tsx index b547cf48..5153facf 100644 --- a/src/routes/Index.tsx +++ b/src/routes/Index.tsx @@ -1,4 +1,4 @@ -import { useState, useContext } from "react"; +import { useState, useContext, useMemo } from "react"; import { Center, Flex, Group, Button, ButtonGroup } from "@chakra-ui/react"; import { Tooltip } from "../components/ui/tooltip"; @@ -23,6 +23,7 @@ import { useICSExport } from "../lib/gapi"; import type { SemesterData } from "../lib/hydrant"; import { useHydrant, HydrantContext, fetchNoCache } from "../lib/hydrant"; import { getClosestUrlName, type LatestTermInfo } from "../lib/dates"; +import { SessionContext } from "../lib/auth"; import type { Route } from "./+types/Index"; @@ -151,8 +152,13 @@ export const meta: Route.MetaFunction = () => [ /** The main application. */ export default function App({ loaderData }: Route.ComponentProps) { const { globalState } = loaderData; + const session = useContext(SessionContext); const hydrantData = useHydrant({ globalState }); + useMemo(() => { + hydrantData.state.loadAccessToken(session?.get("access_token")); + }, [session, hydrantData.state]); + return ( From d3a850d6e294cc4b41ba7b0dca77eca5d13ea874 Mon Sep 17 00:00:00 2001 From: Diego Temkin <65834932+dtemkin1@users.noreply.github.com> Date: Sun, 8 Jun 2025 18:39:22 -0400 Subject: [PATCH 07/29] add more helper functions --- src/lib/auth.ts | 108 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) diff --git a/src/lib/auth.ts b/src/lib/auth.ts index 9bae2003..23185719 100644 --- a/src/lib/auth.ts +++ b/src/lib/auth.ts @@ -93,3 +93,111 @@ export const setFavoriteCourses = async ( throw new Error("Failed to set favorite courses: " + result.error); } }; + +interface ScheduleContents { + selectedSubjects: { + units: string; + subject_id: string; + title: string; + allowedSections: { + Lecture?: number[]; + Recitation?: number[]; + Lab?: number[]; + Design?: number[]; + }; + selectedSections: { + Lecture?: number; + Recitation?: number; + Lab?: number; + Design?: number; + }; + }[]; +} + +export const getSchedules = async (authToken: string, id?: string) => { + const response = await fetch( + `${FIREROAD_URL}/sync/schedules/${id ? `?id=${id}` : ""}`, + { + headers: { + Authorization: `Bearer ${authToken}`, + }, + }, + ); + + if (!response.ok) { + throw new Error("Failed to fetch schedules"); + } + + if (typeof id == "string") { + // id specified, return single schedule + const result = (await response.json()) as + | { + success: false; + error: string; + } + | { + success: true; + file: { + name: string; + id: string; + changed: string; + downloaded: string; + agent: string; + contents: ScheduleContents; + }; + }; + + if (!result.success) { + throw new Error("Failed to fetch schedule: " + result.error); + } + + return result.file; + } else { + // no id specified, return all schedules + const result = (await response.json()) as + | { + success: false; + error: string; + } + | { + success: true; + files: Record< + string, + { name: string; changed: string; agent: string } + >; + }; + + if (!result.success) { + throw new Error("Failed to fetch schedules: " + result.error); + } + + return result.files; + } +}; + +export const deleteSchedule = async (authToken: string, id: string) => { + const response = await fetch(`${FIREROAD_URL}/delete_schedule/`, { + method: "POST", + body: JSON.stringify({ id }), + headers: { + Authorization: `Bearer ${authToken}`, + }, + }); + + if (!response.ok) { + throw new Error("Failed to delete schedule"); + } + + const result = (await response.json()) as + | { + success: false; + error: string; + } + | { success: true }; + + if (!result.success) { + throw new Error("Failed to delete schedule: " + result.error); + } +}; + +// export const syncSchedule = () => { }; From 131081ee1107852ebf3c8b7d239310f3bc0cc5af Mon Sep 17 00:00:00 2001 From: Diego Temkin <65834932+dtemkin1@users.noreply.github.com> Date: Sun, 8 Jun 2025 18:58:54 -0400 Subject: [PATCH 08/29] sync favorites --- src/lib/auth.ts | 2 +- src/lib/state.ts | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/lib/auth.ts b/src/lib/auth.ts index 23185719..c30253b9 100644 --- a/src/lib/auth.ts +++ b/src/lib/auth.ts @@ -69,7 +69,7 @@ export const setFavoriteCourses = async ( authToken: string, favorites: string[], ) => { - const response = await fetch(`${FIREROAD_URL}/prefs/favorites/`, { + const response = await fetch(`${FIREROAD_URL}/prefs/set_favorites/`, { method: "POST", headers: { "Content-Type": "application/json", diff --git a/src/lib/state.ts b/src/lib/state.ts index e0c6da23..cf151477 100644 --- a/src/lib/state.ts +++ b/src/lib/state.ts @@ -13,7 +13,7 @@ import { Store } from "./store"; import { sum, urldecode, urlencode } from "./utils"; import type { HydrantState, Preferences, Save } from "./schema"; import { DEFAULT_PREFERENCES } from "./schema"; -import { getFavoriteCourses } from "./auth"; +import { getFavoriteCourses, setFavoriteCourses } from "./auth"; /** * Global State object. Maintains global program state (selected classes, @@ -291,7 +291,11 @@ export class State { } else { this.starredClasses.add(cls.number); } - this.store.globalSet("starredClasses", Array.from(this.starredClasses)); + const starredArray = Array.from(this.starredClasses); + + this.store.globalSet("starredClasses", starredArray); + if (this.accessToken) + void setFavoriteCourses(this.accessToken, starredArray); this.updateState(); } From 7627e9c5f505909697d5bc5d3a0a6881f6678d06 Mon Sep 17 00:00:00 2001 From: Diego Temkin <65834932+dtemkin1@users.noreply.github.com> Date: Sun, 8 Jun 2025 20:35:25 -0400 Subject: [PATCH 09/29] fixes --- src/lib/gapi.ts | 5 ++++- src/routes/Index.tsx | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/lib/gapi.ts b/src/lib/gapi.ts index d56effa6..66377a50 100644 --- a/src/lib/gapi.ts +++ b/src/lib/gapi.ts @@ -1,12 +1,15 @@ import type { ICalEventData } from "ical-generator"; import { ICalCalendar } from "ical-generator"; -import { RRule, RRuleSet } from "rrule"; +import * as rrule from "rrule"; + import { tzlib_get_ical_block } from "timezones-ical-library"; import type { Activity } from "./activity"; import type { Term } from "./dates"; import type { State } from "./state"; +const { RRule, RRuleSet } = rrule; + /** Timezone string. */ const TIMEZONE = "America/New_York"; diff --git a/src/routes/Index.tsx b/src/routes/Index.tsx index 5153facf..ce9ad8ef 100644 --- a/src/routes/Index.tsx +++ b/src/routes/Index.tsx @@ -28,7 +28,7 @@ import { SessionContext } from "../lib/auth"; import type { Route } from "./+types/Index"; // eslint-disable-next-line react-refresh/only-export-components -export async function clientLoader({ request }: Route.ClientActionArgs) { +export async function clientLoader({ request }: Route.ClientLoaderArgs) { const searchParams = new URL(request.url).searchParams; const urlNameOrig = searchParams.get("t"); From a991b2032fa56fe14afc419fa18229b398c3fffc Mon Sep 17 00:00:00 2001 From: Diego Temkin <65834932+dtemkin1@users.noreply.github.com> Date: Sun, 8 Jun 2025 21:52:54 -0400 Subject: [PATCH 10/29] use file base routing for simplicity... --- package-lock.json | 267 ++++-------------- package.json | 1 + src/components/Auth.tsx | 4 +- src/routes.ts | 12 +- src/routes/{Index.tsx => _index.tsx} | 2 +- src/routes/{callback.ts => auth.callback.ts} | 2 +- src/routes/{login.ts => auth.login.ts} | 4 +- src/routes/{logout.ts => auth.logout.ts} | 4 +- ...errides.tsx => overrides.($prefillId).tsx} | 6 +- 9 files changed, 74 insertions(+), 228 deletions(-) rename src/routes/{Index.tsx => _index.tsx} (99%) rename src/routes/{callback.ts => auth.callback.ts} (96%) rename src/routes/{login.ts => auth.login.ts} (76%) rename src/routes/{logout.ts => auth.logout.ts} (66%) rename src/routes/{Overrides.tsx => overrides.($prefillId).tsx} (98%) diff --git a/package-lock.json b/package-lock.json index 357d5d08..eee4ef6a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ "@fullcalendar/interaction": "^6.1.17", "@fullcalendar/react": "^6.1.17", "@fullcalendar/timegrid": "^6.1.17", + "@react-router/fs-routes": "^7.6.2", "@react-router/node": "^7.6.0", "@rjsf/chakra-ui": "^6.0.0-beta.10", "@rjsf/core": "^6.0.0-beta.10", @@ -67,7 +68,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", @@ -165,7 +165,6 @@ "version": "7.27.5", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.5.tgz", "integrity": "sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -175,7 +174,6 @@ "version": "7.27.4", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.4.tgz", "integrity": "sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==", - "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", @@ -206,14 +204,12 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, "license": "MIT" }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -239,7 +235,6 @@ "version": "7.27.3", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.27.3" @@ -252,7 +247,6 @@ "version": "7.27.2", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/compat-data": "^7.27.2", @@ -269,7 +263,6 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -279,7 +272,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz", "integrity": "sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", @@ -301,7 +293,6 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -311,7 +302,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/traverse": "^7.27.1", @@ -338,7 +328,6 @@ "version": "7.27.3", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.27.1", @@ -356,7 +345,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.27.1" @@ -369,7 +357,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -379,7 +366,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-member-expression-to-functions": "^7.27.1", @@ -397,7 +383,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/traverse": "^7.27.1", @@ -429,7 +414,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -439,7 +423,6 @@ "version": "7.27.6", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz", "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==", - "dev": true, "license": "MIT", "dependencies": { "@babel/template": "^7.27.2", @@ -468,7 +451,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.27.1.tgz", "integrity": "sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -484,7 +466,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -500,7 +481,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -516,7 +496,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.27.1", @@ -533,7 +512,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.27.1.tgz", "integrity": "sha512-Q5sT5+O4QUebHdbwKedFBEwRLb02zJ7r4A5Gg2hUoLuU3FjdMcyqcywqUrLCaDsFCxzokf7u9kuy7qz51YUuAg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", @@ -553,7 +531,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.1.tgz", "integrity": "sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -636,7 +613,7 @@ "version": "2.5.2", "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.5.2.tgz", "integrity": "sha512-foZ7qr0IsUBjzWIq+SuBLfdQCpJ1j8cTuNNT4owngTHoN5KsJb8L9t65fzz7SCeSWzescoOil/0ldqiL041ABg==", - "dev": true, + "devOptional": true, "license": "(Apache-2.0 AND BSD-3-Clause)" }, "node_modules/@chakra-ui/cli": { @@ -847,7 +824,6 @@ "cpu": [ "ppc64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -864,7 +840,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -881,7 +856,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -898,7 +872,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -915,7 +888,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -932,7 +904,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -949,7 +920,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -966,7 +936,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -983,7 +952,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1000,7 +968,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1017,7 +984,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1034,7 +1000,6 @@ "cpu": [ "loong64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1051,7 +1016,6 @@ "cpu": [ "mips64el" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1068,7 +1032,6 @@ "cpu": [ "ppc64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1085,7 +1048,6 @@ "cpu": [ "riscv64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1102,7 +1064,6 @@ "cpu": [ "s390x" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1119,7 +1080,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1136,7 +1096,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1153,7 +1112,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1170,7 +1128,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1187,7 +1144,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1204,7 +1160,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1221,7 +1176,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1238,7 +1192,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1255,7 +1208,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1633,7 +1585,6 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, "license": "ISC", "dependencies": { "string-width": "^5.1.2", @@ -1821,7 +1772,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", - "dev": true, "license": "ISC", "dependencies": { "@npmcli/promise-spawn": "^6.0.0", @@ -1841,7 +1791,6 @@ "version": "7.18.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, "license": "ISC", "engines": { "node": ">=12" @@ -1851,7 +1800,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-4.0.1.tgz", "integrity": "sha512-lRCEGdHZomFsURroh522YvA/2cVb9oPIJrjHanCJZkiasz1BzcnLr3tBJhlV7S86MBJBuAQ33is2D60YitZL2Q==", - "dev": true, "license": "ISC", "dependencies": { "@npmcli/git": "^4.1.0", @@ -1870,7 +1818,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", - "dev": true, "license": "ISC", "dependencies": { "which": "^3.0.0" @@ -1888,7 +1835,6 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, "license": "MIT", "optional": true, "engines": { @@ -1899,7 +1845,6 @@ "version": "7.6.2", "resolved": "https://registry.npmjs.org/@react-router/dev/-/dev-7.6.2.tgz", "integrity": "sha512-BuG83Ug2C/P+zMYErTz/KKuXoxbOefh3oR66r13XWG9txwooC9nt2QDt2u8yt7Eo/9BATnx+TmXnOHEWqMyB8w==", - "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.21.8", @@ -1959,7 +1904,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "dev": true, "license": "MIT", "dependencies": { "readdirp": "^4.0.1" @@ -1975,7 +1919,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "dev": true, "license": "MIT", "bin": { "jsesc": "bin/jsesc" @@ -1988,7 +1931,6 @@ "version": "2.8.8", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true, "license": "MIT", "bin": { "prettier": "bin-prettier.js" @@ -2004,7 +1946,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 14.18.0" @@ -2014,6 +1955,51 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/@react-router/fs-routes": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@react-router/fs-routes/-/fs-routes-7.6.2.tgz", + "integrity": "sha512-JfYQb9lyQHIpyLu1G9u9Q+loBHE2zgw8Z2tleiBrzzAKUp0x5LIo9a1w9NjpOU2JAiS3xeGN+dNQjSjeIOUTRg==", + "license": "MIT", + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@react-router/dev": "^7.6.2", + "typescript": "^5.1.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@react-router/fs-routes/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@react-router/fs-routes/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@react-router/node": { "version": "7.6.2", "resolved": "https://registry.npmjs.org/@react-router/node/-/node-7.6.2.tgz", @@ -2183,7 +2169,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2197,7 +2182,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2211,7 +2195,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2225,7 +2208,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2239,7 +2221,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2253,7 +2234,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2267,7 +2247,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2281,7 +2260,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2295,7 +2273,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2309,7 +2286,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2323,7 +2299,6 @@ "cpu": [ "loong64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2337,7 +2312,6 @@ "cpu": [ "ppc64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2351,7 +2325,6 @@ "cpu": [ "riscv64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2365,7 +2338,6 @@ "cpu": [ "riscv64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2379,7 +2351,6 @@ "cpu": [ "s390x" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2393,7 +2364,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2407,7 +2377,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2421,7 +2390,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2435,7 +2403,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2449,7 +2416,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2526,7 +2492,7 @@ "version": "22.15.30", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.30.tgz", "integrity": "sha512-6Q7lr06bEHdlfplU6YRbgG1SFBdlsfNC4/lX+SkhiTs0cpJkOElmWls8PxDFv4yY/xKb8Y6SO0OmSX4wgqTZbA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "undici-types": "~6.21.0" @@ -3787,7 +3753,6 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -3800,7 +3765,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -3837,7 +3801,6 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true, "license": "MIT" }, "node_modules/argparse": { @@ -3900,7 +3863,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/babel-dead-code-elimination/-/babel-dead-code-elimination-1.0.10.tgz", "integrity": "sha512-DV5bdJZTzZ0zn0DC24v3jD7Mnidh6xhKa4GfKCbq3sfW8kaWhDdZjP3i81geA8T33tdYqWKw4D3fVv0CwEgKVA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.23.7", @@ -3928,7 +3890,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, "license": "MIT" }, "node_modules/base64-js": { @@ -4144,7 +4105,6 @@ "version": "4.25.0", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.0.tgz", "integrity": "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==", - "dev": true, "funding": [ { "type": "opencollective", @@ -4202,7 +4162,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/buffer-builder/-/buffer-builder-0.2.0.tgz", "integrity": "sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==", - "dev": true, + "devOptional": true, "license": "MIT/X11" }, "node_modules/buffer-from": { @@ -4240,7 +4200,6 @@ "version": "6.7.14", "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -4309,7 +4268,6 @@ "version": "1.0.30001721", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001721.tgz", "integrity": "sha512-cOuvmUVtKrtEaoKiO0rSc29jcjwMwX5tOHDy4MgVFEWiUXj4uBMJkwI8MDySkgXidpMiHUcviogAvFi4pA2hDQ==", - "dev": true, "funding": [ { "type": "opencollective", @@ -4413,7 +4371,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -4426,14 +4383,13 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, "license": "MIT" }, "node_modules/colorjs.io": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.5.2.tgz", "integrity": "sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/colors": { @@ -4611,7 +4567,6 @@ "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -4626,7 +4581,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -4733,7 +4687,6 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==", - "dev": true, "license": "MIT", "peerDependencies": { "babel-plugin-macros": "^3.1.0" @@ -4869,14 +4822,12 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, "license": "MIT" }, "node_modules/electron-to-chromium": { "version": "1.5.165", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.165.tgz", "integrity": "sha512-naiMx1Z6Nb2TxPU6fiFrUrDTjyPMLdTtaOd2oLmG8zVSg2hCWGkhPyxwk+qRmZ1ytwVqUv0u7ZcDA5+ALhaUtw==", - "dev": true, "license": "ISC" }, "node_modules/elliptic": { @@ -4906,14 +4857,12 @@ "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, "license": "MIT" }, "node_modules/err-code": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true, "license": "MIT" }, "node_modules/error-ex": { @@ -4958,7 +4907,6 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", - "dev": true, "license": "MIT" }, "node_modules/es-object-atoms": { @@ -4978,7 +4926,6 @@ "version": "0.25.5", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", - "dev": true, "hasInstallScript": true, "license": "MIT", "bin": { @@ -5019,7 +4966,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -5300,7 +5246,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-2.2.1.tgz", "integrity": "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -5503,7 +5448,6 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "dev": true, "license": "ISC", "dependencies": { "cross-spawn": "^7.0.6", @@ -5533,7 +5477,6 @@ "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", @@ -5548,7 +5491,6 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -5572,7 +5514,6 @@ "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -5621,7 +5562,6 @@ "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", @@ -5655,7 +5595,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -5665,7 +5604,6 @@ "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" @@ -5758,7 +5696,6 @@ "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, "license": "ISC" }, "node_modules/graphemer": { @@ -5772,7 +5709,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -5888,7 +5825,6 @@ "version": "6.1.3", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.3.tgz", "integrity": "sha512-HVJyzUrLIL1c0QmviVh5E8VGyUS7xCFPS6yydaVd1UegW+ibV/CohqTH9MkOLDp5o+rb82DMo77PTuc9F/8GKw==", - "dev": true, "license": "ISC", "dependencies": { "lru-cache": "^7.5.1" @@ -5901,7 +5837,6 @@ "version": "7.18.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, "license": "ISC", "engines": { "node": ">=12" @@ -6033,7 +5968,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.2.tgz", "integrity": "sha512-qHKXW1q6liAk1Oys6umoaZbDRqjcjgSrbnrifHsfsttza7zcvRAsL7mMV6xWcyhwQy7Xj5v4hhbr6b+iDYwlmQ==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/import-fresh": { @@ -6156,7 +6091,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -6276,7 +6210,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, "license": "ISC" }, "node_modules/isomorphic-timers-promises": { @@ -6293,7 +6226,6 @@ "version": "3.4.3", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" @@ -6353,7 +6285,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", - "dev": true, "license": "MIT", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -6399,7 +6330,6 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, "license": "MIT", "bin": { "json5": "lib/cli.js" @@ -6412,7 +6342,6 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, "license": "MIT", "dependencies": { "universalify": "^2.0.0" @@ -6518,7 +6447,6 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, "license": "ISC", "dependencies": { "yallist": "^3.0.2" @@ -6665,7 +6593,6 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" @@ -6853,7 +6780,6 @@ "version": "2.0.19", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", - "dev": true, "license": "MIT" }, "node_modules/node-stdlib-browser": { @@ -6899,7 +6825,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", - "dev": true, "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^6.0.0", @@ -6925,7 +6850,6 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", - "dev": true, "license": "BSD-2-Clause", "dependencies": { "semver": "^7.1.1" @@ -6938,7 +6862,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", - "dev": true, "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -6948,7 +6871,6 @@ "version": "10.1.0", "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", - "dev": true, "license": "ISC", "dependencies": { "hosted-git-info": "^6.0.0", @@ -6964,7 +6886,6 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.2.tgz", "integrity": "sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg==", - "dev": true, "license": "ISC", "dependencies": { "npm-install-checks": "^6.0.0", @@ -7137,7 +7058,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true, "license": "BlueOak-1.0.0" }, "node_modules/package-manager-detector": { @@ -7239,7 +7159,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -7255,7 +7174,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^10.2.0", @@ -7272,7 +7190,6 @@ "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, "license": "ISC" }, "node_modules/path-type": { @@ -7288,7 +7205,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", - "dev": true, "license": "MIT" }, "node_modules/pbkdf2": { @@ -7370,7 +7286,6 @@ "version": "8.5.4", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.4.tgz", "integrity": "sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==", - "dev": true, "funding": [ { "type": "opencollective", @@ -7399,7 +7314,6 @@ "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "dev": true, "funding": [ { "type": "github", @@ -7454,7 +7368,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", - "dev": true, "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -7481,14 +7394,12 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true, "license": "ISC" }, "node_modules/promise-retry": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, "license": "MIT", "dependencies": { "err-code": "^2.0.2", @@ -7666,7 +7577,6 @@ "version": "0.14.2", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -7842,7 +7752,6 @@ "version": "0.12.0", "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true, "license": "MIT", "engines": { "node": ">= 4" @@ -7874,7 +7783,6 @@ "version": "4.42.0", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.42.0.tgz", "integrity": "sha512-LW+Vse3BJPyGJGAJt1j8pWDKPd73QM8cRXYK1IxOBgL2AGLu7Xd2YOW0M2sLUBCkF5MshXXtMApyEAEzMVMsnw==", - "dev": true, "license": "MIT", "dependencies": { "@types/estree": "1.0.7" @@ -7914,7 +7822,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", - "dev": true, "license": "MIT" }, "node_modules/rrule": { @@ -7963,7 +7870,7 @@ "version": "7.8.2", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", - "dev": true, + "devOptional": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" @@ -8012,7 +7919,7 @@ "version": "1.89.1", "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.89.1.tgz", "integrity": "sha512-alvGGlyYdkSXYKOfS/TTxUD0993EYOe3adIPtwCWEg037qe183p2dkYnbaRsCLJFKt+QoyRzhsrbCsK7sbR6MA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@bufbuild/protobuf": "^2.0.0", @@ -8056,7 +7963,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -8073,7 +7979,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -8090,7 +7995,6 @@ "cpu": [ "riscv64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -8107,7 +8011,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -8124,7 +8027,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -8141,7 +8043,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -8158,7 +8059,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -8175,7 +8075,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -8192,7 +8091,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -8209,7 +8107,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -8226,7 +8123,6 @@ "cpu": [ "riscv64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -8243,7 +8139,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -8260,7 +8155,6 @@ "cpu": [ "riscv64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -8277,7 +8171,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -8294,7 +8187,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -8311,7 +8203,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -8325,7 +8216,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -8366,7 +8257,6 @@ "version": "7.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -8433,7 +8323,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -8446,7 +8335,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -8532,7 +8420,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, "license": "ISC", "engines": { "node": ">=14" @@ -8586,7 +8473,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -8615,7 +8501,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, "license": "Apache-2.0", "dependencies": { "spdx-expression-parse": "^3.0.0", @@ -8626,14 +8511,12 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dev": true, "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", @@ -8644,7 +8527,6 @@ "version": "3.0.21", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz", "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==", - "dev": true, "license": "CC0-1.0" }, "node_modules/stack-generator": { @@ -8736,7 +8618,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", @@ -8755,7 +8636,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -8770,7 +8650,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -8780,14 +8659,12 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, "license": "MIT" }, "node_modules/string-width-cjs/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -8800,7 +8677,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" @@ -8817,7 +8693,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -8830,7 +8705,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -8917,7 +8791,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/sync-child-process/-/sync-child-process-1.0.2.tgz", "integrity": "sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "sync-message-port": "^1.0.0" @@ -8930,7 +8804,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/sync-message-port/-/sync-message-port-1.1.3.tgz", "integrity": "sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=16.0.0" @@ -9002,7 +8876,6 @@ "version": "0.2.14", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", - "dev": true, "license": "MIT", "dependencies": { "fdir": "^6.4.4", @@ -9019,7 +8892,6 @@ "version": "6.4.5", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.5.tgz", "integrity": "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==", - "dev": true, "license": "MIT", "peerDependencies": { "picomatch": "^3 || ^4" @@ -9034,7 +8906,6 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -9185,7 +9056,7 @@ "version": "6.21.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/unicorn-magic": { @@ -9205,7 +9076,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, "license": "MIT", "engines": { "node": ">= 10.0.0" @@ -9215,7 +9085,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", - "dev": true, "funding": [ { "type": "opencollective", @@ -9321,7 +9190,6 @@ "version": "0.41.0", "resolved": "https://registry.npmjs.org/valibot/-/valibot-0.41.0.tgz", "integrity": "sha512-igDBb8CTYr8YTQlOKgaN9nSS0Be7z+WRuaeYqGf3Cjz3aKmSnqEmYnkfVjzIuumGqfHpa3fLIvMEAfhrpqN8ng==", - "dev": true, "license": "MIT", "peerDependencies": { "typescript": ">=5" @@ -9336,7 +9204,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, "license": "Apache-2.0", "dependencies": { "spdx-correct": "^3.0.0", @@ -9347,7 +9214,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", - "dev": true, "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -9390,14 +9256,13 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/vite": { "version": "6.3.5", "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", - "dev": true, "license": "MIT", "dependencies": { "esbuild": "^0.25.0", @@ -9472,7 +9337,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.2.tgz", "integrity": "sha512-Xj/jovjZvDXOq2FgLXu8NsY4uHUMWtzVmMC2LkCu9HWdr9Qu1Is5sanX3Z4jOFKdohfaWDnEJWp9pRP0vVpAcA==", - "dev": true, "license": "MIT", "dependencies": { "cac": "^6.7.14", @@ -9495,7 +9359,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true, "license": "MIT" }, "node_modules/vite-plugin-checker": { @@ -9644,7 +9507,6 @@ "version": "6.4.5", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.5.tgz", "integrity": "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==", - "dev": true, "license": "MIT", "peerDependencies": { "picomatch": "^3 || ^4" @@ -9659,7 +9521,6 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -9696,7 +9557,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", - "dev": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -9744,7 +9604,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", @@ -9763,7 +9622,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -9781,7 +9639,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -9791,14 +9648,12 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, "license": "MIT" }, "node_modules/wrap-ansi-cjs/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -9813,7 +9668,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -9826,7 +9680,6 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -9849,14 +9702,12 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, "license": "ISC" }, "node_modules/yaml": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz", "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==", - "dev": true, "license": "ISC", "optional": true, "peer": true, diff --git a/package.json b/package.json index 734fb6a7..b0aec170 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "@fullcalendar/interaction": "^6.1.17", "@fullcalendar/react": "^6.1.17", "@fullcalendar/timegrid": "^6.1.17", + "@react-router/fs-routes": "^7.6.2", "@react-router/node": "^7.6.0", "@rjsf/chakra-ui": "^6.0.0-beta.10", "@rjsf/core": "^6.0.0-beta.10", diff --git a/src/components/Auth.tsx b/src/components/Auth.tsx index f8c2171f..6289ff8b 100644 --- a/src/components/Auth.tsx +++ b/src/components/Auth.tsx @@ -22,7 +22,9 @@ export function AuthButton() { aria-label="Login" size="sm" variant="outline" - as={(props) => } + as={(props) => ( + + )} > diff --git a/src/routes.ts b/src/routes.ts index 9b1c29a2..4c05936c 100644 --- a/src/routes.ts +++ b/src/routes.ts @@ -1,10 +1,4 @@ -import { type RouteConfig, index, route } from "@react-router/dev/routes"; +import { type RouteConfig } from "@react-router/dev/routes"; +import { flatRoutes } from "@react-router/fs-routes"; -export default [ - index("./routes/Index.tsx"), - route("overrides/:prefillId?", "./routes/Overrides.tsx"), - route("export", "./routes/export.ts"), - route("login", "./routes/login.ts"), - route("callback", "./routes/callback.ts"), - route("logout", "./routes/logout.ts"), -] satisfies RouteConfig; +export default flatRoutes() satisfies RouteConfig; diff --git a/src/routes/Index.tsx b/src/routes/_index.tsx similarity index 99% rename from src/routes/Index.tsx rename to src/routes/_index.tsx index ce9ad8ef..01be39c6 100644 --- a/src/routes/Index.tsx +++ b/src/routes/_index.tsx @@ -25,7 +25,7 @@ import { useHydrant, HydrantContext, fetchNoCache } from "../lib/hydrant"; import { getClosestUrlName, type LatestTermInfo } from "../lib/dates"; import { SessionContext } from "../lib/auth"; -import type { Route } from "./+types/Index"; +import type { Route } from "./+types/_index"; // eslint-disable-next-line react-refresh/only-export-components export async function clientLoader({ request }: Route.ClientLoaderArgs) { diff --git a/src/routes/callback.ts b/src/routes/auth.callback.ts similarity index 96% rename from src/routes/callback.ts rename to src/routes/auth.callback.ts index 6c75a934..d0f52a41 100644 --- a/src/routes/callback.ts +++ b/src/routes/auth.callback.ts @@ -7,7 +7,7 @@ import { FIREROAD_FETCH_TOKEN_URL, getSession, } from "../lib/auth"; -import type { Route } from "./+types/callback"; +import type { Route } from "./+types/auth.callback"; export async function clientLoader({ request }: Route.ClientLoaderArgs) { const url = new URL(request.url); diff --git a/src/routes/login.ts b/src/routes/auth.login.ts similarity index 76% rename from src/routes/login.ts rename to src/routes/auth.login.ts index 506c7138..3663de6a 100644 --- a/src/routes/login.ts +++ b/src/routes/auth.login.ts @@ -1,13 +1,13 @@ import { redirect } from "react-router"; import { FIREROAD_LOGIN_URL } from "../lib/auth"; -import type { Route } from "./+types/login"; +import type { Route } from "./+types/auth.login"; export function clientLoader({ request }: Route.ClientLoaderArgs) { const authorizationURL = new URL(FIREROAD_LOGIN_URL); const currentUrl = new URL(request.url); - const callbackUrl = new URL(currentUrl.origin + "/callback"); + const callbackUrl = new URL(currentUrl.origin + "/auth/callback"); authorizationURL.searchParams.set("redirect", callbackUrl.toString()); diff --git a/src/routes/logout.ts b/src/routes/auth.logout.ts similarity index 66% rename from src/routes/logout.ts rename to src/routes/auth.logout.ts index ec923609..152ee7a3 100644 --- a/src/routes/logout.ts +++ b/src/routes/auth.logout.ts @@ -1,9 +1,9 @@ import { replace } from "react-router"; import { destroySession, getSession } from "../lib/auth"; -// import type { Route } from "./+types/callback"; +import type { Route } from "./+types/auth.callback"; -export async function clientLoader() { +export async function clientLoader(_: Route.ClientLoaderArgs) { const session = await getSession(document.cookie); document.cookie = await destroySession(session); diff --git a/src/routes/Overrides.tsx b/src/routes/overrides.($prefillId).tsx similarity index 98% rename from src/routes/Overrides.tsx rename to src/routes/overrides.($prefillId).tsx index fce35de8..2700560b 100644 --- a/src/routes/Overrides.tsx +++ b/src/routes/overrides.($prefillId).tsx @@ -6,7 +6,7 @@ import validator from "@rjsf/validator-ajv8"; import type { JSONSchema7Definition } from "json-schema"; import { Link as RouterLink } from "react-router"; -import type { Route } from "./+types/Overrides"; +import type { Route } from "./+types/overrides.($prefillId)"; import TOML from "smol-toml"; @@ -60,9 +60,7 @@ export async function clientLoader({ params }: Route.ClientLoaderArgs) { ) as typeof overrides; let prefillData: Record[] = []; - const prefillId = ( - params as Record - ).prefillId?.toUpperCase(); + const prefillId = params.prefillId?.toUpperCase(); const getDataFromFile = async (fileName: string) => { try { From fa8326a6b89b537c39bace3a17b27ceb66e92dff Mon Sep 17 00:00:00 2001 From: Diego Temkin <65834932+dtemkin1@users.noreply.github.com> Date: Mon, 9 Jun 2025 18:12:10 -0400 Subject: [PATCH 11/29] nicer auth button --- src/components/Auth.tsx | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/src/components/Auth.tsx b/src/components/Auth.tsx index 6289ff8b..1e347627 100644 --- a/src/components/Auth.tsx +++ b/src/components/Auth.tsx @@ -1,32 +1,33 @@ import { IconButton } from "@chakra-ui/react"; import { Tooltip } from "./ui/tooltip"; -import { LuUser } from "react-icons/lu"; +import { LuLogIn, LuLogOut } from "react-icons/lu"; import { Link } from "react-router"; -import { useContext } from "react"; +import { useContext, useMemo } from "react"; import { SessionContext } from "../lib/auth"; export function AuthButton() { const session = useContext(SessionContext); - const username = session?.get("academic_id"); + const username = useMemo(() => session?.get("academic_id"), [session]); - return ( + return username ? ( + // LOGGED IN - ( - - )} - > - + + + + + + + ) : ( + // LOGGED OUT + + + + + ); From 696b90b51dd533c8afb758d6ff050f2cec2e73c2 Mon Sep 17 00:00:00 2001 From: Diego Temkin <65834932+dtemkin1@users.noreply.github.com> Date: Mon, 9 Jun 2025 19:31:24 -0400 Subject: [PATCH 12/29] clean up, add next search param (pending server fix) --- src/components/Auth.tsx | 41 ++++++++++++++++++++----------------- src/routes/auth.callback.ts | 3 ++- src/routes/auth.login.ts | 2 +- src/routes/auth.logout.ts | 7 +++++-- 4 files changed, 30 insertions(+), 23 deletions(-) diff --git a/src/components/Auth.tsx b/src/components/Auth.tsx index 1e347627..6ae89803 100644 --- a/src/components/Auth.tsx +++ b/src/components/Auth.tsx @@ -2,31 +2,34 @@ import { IconButton } from "@chakra-ui/react"; import { Tooltip } from "./ui/tooltip"; import { LuLogIn, LuLogOut } from "react-icons/lu"; -import { Link } from "react-router"; +import { Link, useLocation } from "react-router"; import { useContext, useMemo } from "react"; import { SessionContext } from "../lib/auth"; export function AuthButton() { const session = useContext(SessionContext); - const username = useMemo(() => session?.get("academic_id"), [session]); + const location = useLocation(); - return username ? ( - // LOGGED IN - - - - - - - - ) : ( - // LOGGED OUT - - - - + const [tooltipContent, label, pathname, UserIcon] = useMemo(() => { + const username = session?.get("academic_id"); + + if (username) { + return [ + `Welcome ${username.split("@")[0]}! Click here to log out.`, + "Logout", + "/auth/logout", + LuLogOut, + ]; + } else { + return ["Click to log in!", "Login", "/auth/login", LuLogIn]; + } + }, [session]); + + return ( + + + + diff --git a/src/routes/auth.callback.ts b/src/routes/auth.callback.ts index d0f52a41..41c5e74e 100644 --- a/src/routes/auth.callback.ts +++ b/src/routes/auth.callback.ts @@ -12,6 +12,7 @@ import type { Route } from "./+types/auth.callback"; export async function clientLoader({ request }: Route.ClientLoaderArgs) { const url = new URL(request.url); const code = url.searchParams.get("code"); + const next = url.searchParams.get("next"); if (!code) { throw data(null, 400); @@ -42,7 +43,7 @@ export async function clientLoader({ request }: Route.ClientLoaderArgs) { document.cookie = await commitSession(session); - return replace("/"); + return replace(next ?? "/"); } catch { throw data(null, 500); } diff --git a/src/routes/auth.login.ts b/src/routes/auth.login.ts index 3663de6a..e010a455 100644 --- a/src/routes/auth.login.ts +++ b/src/routes/auth.login.ts @@ -7,7 +7,7 @@ export function clientLoader({ request }: Route.ClientLoaderArgs) { const authorizationURL = new URL(FIREROAD_LOGIN_URL); const currentUrl = new URL(request.url); - const callbackUrl = new URL(currentUrl.origin + "/auth/callback"); + const callbackUrl = new URL(currentUrl.origin + "/auth/callback" + currentUrl.search); authorizationURL.searchParams.set("redirect", callbackUrl.toString()); diff --git a/src/routes/auth.logout.ts b/src/routes/auth.logout.ts index 152ee7a3..c5169b16 100644 --- a/src/routes/auth.logout.ts +++ b/src/routes/auth.logout.ts @@ -3,9 +3,12 @@ import { replace } from "react-router"; import { destroySession, getSession } from "../lib/auth"; import type { Route } from "./+types/auth.callback"; -export async function clientLoader(_: Route.ClientLoaderArgs) { +export async function clientLoader({ request }: Route.ClientLoaderArgs) { + const url = new URL(request.url); + const next = url.searchParams.get("next"); + const session = await getSession(document.cookie); document.cookie = await destroySession(session); - return replace("/"); + return replace(next ?? "/"); } From 5731a9c6ff06cbe8671f7df469799cfd284053d7 Mon Sep 17 00:00:00 2001 From: Diego Temkin <65834932+dtemkin1@users.noreply.github.com> Date: Mon, 9 Jun 2025 19:55:33 -0400 Subject: [PATCH 13/29] format... --- src/routes/auth.login.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/routes/auth.login.ts b/src/routes/auth.login.ts index e010a455..ce1f2cd4 100644 --- a/src/routes/auth.login.ts +++ b/src/routes/auth.login.ts @@ -7,7 +7,9 @@ export function clientLoader({ request }: Route.ClientLoaderArgs) { const authorizationURL = new URL(FIREROAD_LOGIN_URL); const currentUrl = new URL(request.url); - const callbackUrl = new URL(currentUrl.origin + "/auth/callback" + currentUrl.search); + const callbackUrl = new URL( + currentUrl.origin + "/auth/callback" + currentUrl.search, + ); authorizationURL.searchParams.set("redirect", callbackUrl.toString()); From bed82767c732bae8505b315f8e2dc38cbf277da0 Mon Sep 17 00:00:00 2001 From: Diego Temkin <65834932+dtemkin1@users.noreply.github.com> Date: Mon, 9 Jun 2025 19:57:55 -0400 Subject: [PATCH 14/29] use url correctly... --- src/routes/auth.login.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/routes/auth.login.ts b/src/routes/auth.login.ts index ce1f2cd4..ecb16fdb 100644 --- a/src/routes/auth.login.ts +++ b/src/routes/auth.login.ts @@ -8,7 +8,8 @@ export function clientLoader({ request }: Route.ClientLoaderArgs) { const currentUrl = new URL(request.url); const callbackUrl = new URL( - currentUrl.origin + "/auth/callback" + currentUrl.search, + "/auth/callback" + currentUrl.search, + currentUrl.origin, ); authorizationURL.searchParams.set("redirect", callbackUrl.toString()); From 0bc4e14286030b0069bae7391082b678c3f652bb Mon Sep 17 00:00:00 2001 From: Diego Temkin <65834932+dtemkin1@users.noreply.github.com> Date: Fri, 13 Jun 2025 09:49:01 -0400 Subject: [PATCH 15/29] run client loader during hydration --- src/routes/_index.tsx | 2 ++ src/routes/auth.callback.ts | 2 ++ src/routes/auth.login.ts | 2 ++ src/routes/auth.logout.ts | 2 ++ src/routes/export.ts | 2 ++ src/routes/overrides.($prefillId).tsx | 2 ++ 6 files changed, 12 insertions(+) diff --git a/src/routes/_index.tsx b/src/routes/_index.tsx index 01be39c6..7982990d 100644 --- a/src/routes/_index.tsx +++ b/src/routes/_index.tsx @@ -70,6 +70,8 @@ export async function clientLoader({ request }: Route.ClientLoaderArgs) { }; } +clientLoader.hydrate = true as const; + /** The application entry. */ function HydrantApp() { const { state } = useContext(HydrantContext); diff --git a/src/routes/auth.callback.ts b/src/routes/auth.callback.ts index 41c5e74e..e71821e5 100644 --- a/src/routes/auth.callback.ts +++ b/src/routes/auth.callback.ts @@ -48,3 +48,5 @@ export async function clientLoader({ request }: Route.ClientLoaderArgs) { throw data(null, 500); } } + +clientLoader.hydrate = true as const; diff --git a/src/routes/auth.login.ts b/src/routes/auth.login.ts index ecb16fdb..ffa5fc39 100644 --- a/src/routes/auth.login.ts +++ b/src/routes/auth.login.ts @@ -16,3 +16,5 @@ export function clientLoader({ request }: Route.ClientLoaderArgs) { return redirect(authorizationURL.toString()); } + +clientLoader.hydrate = true as const; diff --git a/src/routes/auth.logout.ts b/src/routes/auth.logout.ts index c5169b16..692b8223 100644 --- a/src/routes/auth.logout.ts +++ b/src/routes/auth.logout.ts @@ -12,3 +12,5 @@ export async function clientLoader({ request }: Route.ClientLoaderArgs) { return replace(next ?? "/"); } + +clientLoader.hydrate = true as const; diff --git a/src/routes/export.ts b/src/routes/export.ts index 5bf56a14..7d3f90d7 100644 --- a/src/routes/export.ts +++ b/src/routes/export.ts @@ -58,3 +58,5 @@ export async function clientLoader({ request }: Route.ClientLoaderArgs) { const filledCallback = `${callback}?hydrant=true${encodedClasses}`; return redirect(filledCallback); } + +clientLoader.hydrate = true as const; diff --git a/src/routes/overrides.($prefillId).tsx b/src/routes/overrides.($prefillId).tsx index 4dd7caf9..7fdf2aca 100644 --- a/src/routes/overrides.($prefillId).tsx +++ b/src/routes/overrides.($prefillId).tsx @@ -99,6 +99,8 @@ export async function clientLoader({ params }: Route.ClientLoaderArgs) { return { overrideNames, prefillData, prefillId }; } +clientLoader.hydrate = true as const; + /** The main application. */ export default function App({ loaderData }: Route.ComponentProps) { const { overrideNames, prefillData, prefillId } = loaderData; From f36cc728e76a34500b95c40db0777bd06f19d0ea Mon Sep 17 00:00:00 2001 From: Diego Temkin <65834932+dtemkin1@users.noreply.github.com> Date: Fri, 13 Jun 2025 11:30:42 -0400 Subject: [PATCH 16/29] bump packages --- README.md | 8 +- package-lock.json | 1925 +++++++++++++------------ package.json | 34 +- react-router.config.ts | 8 + src/routes/overrides.($prefillId).tsx | 2 +- 5 files changed, 998 insertions(+), 979 deletions(-) diff --git a/README.md b/README.md index 19e8e19f..7fba680a 100644 --- a/README.md +++ b/README.md @@ -60,13 +60,13 @@ _I want to change..._ - _...the data available to Hydrant._ - The entry point is `scrapers/update.py`. - - This goes through the client loader in `src/routes/Index.tsx`, which looks for the data. + - This goes through the client loader in `src/routes/_index.tsx`, which looks for the data. - The exit point is through the constructor of `State` in `src/lib/state.ts`. - _...the way Hydrant behaves._ - The entry point is `src/lib/state.ts`. - - The exit point is through `src/routes/Index.tsx`, which constructs `hydrant` and adds it to a reusable context. + - The exit point is through `src/routes/_index.tsx`, which constructs `hydrant` and adds it to a reusable context. - _...the way Hydrant looks._ - - The entry point is `src/routes/Index.tsx`. + - The entry point is `src/routes/_index.tsx`. - We use [Chakra UI](https://chakra-ui.com/) as our component library. Avoid writing CSS. - _...routes available in Hydrant._ - Routes are stored in `src/routes.ts` and can be modified there. @@ -79,6 +79,6 @@ Try to introduce as few technologies as possible to keep this mostly future-proo - some MIT class teaches how to use it - e.g. web.lab teaches React, 6.102 teaches Typescript - it's tiny and used in only a small part of the app - - e.g. msgpack-lite is only used for URL encoding, nanoid is only used to make IDs + - e.g. msgpack is only used for URL encoding, nanoid is only used to make IDs - it's a big, popular, well-documented project that's been around for several years - e.g. FullCalendar has been around since 2010, Chakra UI has a large community diff --git a/package-lock.json b/package-lock.json index eee4ef6a..59f0e759 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,43 +8,43 @@ "name": "hydrant", "version": "0.1.0", "dependencies": { - "@chakra-ui/react": "^3.20.0", + "@chakra-ui/react": "^3.21.0", "@emotion/react": "^11.14.0", - "@fontsource-variable/inter": "^5.2.5", + "@fontsource-variable/inter": "^5.2.6", "@fullcalendar/core": "^6.1.17", "@fullcalendar/interaction": "^6.1.17", "@fullcalendar/react": "^6.1.17", "@fullcalendar/timegrid": "^6.1.17", "@react-router/fs-routes": "^7.6.2", - "@react-router/node": "^7.6.0", - "@rjsf/chakra-ui": "^6.0.0-beta.10", - "@rjsf/core": "^6.0.0-beta.10", - "@rjsf/utils": "^6.0.0-beta.10", - "@rjsf/validator-ajv8": "^6.0.0-beta.10", + "@react-router/node": "^7.6.2", + "@rjsf/chakra-ui": "^6.0.0-beta.11", + "@rjsf/core": "^6.0.0-beta.11", + "@rjsf/utils": "^6.0.0-beta.11", + "@rjsf/validator-ajv8": "^6.0.0-beta.11", "ag-grid-react": "^33.3.2", "html-entities": "^2.6.0", "ical-generator": "^9.0.0", "isbot": "^5.1.28", - "lucide-react": "^0.511.0", + "lucide-react": "^0.515.0", "msgpackr": "^1.11.4", "nanoid": "^5.1.5", "next-themes": "^0.4.6", "react": "^19.1.0", "react-dom": "^19.1.0", "react-icons": "^5.5.0", - "react-router": "^7.6.0", + "react-router": "^7.6.2", "react-use": "^17.6.0", "rrule": "^2.8.1", "smol-toml": "^1.3.4", "timezones-ical-library": "^1.10.0" }, "devDependencies": { - "@chakra-ui/cli": "^3.20.0", - "@eslint/compat": "^1.2.9", - "@eslint/js": "^9.27.0", + "@chakra-ui/cli": "^3.21.0", + "@eslint/compat": "^1.3.0", + "@eslint/js": "^9.28.0", "@react-router/dev": "^7.6.2", - "@types/node": "^22.15.30", - "@types/react": "^19.1.6", + "@types/node": "^22.15.31", + "@types/react": "^19.1.8", "@types/react-dom": "19.1.5", "eslint": "^9.28.0", "eslint-config-prettier": "^10.1.5", @@ -52,9 +52,9 @@ "eslint-plugin-react-refresh": "^0.4.20", "globals": "^16.2.0", "prettier": "^3.5.3", - "sass-embedded": "^1.89.1", + "sass-embedded": "^1.89.2", "typescript": "^5.8.3", - "typescript-eslint": "^8.33.1", + "typescript-eslint": "^8.34.0", "vite": "^6.3.5", "vite-plugin-checker": "^0.9.3", "vite-plugin-node-polyfills": "^0.23.0", @@ -78,69 +78,69 @@ } }, "node_modules/@ark-ui/react": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@ark-ui/react/-/react-5.12.0.tgz", - "integrity": "sha512-UV89EqyESZoyr6rtvrbFJn/FejpswhvRVcfK44dZDU6h6UY8CxfR/6Ayvrq9UtFdD0dEawqwWrXS22l8Y05Nnw==", - "license": "MIT", - "dependencies": { - "@internationalized/date": "3.8.1", - "@zag-js/accordion": "1.15.0", - "@zag-js/anatomy": "1.15.0", - "@zag-js/angle-slider": "1.15.0", - "@zag-js/auto-resize": "1.15.0", - "@zag-js/avatar": "1.15.0", - "@zag-js/carousel": "1.15.0", - "@zag-js/checkbox": "1.15.0", - "@zag-js/clipboard": "1.15.0", - "@zag-js/collapsible": "1.15.0", - "@zag-js/collection": "1.15.0", - "@zag-js/color-picker": "1.15.0", - "@zag-js/color-utils": "1.15.0", - "@zag-js/combobox": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/date-picker": "1.15.0", - "@zag-js/date-utils": "1.15.0", - "@zag-js/dialog": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/editable": "1.15.0", - "@zag-js/file-upload": "1.15.0", - "@zag-js/file-utils": "1.15.0", - "@zag-js/floating-panel": "1.15.0", - "@zag-js/focus-trap": "1.15.0", - "@zag-js/highlight-word": "1.15.0", - "@zag-js/hover-card": "1.15.0", - "@zag-js/i18n-utils": "1.15.0", - "@zag-js/listbox": "1.15.0", - "@zag-js/menu": "1.15.0", - "@zag-js/number-input": "1.15.0", - "@zag-js/pagination": "1.15.0", - "@zag-js/password-input": "1.15.0", - "@zag-js/pin-input": "1.15.0", - "@zag-js/popover": "1.15.0", - "@zag-js/presence": "1.15.0", - "@zag-js/progress": "1.15.0", - "@zag-js/qr-code": "1.15.0", - "@zag-js/radio-group": "1.15.0", - "@zag-js/rating-group": "1.15.0", - "@zag-js/react": "1.15.0", - "@zag-js/select": "1.15.0", - "@zag-js/signature-pad": "1.15.0", - "@zag-js/slider": "1.15.0", - "@zag-js/splitter": "1.15.0", - "@zag-js/steps": "1.15.0", - "@zag-js/switch": "1.15.0", - "@zag-js/tabs": "1.15.0", - "@zag-js/tags-input": "1.15.0", - "@zag-js/time-picker": "1.15.0", - "@zag-js/timer": "1.15.0", - "@zag-js/toast": "1.15.0", - "@zag-js/toggle": "1.15.0", - "@zag-js/toggle-group": "1.15.0", - "@zag-js/tooltip": "1.15.0", - "@zag-js/tour": "1.15.0", - "@zag-js/tree-view": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/@ark-ui/react/-/react-5.14.0.tgz", + "integrity": "sha512-7WWlCM3SowtF01e9NouuO4T6SYuKTM1dovR+2NZuuWTlqTBlvZ+1vPHS6BeqzXriwMLU7QUU+Y0i/TcI6/s/Sg==", + "license": "MIT", + "dependencies": { + "@internationalized/date": "3.8.2", + "@zag-js/accordion": "1.15.2", + "@zag-js/anatomy": "1.15.2", + "@zag-js/angle-slider": "1.15.2", + "@zag-js/auto-resize": "1.15.2", + "@zag-js/avatar": "1.15.2", + "@zag-js/carousel": "1.15.2", + "@zag-js/checkbox": "1.15.2", + "@zag-js/clipboard": "1.15.2", + "@zag-js/collapsible": "1.15.2", + "@zag-js/collection": "1.15.2", + "@zag-js/color-picker": "1.15.2", + "@zag-js/color-utils": "1.15.2", + "@zag-js/combobox": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/date-picker": "1.15.2", + "@zag-js/date-utils": "1.15.2", + "@zag-js/dialog": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/editable": "1.15.2", + "@zag-js/file-upload": "1.15.2", + "@zag-js/file-utils": "1.15.2", + "@zag-js/floating-panel": "1.15.2", + "@zag-js/focus-trap": "1.15.2", + "@zag-js/highlight-word": "1.15.2", + "@zag-js/hover-card": "1.15.2", + "@zag-js/i18n-utils": "1.15.2", + "@zag-js/listbox": "1.15.2", + "@zag-js/menu": "1.15.2", + "@zag-js/number-input": "1.15.2", + "@zag-js/pagination": "1.15.2", + "@zag-js/password-input": "1.15.2", + "@zag-js/pin-input": "1.15.2", + "@zag-js/popover": "1.15.2", + "@zag-js/presence": "1.15.2", + "@zag-js/progress": "1.15.2", + "@zag-js/qr-code": "1.15.2", + "@zag-js/radio-group": "1.15.2", + "@zag-js/rating-group": "1.15.2", + "@zag-js/react": "1.15.2", + "@zag-js/select": "1.15.2", + "@zag-js/signature-pad": "1.15.2", + "@zag-js/slider": "1.15.2", + "@zag-js/splitter": "1.15.2", + "@zag-js/steps": "1.15.2", + "@zag-js/switch": "1.15.2", + "@zag-js/tabs": "1.15.2", + "@zag-js/tags-input": "1.15.2", + "@zag-js/time-picker": "1.15.2", + "@zag-js/timer": "1.15.2", + "@zag-js/toast": "1.15.2", + "@zag-js/toggle": "1.15.2", + "@zag-js/toggle-group": "1.15.2", + "@zag-js/tooltip": "1.15.2", + "@zag-js/tour": "1.15.2", + "@zag-js/tree-view": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" }, "peerDependencies": { "react": ">=18.0.0", @@ -617,9 +617,9 @@ "license": "(Apache-2.0 AND BSD-3-Clause)" }, "node_modules/@chakra-ui/cli": { - "version": "3.20.0", - "resolved": "https://registry.npmjs.org/@chakra-ui/cli/-/cli-3.20.0.tgz", - "integrity": "sha512-dlvcbghH7Du5id5WNA8J1S86c9EhvxKgphvo7uChJI0qpWmKqfdfYhDci1AOGT5JEHbLIaATCxDYoLqAFvZmMw==", + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/cli/-/cli-3.21.0.tgz", + "integrity": "sha512-wZwv4OpMivxVFbYgEUYuy4LRVrRiQlp3v0YPzAq5xXRctpWhlsIFFqJMKCBtM/+s55+R1pnnwLKeuucZDml/SA==", "dev": true, "license": "MIT", "dependencies": { @@ -651,12 +651,12 @@ } }, "node_modules/@chakra-ui/react": { - "version": "3.20.0", - "resolved": "https://registry.npmjs.org/@chakra-ui/react/-/react-3.20.0.tgz", - "integrity": "sha512-zHYQAUqrT2pZZ/Xi+sskRC/An9q4ZelLPJkFHdobftTYkcFo1FtkMbBO0AEBZhb/6mZGyfw3JLflSawkuR++uQ==", + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react/-/react-3.21.0.tgz", + "integrity": "sha512-Ajw6GuUhfNhMagTM9cO1Lg/w/HSQUwsv55j2QvvvPw/dk01wHiGi1aihfuCLpa6QY4ElLNs6SS3f78xI9Fwo6A==", "license": "MIT", "dependencies": { - "@ark-ui/react": "5.12.0", + "@ark-ui/react": "5.14.0", "@emotion/is-prop-valid": "1.3.1", "@emotion/serialize": "1.3.3", "@emotion/use-insertion-effect-with-fallbacks": "1.2.0", @@ -1260,9 +1260,9 @@ } }, "node_modules/@eslint/compat": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.2.9.tgz", - "integrity": "sha512-gCdSY54n7k+driCadyMNv8JSPzYLeDVM/ikZRtvtROBpRdFSkS8W9A82MqsaY7lZuwL0wiapgD0NT1xT0hyJsA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.3.0.tgz", + "integrity": "sha512-ZBygRBqpDYiIHsN+d1WyHn3TYgzgpzLEcgJUxTATyiInQbKZz6wZb6+ljwdg8xeeOe4v03z6Uh6lELiw0/mVhQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1278,9 +1278,9 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz", - "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.1.tgz", + "integrity": "sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1292,10 +1292,34 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/@eslint/config-helpers": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.2.tgz", - "integrity": "sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.3.tgz", + "integrity": "sha512-u180qk2Um1le4yf0ruXH3PYFeEZeYC3p/4wCTKrr2U1CmGdzGi3KtY0nuPDH48UJxlKCC5RDzbcbh4X0XlqgHg==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1356,6 +1380,17 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "14.0.0", "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", @@ -1376,6 +1411,19 @@ "dev": true, "license": "MIT" }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/@eslint/js": { "version": "9.28.0", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.28.0.tgz", @@ -1400,19 +1448,32 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.1.tgz", - "integrity": "sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.2.tgz", + "integrity": "sha512-4SaFZCNfJqvk/kenHpI8xvN42DMaoycy4PzKc5otHxRswww1kAt82OlBuwRVLofCACCTZEcla2Ydxv8scMXaTg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.14.0", + "@eslint/core": "^0.15.0", "levn": "^0.4.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@eslint/plugin-kit/node_modules/@eslint/core": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.0.tgz", + "integrity": "sha512-b7ePw78tEWWkpgZCDYkbqDOP8dmM6qe+AOC6iuJqlq1R/0ahMAeH3qynpnqKFGkMltrp44ohV4ubGyvLX28tzw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@floating-ui/core": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.1.tgz", @@ -1439,9 +1500,9 @@ "license": "MIT" }, "node_modules/@fontsource-variable/inter": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/@fontsource-variable/inter/-/inter-5.2.5.tgz", - "integrity": "sha512-TrWffUAFOnT8zroE9YmGybagoOgM/HjRqMQ8k9R0vVgXlnUh/vnpbGPAS/Caz1KIlOPnPGh6fvJbb7DHbFCncA==", + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/@fontsource-variable/inter/-/inter-5.2.6.tgz", + "integrity": "sha512-jks/bficUPQ9nn7GvXvHtlQIPudW7Wx8CrlZoY8bhxgeobNxlQan8DclUJuYF2loYRrGpfrhCIZZspXYysiVGg==", "license": "OFL-1.1", "funding": { "url": "https://github.com/sponsors/ayuhito" @@ -1564,18 +1625,18 @@ } }, "node_modules/@internationalized/date": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.8.1.tgz", - "integrity": "sha512-PgVE6B6eIZtzf9Gu5HvJxRK3ufUFz9DhspELuhW/N0GuMGMTLvPQNRkHP2hTuP9lblOk+f+1xi96sPiPXANXAA==", + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.8.2.tgz", + "integrity": "sha512-/wENk7CbvLbkUvX1tu0mwq49CVkkWpkXubGel6birjRPyo6uQ4nQpnq5xZu823zRCwwn82zgHrvgF1vZyvmVgA==", "license": "Apache-2.0", "dependencies": { "@swc/helpers": "^0.5.0" } }, "node_modules/@internationalized/number": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.6.2.tgz", - "integrity": "sha512-E5QTOlMg9wo5OrKdHD6edo1JJlIoOsylh0+mbf0evi1tHJwMZfJSaBpGtnJV9N7w3jeiioox9EG/EWRWPh82vg==", + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.6.3.tgz", + "integrity": "sha512-p+Zh1sb6EfrfVaS86jlHGQ9HA66fJhV9x5LiE5vCbZtXEHAuhcmUZUdZ4WrFpUBfNalr2OkAJI5AcKEQF+Lebw==", "license": "Apache-2.0", "dependencies": { "@swc/helpers": "^0.5.0" @@ -1976,30 +2037,6 @@ } } }, - "node_modules/@react-router/fs-routes/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@react-router/fs-routes/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@react-router/node": { "version": "7.6.2", "resolved": "https://registry.npmjs.org/@react-router/node/-/node-7.6.2.tgz", @@ -2025,9 +2062,9 @@ } }, "node_modules/@rjsf/chakra-ui": { - "version": "6.0.0-beta.10", - "resolved": "https://registry.npmjs.org/@rjsf/chakra-ui/-/chakra-ui-6.0.0-beta.10.tgz", - "integrity": "sha512-xJgPhcFomyBa/6ZTR0PbFxec/edAfVwN3Mi/hjt72Z76o+rGg51GUD54/q+o6IjED18AvIqeLyKQKWJ3rc5yUg==", + "version": "6.0.0-beta.11", + "resolved": "https://registry.npmjs.org/@rjsf/chakra-ui/-/chakra-ui-6.0.0-beta.11.tgz", + "integrity": "sha512-4kfE1WhQIQKwkdofM2wwYRgN04PVgkza291ua++JPTjCgeCvkPpr7GA1bINPULJQnaSxgMHtn3xh7f/mByRuHw==", "license": "Apache-2.0", "dependencies": { "react-icons": "^5.4.0", @@ -2045,9 +2082,9 @@ } }, "node_modules/@rjsf/core": { - "version": "6.0.0-beta.10", - "resolved": "https://registry.npmjs.org/@rjsf/core/-/core-6.0.0-beta.10.tgz", - "integrity": "sha512-1I474uQoZL6K18zsyoaYhSaJa1Tx48Rrid0DXIqp7nqqNNdrD3B0AezUxNAETQDnTe2akYYbF1YTi7n43uNaiA==", + "version": "6.0.0-beta.11", + "resolved": "https://registry.npmjs.org/@rjsf/core/-/core-6.0.0-beta.11.tgz", + "integrity": "sha512-tadVN0B7CjAzl2p3HDsZKR3V8iCIiQMncblfCYSK0PAh9RqIjigFp8ovrZ3UqkVIRRcD+tQ6Y+psY5yEB4GWqA==", "license": "Apache-2.0", "dependencies": { "lodash": "^4.17.21", @@ -2065,9 +2102,9 @@ } }, "node_modules/@rjsf/utils": { - "version": "6.0.0-beta.10", - "resolved": "https://registry.npmjs.org/@rjsf/utils/-/utils-6.0.0-beta.10.tgz", - "integrity": "sha512-FeY1e19vqmsYBp0FIAZjzMYzYtQt6diUAM1IEanrOYHs3X/vtymvNgq21fjzDTuOEzgsu2MIPZL66WxHtN1fDA==", + "version": "6.0.0-beta.11", + "resolved": "https://registry.npmjs.org/@rjsf/utils/-/utils-6.0.0-beta.11.tgz", + "integrity": "sha512-tQeyacweXmquRjPcXCVS1pMFfhamFSoqpczNi0zEvMbx+mfu2b6CgoRKi2Hm8KgFEafdVBF+6HLqs+0FnYhRlQ==", "license": "Apache-2.0", "dependencies": { "fast-uri": "^3.0.6", @@ -2086,9 +2123,9 @@ } }, "node_modules/@rjsf/validator-ajv8": { - "version": "6.0.0-beta.10", - "resolved": "https://registry.npmjs.org/@rjsf/validator-ajv8/-/validator-ajv8-6.0.0-beta.10.tgz", - "integrity": "sha512-wgnbWYIT1M7IrFian18d9CpALkP6xQFD9Hn9xh0gQP+NDHm70hdSJCsvv/tw9zzqlAW3PLslbXd4EJ7Fk67K9w==", + "version": "6.0.0-beta.11", + "resolved": "https://registry.npmjs.org/@rjsf/validator-ajv8/-/validator-ajv8-6.0.0-beta.11.tgz", + "integrity": "sha512-gR8pbCsR91LiayDKdIz7d7m7A2ozUv9J+7Tpl5/qUQ69Q/NmnHo+cAiVW04/yvqzf1cbRwMgkc5pZyu01Uu1/w==", "license": "Apache-2.0", "dependencies": { "ajv": "^8.12.0", @@ -2163,9 +2200,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.42.0.tgz", - "integrity": "sha512-gldmAyS9hpj+H6LpRNlcjQWbuKUtb94lodB9uCz71Jm+7BxK1VIOo7y62tZZwxhA7j1ylv/yQz080L5WkS+LoQ==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.43.0.tgz", + "integrity": "sha512-Krjy9awJl6rKbruhQDgivNbD1WuLb8xAclM4IR4cN5pHGAs2oIMMQJEiC3IC/9TZJ+QZkmZhlMO/6MBGxPidpw==", "cpu": [ "arm" ], @@ -2176,9 +2213,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.42.0.tgz", - "integrity": "sha512-bpRipfTgmGFdCZDFLRvIkSNO1/3RGS74aWkJJTFJBH7h3MRV4UijkaEUeOMbi9wxtxYmtAbVcnMtHTPBhLEkaw==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.43.0.tgz", + "integrity": "sha512-ss4YJwRt5I63454Rpj+mXCXicakdFmKnUNxr1dLK+5rv5FJgAxnN7s31a5VchRYxCFWdmnDWKd0wbAdTr0J5EA==", "cpu": [ "arm64" ], @@ -2189,9 +2226,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.42.0.tgz", - "integrity": "sha512-JxHtA081izPBVCHLKnl6GEA0w3920mlJPLh89NojpU2GsBSB6ypu4erFg/Wx1qbpUbepn0jY4dVWMGZM8gplgA==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.43.0.tgz", + "integrity": "sha512-eKoL8ykZ7zz8MjgBenEF2OoTNFAPFz1/lyJ5UmmFSz5jW+7XbH1+MAgCVHy72aG59rbuQLcJeiMrP8qP5d/N0A==", "cpu": [ "arm64" ], @@ -2202,9 +2239,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.42.0.tgz", - "integrity": "sha512-rv5UZaWVIJTDMyQ3dCEK+m0SAn6G7H3PRc2AZmExvbDvtaDc+qXkei0knQWcI3+c9tEs7iL/4I4pTQoPbNL2SA==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.43.0.tgz", + "integrity": "sha512-SYwXJgaBYW33Wi/q4ubN+ldWC4DzQY62S4Ll2dgfr/dbPoF50dlQwEaEHSKrQdSjC6oIe1WgzosoaNoHCdNuMg==", "cpu": [ "x64" ], @@ -2215,9 +2252,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.42.0.tgz", - "integrity": "sha512-fJcN4uSGPWdpVmvLuMtALUFwCHgb2XiQjuECkHT3lWLZhSQ3MBQ9pq+WoWeJq2PrNxr9rPM1Qx+IjyGj8/c6zQ==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.43.0.tgz", + "integrity": "sha512-SV+U5sSo0yujrjzBF7/YidieK2iF6E7MdF6EbYxNz94lA+R0wKl3SiixGyG/9Klab6uNBIqsN7j4Y/Fya7wAjQ==", "cpu": [ "arm64" ], @@ -2228,9 +2265,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.42.0.tgz", - "integrity": "sha512-CziHfyzpp8hJpCVE/ZdTizw58gr+m7Y2Xq5VOuCSrZR++th2xWAz4Nqk52MoIIrV3JHtVBhbBsJcAxs6NammOQ==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.43.0.tgz", + "integrity": "sha512-J7uCsiV13L/VOeHJBo5SjasKiGxJ0g+nQTrBkAsmQBIdil3KhPnSE9GnRon4ejX1XDdsmK/l30IYLiAaQEO0Cg==", "cpu": [ "x64" ], @@ -2241,9 +2278,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.42.0.tgz", - "integrity": "sha512-UsQD5fyLWm2Fe5CDM7VPYAo+UC7+2Px4Y+N3AcPh/LdZu23YcuGPegQly++XEVaC8XUTFVPscl5y5Cl1twEI4A==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.43.0.tgz", + "integrity": "sha512-gTJ/JnnjCMc15uwB10TTATBEhK9meBIY+gXP4s0sHD1zHOaIh4Dmy1X9wup18IiY9tTNk5gJc4yx9ctj/fjrIw==", "cpu": [ "arm" ], @@ -2254,9 +2291,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.42.0.tgz", - "integrity": "sha512-/i8NIrlgc/+4n1lnoWl1zgH7Uo0XK5xK3EDqVTf38KvyYgCU/Rm04+o1VvvzJZnVS5/cWSd07owkzcVasgfIkQ==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.43.0.tgz", + "integrity": "sha512-ZJ3gZynL1LDSIvRfz0qXtTNs56n5DI2Mq+WACWZ7yGHFUEirHBRt7fyIk0NsCKhmRhn7WAcjgSkSVVxKlPNFFw==", "cpu": [ "arm" ], @@ -2267,9 +2304,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.42.0.tgz", - "integrity": "sha512-eoujJFOvoIBjZEi9hJnXAbWg+Vo1Ov8n/0IKZZcPZ7JhBzxh2A+2NFyeMZIRkY9iwBvSjloKgcvnjTbGKHE44Q==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.43.0.tgz", + "integrity": "sha512-8FnkipasmOOSSlfucGYEu58U8cxEdhziKjPD2FIa0ONVMxvl/hmONtX/7y4vGjdUhjcTHlKlDhw3H9t98fPvyA==", "cpu": [ "arm64" ], @@ -2280,9 +2317,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.42.0.tgz", - "integrity": "sha512-/3NrcOWFSR7RQUQIuZQChLND36aTU9IYE4j+TB40VU78S+RA0IiqHR30oSh6P1S9f9/wVOenHQnacs/Byb824g==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.43.0.tgz", + "integrity": "sha512-KPPyAdlcIZ6S9C3S2cndXDkV0Bb1OSMsX0Eelr2Bay4EsF9yi9u9uzc9RniK3mcUGCLhWY9oLr6er80P5DE6XA==", "cpu": [ "arm64" ], @@ -2293,9 +2330,9 @@ ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.42.0.tgz", - "integrity": "sha512-O8AplvIeavK5ABmZlKBq9/STdZlnQo7Sle0LLhVA7QT+CiGpNVe197/t8Aph9bhJqbDVGCHpY2i7QyfEDDStDg==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.43.0.tgz", + "integrity": "sha512-HPGDIH0/ZzAZjvtlXj6g+KDQ9ZMHfSP553za7o2Odegb/BEfwJcR0Sw0RLNpQ9nC6Gy8s+3mSS9xjZ0n3rhcYg==", "cpu": [ "loong64" ], @@ -2306,9 +2343,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.42.0.tgz", - "integrity": "sha512-6Qb66tbKVN7VyQrekhEzbHRxXXFFD8QKiFAwX5v9Xt6FiJ3BnCVBuyBxa2fkFGqxOCSGGYNejxd8ht+q5SnmtA==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.43.0.tgz", + "integrity": "sha512-gEmwbOws4U4GLAJDhhtSPWPXUzDfMRedT3hFMyRAvM9Mrnj+dJIFIeL7otsv2WF3D7GrV0GIewW0y28dOYWkmw==", "cpu": [ "ppc64" ], @@ -2319,9 +2356,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.42.0.tgz", - "integrity": "sha512-KQETDSEBamQFvg/d8jajtRwLNBlGc3aKpaGiP/LvEbnmVUKlFta1vqJqTrvPtsYsfbE/DLg5CC9zyXRX3fnBiA==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.43.0.tgz", + "integrity": "sha512-XXKvo2e+wFtXZF/9xoWohHg+MuRnvO29TI5Hqe9xwN5uN8NKUYy7tXUG3EZAlfchufNCTHNGjEx7uN78KsBo0g==", "cpu": [ "riscv64" ], @@ -2332,9 +2369,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.42.0.tgz", - "integrity": "sha512-qMvnyjcU37sCo/tuC+JqeDKSuukGAd+pVlRl/oyDbkvPJ3awk6G6ua7tyum02O3lI+fio+eM5wsVd66X0jQtxw==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.43.0.tgz", + "integrity": "sha512-ruf3hPWhjw6uDFsOAzmbNIvlXFXlBQ4nk57Sec8E8rUxs/AI4HD6xmiiasOOx/3QxS2f5eQMKTAwk7KHwpzr/Q==", "cpu": [ "riscv64" ], @@ -2345,9 +2382,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.42.0.tgz", - "integrity": "sha512-I2Y1ZUgTgU2RLddUHXTIgyrdOwljjkmcZ/VilvaEumtS3Fkuhbw4p4hgHc39Ypwvo2o7sBFNl2MquNvGCa55Iw==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.43.0.tgz", + "integrity": "sha512-QmNIAqDiEMEvFV15rsSnjoSmO0+eJLoKRD9EAa9rrYNwO/XRCtOGM3A5A0X+wmG+XRrw9Fxdsw+LnyYiZWWcVw==", "cpu": [ "s390x" ], @@ -2358,9 +2395,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.42.0.tgz", - "integrity": "sha512-Gfm6cV6mj3hCUY8TqWa63DB8Mx3NADoFwiJrMpoZ1uESbK8FQV3LXkhfry+8bOniq9pqY1OdsjFWNsSbfjPugw==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.43.0.tgz", + "integrity": "sha512-jAHr/S0iiBtFyzjhOkAics/2SrXE092qyqEg96e90L3t9Op8OTzS6+IX0Fy5wCt2+KqeHAkti+eitV0wvblEoQ==", "cpu": [ "x64" ], @@ -2371,9 +2408,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.42.0.tgz", - "integrity": "sha512-g86PF8YZ9GRqkdi0VoGlcDUb4rYtQKyTD1IVtxxN4Hpe7YqLBShA7oHMKU6oKTCi3uxwW4VkIGnOaH/El8de3w==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.43.0.tgz", + "integrity": "sha512-3yATWgdeXyuHtBhrLt98w+5fKurdqvs8B53LaoKD7P7H7FKOONLsBVMNl9ghPQZQuYcceV5CDyPfyfGpMWD9mQ==", "cpu": [ "x64" ], @@ -2384,9 +2421,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.42.0.tgz", - "integrity": "sha512-+axkdyDGSp6hjyzQ5m1pgcvQScfHnMCcsXkx8pTgy/6qBmWVhtRVlgxjWwDp67wEXXUr0x+vD6tp5W4x6V7u1A==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.43.0.tgz", + "integrity": "sha512-wVzXp2qDSCOpcBCT5WRWLmpJRIzv23valvcTwMHEobkjippNf+C3ys/+wf07poPkeNix0paTNemB2XrHr2TnGw==", "cpu": [ "arm64" ], @@ -2397,9 +2434,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.42.0.tgz", - "integrity": "sha512-F+5J9pelstXKwRSDq92J0TEBXn2nfUrQGg+HK1+Tk7VOL09e0gBqUHugZv7SW4MGrYj41oNCUe3IKCDGVlis2g==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.43.0.tgz", + "integrity": "sha512-fYCTEyzf8d+7diCw8b+asvWDCLMjsCEA8alvtAutqJOJp/wL5hs1rWSqJ1vkjgW0L2NB4bsYJrpKkiIPRR9dvw==", "cpu": [ "ia32" ], @@ -2410,9 +2447,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.42.0.tgz", - "integrity": "sha512-LpHiJRwkaVz/LqjHjK8LCi8osq7elmpwujwbXKNW88bM8eeGxavJIKKjkjpMHAh/2xfnrt1ZSnhTv41WYUHYmA==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.43.0.tgz", + "integrity": "sha512-SnGhLiE5rlK0ofq8kzuDkM0g7FN1s5VYY+YSMTibP7CqShxCQvqtNxTARS4xX4PFJfHjG0ZQYX9iGzI3FQh5Aw==", "cpu": [ "x64" ], @@ -2489,9 +2526,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.15.30", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.30.tgz", - "integrity": "sha512-6Q7lr06bEHdlfplU6YRbgG1SFBdlsfNC4/lX+SkhiTs0cpJkOElmWls8PxDFv4yY/xKb8Y6SO0OmSX4wgqTZbA==", + "version": "22.15.31", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.31.tgz", + "integrity": "sha512-jnVe5ULKl6tijxUhvQeNbQG/84fHfg+yMak02cT8QVhBx/F05rAVxCGBYYTh2EKz22D6JF5ktXuNwdx7b9iEGw==", "devOptional": true, "license": "MIT", "dependencies": { @@ -2505,9 +2542,9 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "19.1.6", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.6.tgz", - "integrity": "sha512-JeG0rEWak0N6Itr6QUx+X60uQmN+5t3j9r/OVDtWzFXKaj6kD1BwJzOksD0FF6iWxZlbE1kB0q9vtnU2ekqa1Q==", + "version": "19.1.8", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.8.tgz", + "integrity": "sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==", "license": "MIT", "dependencies": { "csstype": "^3.0.2" @@ -2533,17 +2570,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.33.1.tgz", - "integrity": "sha512-TDCXj+YxLgtvxvFlAvpoRv9MAncDLBV2oT9Bd7YBGC/b/sEURoOYuIwLI99rjWOfY3QtDzO+mk0n4AmdFExW8A==", + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.34.0.tgz", + "integrity": "sha512-QXwAlHlbcAwNlEEMKQS2RCgJsgXrTJdjXT08xEgbPFa2yYQgVjBymxP5DrfrE7X7iodSzd9qBUHUycdyVJTW1w==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.33.1", - "@typescript-eslint/type-utils": "8.33.1", - "@typescript-eslint/utils": "8.33.1", - "@typescript-eslint/visitor-keys": "8.33.1", + "@typescript-eslint/scope-manager": "8.34.0", + "@typescript-eslint/type-utils": "8.34.0", + "@typescript-eslint/utils": "8.34.0", + "@typescript-eslint/visitor-keys": "8.34.0", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", @@ -2557,7 +2594,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.33.1", + "@typescript-eslint/parser": "^8.34.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } @@ -2573,16 +2610,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.33.1.tgz", - "integrity": "sha512-qwxv6dq682yVvgKKp2qWwLgRbscDAYktPptK4JPojCwwi3R9cwrvIxS4lvBpzmcqzR4bdn54Z0IG1uHFskW4dA==", + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.34.0.tgz", + "integrity": "sha512-vxXJV1hVFx3IXz/oy2sICsJukaBrtDEQSBiV48/YIV5KWjX1dO+bcIr/kCPrW6weKXvsaGKFNlwH0v2eYdRRbA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.33.1", - "@typescript-eslint/types": "8.33.1", - "@typescript-eslint/typescript-estree": "8.33.1", - "@typescript-eslint/visitor-keys": "8.33.1", + "@typescript-eslint/scope-manager": "8.34.0", + "@typescript-eslint/types": "8.34.0", + "@typescript-eslint/typescript-estree": "8.34.0", + "@typescript-eslint/visitor-keys": "8.34.0", "debug": "^4.3.4" }, "engines": { @@ -2598,14 +2635,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.33.1.tgz", - "integrity": "sha512-DZR0efeNklDIHHGRpMpR5gJITQpu6tLr9lDJnKdONTC7vvzOlLAG/wcfxcdxEWrbiZApcoBCzXqU/Z458Za5Iw==", + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.34.0.tgz", + "integrity": "sha512-iEgDALRf970/B2YExmtPMPF54NenZUf4xpL3wsCRx/lgjz6ul/l13R81ozP/ZNuXfnLCS+oPmG7JIxfdNYKELw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.33.1", - "@typescript-eslint/types": "^8.33.1", + "@typescript-eslint/tsconfig-utils": "^8.34.0", + "@typescript-eslint/types": "^8.34.0", "debug": "^4.3.4" }, "engines": { @@ -2620,14 +2657,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.33.1.tgz", - "integrity": "sha512-dM4UBtgmzHR9bS0Rv09JST0RcHYearoEoo3pG5B6GoTR9XcyeqX87FEhPo+5kTvVfKCvfHaHrcgeJQc6mrDKrA==", + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.34.0.tgz", + "integrity": "sha512-9Ac0X8WiLykl0aj1oYQNcLZjHgBojT6cW68yAgZ19letYu+Hxd0rE0veI1XznSSst1X5lwnxhPbVdwjDRIomRw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.33.1", - "@typescript-eslint/visitor-keys": "8.33.1" + "@typescript-eslint/types": "8.34.0", + "@typescript-eslint/visitor-keys": "8.34.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2638,9 +2675,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.33.1.tgz", - "integrity": "sha512-STAQsGYbHCF0/e+ShUQ4EatXQ7ceh3fBCXkNU7/MZVKulrlq1usH7t2FhxvCpuCi5O5oi1vmVaAjrGeL71OK1g==", + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.34.0.tgz", + "integrity": "sha512-+W9VYHKFIzA5cBeooqQxqNriAP0QeQ7xTiDuIOr71hzgffm3EL2hxwWBIIj4GuofIbKxGNarpKqIq6Q6YrShOA==", "dev": true, "license": "MIT", "engines": { @@ -2655,14 +2692,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.33.1.tgz", - "integrity": "sha512-1cG37d9xOkhlykom55WVwG2QRNC7YXlxMaMzqw2uPeJixBFfKWZgaP/hjAObqMN/u3fr5BrTwTnc31/L9jQ2ww==", + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.34.0.tgz", + "integrity": "sha512-n7zSmOcUVhcRYC75W2pnPpbO1iwhJY3NLoHEtbJwJSNlVAZuwqu05zY3f3s2SDWWDSo9FdN5szqc73DCtDObAg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.33.1", - "@typescript-eslint/utils": "8.33.1", + "@typescript-eslint/typescript-estree": "8.34.0", + "@typescript-eslint/utils": "8.34.0", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, @@ -2679,9 +2716,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.33.1.tgz", - "integrity": "sha512-xid1WfizGhy/TKMTwhtVOgalHwPtV8T32MS9MaH50Cwvz6x6YqRIPdD2WvW0XaqOzTV9p5xdLY0h/ZusU5Lokg==", + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.34.0.tgz", + "integrity": "sha512-9V24k/paICYPniajHfJ4cuAWETnt7Ssy+R0Rbcqo5sSFr3QEZ/8TSoUi9XeXVBGXCaLtwTOKSLGcInCAvyZeMA==", "dev": true, "license": "MIT", "engines": { @@ -2693,16 +2730,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.33.1.tgz", - "integrity": "sha512-+s9LYcT8LWjdYWu7IWs7FvUxpQ/DGkdjZeE/GGulHvv8rvYwQvVaUZ6DE+j5x/prADUgSbbCWZ2nPI3usuVeOA==", + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.34.0.tgz", + "integrity": "sha512-rOi4KZxI7E0+BMqG7emPSK1bB4RICCpF7QD3KCLXn9ZvWoESsOMlHyZPAHyG04ujVplPaHbmEvs34m+wjgtVtg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.33.1", - "@typescript-eslint/tsconfig-utils": "8.33.1", - "@typescript-eslint/types": "8.33.1", - "@typescript-eslint/visitor-keys": "8.33.1", + "@typescript-eslint/project-service": "8.34.0", + "@typescript-eslint/tsconfig-utils": "8.34.0", + "@typescript-eslint/types": "8.34.0", + "@typescript-eslint/visitor-keys": "8.34.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -2721,43 +2758,17 @@ "typescript": ">=4.8.4 <5.9.0" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@typescript-eslint/utils": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.33.1.tgz", - "integrity": "sha512-52HaBiEQUaRYqAXpfzWSR2U3gxk92Kw006+xZpElaPMg3C4PgM+A5LqwoQI1f9E5aZ/qlxAZxzm42WX+vn92SQ==", + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.34.0.tgz", + "integrity": "sha512-8L4tWatGchV9A1cKbjaavS6mwYwp39jql8xUmIIKJdm+qiaeHy5KMKlBrf30akXAWBzn2SqKsNOtSENWUwg7XQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.33.1", - "@typescript-eslint/types": "8.33.1", - "@typescript-eslint/typescript-estree": "8.33.1" + "@typescript-eslint/scope-manager": "8.34.0", + "@typescript-eslint/types": "8.34.0", + "@typescript-eslint/typescript-estree": "8.34.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2772,13 +2783,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.33.1.tgz", - "integrity": "sha512-3i8NrFcZeeDHJ+7ZUuDkGT+UHq+XoFGsymNK2jZCOHcfEzRQ0BdpRtdpSx/Iyf3MHLWIcLS0COuOPibKQboIiQ==", + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.34.0.tgz", + "integrity": "sha512-qHV7pW7E85A0x6qyrFn+O+q1k1p3tQCsqIZ1KZ5ESLXY57aTvUd3/a4rdPTeXisvhXn2VQG0VSKUqs8KHF2zcA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.33.1", + "@typescript-eslint/types": "8.34.0", "eslint-visitor-keys": "^4.2.0" }, "engines": { @@ -2821,555 +2832,555 @@ "license": "MIT" }, "node_modules/@zag-js/accordion": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/accordion/-/accordion-1.15.0.tgz", - "integrity": "sha512-EKNeuKx+lOQ/deCe/ApCjVPxpxpDwT2NXvMPL+YvqXmSv7hAnTLs9fDKjbDUQUMmsyx32BsBd8t6d17DL3rPXg==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/accordion/-/accordion-1.15.2.tgz", + "integrity": "sha512-4ooxmmnEDeRLPLOCsrQeLHcTj+xTqBHm6pYEdho/pb67lHujAUSnbfEryorBSfvJEWdiUTYts96EfsLfbn5SYA==", "license": "MIT", "dependencies": { - "@zag-js/anatomy": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/anatomy": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/anatomy": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/anatomy/-/anatomy-1.15.0.tgz", - "integrity": "sha512-r0l5I7mSsF35HdwXm22TppNhfVftFuqvKfHvTUw+wQZhni4eUL93HypJD0Fl7mDhtP5zfVGfBwR048OzD0+tCw==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/anatomy/-/anatomy-1.15.2.tgz", + "integrity": "sha512-GiWZk+fqO/W15FIRVhUL237xZmYMm/gcrp8b4VJGLpZE4qaQaBd4kSYObhIl/7AnLC45VjKbV7c8fLxZKd/5kA==", "license": "MIT" }, "node_modules/@zag-js/angle-slider": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/angle-slider/-/angle-slider-1.15.0.tgz", - "integrity": "sha512-xIZBa9V6d05uK7+XQVhfdsThqbZKimSYVxtMOWJfG0sKn63N9VGPxL1OtOMq7FA4IP3SyvlelsGt+3t82TUiyA==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/angle-slider/-/angle-slider-1.15.2.tgz", + "integrity": "sha512-ItcDlKHJbPFfPGmmiCGcWcd0Y8xC+WH5Dji7+uzBl40L9hh8si7/FrY9EB2cX/qUTDppNyicLPIDnZRGkByTOA==", "license": "MIT", "dependencies": { - "@zag-js/anatomy": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/rect-utils": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/anatomy": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/rect-utils": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/aria-hidden": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/aria-hidden/-/aria-hidden-1.15.0.tgz", - "integrity": "sha512-3ogglAasycekTHI34ph16mqwM+VtHCOMtrFHWzPwB16itV5oDEeeMNdQXenHSSyQ/07nJ2QsRGFFjGhPm1kWNg==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/aria-hidden/-/aria-hidden-1.15.2.tgz", + "integrity": "sha512-Uwt86QpEaI4qLFS/k4C7rwIfyiH8EdE5a4AWiQ26WsL8VOpjROn65rBEOJ8q3fG5CJXbdcqaYK3lg4ldqf9irQ==", "license": "MIT" }, "node_modules/@zag-js/auto-resize": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/auto-resize/-/auto-resize-1.15.0.tgz", - "integrity": "sha512-EXgrsU7OWxc7obSOt8Okh0144H8DQi1S84OsOUY04Uni11Dnp5/X8+t6mvBbkw4/Qyz5UBjChjocwBcO+HHV8w==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/auto-resize/-/auto-resize-1.15.2.tgz", + "integrity": "sha512-Mg3IN3eIP2wKBFRm5qti/rjKpTj7sfIVNfO9BgWdHDSzli1VwaBX7GaOE3nGc1tZ2nJ8n0SWRvRSzr3b57cwKw==", "license": "MIT", "dependencies": { - "@zag-js/dom-query": "1.15.0" + "@zag-js/dom-query": "1.15.2" } }, "node_modules/@zag-js/avatar": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/avatar/-/avatar-1.15.0.tgz", - "integrity": "sha512-EHGxzXb1mLf3n6x0z/rqFl1mghDB/gyfPAeaFUoA/cacmmMk8YB3aDUXkS9pTgN9stYJBM5f6T4xB1ZUhrP8tg==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/avatar/-/avatar-1.15.2.tgz", + "integrity": "sha512-4aG2ETJbdMTALyXwU/DeGfjs/dM0Kllje+t5ov52fQrtkY123JdrvKQkcvsc7Luph1kdN1tC1/2fe/pDMhycCg==", "license": "MIT", "dependencies": { - "@zag-js/anatomy": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/anatomy": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/carousel": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/carousel/-/carousel-1.15.0.tgz", - "integrity": "sha512-ZI9H34f2utdJ2Ek6GZa+iuRH4eC99GHD/VEOKLdGani8uadpT2v8M5kUwPGrlAJq9SiPbQ2UuXBmCkmurPQqdA==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/carousel/-/carousel-1.15.2.tgz", + "integrity": "sha512-7bcyEtWIhv7kw+V4H+Fv5rE8I8lf0LQOj+m3HTYzWo+wiLybFfI8/bg1qywjSYKsgZr3gmGVCEZhfx3BSpP3eA==", "license": "MIT", "dependencies": { - "@zag-js/anatomy": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/scroll-snap": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/anatomy": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/scroll-snap": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/checkbox": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/checkbox/-/checkbox-1.15.0.tgz", - "integrity": "sha512-6lQvPQNJXt7R0xxdpOuh2qtmAkzdBdqSvFIH7fE6GJzJ/AWiRZh0X+9deLQ76CN4EDUdxizEe7MlQfTI3a56aw==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/checkbox/-/checkbox-1.15.2.tgz", + "integrity": "sha512-Ay/+rpKbxL4jE1pwVw52h0t79PpiifA6QlYnV4E+hWl1yJBkMRIi76Ryhqvqp4yY+2Wyr9OfDA9eHmQjapG4VA==", "license": "MIT", "dependencies": { - "@zag-js/anatomy": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/focus-visible": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/anatomy": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/focus-visible": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/clipboard": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/clipboard/-/clipboard-1.15.0.tgz", - "integrity": "sha512-Q3kh0fHvOEAJUywQm3zAWyltrYyiI8OpeZQ18k5Mf3/M+bq3gSphZL0+AYsgGbKUg5O2+hJ1SfiErAjyhRtBQA==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/clipboard/-/clipboard-1.15.2.tgz", + "integrity": "sha512-EE5OlsIYbBklo62qu3A7GiUnsgmoGaoDZvhpYvpNM8StWNeRREcJZXRIizv4aFC46e5eODzSNcebnMLYa8Wcgw==", "license": "MIT", "dependencies": { - "@zag-js/anatomy": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/anatomy": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/collapsible": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/collapsible/-/collapsible-1.15.0.tgz", - "integrity": "sha512-GX0kdMlKk4Yk5k/2wN0prudf21k+TfArGr4EHqimTDR0vQE3dSdb3pYyPjw20fLzceKHBBCLsoi2v+YnS75gHA==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/collapsible/-/collapsible-1.15.2.tgz", + "integrity": "sha512-vvUXQMFgwsZJphE4Ml5ap4FVhtyLOqK2QXPbt2+F8X8SRwJ3/pqsSsLFdH+ALpNoCK6WF9j+8FZ4lyidr7XPDw==", "license": "MIT", "dependencies": { - "@zag-js/anatomy": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/anatomy": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/collection": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/collection/-/collection-1.15.0.tgz", - "integrity": "sha512-oC3i6c/oP/FuNPsfgoC1reSXbAvDBGXl0HU3CcvXiNLHbjg2ek8J7kbow6MNuXK6chiksiOHbzKxHl2Oo0Ox7A==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/collection/-/collection-1.15.2.tgz", + "integrity": "sha512-bJ9EtZ1Cpjh/rQFDMPTPrky/eSfaLpHWmMnk/S9b7wi+OhC0Hoqw38lcWzfc0AaE4bJsfru9/FLIsCDOLf7TSg==", "license": "MIT", "dependencies": { - "@zag-js/utils": "1.15.0" + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/color-picker": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/color-picker/-/color-picker-1.15.0.tgz", - "integrity": "sha512-DGujS24h1OWkYL+TWyd+xukOO8NBgcSfFCINffa4ivkHtNx3nC28qkwLPRASbl7AK69pbrcuO6bx1Sy/JQJw0Q==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/color-picker/-/color-picker-1.15.2.tgz", + "integrity": "sha512-UOYHECq+X6hSrgSxwBt5O4Y6f2IdOGMhe7P/LFev7Yn0x1F9fMxJZCIzvQGaQ2V/hR0eTatiKk5SmOp9+dJA/g==", "license": "MIT", "dependencies": { - "@zag-js/anatomy": "1.15.0", - "@zag-js/color-utils": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/dismissable": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/popper": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/anatomy": "1.15.2", + "@zag-js/color-utils": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/dismissable": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/popper": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/color-utils": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/color-utils/-/color-utils-1.15.0.tgz", - "integrity": "sha512-SKo+p5Fu0TBtdDua8UHVjptOkwLLBFoD499Z1FER/gr0R/97L03Kdir0YTxvKn5pXWXYY1EQn4hpTuTITN16lQ==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/color-utils/-/color-utils-1.15.2.tgz", + "integrity": "sha512-c167QcxiVHgFZ7ca0PSQZ7skhbBOd6u1lIyWYzkZ2uPf0yJndqP9gFYPMbwK6d4WIM9k6y6mLdsWCGpqIJJsIg==", "license": "MIT", "dependencies": { - "@zag-js/utils": "1.15.0" + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/combobox": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/combobox/-/combobox-1.15.0.tgz", - "integrity": "sha512-HBck3wcEeIOa7IQMsUkUKbm9cAU7bjoklIyq2zFGn90k7DcDa++oXK9Z2pmcd4TPoBYiyVuuXucaCcjmLX8V/Q==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/combobox/-/combobox-1.15.2.tgz", + "integrity": "sha512-lZXW99NLnRfLLY1ZOE0oqo4wMDglkUjKV1UZaHyj+yqXsiMtWhKQFQW/JeVBRDe6RCv8wWPPHMycNANMw581gQ==", "license": "MIT", "dependencies": { - "@zag-js/anatomy": "1.15.0", - "@zag-js/aria-hidden": "1.15.0", - "@zag-js/collection": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/dismissable": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/popper": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/anatomy": "1.15.2", + "@zag-js/aria-hidden": "1.15.2", + "@zag-js/collection": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/dismissable": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/popper": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/core": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/core/-/core-1.15.0.tgz", - "integrity": "sha512-P/8F3IXabMhpFnc6hC7GDg3rvUnvY27cuZU04hxjUqTH6+SfORIA/Uvqd4ekhC+dIprL9jicnFrmGgcyelyxfQ==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/core/-/core-1.15.2.tgz", + "integrity": "sha512-yUnh4I0nZ8rlszWgF402F5vGoYw7DNwStYz2TAO+4E08BpKBATw3FEdqAHPm+2xZm5qPqnPbM4iObwUlkBQUEw==", "license": "MIT", "dependencies": { - "@zag-js/dom-query": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/dom-query": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/date-picker": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/date-picker/-/date-picker-1.15.0.tgz", - "integrity": "sha512-IZD0V9MAljp1QhxYbST80AonryuDnyx7hvEy/RrBY/VOx6I4STtKfcSJ5ZZgVIzJfH8Yyaed4+IwcenqG7W5YQ==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/date-picker/-/date-picker-1.15.2.tgz", + "integrity": "sha512-KElAFm3fW4GKGUNUe+jqqUX+P1H+Cigp/eGRgIl0dUjCwHocD1oN0ZCwNYmf7SJoWSgPRc1UJdA4XvpdU0IwPQ==", "license": "MIT", "dependencies": { - "@zag-js/anatomy": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/date-utils": "1.15.0", - "@zag-js/dismissable": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/live-region": "1.15.0", - "@zag-js/popper": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/anatomy": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/date-utils": "1.15.2", + "@zag-js/dismissable": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/live-region": "1.15.2", + "@zag-js/popper": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" }, "peerDependencies": { "@internationalized/date": ">=3.0.0" } }, "node_modules/@zag-js/date-utils": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/date-utils/-/date-utils-1.15.0.tgz", - "integrity": "sha512-FX9EesJRnUTYTpbXf5EVfCbsXW5vYtZfc635aQzojc9ekk1FGcHpqQs8ZKfCOTPuauZFOX9i6139A4KoPfQOiw==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/date-utils/-/date-utils-1.15.2.tgz", + "integrity": "sha512-U+HtfdtHJ5ed2ys8izMhu8gY5jQigCd8ExPN5Cxg5CoIbSkho9NT8o/eO9OW71jc2F4kwBh+q0reyxxLJnTSbw==", "license": "MIT", "peerDependencies": { "@internationalized/date": ">=3.0.0" } }, "node_modules/@zag-js/dialog": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/dialog/-/dialog-1.15.0.tgz", - "integrity": "sha512-Vlt5vySs4u8c8xBEh2JMUvRfPc+aaVEIIUtFVxpc2ORWhBXs9glijyp1yf3rNHJhjj8gqqhF5sEvs3yUTTAk+Q==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/dialog/-/dialog-1.15.2.tgz", + "integrity": "sha512-LUF+tiiUJj7v24txhC0TOwEgsfj1GCogAmBaiJKxvqrDEDv1B91J0b6SUQ5TuTMLW+hlBEzXZw0QsTxa9OXBew==", "license": "MIT", "dependencies": { - "@zag-js/anatomy": "1.15.0", - "@zag-js/aria-hidden": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/dismissable": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/focus-trap": "1.15.0", - "@zag-js/remove-scroll": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/anatomy": "1.15.2", + "@zag-js/aria-hidden": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/dismissable": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/focus-trap": "1.15.2", + "@zag-js/remove-scroll": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/dismissable": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/dismissable/-/dismissable-1.15.0.tgz", - "integrity": "sha512-yv575KWy8gA1p4aajOiY5l/nBQ3Xw+Mrjpungp1+wiGd/98eNAIKJ6/adldfbE1Ygd/Q4Dx2VQ7D1AmiTdwUSw==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/dismissable/-/dismissable-1.15.2.tgz", + "integrity": "sha512-+WY8a1L+L8hXPGmWKqOsSg2KCHabVWXEX8mewHamltpSb86+2WMmblpLNgTwbm6V0T6txf1N8lFuzWMojMEWSg==", "license": "MIT", "dependencies": { - "@zag-js/dom-query": "1.15.0", - "@zag-js/interact-outside": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/dom-query": "1.15.2", + "@zag-js/interact-outside": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/dom-query": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-1.15.0.tgz", - "integrity": "sha512-z8H/j/Zs0eZEsGpbonScmlKSv0jEXKiAwUCrvQ9Mt6Gz9n0CQRM3MkFclSsM8aeiSv6qKLlhPfkzjl18OLkbgA==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-1.15.2.tgz", + "integrity": "sha512-+r9Xj6hiQj9b2ZNkT3E/bDaXgigoAkhtikDXov9duAY14pFFJxazXr0NcVgacik8ytAEt6XOOshLcAftyalRKg==", "license": "MIT", "dependencies": { - "@zag-js/types": "1.15.0" + "@zag-js/types": "1.15.2" } }, "node_modules/@zag-js/editable": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/editable/-/editable-1.15.0.tgz", - "integrity": "sha512-F14HKZuDsfkpfIkaF/ZDYPkz/pFf6VHrvoV0rdhj8wb8QJQ4nB+lgBv2APSwkEaFb/gGrnE19v3Ojlt5tqpPsw==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/editable/-/editable-1.15.2.tgz", + "integrity": "sha512-32v7DXDBnDX1CiFpGRh9uclu48UJQJT2QZPQ0Bys3ZOFgMxsWH6tCKDb7iQTcINIc/XIx/9nclWnV5egzimG9w==", "license": "MIT", "dependencies": { - "@zag-js/anatomy": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/interact-outside": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/anatomy": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/interact-outside": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/file-upload": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/file-upload/-/file-upload-1.15.0.tgz", - "integrity": "sha512-2hAlQr9qdT8EH4XnmkNkEIDCCsmp2SMoMAjq6nJKYO8UJNQGRanU2B5S8jV3quJBz0vIY43SwyvqiZ3+1VrJSg==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/file-upload/-/file-upload-1.15.2.tgz", + "integrity": "sha512-Zgac/da5QrUlE0ItlNy1kyMXfTy4ynTWnq4aZ4wZ9eVHUFQhLXERv8l+hYJetImISnuclmNVxNKP8Xk+5t4+tA==", "license": "MIT", "dependencies": { - "@zag-js/anatomy": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/file-utils": "1.15.0", - "@zag-js/i18n-utils": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/anatomy": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/file-utils": "1.15.2", + "@zag-js/i18n-utils": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/file-utils": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/file-utils/-/file-utils-1.15.0.tgz", - "integrity": "sha512-tahJt3JmrXaOtGiknH5PxIiOyyNvroMfjiBqOqnNksIPzDoWmVNxHOEme/ts7dJlkRD8U2qm2NFC2VS0bKerzg==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/file-utils/-/file-utils-1.15.2.tgz", + "integrity": "sha512-aNUEBJUeK6G3pyf+zYnIMg0GgJnInddjGRedFeTnfK1UmlSO8wTbxQTCvjWd4Nnr5eCTpQkRq6wTZy8JeIcOpw==", "license": "MIT", "dependencies": { - "@zag-js/i18n-utils": "1.15.0" + "@zag-js/i18n-utils": "1.15.2" } }, "node_modules/@zag-js/floating-panel": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/floating-panel/-/floating-panel-1.15.0.tgz", - "integrity": "sha512-AYYFseA1MeQUZl+zjNoKUu4j0kwz8EyJd4oJjs8uJIR6KG8u8QhpWYIBUny63M6AtZTCSYQAgBEcEh+mrbEyyQ==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/floating-panel/-/floating-panel-1.15.2.tgz", + "integrity": "sha512-8oG2MRXWWeXws7iVDmJFBqHLHYOGLvYe+vgXI3vgnLhmS4SeX9qAJj6qIOar7htOmEtp1p/KiBo2w2MYtzjuAw==", "license": "MIT", "dependencies": { - "@zag-js/anatomy": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/dismissable": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/popper": "1.15.0", - "@zag-js/rect-utils": "1.15.0", - "@zag-js/store": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/anatomy": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/dismissable": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/popper": "1.15.2", + "@zag-js/rect-utils": "1.15.2", + "@zag-js/store": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/focus-trap": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/focus-trap/-/focus-trap-1.15.0.tgz", - "integrity": "sha512-N8m/JpNe1gHUPJlr0hyGUdHg6pAuyJKkBaX0s38cyVntlo2CJhyAWZGuUdocpT2Q3HNPql666FNnH986rYPDKQ==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/focus-trap/-/focus-trap-1.15.2.tgz", + "integrity": "sha512-5EU5/Cg80oNO3z83A/33t9SOVYvLqLOuSPxt/7Xzy/L1Vj3vUj+s1ox6IpECmEFJcuql7X5yt6VIVitrLtgbFA==", "license": "MIT", "dependencies": { - "@zag-js/dom-query": "1.15.0" + "@zag-js/dom-query": "1.15.2" } }, "node_modules/@zag-js/focus-visible": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/focus-visible/-/focus-visible-1.15.0.tgz", - "integrity": "sha512-TPXBf47tj6L0hhZNl9AWhuLoVzfPaNPM+/Gw8t9l9Whvy6v9rk/rqUCidY5LsrQuPiKTi7s5WI5J+Wod8ib3gw==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/focus-visible/-/focus-visible-1.15.2.tgz", + "integrity": "sha512-zElE5T41p5QaB4856xK2SeERmHrKbA/UMzoyHzrAk/N1r6dNiMOOx1hMyHy7y6pEhC9kjJFwEpXi1QEel6/ELA==", "license": "MIT", "dependencies": { - "@zag-js/dom-query": "1.15.0" + "@zag-js/dom-query": "1.15.2" } }, "node_modules/@zag-js/highlight-word": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/highlight-word/-/highlight-word-1.15.0.tgz", - "integrity": "sha512-Rwr/rRm8BaF2xW9BAEJeA2wpFVx6HzoezfYQX7GFPPgw3N8nBMAYNjx+i1YIwIEcNyad2rbaBB+pSd2fZLIniA==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/highlight-word/-/highlight-word-1.15.2.tgz", + "integrity": "sha512-2a49h4k0ISIDydaZZDdASEHJpwxJeuZHSPCE7cM3/BWCR3H5galeC/jbNWRlTJVH4OQTYAR0I2wILQvOWLhSrw==", "license": "MIT" }, "node_modules/@zag-js/hover-card": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/hover-card/-/hover-card-1.15.0.tgz", - "integrity": "sha512-j6BsE+metdnv/C/Ls0TZzAMN78rtS2r8M1ccHY5FFTGyUvZnlE8BY/QPNyCSSSCUpynymzMYh3IMYlxbJgfpSQ==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/hover-card/-/hover-card-1.15.2.tgz", + "integrity": "sha512-FfNmhow8MPMp5RgTeC87x4EStFw+d1137w4QZ+fC5PystRzxGeiyDJyLRYGVeIQO2oP463az70vnxsbFAMu98A==", "license": "MIT", "dependencies": { - "@zag-js/anatomy": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/dismissable": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/popper": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/anatomy": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/dismissable": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/popper": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/i18n-utils": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/i18n-utils/-/i18n-utils-1.15.0.tgz", - "integrity": "sha512-anxSbT8kLbJaFJFSb0Ork2j/Lp+XVfMNCIgiBR2BuqUlfX72k23TIJvRxAfwNIkUfs0L8ikaSgLss9OwS4mAnw==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/i18n-utils/-/i18n-utils-1.15.2.tgz", + "integrity": "sha512-1RnqCaxe+l4UR1O3fhn04T+J62yw/SkCByhrhrPSis/H7a65nW0WsoWiJTIgWp/hN9HI2Y3dVFfMEwQUFFHG1g==", "license": "MIT", "dependencies": { - "@zag-js/dom-query": "1.15.0" + "@zag-js/dom-query": "1.15.2" } }, "node_modules/@zag-js/interact-outside": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/interact-outside/-/interact-outside-1.15.0.tgz", - "integrity": "sha512-OwBf/iesQGU9Oq3xe/tcK7gu7xipiGWsmwl2CcScr0fTp3BIMbQywHS928IgPk1DxA8KTHodY8wBjoY1dskfRA==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/interact-outside/-/interact-outside-1.15.2.tgz", + "integrity": "sha512-WbCICcMJHL6yS8vaou0FvKV6shl1Z+CefF7yzn5MEshPLbmy33WGQ2KBzodTkIQFM/C/zdVz5xKl8TbQmi7jUg==", "license": "MIT", "dependencies": { - "@zag-js/dom-query": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/dom-query": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/listbox": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/listbox/-/listbox-1.15.0.tgz", - "integrity": "sha512-Gcg76uWZwUAyMFZzGWpHnFCU/aaquNbXmVnyzzBgE3Co2snkv02rK1yG9iBwemZe3e5+VBifMMAtLLPAQJdz+g==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/listbox/-/listbox-1.15.2.tgz", + "integrity": "sha512-V6Zbi8HTiyhsV4GhFaiFYL2bJo4lOt24/SA9M/T5D7ZH+bTm3itPUxYddIBi9w6yRTU0gsorosD2GyFkHjchvg==", "license": "MIT", "dependencies": { - "@zag-js/anatomy": "1.15.0", - "@zag-js/collection": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/focus-visible": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/anatomy": "1.15.2", + "@zag-js/collection": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/focus-visible": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/live-region": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/live-region/-/live-region-1.15.0.tgz", - "integrity": "sha512-Xy1PqLZD9AKzKuTKCMo9miL1Xizk/N8qFvj64iybBKUYnKr89/af3w7hRFqd2BDX+q3zrNxPp9rZ6L7MlOc7kA==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/live-region/-/live-region-1.15.2.tgz", + "integrity": "sha512-dIrfDlKyNz99CQVeHu9RHe/x+yTBm3wFA7H655DXL7CugO9tpTlynkrTG9AB+0Z84JKZTeHh0vGVa2chTWKrNg==", "license": "MIT" }, "node_modules/@zag-js/menu": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/menu/-/menu-1.15.0.tgz", - "integrity": "sha512-GbEBVYu0w7+88xrGX2GrjXfnwWuX5jLhoLiEcuxvxJQal/nahKrH4AGXJvHXNaRbj+53V3nWAh3u70C9210PWw==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/menu/-/menu-1.15.2.tgz", + "integrity": "sha512-54dGUChMLyTrkCGbKGh0R8l/cg0vPFnGZwMG96zYJhkmXdpDMECZgBrN3j7B6RtEIvlAR8fMH5Sya58Amb3lGg==", "license": "MIT", "dependencies": { - "@zag-js/anatomy": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/dismissable": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/popper": "1.15.0", - "@zag-js/rect-utils": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/anatomy": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/dismissable": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/popper": "1.15.2", + "@zag-js/rect-utils": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/number-input": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/number-input/-/number-input-1.15.0.tgz", - "integrity": "sha512-+kK8kyXJhIAbEUnswoMDR+DSJUmvDNIOW0ffuZ9pbfukN3p6zaA3/dCp2Dtg3bQS7hGrFWgtrdejJ8l+mVvUAA==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/number-input/-/number-input-1.15.2.tgz", + "integrity": "sha512-qtDAVUdMXBhufBSwAgi8MXm7zHb36ujfWmxCJg6HbjKVF0BEAxeoye5VexgyYul7Hp8+Rr9LkW8X35W4amjJEQ==", "license": "MIT", "dependencies": { - "@internationalized/number": "3.6.2", - "@zag-js/anatomy": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "@internationalized/number": "3.6.3", + "@zag-js/anatomy": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/pagination": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/pagination/-/pagination-1.15.0.tgz", - "integrity": "sha512-Z62Q41fQPWqk59QyJk+9J0Ad3H9DCqZ0zZutI6iH8DdzT0A0xxmT6zhup6DM/8C8h0OLlaHFTWQnj0RdRNrnXg==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/pagination/-/pagination-1.15.2.tgz", + "integrity": "sha512-k1jT7UWDwgkYVsf83TTUhks6iZ7aQpcEjQ+iWI2LbZu98+bVhX9hpHfxdWbvTbueGk6WjB2xa1X0tsktII1mmQ==", "license": "MIT", "dependencies": { - "@zag-js/anatomy": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/anatomy": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/password-input": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/password-input/-/password-input-1.15.0.tgz", - "integrity": "sha512-oHuZKDRJIbycqWpTVznufy4L7K2g8kwcEaZ4runkwO2ocF00zP8HVmOZQzmhkUgTny0azErQydg8XE0VR5OfYg==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/password-input/-/password-input-1.15.2.tgz", + "integrity": "sha512-9BpQ26Z9XoCiNAHOmx3zwa+62+C6358/az0h3N24P4qS1EdTVWkhG1tsyPhRElg4v1koavZ40RMUppJQBH+DmA==", "license": "MIT", "dependencies": { - "@zag-js/anatomy": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/anatomy": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/pin-input": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/pin-input/-/pin-input-1.15.0.tgz", - "integrity": "sha512-IykjogZBG+BfbFXymSa+KGpOi5CrV9kl8HRm6G2V2Sr3NA5jEwMFaGSd/QrcHS9vh23D1Smx/io4pvF7c3q0kg==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/pin-input/-/pin-input-1.15.2.tgz", + "integrity": "sha512-1KjGGmyldtEb4RwwdBTKzbgAwpNT6CyY274LvQC8lTCEUYOBkUmS9OUaKUbwkoluCdmXrugpg/XMulisRmMtgg==", "license": "MIT", "dependencies": { - "@zag-js/anatomy": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/anatomy": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/popover": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/popover/-/popover-1.15.0.tgz", - "integrity": "sha512-cdzEed3zcGbjSgPQnQnrsuXo2hVVslmSNwQbU5dHcNzG1uxxmtPCIMVeBUmGyJbAFF5XQpKCq/7mIr26dT73vw==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/popover/-/popover-1.15.2.tgz", + "integrity": "sha512-6cD4eTwwj/bkTCDWVk0dMFqg01iD7qJofRSU3da7nde1Y0TMz8gBlt++GASgCF4p/hPeGLD18GcIF8FKka9IlA==", "license": "MIT", "dependencies": { - "@zag-js/anatomy": "1.15.0", - "@zag-js/aria-hidden": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/dismissable": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/focus-trap": "1.15.0", - "@zag-js/popper": "1.15.0", - "@zag-js/remove-scroll": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/anatomy": "1.15.2", + "@zag-js/aria-hidden": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/dismissable": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/focus-trap": "1.15.2", + "@zag-js/popper": "1.15.2", + "@zag-js/remove-scroll": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/popper": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/popper/-/popper-1.15.0.tgz", - "integrity": "sha512-Ra/0Ko423KN+8D4+mIFFkeTn9uaHfpxn6UUNIWwZKoiJQvED8DH4dPbLbmvGEoKp6qmisnRHAzi71NLgEhk0Mw==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/popper/-/popper-1.15.2.tgz", + "integrity": "sha512-5uaFW9IU8bj3NdEiyuSp2eVJaPvWoA6/q7Fh423Va8booMYW4k1KFmz2BSxQ3JfK5lt3vPI0X2026gSxTx/vmg==", "license": "MIT", "dependencies": { "@floating-ui/dom": "1.7.1", - "@zag-js/dom-query": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/dom-query": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/presence": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/presence/-/presence-1.15.0.tgz", - "integrity": "sha512-hoxXis50pm79PpkY2kA1wdhh4AEo7t7pBv0VsQYZYjmzuFh4V5IMw9oa1EOfBlC6f/A+EMZ9E+xg+EVsB68a8w==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/presence/-/presence-1.15.2.tgz", + "integrity": "sha512-cNPJz3qeXdoYFEefxFixZoMDFzqfHsLgmi2ynmRrFlyHzHtFdvKjvS5ywo9YFGNgwKrEddS43n8gl3w3lgqBCA==", "license": "MIT", "dependencies": { - "@zag-js/core": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/types": "1.15.0" + "@zag-js/core": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/types": "1.15.2" } }, "node_modules/@zag-js/progress": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/progress/-/progress-1.15.0.tgz", - "integrity": "sha512-/Mz26GR2rOAuoErNOiSGRpvwckTmbCD5nWGDE/aYlVRID13HcsmN15Zk2Jfa4LadqK88aIN8Iy0Sk4elG0+Efw==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/progress/-/progress-1.15.2.tgz", + "integrity": "sha512-VPunnrTYiJaHnnCKuh2ZARCnzgTtxYIiNKiUVPWlygsWy2AGg1K3AvVswF2CVfGpwbO4ioyBQO65EZkQiMN/Aw==", "license": "MIT", "dependencies": { - "@zag-js/anatomy": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/anatomy": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/qr-code": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/qr-code/-/qr-code-1.15.0.tgz", - "integrity": "sha512-GkGy5k5tk6DIui9lGjDO8+e8TsSVOxEGp1lblPiaRm1ggIh10GhIfCQWGe/x78ezdie8WzxlSrma89suTpaiAQ==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/qr-code/-/qr-code-1.15.2.tgz", + "integrity": "sha512-hFtwGGArxVJo7osbY3R73BHIX3Ldb8G4gtNDZ2fGcKAcp+SQg5GXUIBK17ncxJrOC7A1Wp7sdOoYNNOPWe2fYA==", "license": "MIT", "dependencies": { - "@zag-js/anatomy": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0", + "@zag-js/anatomy": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2", "proxy-memoize": "3.0.1", "uqr": "0.1.2" } }, "node_modules/@zag-js/radio-group": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/radio-group/-/radio-group-1.15.0.tgz", - "integrity": "sha512-+KTebHUtMsE/YDyGE8wF5VnWfZQp+f2WoAwwzBjfhPpRxXbOUMDo0pZEEr3yxkSvQ9hgCcBhMKH8pEk0SPxvjQ==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/radio-group/-/radio-group-1.15.2.tgz", + "integrity": "sha512-+V9Y4EZuNITMbA9iJisysqWW+JB3YdlFF6dAomvXN8nuOuj8HE02JHndIeMflDtW6Tz99JcJLS7lNXN7G5uEuw==", "license": "MIT", "dependencies": { - "@zag-js/anatomy": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/focus-visible": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/anatomy": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/focus-visible": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/rating-group": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/rating-group/-/rating-group-1.15.0.tgz", - "integrity": "sha512-omGKN97FhplFwBX9J/Mj7BCZuwFXSXssSVTKU7Yp2d1Cmxhez4+Ju7KdSRNnIoWB4OxFCxwZyaAPTcg3E0Pjrg==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/rating-group/-/rating-group-1.15.2.tgz", + "integrity": "sha512-g7F9NyB1MF6ydE9aEr9zLPXGKXZIH2ZsUBXEQ9u6apUhnchhCSHDw6xHVXI1hYGrJHnpf2xMw3Xu1opJge1DQg==", "license": "MIT", "dependencies": { - "@zag-js/anatomy": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/anatomy": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/react": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/react/-/react-1.15.0.tgz", - "integrity": "sha512-YSp9QBkdeBfZt4nVhJW+CUd5sNEEVAuwkmoZWDFUoDoWSAXwzSKuHCmTm5/8DaXg1IZD2bMrXgMNDqZv2x0hZw==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/react/-/react-1.15.2.tgz", + "integrity": "sha512-T5QPiLbW4DoQ32NS5+Qu9NsIXKKz0d5MOpfEdXXuc6hKZdvV+V9d7EXeHBRohs3P6jqtf8FXpXDdK2trv37YlQ==", "license": "MIT", "dependencies": { - "@zag-js/core": "1.15.0", - "@zag-js/store": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/core": "1.15.2", + "@zag-js/store": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" }, "peerDependencies": { "react": ">=18.0.0", @@ -3377,287 +3388,287 @@ } }, "node_modules/@zag-js/rect-utils": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/rect-utils/-/rect-utils-1.15.0.tgz", - "integrity": "sha512-sjAn78x1t3XiDG3NT8SoFfyO0u7/SEJU5RKRhMgjTPoOLXTzZj+lu2d5N4cUw0uZTfeGb/ormObSchMQVhFgYQ==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/rect-utils/-/rect-utils-1.15.2.tgz", + "integrity": "sha512-wPsOM4qYncwOli20MNINgl0ZwmMY11RvrgPvjcMrkJ9dVqU/YrCcXV4rIg8Zig5jxCT+mf7rWQe9aQJlNTVipA==", "license": "MIT" }, "node_modules/@zag-js/remove-scroll": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/remove-scroll/-/remove-scroll-1.15.0.tgz", - "integrity": "sha512-vdWSAdgY8wJ7s4YeaKwTMwmZiRMBxCehmdktSxBWvwtAjU1cM3UWvjmZ9E6INJrQXxH9vDpe/rpFSyv1guIQIw==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/remove-scroll/-/remove-scroll-1.15.2.tgz", + "integrity": "sha512-pXVuvFcAQND+C0KAzAve02hGaI/AgEhC7RpgpyUKaUzEccEsxLi40C88j1/2HCfta6GI7nd2e0QwPZiqngUIyA==", "license": "MIT", "dependencies": { - "@zag-js/dom-query": "1.15.0" + "@zag-js/dom-query": "1.15.2" } }, "node_modules/@zag-js/scroll-snap": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/scroll-snap/-/scroll-snap-1.15.0.tgz", - "integrity": "sha512-/LfBlsjoR4tVL3Djus3k9jKLhwC2ApdHTACxEc72TAewoPe4M8icnSDLXmKHvwwOhzK0HlFz8wGm6ZncAbQbuA==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/scroll-snap/-/scroll-snap-1.15.2.tgz", + "integrity": "sha512-RswpsMHg0aWHsx7xqybnPm8bTL9ow17z9GhYgxSWtIi2U9wgkUHDtEJQcRNUA9PQEGyVd29B39NM0ir64HAhNQ==", "license": "MIT", "dependencies": { - "@zag-js/dom-query": "1.15.0" + "@zag-js/dom-query": "1.15.2" } }, "node_modules/@zag-js/select": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/select/-/select-1.15.0.tgz", - "integrity": "sha512-4urUBADzhrsGEO/UsqHdjsgmDdF15Zzeid3ejEbIMTrkt2/mMMcQ1CShuxtsWqm2EUBz/N1kOcZlE6Tq69n7Xg==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/select/-/select-1.15.2.tgz", + "integrity": "sha512-Y07RlBIc8bVj2WklhS7tiVySZntBv9TE9sfiA8RcLU7KFFGTdS2XUoQV4fziJubUL8XFhNzEC92/bKeBLqpgDw==", "license": "MIT", "dependencies": { - "@zag-js/anatomy": "1.15.0", - "@zag-js/collection": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/dismissable": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/popper": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/anatomy": "1.15.2", + "@zag-js/collection": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/dismissable": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/popper": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/signature-pad": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/signature-pad/-/signature-pad-1.15.0.tgz", - "integrity": "sha512-5Tj8vkrRxEkSV417oR2qdy+TRgDmS3W8dY7xsIjpbBf/kqkt/8Uo4JpaVH2vwQAFw9AwEFogBh9i6dHcXMy0rA==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/signature-pad/-/signature-pad-1.15.2.tgz", + "integrity": "sha512-vw7oD7afBfGvUyotJrFl+PjPVYOYZLgQ1eVAosKj54phgKvxheBr8/ySq9vlyTkyvOMjJ8zIkkxlywuqoZzl8g==", "license": "MIT", "dependencies": { - "@zag-js/anatomy": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0", + "@zag-js/anatomy": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2", "perfect-freehand": "^1.2.2" } }, "node_modules/@zag-js/slider": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/slider/-/slider-1.15.0.tgz", - "integrity": "sha512-NYIsn3GKXIoPmvkDXsQmw9wdYg3QHbYHXnZ8Ewl2fVubN7S5mDlHSZs2iDVsBvX+a4RChWFRO6JHX8E1+BncOg==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/slider/-/slider-1.15.2.tgz", + "integrity": "sha512-Lcrm+h4Vx0stD0ybAqD5tA1qOnrKEfQP9ucQsPUy+fY2em19XC6raOVOhAc6ROx4X0neTI/yEc1ARJQSaxtRZw==", "license": "MIT", "dependencies": { - "@zag-js/anatomy": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/anatomy": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/splitter": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/splitter/-/splitter-1.15.0.tgz", - "integrity": "sha512-Xnedl+cpnD/hv9m+GOYCK5K2xRxbs4xuP/EajYtgVcDw8E1X5cBmxHa1hCrp7BMgb2xYCvZ5et4hnmZfb+1X9g==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/splitter/-/splitter-1.15.2.tgz", + "integrity": "sha512-LIuTTPRaw3inS64f2TLcFIlwjNe9Tx9mSE4VXf7wPhYitNKmyh7MeNE59na+wDzZisVwx9yBewAPfrZtbHDGBA==", "license": "MIT", "dependencies": { - "@zag-js/anatomy": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/anatomy": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/steps": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/steps/-/steps-1.15.0.tgz", - "integrity": "sha512-VoIDcDIEErZawmW2m0yTGlffqjfRuSwR37K9LdSRy8Q4Qzz3wV7jASaTjMhTya1hlreJ7tJg+Qbjqowvw9GndA==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/steps/-/steps-1.15.2.tgz", + "integrity": "sha512-NnS3wYQrFWA5OXu+jnlnPpm49rGpzHCDbN2UuUcMGvbYVETKEXEO9fC1XWh7PstVuNi03E/CrZGHl5cEjf/j8w==", "license": "MIT", "dependencies": { - "@zag-js/anatomy": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/anatomy": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/store": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/store/-/store-1.15.0.tgz", - "integrity": "sha512-ecqjcy3b1GsULpsT8RVJV9KDaikajRN0XRg48HMvaGkaPIvxI6esyrE6RKnShuqr2eVXIPghgBnCnrJUev4UlA==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/store/-/store-1.15.2.tgz", + "integrity": "sha512-oDJuRdu8SaGab06UycN96OgvNau1ynawDNNfQNhA7zoOIZlaJH6jP+5YaAPFila+wyjdw7svz5+4ejs8vXcjpw==", "license": "MIT", "dependencies": { "proxy-compare": "3.0.1" } }, "node_modules/@zag-js/switch": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/switch/-/switch-1.15.0.tgz", - "integrity": "sha512-2CaAUTi7jM4lJjCYoSE1HWlFPCifI5GR+hufWOCYKpanf8VA/LM+t/a2Aq5QoBsWdcQv3B9mHxF/aVTDbnCKPQ==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/switch/-/switch-1.15.2.tgz", + "integrity": "sha512-2aEm5HDP/ENcLvoP77CH7DQTPXIMUzVilefHlz6WT0tQxQzOw8uMhUOYYcuNmEq0FNRUOyuMEMyZnZFUYAxqvQ==", "license": "MIT", "dependencies": { - "@zag-js/anatomy": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/focus-visible": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/anatomy": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/focus-visible": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/tabs": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/tabs/-/tabs-1.15.0.tgz", - "integrity": "sha512-voHWpibC1TKLmbAJfixOesxrCio7wK+gdLRvh7Xh5u+3VSsT2fP2wEw3ySkJbpw3MpEE7R2OWkInbCV/SwPcsA==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/tabs/-/tabs-1.15.2.tgz", + "integrity": "sha512-SJMR4K59sxvNZEIgnJfbweLzncmgxRWTBm+FamwMtP8DKQ3RETNdjrn4aA9qLUsCObapk06KT3iTeiCXzuBaFA==", "license": "MIT", "dependencies": { - "@zag-js/anatomy": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/anatomy": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/tags-input": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/tags-input/-/tags-input-1.15.0.tgz", - "integrity": "sha512-CB60z+/I/Nso1gwatTO1qrk4XITxDd4qtRD+l6fuuKyOkZGgKm0AP0W+/6qUuOvtWIuY6fas3yZHFmF2eEZ9vQ==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/tags-input/-/tags-input-1.15.2.tgz", + "integrity": "sha512-/mAuB8emhGoo3eoIgmlT/kQE27ukRlhghgwp3OjvEen+iTpz0XIWM+S+IV3QU6U4DlhwkadQaINht/c9ln6gxQ==", "license": "MIT", "dependencies": { - "@zag-js/anatomy": "1.15.0", - "@zag-js/auto-resize": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/interact-outside": "1.15.0", - "@zag-js/live-region": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/anatomy": "1.15.2", + "@zag-js/auto-resize": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/interact-outside": "1.15.2", + "@zag-js/live-region": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/time-picker": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/time-picker/-/time-picker-1.15.0.tgz", - "integrity": "sha512-4S02433X88X3MW/BxaFJiWna4BIRXsAdrmDcBb0PZ8dln29DUmpD8YHcFtONsKvmCAmrbO7Gr65n86nQwK8zeg==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/time-picker/-/time-picker-1.15.2.tgz", + "integrity": "sha512-Aoe9GdbrvAMP1fdOEmzCESr/dO+cGnqhCoa0UkZB5wuB4dT3S02hRGSZsHO51Eon2NpzHPG9j+/alncwOe77Tw==", "license": "MIT", "dependencies": { - "@zag-js/anatomy": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/dismissable": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/popper": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/anatomy": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/dismissable": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/popper": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" }, "peerDependencies": { "@internationalized/date": ">=3.0.0" } }, "node_modules/@zag-js/timer": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/timer/-/timer-1.15.0.tgz", - "integrity": "sha512-gDsYm4C9yju7g/r5u7n7mRQ2UY7diXXVbbLFr5Ja+0iUXgbD+uoSZEt9HypVc5TL9NWEEwn5/tut36owEeW4rw==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/timer/-/timer-1.15.2.tgz", + "integrity": "sha512-v8RN3cwFuNXxuDMuxxfXKCSd+Z1UT6Ct+ueU3PRZqHqXU9u4k9Mm+vROIqnNzhCCdIHNxsqUt32/2zsRRaubbw==", "license": "MIT", "dependencies": { - "@zag-js/anatomy": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/anatomy": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/toast": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/toast/-/toast-1.15.0.tgz", - "integrity": "sha512-0RupMCXyGr7/La4Zlei7VqBF0VPNJelGd7zimLboe+IKZyy4Ypi/N2IX14rl8JZQDsDEgkLUl33xrSk/9RW2nQ==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/toast/-/toast-1.15.2.tgz", + "integrity": "sha512-OohJvGTy+J1MpydJ4eCV36picggfF9VbDW4nK97TT+4bIIRDgW+PGYgB4dd+PvEjRrk9194Kkm93lud95yOyZg==", "license": "MIT", "dependencies": { - "@zag-js/anatomy": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/dismissable": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/anatomy": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/dismissable": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/toggle": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/toggle/-/toggle-1.15.0.tgz", - "integrity": "sha512-mMSQ1+f1hOMp/7gLA7rTeiSNyeZxsCjRxP4XnTBY4BxJ5LswLuhem9CplBwaVthkhY1Y/5f3HHu80LBcfF+BVQ==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/toggle/-/toggle-1.15.2.tgz", + "integrity": "sha512-wtDeIRhDeVhaUboWQ2GrxlCC4+cLRyZzvZiN84tad7H/sUKq9hNDdROcCnIYBhEkb1Qf4sjR8KszY12YLtJx6A==", "license": "MIT", "dependencies": { - "@zag-js/anatomy": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/anatomy": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/toggle-group": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/toggle-group/-/toggle-group-1.15.0.tgz", - "integrity": "sha512-992vMz/2sriLrUKI3LpT/01kCGTbPGLgGLibiHRt562i0v9+2tV+GiY2jBctHZjJaKPrzBY3H0l8CCCvDj8gng==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/toggle-group/-/toggle-group-1.15.2.tgz", + "integrity": "sha512-JhWV0GY2NRgDhlzP73ADlG1E4NFXqv1h2q5+m3Rmos+Bi8soOV437jch/wy+M+xYN5vdZCczXJu9BumHNlknhA==", "license": "MIT", "dependencies": { - "@zag-js/anatomy": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/anatomy": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/tooltip": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/tooltip/-/tooltip-1.15.0.tgz", - "integrity": "sha512-sOpVECyfdS4RZBx46mSV+RPc9C5k9JvYQYUfoOVWh0E5RLSEz5bQm5xxctKOHfCOv+vJNTfG5gP596B1r2+Fkw==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/tooltip/-/tooltip-1.15.2.tgz", + "integrity": "sha512-Spw5ewga3DNaT5H4AnrtsxJ6ebRoTxy+igwojGTYUCNUoxyQn6W3UpqZpgAAfw8B236bduTRh9MW9CsaM/hnmg==", "license": "MIT", "dependencies": { - "@zag-js/anatomy": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/focus-visible": "1.15.0", - "@zag-js/popper": "1.15.0", - "@zag-js/store": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/anatomy": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/focus-visible": "1.15.2", + "@zag-js/popper": "1.15.2", + "@zag-js/store": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/tour": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/tour/-/tour-1.15.0.tgz", - "integrity": "sha512-EplcxoiE0z9vI0z6675+ABclQ9Mi1YUWhDZOHx7wfjRzpfawmJoBAlNDKzK3wc801d6OxgJx69SPj7ac0BwwwA==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/tour/-/tour-1.15.2.tgz", + "integrity": "sha512-OW+autOwwsVMGwcYCxdCh3Hibeeag6Sg8w02XfmX7E+T2u9a+GGdLOrH7DPM2oHTbZV0iBUqIaKxGPKgRYZNng==", "license": "MIT", "dependencies": { - "@zag-js/anatomy": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/dismissable": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/focus-trap": "1.15.0", - "@zag-js/interact-outside": "1.15.0", - "@zag-js/popper": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/anatomy": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/dismissable": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/focus-trap": "1.15.2", + "@zag-js/interact-outside": "1.15.2", + "@zag-js/popper": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/tree-view": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/tree-view/-/tree-view-1.15.0.tgz", - "integrity": "sha512-wqdd+hu1bDOCWtnZ8MarRFHqbZF2t8qKBM3kO42IBq7jTI/93LCkHSlceEPft9dgZ6Ea9km0YJMHhoTqCPZ/fw==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/tree-view/-/tree-view-1.15.2.tgz", + "integrity": "sha512-HWDHH3rpGEz3IN5bsj8EHZnU0ttk8uJwBOnH3reYcFQEQskA8cmyzd7y9hdBEn8PzAns+iOjUBj49IVmoYpOIg==", "license": "MIT", "dependencies": { - "@zag-js/anatomy": "1.15.0", - "@zag-js/collection": "1.15.0", - "@zag-js/core": "1.15.0", - "@zag-js/dom-query": "1.15.0", - "@zag-js/types": "1.15.0", - "@zag-js/utils": "1.15.0" + "@zag-js/anatomy": "1.15.2", + "@zag-js/collection": "1.15.2", + "@zag-js/core": "1.15.2", + "@zag-js/dom-query": "1.15.2", + "@zag-js/types": "1.15.2", + "@zag-js/utils": "1.15.2" } }, "node_modules/@zag-js/types": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/types/-/types-1.15.0.tgz", - "integrity": "sha512-lV2ov2M07BlmjDUCSwBeHxPApHI3oAiLytG94AqcYvQ0BtsCRo5T60yRQ0syFc6fHf0e9+kwt89uoIgfGFYfmw==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/types/-/types-1.15.2.tgz", + "integrity": "sha512-qEHNRA/uOYQjvXzI/ie6vuOD74/p7w6MA4X1VoZEYF2/sbIQjlRn6SzpeV3RyFZBzl6WBO6RqV/XEbgpvGSb5w==", "license": "MIT", "dependencies": { "csstype": "3.1.3" } }, "node_modules/@zag-js/utils": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@zag-js/utils/-/utils-1.15.0.tgz", - "integrity": "sha512-XctFny5H8C00BsougV40Yp0qVEj9M2d/NRme7B33mon9wG+3hscZwP6miJmF6BYI5Pgu6e2P0Sv45FddQU1Tkg==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@zag-js/utils/-/utils-1.15.2.tgz", + "integrity": "sha512-JdlyGT6yfG2ub2FftrB6BidIlvD04cSwdKYJGb/M+NJ7p7uxnZUZMxAjeBmTLhM1nWbtJPVq3oDTYz/cBBZLng==", "license": "MIT" }, "node_modules/acorn": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", - "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", "bin": { @@ -3934,14 +3945,12 @@ "license": "MIT" }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^1.0.0" } }, "node_modules/braces": { @@ -4265,9 +4274,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001721", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001721.tgz", - "integrity": "sha512-cOuvmUVtKrtEaoKiO0rSc29jcjwMwX5tOHDy4MgVFEWiUXj4uBMJkwI8MDySkgXidpMiHUcviogAvFi4pA2hDQ==", + "version": "1.0.30001723", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001723.tgz", + "integrity": "sha512-1R/elMjtehrFejxwmexeXAtae5UO9iSyFn6G/I806CYC/BLyyBk1EPhrKBkWhy6wM6Xnm47dSJQec+tLJ39WHw==", "funding": [ { "type": "opencollective", @@ -4825,9 +4834,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.165", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.165.tgz", - "integrity": "sha512-naiMx1Z6Nb2TxPU6fiFrUrDTjyPMLdTtaOd2oLmG8zVSg2hCWGkhPyxwk+qRmZ1ytwVqUv0u7ZcDA5+ALhaUtw==", + "version": "1.5.167", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.167.tgz", + "integrity": "sha512-LxcRvnYO5ez2bMOFpbuuVuAI5QNeY1ncVytE/KXaL6ZNfzX1yPlAO0nSOyIHx2fVAuUprMqPs/TdVhUFZy7SIQ==", "license": "ISC" }, "node_modules/elliptic": { @@ -5084,9 +5093,9 @@ } }, "node_modules/eslint-scope": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", - "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -5101,9 +5110,9 @@ } }, "node_modules/eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -5130,6 +5139,17 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/eslint/node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -5150,16 +5170,29 @@ "dev": true, "license": "MIT" }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/espree": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", - "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.14.0", + "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.0" + "eslint-visitor-keys": "^4.2.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5591,30 +5624,6 @@ "node": ">= 6" } }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/globals": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/globals/-/globals-16.2.0.tgz", @@ -5965,9 +5974,9 @@ } }, "node_modules/immutable": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.2.tgz", - "integrity": "sha512-qHKXW1q6liAk1Oys6umoaZbDRqjcjgSrbnrifHsfsttza7zcvRAsL7mMV6xWcyhwQy7Xj5v4hhbr6b+iDYwlmQ==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.3.tgz", + "integrity": "sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==", "devOptional": true, "license": "MIT" }, @@ -6453,9 +6462,9 @@ } }, "node_modules/lucide-react": { - "version": "0.511.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.511.0.tgz", - "integrity": "sha512-VK5a2ydJ7xm8GvBeKLS9mu1pVK6ucef9780JVUjw6bAjJL/QXnd4Y0p7SPeOUMC27YhzNCZvm5d/QX0Tp3rc0w==", + "version": "0.515.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.515.0.tgz", + "integrity": "sha512-Sy7bY0MeicRm2pzrnoHm2h6C1iVoeHyBU2fjdQDsXGP51fhkhau1/ZV/dzrcxEmAKsxYb6bGaIsMnGHuQ5s0dw==", "license": "ISC", "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" @@ -6577,16 +6586,18 @@ "license": "MIT" }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/minipass": { @@ -7283,9 +7294,9 @@ } }, "node_modules/postcss": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.4.tgz", - "integrity": "sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==", + "version": "8.5.5", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.5.tgz", + "integrity": "sha512-d/jtm+rdNT8tpXuHY5MMtcbJFBkhXE6593XVR9UoGCH8jSFGci7jGvMGH5RYd5PBJW+00NZQt6gf7CbagJCrhg==", "funding": [ { "type": "opencollective", @@ -7780,9 +7791,9 @@ } }, "node_modules/rollup": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.42.0.tgz", - "integrity": "sha512-LW+Vse3BJPyGJGAJt1j8pWDKPd73QM8cRXYK1IxOBgL2AGLu7Xd2YOW0M2sLUBCkF5MshXXtMApyEAEzMVMsnw==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.43.0.tgz", + "integrity": "sha512-wdN2Kd3Twh8MAEOEJZsuxuLKCsBEo4PVNLK6tQWAn10VhsVewQLzcucMgLolRlhFybGxfclbPeEYBaP6RvUFGg==", "license": "MIT", "dependencies": { "@types/estree": "1.0.7" @@ -7795,26 +7806,26 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.42.0", - "@rollup/rollup-android-arm64": "4.42.0", - "@rollup/rollup-darwin-arm64": "4.42.0", - "@rollup/rollup-darwin-x64": "4.42.0", - "@rollup/rollup-freebsd-arm64": "4.42.0", - "@rollup/rollup-freebsd-x64": "4.42.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.42.0", - "@rollup/rollup-linux-arm-musleabihf": "4.42.0", - "@rollup/rollup-linux-arm64-gnu": "4.42.0", - "@rollup/rollup-linux-arm64-musl": "4.42.0", - "@rollup/rollup-linux-loongarch64-gnu": "4.42.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.42.0", - "@rollup/rollup-linux-riscv64-gnu": "4.42.0", - "@rollup/rollup-linux-riscv64-musl": "4.42.0", - "@rollup/rollup-linux-s390x-gnu": "4.42.0", - "@rollup/rollup-linux-x64-gnu": "4.42.0", - "@rollup/rollup-linux-x64-musl": "4.42.0", - "@rollup/rollup-win32-arm64-msvc": "4.42.0", - "@rollup/rollup-win32-ia32-msvc": "4.42.0", - "@rollup/rollup-win32-x64-msvc": "4.42.0", + "@rollup/rollup-android-arm-eabi": "4.43.0", + "@rollup/rollup-android-arm64": "4.43.0", + "@rollup/rollup-darwin-arm64": "4.43.0", + "@rollup/rollup-darwin-x64": "4.43.0", + "@rollup/rollup-freebsd-arm64": "4.43.0", + "@rollup/rollup-freebsd-x64": "4.43.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.43.0", + "@rollup/rollup-linux-arm-musleabihf": "4.43.0", + "@rollup/rollup-linux-arm64-gnu": "4.43.0", + "@rollup/rollup-linux-arm64-musl": "4.43.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.43.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.43.0", + "@rollup/rollup-linux-riscv64-gnu": "4.43.0", + "@rollup/rollup-linux-riscv64-musl": "4.43.0", + "@rollup/rollup-linux-s390x-gnu": "4.43.0", + "@rollup/rollup-linux-x64-gnu": "4.43.0", + "@rollup/rollup-linux-x64-musl": "4.43.0", + "@rollup/rollup-win32-arm64-msvc": "4.43.0", + "@rollup/rollup-win32-ia32-msvc": "4.43.0", + "@rollup/rollup-win32-x64-msvc": "4.43.0", "fsevents": "~2.3.2" } }, @@ -7916,13 +7927,13 @@ } }, "node_modules/sass-embedded": { - "version": "1.89.1", - "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.89.1.tgz", - "integrity": "sha512-alvGGlyYdkSXYKOfS/TTxUD0993EYOe3adIPtwCWEg037qe183p2dkYnbaRsCLJFKt+QoyRzhsrbCsK7sbR6MA==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.89.2.tgz", + "integrity": "sha512-Ack2K8rc57kCFcYlf3HXpZEJFNUX8xd8DILldksREmYXQkRHI879yy8q4mRDJgrojkySMZqmmmW1NxrFxMsYaA==", "devOptional": true, "license": "MIT", "dependencies": { - "@bufbuild/protobuf": "^2.0.0", + "@bufbuild/protobuf": "^2.5.0", "buffer-builder": "^0.2.0", "colorjs.io": "^0.5.0", "immutable": "^5.0.2", @@ -7938,28 +7949,28 @@ "node": ">=16.0.0" }, "optionalDependencies": { - "sass-embedded-android-arm": "1.89.1", - "sass-embedded-android-arm64": "1.89.1", - "sass-embedded-android-riscv64": "1.89.1", - "sass-embedded-android-x64": "1.89.1", - "sass-embedded-darwin-arm64": "1.89.1", - "sass-embedded-darwin-x64": "1.89.1", - "sass-embedded-linux-arm": "1.89.1", - "sass-embedded-linux-arm64": "1.89.1", - "sass-embedded-linux-musl-arm": "1.89.1", - "sass-embedded-linux-musl-arm64": "1.89.1", - "sass-embedded-linux-musl-riscv64": "1.89.1", - "sass-embedded-linux-musl-x64": "1.89.1", - "sass-embedded-linux-riscv64": "1.89.1", - "sass-embedded-linux-x64": "1.89.1", - "sass-embedded-win32-arm64": "1.89.1", - "sass-embedded-win32-x64": "1.89.1" + "sass-embedded-android-arm": "1.89.2", + "sass-embedded-android-arm64": "1.89.2", + "sass-embedded-android-riscv64": "1.89.2", + "sass-embedded-android-x64": "1.89.2", + "sass-embedded-darwin-arm64": "1.89.2", + "sass-embedded-darwin-x64": "1.89.2", + "sass-embedded-linux-arm": "1.89.2", + "sass-embedded-linux-arm64": "1.89.2", + "sass-embedded-linux-musl-arm": "1.89.2", + "sass-embedded-linux-musl-arm64": "1.89.2", + "sass-embedded-linux-musl-riscv64": "1.89.2", + "sass-embedded-linux-musl-x64": "1.89.2", + "sass-embedded-linux-riscv64": "1.89.2", + "sass-embedded-linux-x64": "1.89.2", + "sass-embedded-win32-arm64": "1.89.2", + "sass-embedded-win32-x64": "1.89.2" } }, "node_modules/sass-embedded-android-arm": { - "version": "1.89.1", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.89.1.tgz", - "integrity": "sha512-wVchZSz8zbJBwwOs9/iwco/M5G3L5BaeqwUF1EC3Gtzn1BsXYUEkJfftW2HxGl4hQz2YlpR7BY1GRN817uxADA==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.89.2.tgz", + "integrity": "sha512-oHAPTboBHRZlDBhyRB6dvDKh4KvFs+DZibDHXbkSI6dBZxMTT+Yb2ivocHnctVGucKTLQeT7+OM5DjWHyynL/A==", "cpu": [ "arm" ], @@ -7973,9 +7984,9 @@ } }, "node_modules/sass-embedded-android-arm64": { - "version": "1.89.1", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.89.1.tgz", - "integrity": "sha512-Je6x7uuJRGQdr5ziSJdaPA4NhBSO26BU/E55qiuMUZpjq2EWBEJPbNeugu/cWlCEmfqoVuxj37r8aEU+KG0H1g==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.89.2.tgz", + "integrity": "sha512-+pq7a7AUpItNyPu61sRlP6G2A8pSPpyazASb+8AK2pVlFayCSPAEgpwpCE9A2/Xj86xJZeMizzKUHxM2CBCUxA==", "cpu": [ "arm64" ], @@ -7989,9 +8000,9 @@ } }, "node_modules/sass-embedded-android-riscv64": { - "version": "1.89.1", - "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.89.1.tgz", - "integrity": "sha512-DhWe+A4RVtpHMVaQgdzRpiczAXKPl7XhyY9USkY9Xkhv94+csTfjyuFmsUuCpKSiQDQkD+rGByfg+9yQIk/RgQ==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.89.2.tgz", + "integrity": "sha512-HfJJWp/S6XSYvlGAqNdakeEMPOdhBkj2s2lN6SHnON54rahKem+z9pUbCriUJfM65Z90lakdGuOfidY61R9TYg==", "cpu": [ "riscv64" ], @@ -8005,9 +8016,9 @@ } }, "node_modules/sass-embedded-android-x64": { - "version": "1.89.1", - "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.89.1.tgz", - "integrity": "sha512-LTEzxTXrv3evPiHBmDMtJtO5tEprg7bvNOwYTjDEhE9ZCYdb70l+haIY0dVyhGxyeaBJlyvatjWOKEduPP3Lyw==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.89.2.tgz", + "integrity": "sha512-BGPzq53VH5z5HN8de6jfMqJjnRe1E6sfnCWFd4pK+CAiuM7iw5Fx6BQZu3ikfI1l2GY0y6pRXzsVLdp/j4EKEA==", "cpu": [ "x64" ], @@ -8021,9 +8032,9 @@ } }, "node_modules/sass-embedded-darwin-arm64": { - "version": "1.89.1", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.89.1.tgz", - "integrity": "sha512-7qMO4BLdIOFMMc1M+hg5iWEjPxbPlH1XTPUCwyuXYqubz6kXkdrrtJXolNAAey/0ZOE6uXk0APugm93a/veQdQ==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.89.2.tgz", + "integrity": "sha512-UCm3RL/tzMpG7DsubARsvGUNXC5pgfQvP+RRFJo9XPIi6elopY5B6H4m9dRYDpHA+scjVthdiDwkPYr9+S/KGw==", "cpu": [ "arm64" ], @@ -8037,9 +8048,9 @@ } }, "node_modules/sass-embedded-darwin-x64": { - "version": "1.89.1", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.89.1.tgz", - "integrity": "sha512-Jzuws3NNx4YtDdL2/skP8BvGqMBKn26XINehwLnD2kgbh0+k+vKNWt5JDomvIuZVLsK8zWrMoRkXpk4wuHdqrw==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.89.2.tgz", + "integrity": "sha512-D9WxtDY5VYtMApXRuhQK9VkPHB8R79NIIR6xxVlN2MIdEid/TZWi1MHNweieETXhWGrKhRKglwnHxxyKdJYMnA==", "cpu": [ "x64" ], @@ -8053,9 +8064,9 @@ } }, "node_modules/sass-embedded-linux-arm": { - "version": "1.89.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.89.1.tgz", - "integrity": "sha512-8TvFr/lh7FARtNr9mM57m7NNvtSZwnlkXtfY1D48B81Ve6GgtLqQhELNzvTcfQ0WZa0aNnVjq9XUuWLlrMDaZQ==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.89.2.tgz", + "integrity": "sha512-leP0t5U4r95dc90o8TCWfxNXwMAsQhpWxTkdtySDpngoqtTy3miMd7EYNYd1znI0FN1CBaUvbdCMbnbPwygDlA==", "cpu": [ "arm" ], @@ -8069,9 +8080,9 @@ } }, "node_modules/sass-embedded-linux-arm64": { - "version": "1.89.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.89.1.tgz", - "integrity": "sha512-h967EV2armjV+Re+hHv7LaIzCOvV6DoFod9GJhXTdnPvilqs7DAPTUfN07wOqbzjlaGEnITZXzLsWAoZ1Z7tWQ==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.89.2.tgz", + "integrity": "sha512-2N4WW5LLsbtrWUJ7iTpjvhajGIbmDR18ZzYRywHdMLpfdPApuHPMDF5CYzHbS+LLx2UAx7CFKBnj5LLjY6eFgQ==", "cpu": [ "arm64" ], @@ -8085,9 +8096,9 @@ } }, "node_modules/sass-embedded-linux-musl-arm": { - "version": "1.89.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.89.1.tgz", - "integrity": "sha512-Tl8wDL+3qFa/AhvZZBb1OvhN1SvIsRSLaPdGP8cv3VmKKVBdlLp2zedPTlcLJpR9dG/bjtGJYGX15kWHAvZ6mQ==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.89.2.tgz", + "integrity": "sha512-Z6gG2FiVEEdxYHRi2sS5VIYBmp17351bWtOCUZ/thBM66+e70yiN6Eyqjz80DjL8haRUegNQgy9ZJqsLAAmr9g==", "cpu": [ "arm" ], @@ -8101,9 +8112,9 @@ } }, "node_modules/sass-embedded-linux-musl-arm64": { - "version": "1.89.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.89.1.tgz", - "integrity": "sha512-l4TrsUmE3AEPy2gDThb+OQV5xSyrb807DJbkQiFtTwvtOZAAkoVl1v2QeocW0npgKjc/W7nHMiSempJe0UcV7w==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.89.2.tgz", + "integrity": "sha512-nTyuaBX6U1A/cG7WJh0pKD1gY8hbg1m2SnzsyoFG+exQ0lBX/lwTLHq3nyhF+0atv7YYhYKbmfz+sjPP8CZ9lw==", "cpu": [ "arm64" ], @@ -8117,9 +8128,9 @@ } }, "node_modules/sass-embedded-linux-musl-riscv64": { - "version": "1.89.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.89.1.tgz", - "integrity": "sha512-YJVZmz032U7dv4RW3u+SJGp+DQWmYWc5fX/aXzLuoL6PPUPon1/Sseaf/5YGtcuQf8RnxZBbM2nFHFVHDJfsQw==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.89.2.tgz", + "integrity": "sha512-N6oul+qALO0SwGY8JW7H/Vs0oZIMrRMBM4GqX3AjM/6y8JsJRxkAwnfd0fDyK+aICMFarDqQonQNIx99gdTZqw==", "cpu": [ "riscv64" ], @@ -8133,9 +8144,9 @@ } }, "node_modules/sass-embedded-linux-musl-x64": { - "version": "1.89.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.89.1.tgz", - "integrity": "sha512-67ijpk87V0VlpdVTtgnfIzRkVUMtEH79nvGctvNpk0XT6v+oxoFRljFRiYItZOxb5gRZMnvtkgaz1VHVcMrhtg==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.89.2.tgz", + "integrity": "sha512-K+FmWcdj/uyP8GiG9foxOCPfb5OAZG0uSVq80DKgVSC0U44AdGjvAvVZkrgFEcZ6cCqlNC2JfYmslB5iqdL7tg==", "cpu": [ "x64" ], @@ -8149,9 +8160,9 @@ } }, "node_modules/sass-embedded-linux-riscv64": { - "version": "1.89.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.89.1.tgz", - "integrity": "sha512-SQNWy5kUvlQJUKRXFy8jS05DBik+2ERIWDxOBk+QuJYEIktlA9fKKBU8c7RkgpZFNXSXZa0W1Gy27oOFCzhhuA==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.89.2.tgz", + "integrity": "sha512-g9nTbnD/3yhOaskeqeBQETbtfDQWRgsjHok6bn7DdAuwBsyrR3JlSFyqKc46pn9Xxd9SQQZU8AzM4IR+sY0A0w==", "cpu": [ "riscv64" ], @@ -8165,9 +8176,9 @@ } }, "node_modules/sass-embedded-linux-x64": { - "version": "1.89.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.89.1.tgz", - "integrity": "sha512-KUqGzBvTDZG6D3Pq41sCzqO1wkxM0WmxxlI7PTuVkvgciTywHf8F7mkg2alMLVZQ6APJEYtlnCGQgn4cCgYsqw==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.89.2.tgz", + "integrity": "sha512-Ax7dKvzncyQzIl4r7012KCMBvJzOz4uwSNoyoM5IV6y5I1f5hEwI25+U4WfuTqdkv42taCMgpjZbh9ERr6JVMQ==", "cpu": [ "x64" ], @@ -8181,9 +8192,9 @@ } }, "node_modules/sass-embedded-win32-arm64": { - "version": "1.89.1", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.89.1.tgz", - "integrity": "sha512-Lk6dYA18RasZxQhShT91G7Z2o7+F9necTNJ951a5AICsSJpTbg3tTnAGB7Rvd6xB5reQSZoXfB/zXKEKwtzaow==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.89.2.tgz", + "integrity": "sha512-j96iJni50ZUsfD6tRxDQE2QSYQ2WrfHxeiyAXf41Kw0V4w5KYR/Sf6rCZQLMTUOHnD16qTMVpQi20LQSqf4WGg==", "cpu": [ "arm64" ], @@ -8197,9 +8208,9 @@ } }, "node_modules/sass-embedded-win32-x64": { - "version": "1.89.1", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.89.1.tgz", - "integrity": "sha512-YlvzrzFPHd4GKa04jMfP0t2DGJHPTm7zN4GEYtaOFqeS6BoEAUY5kBNYFy7zhwKesN3kGyU/D9rz1MfLRgGv0g==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.89.2.tgz", + "integrity": "sha512-cS2j5ljdkQsb4PaORiClaVYynE9OAPZG/XjbOMxpQmjRIf7UroY4PEIH+Waf+y47PfXFX9SyxhYuw2NIKGbEng==", "cpu": [ "x64" ], @@ -8889,9 +8900,9 @@ } }, "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.5.tgz", - "integrity": "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==", + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", "license": "MIT", "peerDependencies": { "picomatch": "^3 || ^4" @@ -9021,15 +9032,15 @@ } }, "node_modules/typescript-eslint": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.33.1.tgz", - "integrity": "sha512-AgRnV4sKkWOiZ0Kjbnf5ytTJXMUZQ0qhSVdQtDNYLPLnjsATEYhaO94GlRQwi4t4gO8FfjM6NnikHeKjUm8D7A==", + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.34.0.tgz", + "integrity": "sha512-MRpfN7uYjTrTGigFCt8sRyNqJFhjN0WwZecldaqhWm+wy0gaRt8Edb/3cuUy0zdq2opJWT6iXINKAtewnDOltQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.33.1", - "@typescript-eslint/parser": "8.33.1", - "@typescript-eslint/utils": "8.33.1" + "@typescript-eslint/eslint-plugin": "8.34.0", + "@typescript-eslint/parser": "8.34.0", + "@typescript-eslint/utils": "8.34.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -9334,9 +9345,9 @@ } }, "node_modules/vite-node": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.2.tgz", - "integrity": "sha512-Xj/jovjZvDXOq2FgLXu8NsY4uHUMWtzVmMC2LkCu9HWdr9Qu1Is5sanX3Z4jOFKdohfaWDnEJWp9pRP0vVpAcA==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.3.tgz", + "integrity": "sha512-gc8aAifGuDIpZHrPjuHyP4dpQmYXqWw7D1GmDnWeNWP654UEXzVfQ5IHPSK5HaHkwB/+p1atpYpSdw/2kOv8iQ==", "license": "MIT", "dependencies": { "cac": "^6.7.14", @@ -9504,9 +9515,9 @@ } }, "node_modules/vite/node_modules/fdir": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.5.tgz", - "integrity": "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==", + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", "license": "MIT", "peerDependencies": { "picomatch": "^3 || ^4" @@ -9732,9 +9743,9 @@ } }, "node_modules/zod": { - "version": "3.25.56", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.56.tgz", - "integrity": "sha512-rd6eEF3BTNvQnR2e2wwolfTmUTnp70aUTqr0oaGbHifzC3BKJsoV+Gat8vxUMR1hwOKBs6El+qWehrHbCpW6SQ==", + "version": "3.25.64", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.64.tgz", + "integrity": "sha512-hbP9FpSZf7pkS7hRVUrOjhwKJNyampPgtXKc3AN6DsWtoHsg2Sb4SQaS4Tcay380zSwd2VPo9G9180emBACp5g==", "dev": true, "license": "MIT", "funding": { diff --git a/package.json b/package.json index b0aec170..be375377 100644 --- a/package.json +++ b/package.json @@ -5,31 +5,31 @@ "private": true, "type": "module", "dependencies": { - "@chakra-ui/react": "^3.20.0", + "@chakra-ui/react": "^3.21.0", "@emotion/react": "^11.14.0", - "@fontsource-variable/inter": "^5.2.5", + "@fontsource-variable/inter": "^5.2.6", "@fullcalendar/core": "^6.1.17", "@fullcalendar/interaction": "^6.1.17", "@fullcalendar/react": "^6.1.17", "@fullcalendar/timegrid": "^6.1.17", "@react-router/fs-routes": "^7.6.2", - "@react-router/node": "^7.6.0", - "@rjsf/chakra-ui": "^6.0.0-beta.10", - "@rjsf/core": "^6.0.0-beta.10", - "@rjsf/utils": "^6.0.0-beta.10", - "@rjsf/validator-ajv8": "^6.0.0-beta.10", + "@react-router/node": "^7.6.2", + "@rjsf/chakra-ui": "^6.0.0-beta.11", + "@rjsf/core": "^6.0.0-beta.11", + "@rjsf/utils": "^6.0.0-beta.11", + "@rjsf/validator-ajv8": "^6.0.0-beta.11", "ag-grid-react": "^33.3.2", "html-entities": "^2.6.0", "ical-generator": "^9.0.0", "isbot": "^5.1.28", - "lucide-react": "^0.511.0", + "lucide-react": "^0.515.0", "msgpackr": "^1.11.4", "nanoid": "^5.1.5", "next-themes": "^0.4.6", "react": "^19.1.0", "react-dom": "^19.1.0", "react-icons": "^5.5.0", - "react-router": "^7.6.0", + "react-router": "^7.6.2", "react-use": "^17.6.0", "rrule": "^2.8.1", "smol-toml": "^1.3.4", @@ -48,12 +48,12 @@ "node": ">=20.0" }, "devDependencies": { - "@chakra-ui/cli": "^3.20.0", - "@eslint/compat": "^1.2.9", - "@eslint/js": "^9.27.0", + "@chakra-ui/cli": "^3.21.0", + "@eslint/compat": "^1.3.0", + "@eslint/js": "^9.28.0", "@react-router/dev": "^7.6.2", - "@types/node": "^22.15.30", - "@types/react": "^19.1.6", + "@types/node": "^22.15.31", + "@types/react": "^19.1.8", "@types/react-dom": "19.1.5", "eslint": "^9.28.0", "eslint-config-prettier": "^10.1.5", @@ -61,12 +61,12 @@ "eslint-plugin-react-refresh": "^0.4.20", "globals": "^16.2.0", "prettier": "^3.5.3", - "sass-embedded": "^1.89.1", + "sass-embedded": "^1.89.2", "typescript": "^5.8.3", - "typescript-eslint": "^8.33.1", + "typescript-eslint": "^8.34.0", "vite": "^6.3.5", "vite-plugin-checker": "^0.9.3", "vite-plugin-node-polyfills": "^0.23.0", "vite-tsconfig-paths": "^5.1.4" } -} +} \ No newline at end of file diff --git a/react-router.config.ts b/react-router.config.ts index 3ff1b9fa..2aeff344 100644 --- a/react-router.config.ts +++ b/react-router.config.ts @@ -3,4 +3,12 @@ import type { Config } from "@react-router/dev/config"; export default { appDirectory: "src", ssr: false, + // for now... https://remix.run/blog/rr-governance + future: { + unstable_middleware: true, + unstable_splitRouteModules: true, + unstable_subResourceIntegrity: true, + unstable_viteEnvironmentApi: true, + unstable_optimizeDeps: true, + }, } satisfies Config; diff --git a/src/routes/overrides.($prefillId).tsx b/src/routes/overrides.($prefillId).tsx index 7fdf2aca..f38be3ad 100644 --- a/src/routes/overrides.($prefillId).tsx +++ b/src/routes/overrides.($prefillId).tsx @@ -383,7 +383,7 @@ export default function App({ loaderData }: Route.ComponentProps) { experimental_defaultFormStateBehavior={{ arrayMinItems: { populate: "requiredOnly" }, emptyObjectFields: "populateRequiredDefaults", - mergeDefaultsIntoFormData: "useDefaultIfFormDataUndefined", + mergeDefaultsIntoFormData: "useFormDataIfPresent", }} liveOmit={true} omitExtraData={true} From ad4796d1f953dd1748dfdb063bd59a1214959b34 Mon Sep 17 00:00:00 2001 From: Diego Temkin <65834932+dtemkin1@users.noreply.github.com> Date: Fri, 13 Jun 2025 11:42:59 -0400 Subject: [PATCH 17/29] stop chrome 404 --- package-lock.json | 28 ++++++++++++++++++++++++++++ package.json | 3 ++- vite.config.ts | 2 ++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 59f0e759..a0cdabff 100644 --- a/package-lock.json +++ b/package-lock.json @@ -57,6 +57,7 @@ "typescript-eslint": "^8.34.0", "vite": "^6.3.5", "vite-plugin-checker": "^0.9.3", + "vite-plugin-devtools-json": "^0.2.0", "vite-plugin-node-polyfills": "^0.23.0", "vite-tsconfig-paths": "^5.1.4" }, @@ -9197,6 +9198,20 @@ "dev": true, "license": "MIT" }, + "node_modules/uuid": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, "node_modules/valibot": { "version": "0.41.0", "resolved": "https://registry.npmjs.org/valibot/-/valibot-0.41.0.tgz", @@ -9477,6 +9492,19 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/vite-plugin-devtools-json": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/vite-plugin-devtools-json/-/vite-plugin-devtools-json-0.2.0.tgz", + "integrity": "sha512-K7PoaWOEJECZ1n3VbhJXsUAX2PsO0xY7KFMM/Leh7tUev0M5zi+lz+vnVVdCK17IOK9Jp9rdzHXc08cnQirGbg==", + "dev": true, + "license": "MIT", + "dependencies": { + "uuid": "^11.1.0" + }, + "peerDependencies": { + "vite": "^2.7.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" + } + }, "node_modules/vite-plugin-node-polyfills": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/vite-plugin-node-polyfills/-/vite-plugin-node-polyfills-0.23.0.tgz", diff --git a/package.json b/package.json index be375377..4d376275 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,8 @@ "typescript-eslint": "^8.34.0", "vite": "^6.3.5", "vite-plugin-checker": "^0.9.3", + "vite-plugin-devtools-json": "^0.2.0", "vite-plugin-node-polyfills": "^0.23.0", "vite-tsconfig-paths": "^5.1.4" } -} \ No newline at end of file +} diff --git a/vite.config.ts b/vite.config.ts index 0547ad96..c0d0d983 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -3,6 +3,7 @@ import { defineConfig } from "vite"; import tsconfigPaths from "vite-tsconfig-paths"; import checker from "vite-plugin-checker"; import { nodePolyfills } from "vite-plugin-node-polyfills"; +import devtoolsJson from "vite-plugin-devtools-json"; // https://vitejs.dev/config/ export default defineConfig({ @@ -14,5 +15,6 @@ export default defineConfig({ typescript: true, eslint: { lintCommand: "eslint **/*.{ts,tsx}", useFlatConfig: true }, }), + devtoolsJson(), ], }); From 5589a7860639e146d3c9bab44e5e3e196ef9e9b7 Mon Sep 17 00:00:00 2001 From: Diego Temkin <65834932+dtemkin1@users.noreply.github.com> Date: Wed, 19 Nov 2025 16:50:57 -0500 Subject: [PATCH 18/29] format --- package-lock.json | 1 - src/lib/state.ts | 10 +++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index d27013f2..d630ce66 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6474,7 +6474,6 @@ "version": "10.5.0", "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", - "dev": true, "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", diff --git a/src/lib/state.ts b/src/lib/state.ts index b3e03637..7ef8cec7 100644 --- a/src/lib/state.ts +++ b/src/lib/state.ts @@ -350,11 +350,11 @@ export class State { inflate( obj: | ( - | number - | (string | number | string[])[][] - | (string | RawTimeslot[])[][] - | null - )[] + | number + | (string | number | string[])[][] + | (string | RawTimeslot[])[][] + | null + )[] | null, ): void { if (!obj) return; From 4964a67a05f19154bb9820424306e4b98e9a8747 Mon Sep 17 00:00:00 2001 From: Diego Temkin <65834932+dtemkin1@users.noreply.github.com> Date: Sat, 22 Nov 2025 20:44:15 -0500 Subject: [PATCH 19/29] add color --- src/components/Auth.tsx | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/components/Auth.tsx b/src/components/Auth.tsx index 6ae89803..f508c898 100644 --- a/src/components/Auth.tsx +++ b/src/components/Auth.tsx @@ -10,7 +10,7 @@ export function AuthButton() { const session = useContext(SessionContext); const location = useLocation(); - const [tooltipContent, label, pathname, UserIcon] = useMemo(() => { + const [tooltipContent, label, pathname, UserIcon, color] = useMemo(() => { const username = session?.get("academic_id"); if (username) { @@ -19,15 +19,22 @@ export function AuthButton() { "Logout", "/auth/logout", LuLogOut, + "red", ]; } else { - return ["Click to log in!", "Login", "/auth/login", LuLogIn]; + return ["Click to log in!", "Login", "/auth/login", LuLogIn, "blue"]; } }, [session]); return ( - + From 5945e89c83a119ff63dc39a71935bfa8b778b2a4 Mon Sep 17 00:00:00 2001 From: Diego Temkin <65834932+dtemkin1@users.noreply.github.com> Date: Sun, 23 Nov 2025 16:32:34 -0500 Subject: [PATCH 20/29] add sync schedule function --- src/lib/auth.ts | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/lib/auth.ts b/src/lib/auth.ts index c30253b9..93acf7e9 100644 --- a/src/lib/auth.ts +++ b/src/lib/auth.ts @@ -200,4 +200,25 @@ export const deleteSchedule = async (authToken: string, id: string) => { } }; -// export const syncSchedule = () => { }; +export const syncSchedule = ( + authToken: string, + id: string, + contents: ScheduleContents, + changed: Date, + downloaded?: Date, + name?: string, + agent?: string, + override?: boolean, +) => { + console.log(`syncSchedule called with the following params: `, { + authToken, + id, + contents, + changed, + downloaded, + name, + agent, + override, + }); + throw new Error("Not implemented"); +}; From ad40cc3e318a41ba39ec001e780dfeb5446f4b26 Mon Sep 17 00:00:00 2001 From: Diego Temkin <65834932+dtemkin1@users.noreply.github.com> Date: Sun, 23 Nov 2025 17:15:13 -0500 Subject: [PATCH 21/29] add results from server code --- src/lib/auth.ts | 70 ++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 54 insertions(+), 16 deletions(-) diff --git a/src/lib/auth.ts b/src/lib/auth.ts index 93acf7e9..1109f9e1 100644 --- a/src/lib/auth.ts +++ b/src/lib/auth.ts @@ -195,30 +195,68 @@ export const deleteSchedule = async (authToken: string, id: string) => { } | { success: true }; - if (!result.success) { - throw new Error("Failed to delete schedule: " + result.error); - } + return result; }; -export const syncSchedule = ( +export const syncSchedule = async ( authToken: string, id: string, contents: ScheduleContents, - changed: Date, - downloaded?: Date, + changed: string, + downloaded?: string, name?: string, agent?: string, override?: boolean, ) => { - console.log(`syncSchedule called with the following params: `, { - authToken, - id, - contents, - changed, - downloaded, - name, - agent, - override, + const response = await fetch(`${FIREROAD_URL}/sync_schedule/`, { + method: "POST", + body: JSON.stringify({ + id, + contents, + changed, + downloaded, + name, + agent, + override, + }), + headers: { + Authorization: `Bearer ${authToken}`, + }, }); - throw new Error("Not implemented"); + + if (!response.ok) { + throw new Error("Failed to sync schedule"); + } + + const result = (await response.json()) as + | { + success: false; + error: string; + } + | { success: true; result: "no_change"; changed: string } + | { success: true; result: "update_remote"; changed: string } + | { + success: true; + result: "update_local"; + contents: ScheduleContents; + name: string; + id: string; + downloaded: string; + } + | { + success: true; + result: "conflict"; + other_name: string; + other_agent: string; + other_date: string; + other_contents: ScheduleContents | ""; + this_agent: string; + this_date: string; + }; + + if (!result.success) { + throw new Error("Failed to sync schedule: " + result.error); + } + + return result; }; From 288eddaa0e73964882591ac0ab1e79ce32a3d3e3 Mon Sep 17 00:00:00 2001 From: Diego Temkin <65834932+dtemkin1@users.noreply.github.com> Date: Wed, 3 Dec 2025 13:03:40 -0500 Subject: [PATCH 22/29] format... --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 28fee472..2420e485 100644 --- a/package.json +++ b/package.json @@ -75,4 +75,4 @@ "vite-tsconfig-paths": "^5.1.4", "vitest": "^4.0.14" } -} \ No newline at end of file +} From 2a9813c7345fea1b0061c4c990d895bc289681c0 Mon Sep 17 00:00:00 2001 From: Diego Temkin <65834932+dtemkin1@users.noreply.github.com> Date: Sun, 7 Dec 2025 19:27:48 -0500 Subject: [PATCH 23/29] undo this --- src/lib/gapi.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/lib/gapi.ts b/src/lib/gapi.ts index 66377a50..86082999 100644 --- a/src/lib/gapi.ts +++ b/src/lib/gapi.ts @@ -1,6 +1,6 @@ import type { ICalEventData } from "ical-generator"; import { ICalCalendar } from "ical-generator"; -import * as rrule from "rrule"; +import { RRule, RRuleSet } from "rrule"; import { tzlib_get_ical_block } from "timezones-ical-library"; @@ -8,8 +8,6 @@ import type { Activity } from "./activity"; import type { Term } from "./dates"; import type { State } from "./state"; -const { RRule, RRuleSet } = rrule; - /** Timezone string. */ const TIMEZONE = "America/New_York"; From af77be01ab7e43dd8e7ea4eb1b1ed63bfdd3f462 Mon Sep 17 00:00:00 2001 From: Diego Temkin <65834932+dtemkin1@users.noreply.github.com> Date: Sun, 7 Dec 2025 19:34:40 -0500 Subject: [PATCH 24/29] only add ?next if not index --- src/components/Auth.tsx | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/components/Auth.tsx b/src/components/Auth.tsx index f508c898..272ba6d0 100644 --- a/src/components/Auth.tsx +++ b/src/components/Auth.tsx @@ -35,7 +35,15 @@ export function AuthButton() { colorPalette={color} asChild > - + From a2255d0b260af5421549ed1f215a3108155ccfa8 Mon Sep 17 00:00:00 2001 From: Diego Temkin <65834932+dtemkin1@users.noreply.github.com> Date: Sun, 4 Jan 2026 05:58:34 -0500 Subject: [PATCH 25/29] undo not necessary --- src/lib/gapi.ts | 1 - src/routes/overrides.($prefillId).tsx | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/lib/gapi.ts b/src/lib/gapi.ts index 86082999..d56effa6 100644 --- a/src/lib/gapi.ts +++ b/src/lib/gapi.ts @@ -1,7 +1,6 @@ import type { ICalEventData } from "ical-generator"; import { ICalCalendar } from "ical-generator"; import { RRule, RRuleSet } from "rrule"; - import { tzlib_get_ical_block } from "timezones-ical-library"; import type { Activity } from "./activity"; diff --git a/src/routes/overrides.($prefillId).tsx b/src/routes/overrides.($prefillId).tsx index 0a58de8b..ac8f9404 100644 --- a/src/routes/overrides.($prefillId).tsx +++ b/src/routes/overrides.($prefillId).tsx @@ -411,7 +411,7 @@ export default function App({ loaderData }: Route.ComponentProps) { allOf: "skipDefaults", constAsDefaults: "always", emptyObjectFields: "populateRequiredDefaults", - mergeDefaultsIntoFormData: "useFormDataIfPresent", + mergeDefaultsIntoFormData: "useDefaultIfFormDataUndefined", }} liveOmit={"onChange"} omitExtraData={true} From 18d2a6c82bc96a9c95d0f1c5901aadcdf2ba1dc3 Mon Sep 17 00:00:00 2001 From: Diego Temkin <65834932+dtemkin1@users.noreply.github.com> Date: Sun, 4 Jan 2026 06:00:07 -0500 Subject: [PATCH 26/29] nvmd --- src/routes/overrides.($prefillId).tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/overrides.($prefillId).tsx b/src/routes/overrides.($prefillId).tsx index ac8f9404..0a58de8b 100644 --- a/src/routes/overrides.($prefillId).tsx +++ b/src/routes/overrides.($prefillId).tsx @@ -411,7 +411,7 @@ export default function App({ loaderData }: Route.ComponentProps) { allOf: "skipDefaults", constAsDefaults: "always", emptyObjectFields: "populateRequiredDefaults", - mergeDefaultsIntoFormData: "useDefaultIfFormDataUndefined", + mergeDefaultsIntoFormData: "useFormDataIfPresent", }} liveOmit={"onChange"} omitExtraData={true} From 662f8a429ef90b8d3cb39a140a7d4175fc0381c1 Mon Sep 17 00:00:00 2001 From: Diego Temkin <65834932+dtemkin1@users.noreply.github.com> Date: Sun, 4 Jan 2026 06:31:53 -0500 Subject: [PATCH 27/29] move types around --- src/lib/auth.ts | 162 +++++++++++++++++++++++++----------------------- 1 file changed, 83 insertions(+), 79 deletions(-) diff --git a/src/lib/auth.ts b/src/lib/auth.ts index 1109f9e1..a007516b 100644 --- a/src/lib/auth.ts +++ b/src/lib/auth.ts @@ -28,9 +28,10 @@ export const { getSession, commitSession, destroySession } = cookie: { name: "__session", path: "/", - sameSite: "lax", + sameSite: "strict", secure: import.meta.env.PROD, - secrets: ["secret:3"], + // since we don't send auth cookies to a server (since its all client-side), we don't need to sign them + secrets: [], }, }); @@ -40,6 +41,13 @@ export const SessionContext = createContext { const response = await fetch(`${FIREROAD_URL}/prefs/favorites/`, { headers: { @@ -51,13 +59,7 @@ export const getFavoriteCourses = async (authToken: string) => { throw new Error("Failed to fetch favorite courses"); } - const result = (await response.json()) as - | { - success: false; - error: string; - } - | { success: true; favorites: string[] }; - + const result = (await response.json()) as GetFavoriteResponse; if (!result.success) { throw new Error("Failed to fetch favorite courses: " + result.error); } @@ -65,6 +67,13 @@ export const getFavoriteCourses = async (authToken: string) => { return result.favorites; }; +type SetFavoriteResponse = + | { + success: false; + error: string; + } + | { success: true }; + export const setFavoriteCourses = async ( authToken: string, favorites: string[], @@ -82,13 +91,7 @@ export const setFavoriteCourses = async ( throw new Error("Failed to set favorite courses"); } - const result = (await response.json()) as - | { - success: false; - error: string; - } - | { success: true }; - + const result = (await response.json()) as SetFavoriteResponse; if (!result.success) { throw new Error("Failed to set favorite courses: " + result.error); } @@ -114,6 +117,33 @@ interface ScheduleContents { }[]; } +type GetSchedulesWithIdResult = + | { + success: false; + error: string; + } + | { + success: true; + file: { + name: string; + id: string; + changed: string; + downloaded: string; + agent: string; + contents: ScheduleContents; + }; + }; + +type GetSchedulesWithoutIdResult = + | { + success: false; + error: string; + } + | { + success: true; + files: Record; + }; + export const getSchedules = async (authToken: string, id?: string) => { const response = await fetch( `${FIREROAD_URL}/sync/schedules/${id ? `?id=${id}` : ""}`, @@ -130,23 +160,7 @@ export const getSchedules = async (authToken: string, id?: string) => { if (typeof id == "string") { // id specified, return single schedule - const result = (await response.json()) as - | { - success: false; - error: string; - } - | { - success: true; - file: { - name: string; - id: string; - changed: string; - downloaded: string; - agent: string; - contents: ScheduleContents; - }; - }; - + const result = (await response.json()) as GetSchedulesWithIdResult; if (!result.success) { throw new Error("Failed to fetch schedule: " + result.error); } @@ -154,19 +168,7 @@ export const getSchedules = async (authToken: string, id?: string) => { return result.file; } else { // no id specified, return all schedules - const result = (await response.json()) as - | { - success: false; - error: string; - } - | { - success: true; - files: Record< - string, - { name: string; changed: string; agent: string } - >; - }; - + const result = (await response.json()) as GetSchedulesWithoutIdResult; if (!result.success) { throw new Error("Failed to fetch schedules: " + result.error); } @@ -175,6 +177,13 @@ export const getSchedules = async (authToken: string, id?: string) => { } }; +type DeleteScheduleResult = + | { + success: false; + error: string; + } + | { success: true }; + export const deleteSchedule = async (authToken: string, id: string) => { const response = await fetch(`${FIREROAD_URL}/delete_schedule/`, { method: "POST", @@ -188,16 +197,36 @@ export const deleteSchedule = async (authToken: string, id: string) => { throw new Error("Failed to delete schedule"); } - const result = (await response.json()) as - | { - success: false; - error: string; - } - | { success: true }; - + const result = (await response.json()) as DeleteScheduleResult; return result; }; +type SyncScheduleResult = + | { + success: false; + error: string; + } + | { success: true; result: "no_change"; changed: string } + | { success: true; result: "update_remote"; changed: string } + | { + success: true; + result: "update_local"; + contents: ScheduleContents; + name: string; + id: string; + downloaded: string; + } + | { + success: true; + result: "conflict"; + other_name: string; + other_agent: string; + other_date: string; + other_contents: ScheduleContents | ""; + this_agent: string; + this_date: string; + }; + export const syncSchedule = async ( authToken: string, id: string, @@ -228,32 +257,7 @@ export const syncSchedule = async ( throw new Error("Failed to sync schedule"); } - const result = (await response.json()) as - | { - success: false; - error: string; - } - | { success: true; result: "no_change"; changed: string } - | { success: true; result: "update_remote"; changed: string } - | { - success: true; - result: "update_local"; - contents: ScheduleContents; - name: string; - id: string; - downloaded: string; - } - | { - success: true; - result: "conflict"; - other_name: string; - other_agent: string; - other_date: string; - other_contents: ScheduleContents | ""; - this_agent: string; - this_date: string; - }; - + const result = (await response.json()) as SyncScheduleResult; if (!result.success) { throw new Error("Failed to sync schedule: " + result.error); } From b301bc731472d9363ce6d4891e5620021106252d Mon Sep 17 00:00:00 2001 From: Diego Temkin <65834932+dtemkin1@users.noreply.github.com> Date: Sun, 4 Jan 2026 06:40:18 -0500 Subject: [PATCH 28/29] security --- src/lib/auth.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lib/auth.ts b/src/lib/auth.ts index a007516b..0c7c628d 100644 --- a/src/lib/auth.ts +++ b/src/lib/auth.ts @@ -28,7 +28,8 @@ export const { getSession, commitSession, destroySession } = cookie: { name: "__session", path: "/", - sameSite: "strict", + sameSite: "lax", + httpOnly: import.meta.env.PROD, secure: import.meta.env.PROD, // since we don't send auth cookies to a server (since its all client-side), we don't need to sign them secrets: [], From 1a96ef7d2c47c179af37c26ec01efe495c3a64e6 Mon Sep 17 00:00:00 2001 From: Diego Temkin <65834932+dtemkin1@users.noreply.github.com> Date: Sun, 4 Jan 2026 06:41:24 -0500 Subject: [PATCH 29/29] consistency --- src/lib/auth.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/lib/auth.ts b/src/lib/auth.ts index 0c7c628d..c8cf29b6 100644 --- a/src/lib/auth.ts +++ b/src/lib/auth.ts @@ -199,6 +199,10 @@ export const deleteSchedule = async (authToken: string, id: string) => { } const result = (await response.json()) as DeleteScheduleResult; + if (!result.success) { + throw new Error("Failed to delete schedule: " + result.error); + } + return result; };