diff --git a/package/src/formats/date.ts b/package/src/formats/date.ts index 2d3868c..a783134 100644 --- a/package/src/formats/date.ts +++ b/package/src/formats/date.ts @@ -169,6 +169,9 @@ export type { WeekDescriptor } from "../compute-weeks-in-window"; export type { FirstWeekSpec, ScrollToWeekSnap } from "../resolve-first-week"; -export type { OverflowBehavior, MonthOverflowBehavior } from "../overflow"; +export type { + OutOfRangeBehavior, + MonthOutOfRangeBehavior, +} from "../out-of-range"; export type { MonthSeparatorState } from "../month-separator"; diff --git a/package/src/formats/object.ts b/package/src/formats/object.ts index f33948a..daaccb0 100644 --- a/package/src/formats/object.ts +++ b/package/src/formats/object.ts @@ -169,6 +169,9 @@ export type { WeekDescriptor } from "../compute-weeks-in-window"; export type { FirstWeekSpec, ScrollToWeekSnap } from "../resolve-first-week"; -export type { OverflowBehavior, MonthOverflowBehavior } from "../overflow"; +export type { + OutOfRangeBehavior, + MonthOutOfRangeBehavior, +} from "../out-of-range"; export type { MonthSeparatorState } from "../month-separator"; diff --git a/package/src/formats/plain-date-time.ts b/package/src/formats/plain-date-time.ts index 6793aa0..3f65c80 100644 --- a/package/src/formats/plain-date-time.ts +++ b/package/src/formats/plain-date-time.ts @@ -169,6 +169,9 @@ export type { WeekDescriptor } from "../compute-weeks-in-window"; export type { FirstWeekSpec, ScrollToWeekSnap } from "../resolve-first-week"; -export type { OverflowBehavior, MonthOverflowBehavior } from "../overflow"; +export type { + OutOfRangeBehavior, + MonthOutOfRangeBehavior, +} from "../out-of-range"; export type { MonthSeparatorState } from "../month-separator"; diff --git a/package/src/formats/plain-date.ts b/package/src/formats/plain-date.ts index 953345b..aaa721f 100644 --- a/package/src/formats/plain-date.ts +++ b/package/src/formats/plain-date.ts @@ -169,6 +169,9 @@ export type { WeekDescriptor } from "../compute-weeks-in-window"; export type { FirstWeekSpec, ScrollToWeekSnap } from "../resolve-first-week"; -export type { OverflowBehavior, MonthOverflowBehavior } from "../overflow"; +export type { + OutOfRangeBehavior, + MonthOutOfRangeBehavior, +} from "../out-of-range"; export type { MonthSeparatorState } from "../month-separator"; diff --git a/package/src/formats/plain-month-day.ts b/package/src/formats/plain-month-day.ts index 1af2049..1da30d3 100644 --- a/package/src/formats/plain-month-day.ts +++ b/package/src/formats/plain-month-day.ts @@ -169,6 +169,9 @@ export type { WeekDescriptor } from "../compute-weeks-in-window"; export type { FirstWeekSpec, ScrollToWeekSnap } from "../resolve-first-week"; -export type { OverflowBehavior, MonthOverflowBehavior } from "../overflow"; +export type { + OutOfRangeBehavior, + MonthOutOfRangeBehavior, +} from "../out-of-range"; export type { MonthSeparatorState } from "../month-separator"; diff --git a/package/src/formats/plain-year-month.ts b/package/src/formats/plain-year-month.ts index d9a38c2..4e0a930 100644 --- a/package/src/formats/plain-year-month.ts +++ b/package/src/formats/plain-year-month.ts @@ -169,6 +169,9 @@ export type { WeekDescriptor } from "../compute-weeks-in-window"; export type { FirstWeekSpec, ScrollToWeekSnap } from "../resolve-first-week"; -export type { OverflowBehavior, MonthOverflowBehavior } from "../overflow"; +export type { + OutOfRangeBehavior, + MonthOutOfRangeBehavior, +} from "../out-of-range"; export type { MonthSeparatorState } from "../month-separator"; diff --git a/package/src/formats/zoned-date-time.ts b/package/src/formats/zoned-date-time.ts index 8146710..efedcd8 100644 --- a/package/src/formats/zoned-date-time.ts +++ b/package/src/formats/zoned-date-time.ts @@ -169,6 +169,9 @@ export type { WeekDescriptor } from "../compute-weeks-in-window"; export type { FirstWeekSpec, ScrollToWeekSnap } from "../resolve-first-week"; -export type { OverflowBehavior, MonthOverflowBehavior } from "../overflow"; +export type { + OutOfRangeBehavior, + MonthOutOfRangeBehavior, +} from "../out-of-range"; export type { MonthSeparatorState } from "../month-separator"; diff --git a/package/src/grid.tsx b/package/src/grid.tsx index 1c41c60..110224b 100644 --- a/package/src/grid.tsx +++ b/package/src/grid.tsx @@ -460,7 +460,7 @@ function WeeksViewGridFn( numberOfMonths: 1, fixedWeeks: false, outsideDays: "enabled" as const, - overflowBehavior: "unbounded" as const, + outOfRangeBehavior: "unbounded" as const, goNextMonth: () => {}, goPrevMonth: () => {}, setGridLabelId: () => {}, diff --git a/package/src/index.ts b/package/src/index.ts index e99024a..dcc576e 100644 --- a/package/src/index.ts +++ b/package/src/index.ts @@ -124,5 +124,8 @@ export { useWeeksViewStable, useWeeksViewState } from "./weeks-view-context"; export type { WeekDescriptor } from "./compute-weeks-in-window"; export type { FirstWeekSpec, ScrollToWeekSnap } from "./resolve-first-week"; -export type { OverflowBehavior, MonthOverflowBehavior } from "./overflow"; +export type { + OutOfRangeBehavior, + MonthOutOfRangeBehavior, +} from "./out-of-range"; export type { MonthSeparatorState } from "./month-separator"; diff --git a/package/src/month-view-types.ts b/package/src/month-view-types.ts index 5954506..76f0a0f 100644 --- a/package/src/month-view-types.ts +++ b/package/src/month-view-types.ts @@ -1,5 +1,5 @@ import type { Temporal } from "@js-temporal/polyfill"; -import type { MonthOverflowBehavior } from "./overflow"; +import type { MonthOutOfRangeBehavior } from "./out-of-range"; import type { MonthData, OutsideDays, RootState } from "./types"; // --------------------------------------------------------------------------- @@ -25,12 +25,17 @@ export interface MonthViewRootProps { */ outsideDays?: OutsideDays | undefined; /** - * How month navigation behaves at `min`/`max` bounds. - * - `"unbounded"` — navigation is always allowed. - * - `"stop"` — navigation buttons disable at the boundary. + * How month navigation behaves at the `min`/`max` bounds. `min`/`max` always + * restrict which **days are selectable**; this controls whether you can still + * **view** months outside them. See {@link MonthOutOfRangeBehavior}. + * + * - `"unbounded"` — Prev/Next are never disabled by `min`/`max`; you can page + * to any month, with out-of-range days rendered disabled. + * - `"stop"` — Prev/Next disable once the destination month crosses the bound. + * * @default "unbounded" */ - overflowBehavior?: MonthOverflowBehavior | undefined; + outOfRangeBehavior?: MonthOutOfRangeBehavior | undefined; /** * The controlled visible month. When provided, the component is controlled. * @@ -65,7 +70,7 @@ export interface MonthViewStableContextValue { /** How outside-month days are displayed. */ outsideDays: OutsideDays; /** How month navigation behaves at bounds. */ - overflowBehavior: MonthOverflowBehavior; + outOfRangeBehavior: MonthOutOfRangeBehavior; /** Navigate to the next month(s). */ goNextMonth: () => void; /** Navigate to the previous month(s). */ diff --git a/package/src/month-view.test.tsx b/package/src/month-view.test.tsx index 43581e0..b9dde59 100644 --- a/package/src/month-view.test.tsx +++ b/package/src/month-view.test.tsx @@ -758,7 +758,7 @@ describe("numberOfMonths", () => { unmount(); }); - it("next button disabled when last visible month reaches max", () => { + it('outOfRangeBehavior="stop": next button disabled when last visible month reaches max', () => { const maxDate = Temporal.PlainDate.from("2026-05-31"); const { container, unmount } = render( { defaultValue={march15} numberOfMonths={3} max={maxDate} + outOfRangeBehavior="stop" > , @@ -778,7 +779,7 @@ describe("numberOfMonths", () => { unmount(); }); - it("prev button disabled when first visible month reaches min", () => { + it('outOfRangeBehavior="stop": prev button disabled when first visible month reaches min', () => { const minDate = Temporal.PlainDate.from("2026-03-01"); const { container, unmount } = render( { defaultValue={march15} numberOfMonths={2} min={minDate} + outOfRangeBehavior="stop" > , @@ -798,6 +800,46 @@ describe("numberOfMonths", () => { unmount(); }); + it('outOfRangeBehavior="unbounded" (default): next button stays enabled past max', () => { + const maxDate = Temporal.PlainDate.from("2026-05-31"); + const { container, unmount } = render( + + + , + ); + + // Default is "unbounded": max only restricts selectable days, not which + // months can be viewed, so the button must NOT disable at the bound. + const btn = container.querySelector('[data-testid="next"]')!; + expect(btn.getAttribute("disabled")).toBeNull(); + + unmount(); + }); + + it('outOfRangeBehavior="unbounded" (default): prev button stays enabled past min', () => { + const minDate = Temporal.PlainDate.from("2026-03-01"); + const { container, unmount } = render( + + + , + ); + + const btn = container.querySelector('[data-testid="prev"]')!; + expect(btn.getAttribute("disabled")).toBeNull(); + + unmount(); + }); + it("clicking next shifts view by one month", () => { let captured: | { currentMonth: { year: number; month: number } } diff --git a/package/src/month-view.tsx b/package/src/month-view.tsx index a6bbcde..1144cb0 100644 --- a/package/src/month-view.tsx +++ b/package/src/month-view.tsx @@ -33,7 +33,7 @@ function MonthViewRoot(props: MonthViewRootProps) { numberOfMonths: numberOfMonthsProp, fixedWeeks: fixedWeeksProp, outsideDays: outsideDaysProp, - overflowBehavior: overflowBehaviorProp, + outOfRangeBehavior: outOfRangeBehaviorProp, month: monthProp, defaultMonth: defaultMonthProp, onMonthChange, @@ -43,7 +43,7 @@ function MonthViewRoot(props: MonthViewRootProps) { const numberOfMonths = Math.max(1, Math.min(numberOfMonthsProp ?? 1, 12)); const fixedWeeks = fixedWeeksProp ?? false; const outsideDays = outsideDaysProp ?? "enabled"; - const overflowBehavior = overflowBehaviorProp ?? "unbounded"; + const outOfRangeBehavior = outOfRangeBehaviorProp ?? "unbounded"; // Read calendar-level context const calStable = useCalendarStable(); @@ -383,7 +383,7 @@ function MonthViewRoot(props: MonthViewRootProps) { numberOfMonths, fixedWeeks, outsideDays, - overflowBehavior, + outOfRangeBehavior, goNextMonth, goPrevMonth, setGridLabelId, @@ -393,7 +393,7 @@ function MonthViewRoot(props: MonthViewRootProps) { numberOfMonths, fixedWeeks, outsideDays, - overflowBehavior, + outOfRangeBehavior, goNextMonth, goPrevMonth, setGridLabelId, @@ -447,7 +447,7 @@ function MonthView( numberOfMonths, fixedWeeks, outsideDays, - overflowBehavior, + outOfRangeBehavior, month, defaultMonth, onMonthChange, @@ -461,7 +461,7 @@ function MonthView( numberOfMonths={numberOfMonths} fixedWeeks={fixedWeeks} outsideDays={outsideDays} - overflowBehavior={overflowBehavior} + outOfRangeBehavior={outOfRangeBehavior} month={month} defaultMonth={defaultMonth} onMonthChange={onMonthChange} diff --git a/package/src/navigation.tsx b/package/src/navigation.tsx index 9275a9e..8aad6c8 100644 --- a/package/src/navigation.tsx +++ b/package/src/navigation.tsx @@ -249,6 +249,7 @@ function useNavButton(direction: "prev" | "next") { goNextMonth: goToNextMonth, goPrevMonth: goToPrevMonth, numberOfMonths, + outOfRangeBehavior, } = monthViewStable; const { currentMonth: currentDateTime, @@ -285,6 +286,10 @@ function useNavButton(direction: "prev" | "next") { const isDisabled = useMemo(() => { if (globalDisabled) return true; + // "unbounded" never disables on min/max — the bounds only gate which days + // are selectable, not which months can be viewed. "stop" halts navigation + // once the destination month crosses the boundary. + if (outOfRangeBehavior === "unbounded") return false; if (!boundValue) return false; if (direction === "prev") { return ( @@ -296,7 +301,14 @@ function useNavButton(direction: "prev" | "next") { destYear > boundValue.year || (destYear === boundValue.year && destMonth > boundValue.month) ); - }, [globalDisabled, destYear, destMonth, boundValue, direction]); + }, [ + globalDisabled, + outOfRangeBehavior, + destYear, + destMonth, + boundValue, + direction, + ]); // ISO — `destYear`/`destMonth` are ISO numbers; the locale calendar only // affects display, so it must not be injected into this value. diff --git a/package/src/overflow.test.ts b/package/src/out-of-range.test.ts similarity index 82% rename from package/src/overflow.test.ts rename to package/src/out-of-range.test.ts index 20d67fd..b817453 100644 --- a/package/src/overflow.test.ts +++ b/package/src/out-of-range.test.ts @@ -1,11 +1,15 @@ import { Temporal } from "@js-temporal/polyfill"; import { describe, it, expect } from "vitest"; -import { applyOverflow, canShift, type OverflowBehavior } from "./overflow"; +import { + applyOutOfRange, + canShift, + type OutOfRangeBehavior, +} from "./out-of-range"; const T = Temporal; const pd = (s: string) => T.PlainDate.from(s); -describe("applyOverflow", () => { +describe("applyOutOfRange", () => { const min = pd("2025-12-01"); const max = pd("2026-01-10"); @@ -14,7 +18,7 @@ describe("applyOverflow", () => { description: "unbounded — no adjustment", targetFirstWeek: pd("2026-02-01"), weekCount: 8, - behavior: "unbounded" as OverflowBehavior, + behavior: "unbounded" as OutOfRangeBehavior, useMinMax: true, expected: { firstWeek: "2026-02-01", weekCount: 8 }, }, @@ -22,7 +26,7 @@ describe("applyOverflow", () => { description: "stop — target has valid weeks, allowed", targetFirstWeek: pd("2025-12-07"), weekCount: 8, - behavior: "stop" as OverflowBehavior, + behavior: "stop" as OutOfRangeBehavior, useMinMax: true, expected: { firstWeek: "2025-12-07", weekCount: 8 }, }, @@ -30,7 +34,7 @@ describe("applyOverflow", () => { description: "snap — pulls back when target overshoots max", targetFirstWeek: pd("2026-01-11"), weekCount: 8, - behavior: "snap" as OverflowBehavior, + behavior: "snap" as OutOfRangeBehavior, useMinMax: true, expected: { firstWeek: "2025-11-16", @@ -41,7 +45,7 @@ describe("applyOverflow", () => { description: "snap-shrink — pulls back and trims disabled rows", targetFirstWeek: pd("2026-01-11"), weekCount: 8, - behavior: "snap-shrink" as OverflowBehavior, + behavior: "snap-shrink" as OutOfRangeBehavior, useMinMax: true, expected: { firstWeek: "2025-11-30", @@ -52,7 +56,7 @@ describe("applyOverflow", () => { description: "stop-shrink — trims disabled rows", targetFirstWeek: pd("2025-12-07"), weekCount: 8, - behavior: "stop-shrink" as OverflowBehavior, + behavior: "stop-shrink" as OutOfRangeBehavior, useMinMax: true, expected: { firstWeek: "2025-12-07", @@ -63,14 +67,14 @@ describe("applyOverflow", () => { description: "no min/max — all modes behave as unbounded", targetFirstWeek: pd("2026-06-01"), weekCount: 8, - behavior: "snap" as OverflowBehavior, + behavior: "snap" as OutOfRangeBehavior, useMinMax: false, expected: { firstWeek: "2026-06-01", weekCount: 8 }, }, ])( "$description", ({ targetFirstWeek, weekCount, behavior, useMinMax, expected }) => { - const result = applyOverflow({ + const result = applyOutOfRange({ targetFirstWeek, weekCount, behavior, @@ -91,21 +95,21 @@ describe("canShift", () => { it.each([ { description: "unbounded — always true", - behavior: "unbounded" as OverflowBehavior, + behavior: "unbounded" as OutOfRangeBehavior, currentFirstWeek: pd("2026-06-01"), direction: 1 as const, expected: true, }, { description: "stop — false when target has no valid weeks", - behavior: "stop" as OverflowBehavior, + behavior: "stop" as OutOfRangeBehavior, currentFirstWeek: pd("2025-12-28"), direction: 1 as const, expected: false, }, { description: "snap — false when already at clamp position", - behavior: "snap" as OverflowBehavior, + behavior: "snap" as OutOfRangeBehavior, currentFirstWeek: pd("2025-11-16"), direction: 1 as const, expected: false, diff --git a/package/src/overflow.ts b/package/src/out-of-range.ts similarity index 68% rename from package/src/overflow.ts rename to package/src/out-of-range.ts index 84b15dd..7607487 100644 --- a/package/src/overflow.ts +++ b/package/src/out-of-range.ts @@ -1,14 +1,60 @@ import type { Temporal } from "@js-temporal/polyfill"; import type { TemporalNamespace, WeekStartDay } from "./types"; -export type OverflowBehavior = +/** + * Controls how a {@link WeeksView} window behaves when navigation would move it + * past the `min`/`max` bounds. + * + * `min`/`max` always restrict which **days are selectable**. `outOfRangeBehavior` + * is a separate concern: it decides whether the **visible window** may scroll + * beyond those bounds, and how the edge is handled. + * + * - `"unbounded"` — Navigation is never restricted by `min`/`max`; any range of + * weeks can be viewed. Out-of-range days simply render disabled. (Default.) + * - `"stop"` — Navigation halts at the boundary: the Prev/Next button is + * disabled once the next step would show a window containing no in-range day. + * - `"stop-shrink"` — Like `"stop"`, but near the edge the window **shrinks** to + * fewer week rows instead of showing rows that are entirely out of range. + * - `"snap"` — A jump that would overshoot **snaps** the window so its edge + * aligns to the last/first in-range week, rather than stopping or overshooting. + * - `"snap-shrink"` — Snap to the boundary, then **shrink** the window to just + * the in-range weeks. + * + * `"snap"` and `"snap-shrink"` are identical **unless the selectable range spans + * fewer weeks than `weekCount`** — i.e. the window is taller than the range. + * Snapping can only pin *one* edge to a bound; if the range is narrower than the + * window, the opposite edge still overhangs into out-of-range weeks. `"snap"` + * keeps the full `weekCount` (padding the overhang with all-disabled week rows), + * while `"snap-shrink"` trims those rows so only the in-range weeks show. + * + * Example with `weekCount: 6` and a `min`/`max` that span just 2 weeks: `"snap"` + * shows 6 rows (4 of them fully disabled), `"snap-shrink"` shows 2 rows. When + * the range is ≥ `weekCount` weeks wide, the snapped window already fits, so the + * two behave the same. + */ +export type OutOfRangeBehavior = | "unbounded" | "stop" | "stop-shrink" | "snap" | "snap-shrink"; -export type MonthOverflowBehavior = "unbounded" | "stop"; +/** + * Controls how {@link MonthView} navigation behaves when it would move the + * visible month(s) past the `min`/`max` bounds. + * + * `min`/`max` always restrict which **days are selectable**. This decides + * whether you can still **view** months outside them. + * + * - `"unbounded"` — Prev/Next are never disabled by `min`/`max`; you can page to + * any month. Out-of-range days render disabled. (Default.) + * - `"stop"` — Prev/Next become disabled once the destination month crosses the + * boundary. + * + * MonthView renders fixed month grids, so the `"…-shrink"`/`"snap…"` modes that + * {@link OutOfRangeBehavior} offers for WeeksView's flexible window don't apply. + */ +export type MonthOutOfRangeBehavior = "unbounded" | "stop"; // --------------------------------------------------------------------------- // Internal helpers @@ -105,10 +151,10 @@ function shrinkWindow( // Public API // --------------------------------------------------------------------------- -export interface ApplyOverflowInput { +export interface ApplyOutOfRangeInput { targetFirstWeek: Temporal.PlainDate; weekCount: number; - behavior: OverflowBehavior; + behavior: OutOfRangeBehavior; min?: Temporal.PlainDate; max?: Temporal.PlainDate; weekStartDay: WeekStartDay; @@ -116,10 +162,10 @@ export interface ApplyOverflowInput { } /** - * Given a target firstWeek and weekCount, apply overflow behavior and return + * Given a target firstWeek and weekCount, apply the out-of-range behavior and return * the adjusted { firstWeek, weekCount }. */ -export function applyOverflow({ +export function applyOutOfRange({ targetFirstWeek, weekCount, behavior, @@ -127,7 +173,7 @@ export function applyOverflow({ max, weekStartDay, T, -}: ApplyOverflowInput): { firstWeek: Temporal.PlainDate; weekCount: number } { +}: ApplyOutOfRangeInput): { firstWeek: Temporal.PlainDate; weekCount: number } { // Without bounds, all modes behave as unbounded if (!min || !max || behavior === "unbounded") { return { firstWeek: targetFirstWeek, weekCount }; @@ -185,7 +231,7 @@ export interface CanShiftInput { weekCount: number; direction: 1 | -1; shiftBy?: number; - behavior: OverflowBehavior; + behavior: OutOfRangeBehavior; min?: Temporal.PlainDate; max?: Temporal.PlainDate; weekStartDay: WeekStartDay; @@ -224,8 +270,8 @@ export function canShift({ if (behavior === "snap" || behavior === "snap-shrink") { // Disabled when the current position is already the snapped position - // (i.e. applying overflow to the target produces the same firstWeek) - const applied = applyOverflow({ + // (i.e. applying the out-of-range behavior to the target produces the same firstWeek) + const applied = applyOutOfRange({ targetFirstWeek, weekCount, behavior, diff --git a/package/src/weeks-navigation.tsx b/package/src/weeks-navigation.tsx index e72df08..b45ee4c 100644 --- a/package/src/weeks-navigation.tsx +++ b/package/src/weeks-navigation.tsx @@ -3,7 +3,7 @@ import { useRender } from "@base-ui/react/use-render"; import React, { forwardRef, useMemo } from "react"; import { useCalendarStable } from "./calendar-context"; import { useMonthViewState } from "./month-view-context"; -import { canShift } from "./overflow"; +import { canShift } from "./out-of-range"; import type { RootState, StateAttributesMapping } from "./types"; import { useWeeksViewStable, useWeeksViewState } from "./weeks-view-context"; @@ -77,7 +77,8 @@ function useWeeksNavButton( temporal: T, weekStartDay, } = useCalendarStable(); - const { weekCount, overflowBehavior, goNext, goPrev } = useWeeksViewStable(); + const { weekCount, outOfRangeBehavior, goNext, goPrev } = + useWeeksViewStable(); const { windowInfo } = useWeeksViewState(); const { rootState } = useMonthViewState(); @@ -90,7 +91,7 @@ function useWeeksNavButton( weekCount, direction: direction === "next" ? 1 : -1, ...(shiftByProp !== undefined && { shiftBy: shiftByProp }), - behavior: overflowBehavior, + behavior: outOfRangeBehavior, ...(minValue !== undefined && { min: minValue }), ...(maxValue !== undefined && { max: maxValue }), weekStartDay, @@ -102,7 +103,7 @@ function useWeeksNavButton( weekCount, direction, shiftByProp, - overflowBehavior, + outOfRangeBehavior, minValue, maxValue, weekStartDay, @@ -149,7 +150,7 @@ function PrevWeeksButtonFn( /** * Button that navigates to the previous week(s). Automatically disabled when - * no more weeks are available based on `overflowBehavior` and `min`. + * no more weeks are available based on `outOfRangeBehavior` and `min`. * Exposes `data-direction="prev"`. */ export const PrevWeeksButton = forwardRef(PrevWeeksButtonFn); @@ -177,7 +178,7 @@ function NextWeeksButtonFn( /** * Button that navigates to the next week(s). Automatically disabled when - * no more weeks are available based on `overflowBehavior` and `max`. + * no more weeks are available based on `outOfRangeBehavior` and `max`. * Exposes `data-direction="next"`. */ export const NextWeeksButton = forwardRef(NextWeeksButtonFn); @@ -216,6 +217,6 @@ function WeekCountFn( /** * Renders the current visible week count as a number. Useful with shrink - * overflow modes where the actual count may be less than the `weekCount` prop. + * out-of-range modes where the actual count may be less than the `weekCount` prop. */ export const WeekCount = forwardRef(WeekCountFn); diff --git a/package/src/weeks-view-state.ts b/package/src/weeks-view-state.ts index 20f6a8a..982d82e 100644 --- a/package/src/weeks-view-state.ts +++ b/package/src/weeks-view-state.ts @@ -2,7 +2,7 @@ import type { Temporal } from "@js-temporal/polyfill"; import { useCallback, useEffect, useMemo, useRef, useState } from "react"; import { useCalendarStable, useCalendarState } from "./calendar-context"; import { computeWeeksInWindow } from "./compute-weeks-in-window"; -import { applyOverflow, type OverflowBehavior } from "./overflow"; +import { applyOutOfRange, type OutOfRangeBehavior } from "./out-of-range"; import { resolveFirstWeekSpec, resolveFirstWeek, @@ -29,13 +29,13 @@ export function useWeeksViewRootState(props: WeeksViewRootProps) { defaultFirstWeek: defaultFirstWeekProp, onFirstWeekChange, scrollBy: scrollByProp, - overflowBehavior: overflowBehaviorProp, + outOfRangeBehavior: outOfRangeBehaviorProp, onWindowChange, } = props; const scrollBy = scrollByProp ?? "row"; - const overflowBehavior: OverflowBehavior = - overflowBehaviorProp ?? "unbounded"; + const outOfRangeBehavior: OutOfRangeBehavior = + outOfRangeBehaviorProp ?? "unbounded"; // Read calendar-level context const calStable = useCalendarStable(); @@ -81,13 +81,13 @@ export function useWeeksViewRootState(props: WeeksViewRootProps) { [resolvedFirstWeek, weekCount, weekStartDay, T], ); - // --- Apply overflow --- - const overflowResult = useMemo( + // --- Apply out-of-range behavior --- + const outOfRangeResult = useMemo( () => - applyOverflow({ + applyOutOfRange({ targetFirstWeek: resolvedFirstWeek, weekCount, - behavior: overflowBehavior, + behavior: outOfRangeBehavior, ...(minValue !== undefined && { min: minValue }), ...(maxValue !== undefined && { max: maxValue }), weekStartDay, @@ -96,7 +96,7 @@ export function useWeeksViewRootState(props: WeeksViewRootProps) { [ resolvedFirstWeek, weekCount, - overflowBehavior, + outOfRangeBehavior, minValue, maxValue, weekStartDay, @@ -104,19 +104,26 @@ export function useWeeksViewRootState(props: WeeksViewRootProps) { ], ); - // Recompute weeks if overflow adjusted the window + // Recompute weeks if the out-of-range behavior adjusted the window const adjustedWeeks = useMemo(() => { const sameFirst = - T.PlainDate.compare(overflowResult.firstWeek, resolvedFirstWeek) === 0; - const sameCount = overflowResult.weekCount === weekCount; + T.PlainDate.compare(outOfRangeResult.firstWeek, resolvedFirstWeek) === 0; + const sameCount = outOfRangeResult.weekCount === weekCount; if (sameFirst && sameCount) return rawWeeks; return computeWeeksInWindow( - overflowResult.firstWeek, - overflowResult.weekCount, + outOfRangeResult.firstWeek, + outOfRangeResult.weekCount, weekStartDay, T, ); - }, [overflowResult, resolvedFirstWeek, weekCount, rawWeeks, weekStartDay, T]); + }, [ + outOfRangeResult, + resolvedFirstWeek, + weekCount, + rawWeeks, + weekStartDay, + T, + ]); // --- Compute WindowInfo --- const isDateEnabled = useCallback( @@ -310,10 +317,10 @@ export function useWeeksViewRootState(props: WeeksViewRootProps) { (shiftBy?: number) => { const shift = shiftBy ?? weekCount; const target = resolvedFirstWeek.add({ weeks: shift }); - const adjusted = applyOverflow({ + const adjusted = applyOutOfRange({ targetFirstWeek: target, weekCount, - behavior: overflowBehavior, + behavior: outOfRangeBehavior, ...(minValue !== undefined && { min: minValue }), ...(maxValue !== undefined && { max: maxValue }), weekStartDay, @@ -324,7 +331,7 @@ export function useWeeksViewRootState(props: WeeksViewRootProps) { [ resolvedFirstWeek, weekCount, - overflowBehavior, + outOfRangeBehavior, minValue, maxValue, weekStartDay, @@ -337,10 +344,10 @@ export function useWeeksViewRootState(props: WeeksViewRootProps) { (shiftBy?: number) => { const shift = shiftBy ?? weekCount; const target = resolvedFirstWeek.subtract({ weeks: shift }); - const adjusted = applyOverflow({ + const adjusted = applyOutOfRange({ targetFirstWeek: target, weekCount, - behavior: overflowBehavior, + behavior: outOfRangeBehavior, ...(minValue !== undefined && { min: minValue }), ...(maxValue !== undefined && { max: maxValue }), weekStartDay, @@ -351,7 +358,7 @@ export function useWeeksViewRootState(props: WeeksViewRootProps) { [ resolvedFirstWeek, weekCount, - overflowBehavior, + outOfRangeBehavior, minValue, maxValue, weekStartDay, @@ -373,10 +380,10 @@ export function useWeeksViewRootState(props: WeeksViewRootProps) { resolvedTarget, options, ); - const adjusted = applyOverflow({ + const adjusted = applyOutOfRange({ targetFirstWeek: newFirstWeek, weekCount, - behavior: overflowBehavior, + behavior: outOfRangeBehavior, ...(minValue !== undefined && { min: minValue }), ...(maxValue !== undefined && { max: maxValue }), weekStartDay, @@ -388,7 +395,7 @@ export function useWeeksViewRootState(props: WeeksViewRootProps) { resolvedFirstWeek, weekCount, resolveSpec, - overflowBehavior, + outOfRangeBehavior, minValue, maxValue, weekStartDay, @@ -420,7 +427,7 @@ export function useWeeksViewRootState(props: WeeksViewRootProps) { () => ({ weekCount, scrollBy, - overflowBehavior, + outOfRangeBehavior, goNext, goPrev, scrollToWeek, @@ -430,7 +437,7 @@ export function useWeeksViewRootState(props: WeeksViewRootProps) { [ weekCount, scrollBy, - overflowBehavior, + outOfRangeBehavior, goNext, goPrev, scrollToWeek, diff --git a/package/src/weeks-view-types.ts b/package/src/weeks-view-types.ts index 2ea5b47..ee367a6 100644 --- a/package/src/weeks-view-types.ts +++ b/package/src/weeks-view-types.ts @@ -1,6 +1,6 @@ import type { Temporal } from "@js-temporal/polyfill"; import type { WeekDescriptor } from "./compute-weeks-in-window"; -import type { OverflowBehavior } from "./overflow"; +import type { OutOfRangeBehavior } from "./out-of-range"; import type { FirstWeekSpec, ScrollToWeekSnap } from "./resolve-first-week"; import type { RootState } from "./types"; @@ -26,10 +26,21 @@ export interface WeeksViewRootProps { */ scrollBy?: "row" | "page" | undefined; /** - * How navigation behaves at `min`/`max` bounds. + * How the visible window behaves at the `min`/`max` bounds. `min`/`max` + * always restrict which **days are selectable**; this controls whether the + * window may scroll beyond them, and how the edge is handled. See + * {@link OutOfRangeBehavior}. + * + * - `"unbounded"` — navigation is never restricted by `min`/`max`. + * - `"stop"` — navigation halts once the next step has no in-range day. + * - `"stop-shrink"` — like `"stop"`, but the window shrinks at the edge. + * - `"snap"` — overshooting jumps snap the window edge to the last/first + * in-range week. + * - `"snap-shrink"` — snap to the boundary, shrinking if still out of range. + * * @default "unbounded" */ - overflowBehavior?: OverflowBehavior | undefined; + outOfRangeBehavior?: OutOfRangeBehavior | undefined; /** Called when the visible window changes. */ onWindowChange?: ((info: WindowInfo) => void) | undefined; /** React children. */ @@ -75,7 +86,7 @@ export interface WeeksViewStableContextValue { /** How much to scroll per navigation step. */ scrollBy: "row" | "page"; /** How navigation behaves at bounds. */ - overflowBehavior: OverflowBehavior; + outOfRangeBehavior: OutOfRangeBehavior; /** Navigate to the next week(s). Optionally override the shift amount (in weeks). */ goNext: (shiftBy?: number) => void; /** Navigate to the previous week(s). Optionally override the shift amount (in weeks). */ diff --git a/package/src/weeks-view.tsx b/package/src/weeks-view.tsx index 7806204..3fa4d89 100644 --- a/package/src/weeks-view.tsx +++ b/package/src/weeks-view.tsx @@ -48,7 +48,7 @@ function WeeksViewRootFn( numberOfMonths: 1, fixedWeeks: false, outsideDays: "enabled" as const, - overflowBehavior: "unbounded" as const, + outOfRangeBehavior: "unbounded" as const, goNextMonth: () => {}, goPrevMonth: () => {}, setGridLabelId: () => {}, @@ -106,7 +106,7 @@ function WeeksViewFn( defaultFirstWeek, onFirstWeekChange, scrollBy, - overflowBehavior, + outOfRangeBehavior, onWindowChange, children, ...calendarProps @@ -121,7 +121,7 @@ function WeeksViewFn( defaultFirstWeek={defaultFirstWeek} onFirstWeekChange={onFirstWeekChange} scrollBy={scrollBy} - overflowBehavior={overflowBehavior} + outOfRangeBehavior={outOfRangeBehavior} onWindowChange={onWindowChange} > {children} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 039b64e..175a7c6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -37,8 +37,8 @@ catalogs: specifier: ^0.5.6 version: 0.5.7 '@netlify/vite-plugin-tanstack-start': - specifier: ^1.3.3 - version: 1.3.3 + specifier: ^1.3.15 + version: 1.3.15 '@playwright/test': specifier: ^1.58.2 version: 1.59.1 @@ -213,7 +213,7 @@ importers: version: 4.21.0 vite-plus: specifier: 'catalog:' - version: 0.1.18(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@1.8.0))(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3) + version: 0.1.18(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@1.8.0))(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3) package: devDependencies: @@ -240,7 +240,7 @@ importers: version: 19.2.3(@types/react@19.2.14) '@vitejs/plugin-react': specifier: catalog:voidzero - version: 4.7.0(@voidzero-dev/vite-plus-core@0.1.16(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)) + version: 4.7.0(@voidzero-dev/vite-plus-core@0.1.16(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)) jsdom: specifier: 'catalog:' version: 28.1.0(@noble/hashes@1.8.0) @@ -264,13 +264,13 @@ importers: version: 5.9.3 vite: specifier: catalog:voidzero - version: '@voidzero-dev/vite-plus-core@0.1.16(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)' + version: '@voidzero-dev/vite-plus-core@0.1.16(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)' vite-plus: specifier: catalog:voidzero - version: 0.1.18(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(@voidzero-dev/vite-plus-core@0.1.16(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(esbuild@0.27.7)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@1.8.0))(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3) + version: 0.1.18(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(@voidzero-dev/vite-plus-core@0.1.16(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(esbuild@0.28.0)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@1.8.0))(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3) vitest: specifier: catalog:voidzero - version: '@voidzero-dev/vite-plus-test@0.1.18(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(@voidzero-dev/vite-plus-core@0.1.16(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(esbuild@0.27.7)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@1.8.0))(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)' + version: '@voidzero-dev/vite-plus-test@0.1.18(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(@voidzero-dev/vite-plus-core@0.1.16(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(esbuild@0.28.0)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@1.8.0))(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)' website: dependencies: @@ -300,7 +300,7 @@ importers: version: 0.8.0(tailwind-merge@3.5.0)(tailwindcss@4.2.2) '@tailwindcss/vite': specifier: 'catalog:' - version: 4.2.2(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.2.2(vite@8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) '@unpic/react': specifier: 'catalog:' version: 1.0.2(react-dom@19.2.5(react@19.2.5))(react@19.2.5) @@ -343,10 +343,10 @@ importers: version: 0.5.7(@types/react@19.2.14)(react@19.2.5) '@netlify/vite-plugin-tanstack-start': specifier: 'catalog:' - version: 1.3.3(@tanstack/react-start@1.167.41(crossws@0.4.4(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)))(srvx@0.11.15)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 1.3.15(@tanstack/react-start@1.167.41(crossws@0.4.4(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)))(srvx@0.11.15)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) '@tanstack/devtools-vite': specifier: 'catalog:' - version: 0.6.0(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 0.6.0(vite@8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) '@tanstack/react-devtools': specifier: 'catalog:' version: 0.10.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(csstype@3.2.3)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12) @@ -358,7 +358,7 @@ importers: version: 1.166.13(@tanstack/react-router@1.168.22(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@tanstack/router-core@1.168.15)(csstype@3.2.3)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@tanstack/react-start': specifier: 'catalog:' - version: 1.167.41(crossws@0.4.4(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 1.167.41(crossws@0.4.4(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) '@testing-library/dom': specifier: 'catalog:' version: 10.4.1 @@ -373,7 +373,7 @@ importers: version: 19.2.3(@types/react@19.2.14) '@vitejs/plugin-react': specifier: catalog:website - version: 6.0.1(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 6.0.1(vite@8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) jsdom: specifier: 'catalog:' version: 28.1.0(@noble/hashes@1.8.0) @@ -391,13 +391,13 @@ importers: version: 5.9.3 vite: specifier: catalog:website - version: 8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) + version: 8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) vite-imagetools: specifier: 'catalog:' - version: 10.0.0(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 10.0.0(vite@8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) vitest: specifier: catalog:website - version: 4.1.4(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(jsdom@28.1.0(@noble/hashes@1.8.0))(msw@2.13.2(@types/node@24.12.2)(typescript@5.9.3))(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.4(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(jsdom@28.1.0(@noble/hashes@1.8.0))(msw@2.13.2(@types/node@24.12.2)(typescript@5.9.3))(vite@8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) packages: @@ -703,23 +703,17 @@ packages: resolution: {integrity: sha512-cxgkB66RQB95H3X27jlnxCRNTmPuSTgmBAq6/4n2Dtv4hsk4yz8FadA1ggmd0uZzvKqWD6CR+WFgTjhDqg7eyw==} engines: {node: '>=18.0.0'} - '@esbuild/aix-ppc64@0.27.3': - resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - '@esbuild/aix-ppc64@0.27.7': resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.27.3': - resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==} + '@esbuild/aix-ppc64@0.28.0': + resolution: {integrity: sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==} engines: {node: '>=18'} - cpu: [arm64] - os: [android] + cpu: [ppc64] + os: [aix] '@esbuild/android-arm64@0.27.7': resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==} @@ -727,10 +721,10 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm@0.27.3': - resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==} + '@esbuild/android-arm64@0.28.0': + resolution: {integrity: sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==} engines: {node: '>=18'} - cpu: [arm] + cpu: [arm64] os: [android] '@esbuild/android-arm@0.27.7': @@ -739,10 +733,10 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-x64@0.27.3': - resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==} + '@esbuild/android-arm@0.28.0': + resolution: {integrity: sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==} engines: {node: '>=18'} - cpu: [x64] + cpu: [arm] os: [android] '@esbuild/android-x64@0.27.7': @@ -751,11 +745,11 @@ packages: cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.27.3': - resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==} + '@esbuild/android-x64@0.28.0': + resolution: {integrity: sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==} engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] + cpu: [x64] + os: [android] '@esbuild/darwin-arm64@0.27.7': resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==} @@ -763,10 +757,10 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.27.3': - resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==} + '@esbuild/darwin-arm64@0.28.0': + resolution: {integrity: sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==} engines: {node: '>=18'} - cpu: [x64] + cpu: [arm64] os: [darwin] '@esbuild/darwin-x64@0.27.7': @@ -775,11 +769,11 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.27.3': - resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==} + '@esbuild/darwin-x64@0.28.0': + resolution: {integrity: sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==} engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] + cpu: [x64] + os: [darwin] '@esbuild/freebsd-arm64@0.27.7': resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==} @@ -787,10 +781,10 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.27.3': - resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==} + '@esbuild/freebsd-arm64@0.28.0': + resolution: {integrity: sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==} engines: {node: '>=18'} - cpu: [x64] + cpu: [arm64] os: [freebsd] '@esbuild/freebsd-x64@0.27.7': @@ -799,11 +793,11 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.27.3': - resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==} + '@esbuild/freebsd-x64@0.28.0': + resolution: {integrity: sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==} engines: {node: '>=18'} - cpu: [arm64] - os: [linux] + cpu: [x64] + os: [freebsd] '@esbuild/linux-arm64@0.27.7': resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==} @@ -811,10 +805,10 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.27.3': - resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==} + '@esbuild/linux-arm64@0.28.0': + resolution: {integrity: sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==} engines: {node: '>=18'} - cpu: [arm] + cpu: [arm64] os: [linux] '@esbuild/linux-arm@0.27.7': @@ -823,10 +817,10 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.27.3': - resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==} + '@esbuild/linux-arm@0.28.0': + resolution: {integrity: sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==} engines: {node: '>=18'} - cpu: [ia32] + cpu: [arm] os: [linux] '@esbuild/linux-ia32@0.27.7': @@ -835,10 +829,10 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.27.3': - resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==} + '@esbuild/linux-ia32@0.28.0': + resolution: {integrity: sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==} engines: {node: '>=18'} - cpu: [loong64] + cpu: [ia32] os: [linux] '@esbuild/linux-loong64@0.27.7': @@ -847,10 +841,10 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.27.3': - resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==} + '@esbuild/linux-loong64@0.28.0': + resolution: {integrity: sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==} engines: {node: '>=18'} - cpu: [mips64el] + cpu: [loong64] os: [linux] '@esbuild/linux-mips64el@0.27.7': @@ -859,10 +853,10 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.27.3': - resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==} + '@esbuild/linux-mips64el@0.28.0': + resolution: {integrity: sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==} engines: {node: '>=18'} - cpu: [ppc64] + cpu: [mips64el] os: [linux] '@esbuild/linux-ppc64@0.27.7': @@ -871,10 +865,10 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.27.3': - resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==} + '@esbuild/linux-ppc64@0.28.0': + resolution: {integrity: sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==} engines: {node: '>=18'} - cpu: [riscv64] + cpu: [ppc64] os: [linux] '@esbuild/linux-riscv64@0.27.7': @@ -883,10 +877,10 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.27.3': - resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==} + '@esbuild/linux-riscv64@0.28.0': + resolution: {integrity: sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==} engines: {node: '>=18'} - cpu: [s390x] + cpu: [riscv64] os: [linux] '@esbuild/linux-s390x@0.27.7': @@ -895,10 +889,10 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.27.3': - resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==} + '@esbuild/linux-s390x@0.28.0': + resolution: {integrity: sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==} engines: {node: '>=18'} - cpu: [x64] + cpu: [s390x] os: [linux] '@esbuild/linux-x64@0.27.7': @@ -907,11 +901,11 @@ packages: cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.27.3': - resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==} + '@esbuild/linux-x64@0.28.0': + resolution: {integrity: sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==} engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] + cpu: [x64] + os: [linux] '@esbuild/netbsd-arm64@0.27.7': resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==} @@ -919,10 +913,10 @@ packages: cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.27.3': - resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==} + '@esbuild/netbsd-arm64@0.28.0': + resolution: {integrity: sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==} engines: {node: '>=18'} - cpu: [x64] + cpu: [arm64] os: [netbsd] '@esbuild/netbsd-x64@0.27.7': @@ -931,11 +925,11 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.27.3': - resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==} + '@esbuild/netbsd-x64@0.28.0': + resolution: {integrity: sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==} engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] + cpu: [x64] + os: [netbsd] '@esbuild/openbsd-arm64@0.27.7': resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==} @@ -943,10 +937,10 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.27.3': - resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==} + '@esbuild/openbsd-arm64@0.28.0': + resolution: {integrity: sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==} engines: {node: '>=18'} - cpu: [x64] + cpu: [arm64] os: [openbsd] '@esbuild/openbsd-x64@0.27.7': @@ -955,11 +949,11 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.27.3': - resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==} + '@esbuild/openbsd-x64@0.28.0': + resolution: {integrity: sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==} engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] + cpu: [x64] + os: [openbsd] '@esbuild/openharmony-arm64@0.27.7': resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==} @@ -967,11 +961,11 @@ packages: cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.27.3': - resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==} + '@esbuild/openharmony-arm64@0.28.0': + resolution: {integrity: sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==} engines: {node: '>=18'} - cpu: [x64] - os: [sunos] + cpu: [arm64] + os: [openharmony] '@esbuild/sunos-x64@0.27.7': resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==} @@ -979,11 +973,11 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.27.3': - resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==} + '@esbuild/sunos-x64@0.28.0': + resolution: {integrity: sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==} engines: {node: '>=18'} - cpu: [arm64] - os: [win32] + cpu: [x64] + os: [sunos] '@esbuild/win32-arm64@0.27.7': resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==} @@ -991,10 +985,10 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.27.3': - resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==} + '@esbuild/win32-arm64@0.28.0': + resolution: {integrity: sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==} engines: {node: '>=18'} - cpu: [ia32] + cpu: [arm64] os: [win32] '@esbuild/win32-ia32@0.27.7': @@ -1003,10 +997,10 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.27.3': - resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==} + '@esbuild/win32-ia32@0.28.0': + resolution: {integrity: sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==} engines: {node: '>=18'} - cpu: [x64] + cpu: [ia32] os: [win32] '@esbuild/win32-x64@0.27.7': @@ -1015,6 +1009,12 @@ packages: cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.28.0': + resolution: {integrity: sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@eslint-community/eslint-utils@4.9.1': resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1396,107 +1396,115 @@ packages: resolution: {integrity: sha512-4STtNybPXALobjTHEIU48Huv9Si1sNxgHbtYslNBPvQu9/aTpxhRHDZuUOkE/QuhHSbaCNCWJSYFGIRxpCdXxg==} engines: {node: '>=18.14.0'} + '@netlify/api@14.0.19': + resolution: {integrity: sha512-oJ+7K+ioZ8sNoNzJbx+uIDmRynf5A+0ler2t9nHhhfwrrhx7mWgFaX5vGiEjvkpIxBAwfW8XyedhEdsm2OCK+w==} + engines: {node: '>=18.14.0'} + '@netlify/binary-info@1.0.0': resolution: {integrity: sha512-4wMPu9iN3/HL97QblBsBay3E1etIciR84izI3U+4iALY+JHCrI+a2jO0qbAZ/nxKoegypYEaiiqWXylm+/zfrw==} - '@netlify/blobs@10.7.4': - resolution: {integrity: sha512-03lXstB4xxDKeYs2RTTZrUGRC0ea2nVZvkdGlw2A42AdK7KA6N0ocVmkIn9x91oqFsqK3dWJTAv2bzaLjsehXg==} + '@netlify/blobs@10.7.9': + resolution: {integrity: sha512-NEM8aNAMZCCWBWymomMM/fn5wmPGyGE8pendgsSu5mL7UNz+aXqGcHS0MiHWU/osyg+geiZuS+Rx956SVrMM/w==} engines: {node: ^14.16.0 || >=16.0.0} - '@netlify/cache@3.4.4': - resolution: {integrity: sha512-CL9WZjbxe9/Gkcpfkl6h1F0BkBxUg9b4HHleGjmo0rs/PDUJ2NDQVKtEospllH2+KDUdB6EsPhiJN+v9Jcdv1g==} + '@netlify/cache@3.4.8': + resolution: {integrity: sha512-20zPmLS8x2VXSNQHwxj1+jJgKAec/EoeKJahIgPmTolXq2X6nEdyulHTTHHA4KzxqGTkrzTcfNzZjEkjvRyj9Q==} engines: {node: '>=20.6.1'} - '@netlify/config@24.4.4': - resolution: {integrity: sha512-EEg9G5NeWOAibnCBn5/k7HLDg6UoDnHlBW5BsWYTNwmKIjFyUEHsFhPIINfJ90ToPPzlStBRkDyaO7/fRrHPNg==} + '@netlify/config@24.6.0': + resolution: {integrity: sha512-bR2FhZiWFz+EIQBl/T9p9lRNBuInYqWtqtGQywwM1dkvNI2ViSQBmeEDY/qXh9EECB8g2f7ZBC2sF4KeNGtX0w==} engines: {node: '>=18.14.0'} hasBin: true - '@netlify/db-dev@0.7.0': - resolution: {integrity: sha512-xB2ciUJsWFw34DtMMmAh19qGUJy1N5mFAi6yYFFqeBlnd8StSxoUblXcqVZcQJLXm68OAxSxkfGf1qUucIDyMA==} + '@netlify/database-dev@0.10.1': + resolution: {integrity: sha512-kHLdS6r45TsDiS5aBrHUmzqPvoaWQEUZnaZeMwnIrLMwX8f2bIa6YAMOJJYJhyKm2drVo3C/T92/lJ5iGV/VBQ==} engines: {node: '>=20.6.1'} - '@netlify/dev-utils@4.4.3': - resolution: {integrity: sha512-VkMD8YACshR6pHgoub6nikkI+SQVdhjVvLsOK2ZSpN2wMlDHdsD8uRjESfzv/yYfq5jlsGskfx1cf1FUurWt9A==} + '@netlify/dev-utils@4.4.6': + resolution: {integrity: sha512-P6X+xS3glvhiTX6AAocYvnZtqXtWhvxMX4AdPgv2iw6cXjGL2criUveX7bSjp6DiyHfvQpNdG0ZRpeBEVAFf1g==} engines: {node: ^18.14.0 || >=20} - '@netlify/dev@4.16.5': - resolution: {integrity: sha512-fp8QAk/puxk+xuULc2qriBhtDAS2TQV3X5m2GpXf/YTWTuTNhGPkmOYwgtFA/CrV1ITzGrtLnpJq0ZpVTwAuDw==} + '@netlify/dev@4.18.7': + resolution: {integrity: sha512-BeXz9dis2Iid5EcOItVj2srdC30R4RwDhsk/N/h+T2WYrJbyhOj6b1IS+6fVGe5JbKe9fDiGANH1cujplX1+rw==} engines: {node: '>=20.6.1'} - '@netlify/edge-bundler@14.9.19': - resolution: {integrity: sha512-1jO1vPGM5N6swK+6/p4LkiKDSP0eqRhuhs5BkCvVa7HSyXpeNuOAqk7uhICh8fy2naol0VOWCW9NC1LI4YhrFA==} + '@netlify/edge-bundler@14.10.3': + resolution: {integrity: sha512-o+ww3ZUsdkdDEdeIhX6yT4wCNt99ar3JUreQowgXPCAyQeiXWf2i3xkoVwm5bQb77BhFmTTMp0kIeRMiGEqU4g==} engines: {node: '>=18.14.0'} '@netlify/edge-functions-bootstrap@2.16.0': resolution: {integrity: sha512-v8QQihSbBHj3JxtJsHoepXALpNumD9M7egHoc8z62FYl5it34dWczkaJoFFopEyhiBVKi4K/n0ZYpdzwfujd6g==} - '@netlify/edge-functions-dev@1.0.16': - resolution: {integrity: sha512-QQGUNPRvynKg4NJ7iiR0mYcsdA/QwIdUB/Fb4SGhhqBPicTcW4V5bEZ/JaMvEBMd2ZY8EKuWQ63Ryl4TVHI+QQ==} + '@netlify/edge-functions-dev@1.0.20': + resolution: {integrity: sha512-bk05M+nuafsc4JjYEhwTKI8kpnK7EPOf6sreUbdNCi+17JUNvl6D959Hxheq0Ke2nT5UPqIcJRuNvjvI+ocT+Q==} engines: {node: '>=20.6.1'} - '@netlify/edge-functions@3.0.6': - resolution: {integrity: sha512-xkVcTcpAuQKAY5GXKOjPTIct5Mz53NPHXOasggA+LTAxDDV4ohqSM8BIaXh1SgbcniHZyFhBqhc5hxZ+fFz5bQ==} + '@netlify/edge-functions@3.0.8': + resolution: {integrity: sha512-ml1oCDsRTTRmZS2nUj8XRD1b6+foEiZT3lPk7qQ4nv/jnxylHJ20ooPzPDH+cJmGjXFrMeR14/91W1o6D2ftBg==} engines: {node: '>=18.0.0'} - '@netlify/functions-dev@1.2.5': - resolution: {integrity: sha512-IRskgi6cexUkFtU0Da/OiiUyvyKOzxNsf16HN9iRIGGZUQ4AcyXwJPqVsquP9jHluY3Ck8bDsnxXnpOsaT4ENg==} + '@netlify/functions-dev@1.3.0': + resolution: {integrity: sha512-3CMb4GDuh8vzc2F7bUFw73QtCA+TEfcS9RQ6Z8Zkz4oAdTLN8W/73QeY50eWslWqkA2cUj87OLEYaTnC4Rj8EA==} engines: {node: '>=20.6.1'} - '@netlify/functions@5.2.0': - resolution: {integrity: sha512-Pj93qeQd1tkQ5xm9gWJZmBf/1riLYqYHc0OzFukrJomrj82Ott53Rr/Q88H1ms5cF+P5QXRKWmA2JSxSybKfjA==} + '@netlify/functions@5.3.0': + resolution: {integrity: sha512-FP+xCoZMkMOUsKa4UdG/oiK/2md1/TxuXvqqieaMVMgDbFFMaHI8h0oHCViUY73kPbKV6HyzayaSXGYXKpBSoQ==} engines: {node: '>=18.0.0'} '@netlify/headers-parser@9.0.3': resolution: {integrity: sha512-KNzC9RaKDwJVS44iTK6JxNA6LeXH0PUw0pLktWpmMVI/0FR98bvxaHcAisjHqbThAjxL9QjL1UZh0KzHCkxpNQ==} engines: {node: '>=18.14.0'} - '@netlify/headers@2.1.8': - resolution: {integrity: sha512-OhHT8nq84tSvXWaOMCLgcaGKnUccbIYg7/Ink4NyVHNwJ7L2fFGb6Mi4lPWluHhncYJE9p0eK7JMiKKj49Q0Qw==} + '@netlify/headers@2.1.11': + resolution: {integrity: sha512-pWqoovsTBKlSfM7HKT0KnZ3x5ael2P+smiAogH5zuGU+ncQA7zBRHwLDi3nBy4iBM1MQAZ9BEjAXE42/yn/GQg==} engines: {node: '>=20.6.1'} - '@netlify/images@1.3.7': - resolution: {integrity: sha512-qWKCbtYQbyHtzVjLcaAxZsxrd8qpIVnLWwvn2635E8zQSO7L0wb2oPTUhMEOOIxIurWuY3JSRGevpve6ifataQ==} + '@netlify/images@1.3.10': + resolution: {integrity: sha512-3ZlN8PNBaZFNr+uERzOtb9rQkb23xxS4k4iW188mgvSrMhxdVXPS5pkpOxAHPEunatSlT/a6oCuy3fsltrtr6A==} engines: {node: '>=20.6.1'} '@netlify/open-api@2.52.0': resolution: {integrity: sha512-QkWQu0vz3uBcxjSslA0N6Njo0x1ndkhEIVEmdwcmxfufX8wA0d9WjiU2sWuHYw11Mrf5pkMUQHvZy+6V4A9TYQ==} engines: {node: '>=14.8.0'} - '@netlify/otel@5.1.5': - resolution: {integrity: sha512-RORbePN1ghdHp4pIkG3ccFMqmx5hwMfSyLGKp7bKVf1F5rSe1QjrCBp5xihEWI3xuh3fAqQroTlNYnoOud8RTQ==} + '@netlify/otel@6.0.3': + resolution: {integrity: sha512-NIjIjB/aItiXKB6+wzSwfSyYqbNsVSzzlEPryxxTC5ZJiYSYSm82wAOcQ+9VdiufQyZO5t8jzHVPULo7a9L9sQ==} engines: {node: ^18.14.0 || >=20.6.1} '@netlify/redirect-parser@15.0.4': resolution: {integrity: sha512-UYHRCO4HZI6WMpf8RheaCWnGafeJeFTsp/5yK887fyGqohDmFbc26NuFUvRl7J6sNu+di/1lLmRXP+yJ1X9TDA==} engines: {node: '>=18.14.0'} - '@netlify/redirects@3.1.10': - resolution: {integrity: sha512-q4PbtkeNDxKqfOemsrG5F/vkpNfLwjVQpx69+sS2Qg/PYOOneayKJOlCKhVc6QQUtDuhFV6WZ8JHielYMj1pVw==} + '@netlify/redirects@3.1.13': + resolution: {integrity: sha512-28M4pyahGHf5kIqhdA6Y687g/QBmW0clPHmh/xGvxmwHIW+fN5aMzCO4JrM2v9bA/yDFoGjSQynckAG1MGr0/g==} engines: {node: '>=20.6.1'} '@netlify/runtime-utils@2.3.0': resolution: {integrity: sha512-cW8weDvsKV7zfia2m5EcBy6KILGoPD+eYZ3qWNGnIo05DGF28goPES0xKSDkNYgAF/2rRSIhie2qcBhbGVgSRg==} engines: {node: ^18.14.0 || >=20} - '@netlify/runtime@4.1.20': - resolution: {integrity: sha512-maPRSTG+q9rTkeP+hj5X8PN6OkUShp1E62+GBtZrVRVrkTYLiF3mz2JGUw32lCbw2OqqvlUab85N4OMPSdP5HA==} + '@netlify/runtime@4.1.25': + resolution: {integrity: sha512-+RKE+oaygMDyp1ybcseQRT/OMVkiNOgUDfM0Q4+Nwl+vMGCZavmHKIAkGWRWlduw8UUcA094xSoHNcLQWCFgjg==} engines: {node: '>=20.6.1'} - '@netlify/serverless-functions-api@2.14.0': - resolution: {integrity: sha512-6UwJ9Fm8NU9LPBa5zV5Gv20JgSEPOOwZ7oUbNYbB7SUnNTmIBccafgZF3+xXqSpI3hxXn4/l5xxCO+Pc2KURZA==} + '@netlify/serverless-functions-api@2.16.0': + resolution: {integrity: sha512-yomP0pYRWPREiAuQbLghz9YbMb2+Mkmk1DMjyXVbIyrJ8QZhEtGcYQWAyl6cgki5CVqnOXvfIrRdLSf8bvxJCA==} engines: {node: '>=18.0.0'} - '@netlify/static@3.1.7': - resolution: {integrity: sha512-7gfDmUJKIFiVvqoqAoN7wkZkQx8KgVw5+ancu4v+QFU/hLt+gWqNH+ngxaCKCA0hmDE4oD1xNbClxlh9bNOetw==} + '@netlify/static@3.1.10': + resolution: {integrity: sha512-DOEVJ8SawvQ/ddWCSzfjqsQOE4GfF+LvxhWuB1OHSFvWnDEyBpobrLO6YWUG3lKq+0OhPBu50XFtKfdQNpUiFA==} engines: {node: '>=20.6.1'} '@netlify/types@2.6.0': resolution: {integrity: sha512-yD20EizHJDQxajJ66Vo8RTwLwR2jMNVxufPG8MHd2AScX8jW4z0VPnnJHArq2GYPFTFZRHmiAhDrXr5m8zof6w==} engines: {node: ^18.14.0 || >=20} - '@netlify/vite-plugin-tanstack-start@1.3.3': - resolution: {integrity: sha512-8KgsisE7FhS+koDZYiIBEMYCcc2JfsD+2lRwYqrX3p9SD5dBFinS6KEeDKFZ0ZQ3aqP6W5oFJSAt2CZHaSBRfQ==} + '@netlify/types@2.8.0': + resolution: {integrity: sha512-8/g0Pt6y6wXj5Ia5eeYLiXhRfWeqZXGXpGFeCiiQdUOem+FPtXdA4+YdGxqzWc7D0AvptKSO01KGeeVWHSu8Kg==} + engines: {node: ^18.14.0 || >=20} + + '@netlify/vite-plugin-tanstack-start@1.3.15': + resolution: {integrity: sha512-Pr3nYWBlx/kgSABrl7+f0nfQLqOFYGl2qnMcEBvMTIamxPXoe2n8ydm6Khtowhjjl3wgmn23VOPVVhrFuNeyyg==} engines: {node: ^22.12.0 || >=24.0.0} peerDependencies: '@tanstack/react-start': '>=1.132.0' @@ -1508,14 +1516,14 @@ packages: '@tanstack/solid-start': optional: true - '@netlify/vite-plugin@2.11.3': - resolution: {integrity: sha512-Sy3Fx89SyH4myxEzEwUnOezCINowBiSFHxS/xc2wYu5aGVcX21FvJbV6g/C/EZ1jR2rTVNZU95sjual0lskpqQ==} + '@netlify/vite-plugin@2.12.7': + resolution: {integrity: sha512-YPgVazADeRmKTmEaM5FZrpq4cmpYGMlzrVvNatRCA6fMX9sJrfeLN3LSp0DdI8MTDU6ZBYUJ6J9GwWYmeQnQiA==} engines: {node: ^20.6.1 || >=22} peerDependencies: vite: ^5 || ^6 || ^7 || ^8 - '@netlify/zip-it-and-ship-it@14.5.3': - resolution: {integrity: sha512-7CCFbfEs11WZmY2ddXR85q6O6dHr8aWA/fcdw+7ftwtIaajQKWGDduZT5lI+u7i60wVymt8CEu2Et/hKOhFtzQ==} + '@netlify/zip-it-and-ship-it@14.7.1': + resolution: {integrity: sha512-In1BkoGFct5tid87oPTkTsITXrgUElgKDKzEmtxlezA4Oo95t2Gnv5m3IRVbI6eRcp3uygahxQPv/J8meX+n1Q==} engines: {node: '>=18.14.0'} hasBin: true @@ -1628,64 +1636,52 @@ packages: '@open-draft/until@2.1.0': resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} - '@opentelemetry/api-logs@0.203.0': - resolution: {integrity: sha512-9B9RU0H7Ya1Dx/Rkyc4stuBZSGVQF27WigitInx2QQoj6KUpEFYPKoWjdFTunJYxmXmh17HeBvbMa1EhGyPmqQ==} + '@opentelemetry/api-logs@0.217.0': + resolution: {integrity: sha512-Cdq0jW2lknrNfrAm92MyEAvpe2cRsKjdnQLHUL6xRA4IVUnsWx6P65E7NcUO0Y+L4w1Aee5iV8FvjSwd+lrs9A==} engines: {node: '>=8.0.0'} '@opentelemetry/api@1.9.0': resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} engines: {node: '>=8.0.0'} - '@opentelemetry/context-async-hooks@1.30.1': - resolution: {integrity: sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA==} - engines: {node: '>=14'} + '@opentelemetry/context-async-hooks@2.7.1': + resolution: {integrity: sha512-OPFBYuXEn1E4ja3Y6eeA7O+ZnLBNcXTV5Cgsn1VaqBZ6hC5FnpZPLBNme1LJY8ZtF4aOujPKFoeWN4ik487KuQ==} + engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/core@1.30.1': - resolution: {integrity: sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==} - engines: {node: '>=14'} + '@opentelemetry/core@2.7.1': + resolution: {integrity: sha512-QAqIj32AtK6+pEVNG7EOVxHdE06RP+FM5qpiEJ4RtDcFIqKUZHYhl7/7UY5efhwmwNAg7j8QbJVBLxMerc0+gw==} + engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/instrumentation@0.203.0': - resolution: {integrity: sha512-ke1qyM+3AK2zPuBPb6Hk/GCsc5ewbLvPNkEuELx/JmANeEp6ZjnZ+wypPAJSucTw0wvCGrUaibDSdcrGFoWxKQ==} + '@opentelemetry/instrumentation@0.217.0': + resolution: {integrity: sha512-24ucQMjz7Y34Kw3trbxL2ZrssbtgWnR+Clpaa+YdeWuuyH3Cvk23Q03PcQvqiZrDvt8AmQmjgg9v6Y9PHoxG7w==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/propagator-b3@1.30.1': - resolution: {integrity: sha512-oATwWWDIJzybAZ4pO76ATN5N6FFbOA1otibAVlS8v90B4S1wClnhRUk7K+2CHAwN1JKYuj4jh/lpCEG5BAqFuQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' - - '@opentelemetry/propagator-jaeger@1.30.1': - resolution: {integrity: sha512-Pj/BfnYEKIOImirH76M4hDaBSx6HyZ2CXUqk+Kj02m6BB80c/yo4BdWkn/1gDFfU+YPY+bPR2U0DKBfdxCKwmg==} - engines: {node: '>=14'} + '@opentelemetry/resources@2.7.1': + resolution: {integrity: sha512-DeT6KKolmC4e/dRQvMQ/RwlnzhaqeiFOXY5ngoOPJ07GgVVKxZOg9EcrNZb5aTzUn+iCrJldAgOfQm1O/QfPAQ==} + engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/api': '>=1.3.0 <1.10.0' - '@opentelemetry/resources@1.30.1': - resolution: {integrity: sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' - - '@opentelemetry/sdk-trace-base@1.30.1': - resolution: {integrity: sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg==} - engines: {node: '>=14'} + '@opentelemetry/sdk-trace-base@2.7.1': + resolution: {integrity: sha512-NAYIlsF8MPUsKqJMiDQJTMPOmlbawC1Iz/omMLygZ1C9am8fTKYjTaI+OZM+WTY3t3Glo0wnOg/6/pac6RGPPw==} + engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/api': '>=1.3.0 <1.10.0' - '@opentelemetry/sdk-trace-node@1.30.1': - resolution: {integrity: sha512-cBjYOINt1JxXdpw1e5MlHmFRc5fgj4GW/86vsKFxJCJ8AL4PdVtYH41gWwl4qd4uQjqEL1oJVrXkSy5cnduAnQ==} - engines: {node: '>=14'} + '@opentelemetry/sdk-trace-node@2.7.1': + resolution: {integrity: sha512-pCpQxU68lV+I9s9svqMyVu5iHdDDUnqUpSxqwyCU8A9ejEsSnMPCbearwsUO4yk08ZJzAIUCFuReMdVQvHrdvg==} + engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/semantic-conventions@1.28.0': - resolution: {integrity: sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==} + '@opentelemetry/semantic-conventions@1.41.1': + resolution: {integrity: sha512-/UhIkaZgPutTFmQ7RnIJGgDXZmtEJ7Dvi86xNTFWcnRxVRNk/aotsqDJYeEvDP+FSMB2SdW+pQzNMcWP0rwuNA==} engines: {node: '>=14'} '@oxc-project/runtime@0.123.0': @@ -3346,6 +3342,9 @@ packages: async@3.2.6: resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + atomically@2.1.1: + resolution: {integrity: sha512-P4w9o2dqARji6P7MHprklbfiArZAWvo07yW7qs3pdljb3BWr12FIB7W+p0zJiuiVsUpRO0iZn1kFFcpPegg0tQ==} + available-typed-arrays@1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} @@ -3566,8 +3565,8 @@ packages: citty@0.2.2: resolution: {integrity: sha512-+6vJA3L98yv+IdfKGZHBNiGW5KHn22e/JwID0Strsz8h4S/csAu/OuICwxrg44k5MRiZHWIo8XXuJgQTriRP4w==} - cjs-module-lexer@1.4.3: - resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} + cjs-module-lexer@2.2.0: + resolution: {integrity: sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==} class-variance-authority@0.7.1: resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} @@ -4138,13 +4137,13 @@ packages: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} - esbuild@0.27.3: - resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==} + esbuild@0.27.7: + resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} engines: {node: '>=18'} hasBin: true - esbuild@0.27.7: - resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} + esbuild@0.28.0: + resolution: {integrity: sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==} engines: {node: '>=18'} hasBin: true @@ -4706,8 +4705,9 @@ packages: resolution: {integrity: sha512-YVt14UZCgsX1vZQ3gKjkWVdBdHQ6eu3MPU1TBgL1H5orXe2+jWD006WCPPtOuwlQm10NuzOW5WawiF1Q9veW8g==} engines: {node: '>=18.20'} - import-in-the-middle@1.15.0: - resolution: {integrity: sha512-bpQy+CrsRmYmoPMAE/0G33iwRqwW4ouqdRg8jgbH3aKuCtOc8lxgmYXg2dMM92CRiGP660EtBcymH/eVUpCSaA==} + import-in-the-middle@3.0.2: + resolution: {integrity: sha512-LGLYRl0A2gtyUJb2WDliBHmk6TtlHwdDjxonacZ8QrEs/ZW+YDgNv2QAfjRQWpS8HqvNcq6GGnN6jrOa5FysDQ==} + engines: {node: '>=18'} import-meta-resolve@4.2.0: resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} @@ -6153,9 +6153,9 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} - require-in-the-middle@7.5.2: - resolution: {integrity: sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==} - engines: {node: '>=8.6.0'} + require-in-the-middle@8.0.1: + resolution: {integrity: sha512-QT7FVMXfWOYFbeRBF6nu+I6tr2Tf3u0q8RIEjNob/heKY/nh7drD/k7eeMFmSQgnTtCzLDcCu/XEnpW2wk4xCQ==} + engines: {node: '>=9.3.0 || >=8.10.0 <9.0.0'} require-package-name@2.0.1: resolution: {integrity: sha512-uuoJ1hU/k6M0779t3VMVIYpb2VMJk05cehCaABFhXaibcbvfgR8wKiozLjVFSzJPmQMRqIcO0HMyTFqfV09V6Q==} @@ -6174,11 +6174,6 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve@1.22.11: - resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} - engines: {node: '>= 0.4'} - hasBin: true - resolve@2.0.0-next.6: resolution: {integrity: sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA==} engines: {node: '>= 0.4'} @@ -6525,6 +6520,12 @@ packages: resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} engines: {node: '>=0.10.0'} + stubborn-fs@2.0.0: + resolution: {integrity: sha512-Y0AvSwDw8y+nlSNFXMm2g6L51rBGdAQT20J3YSOqxC53Lo3bjWRtr2BKcfYoAf352WYpsZSTURrA0tqhfgudPA==} + + stubborn-utils@1.0.2: + resolution: {integrity: sha512-zOh9jPYI+xrNOyisSelgym4tolKTJCQd5GBhK0+0xJvcYDcwlOoxF/rnFKQ2KRZknXSG9jWAp66fwP6AxN9STg==} + super-regex@1.1.0: resolution: {integrity: sha512-WHkws2ZflZe41zj6AolvvmaTrWds/VuyeYr9iPVv/oQeaIoVxMKaushfFWpOGDT+GuBrM/sVqF8KUCYQlSSTdQ==} engines: {node: '>=18'} @@ -6962,14 +6963,6 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - uuid@11.1.0: - resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} - hasBin: true - - uuid@13.0.0: - resolution: {integrity: sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==} - hasBin: true - validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} @@ -7135,6 +7128,9 @@ packages: whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + when-exit@2.1.5: + resolution: {integrity: sha512-VGkKJ564kzt6Ms1dbgPP/yuIoQCrsFAnRbptpC5wOEsDaNsbCB2bnfnaA8i/vRs5tjUSEOtIuvl9/MyVsvQZCg==} + which-boxed-primitive@1.1.1: resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} engines: {node: '>= 0.4'} @@ -7200,10 +7196,6 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - write-file-atomic@5.0.1: - resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - ws@8.20.0: resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==} engines: {node: '>=10.0.0'} @@ -7722,162 +7714,162 @@ snapshots: '@whatwg-node/promise-helpers': 1.3.2 tslib: 2.8.1 - '@esbuild/aix-ppc64@0.27.3': - optional: true - '@esbuild/aix-ppc64@0.27.7': optional: true - '@esbuild/android-arm64@0.27.3': + '@esbuild/aix-ppc64@0.28.0': optional: true '@esbuild/android-arm64@0.27.7': optional: true - '@esbuild/android-arm@0.27.3': + '@esbuild/android-arm64@0.28.0': optional: true '@esbuild/android-arm@0.27.7': optional: true - '@esbuild/android-x64@0.27.3': + '@esbuild/android-arm@0.28.0': optional: true '@esbuild/android-x64@0.27.7': optional: true - '@esbuild/darwin-arm64@0.27.3': + '@esbuild/android-x64@0.28.0': optional: true '@esbuild/darwin-arm64@0.27.7': optional: true - '@esbuild/darwin-x64@0.27.3': + '@esbuild/darwin-arm64@0.28.0': optional: true '@esbuild/darwin-x64@0.27.7': optional: true - '@esbuild/freebsd-arm64@0.27.3': + '@esbuild/darwin-x64@0.28.0': optional: true '@esbuild/freebsd-arm64@0.27.7': optional: true - '@esbuild/freebsd-x64@0.27.3': + '@esbuild/freebsd-arm64@0.28.0': optional: true '@esbuild/freebsd-x64@0.27.7': optional: true - '@esbuild/linux-arm64@0.27.3': + '@esbuild/freebsd-x64@0.28.0': optional: true '@esbuild/linux-arm64@0.27.7': optional: true - '@esbuild/linux-arm@0.27.3': + '@esbuild/linux-arm64@0.28.0': optional: true '@esbuild/linux-arm@0.27.7': optional: true - '@esbuild/linux-ia32@0.27.3': + '@esbuild/linux-arm@0.28.0': optional: true '@esbuild/linux-ia32@0.27.7': optional: true - '@esbuild/linux-loong64@0.27.3': + '@esbuild/linux-ia32@0.28.0': optional: true '@esbuild/linux-loong64@0.27.7': optional: true - '@esbuild/linux-mips64el@0.27.3': + '@esbuild/linux-loong64@0.28.0': optional: true '@esbuild/linux-mips64el@0.27.7': optional: true - '@esbuild/linux-ppc64@0.27.3': + '@esbuild/linux-mips64el@0.28.0': optional: true '@esbuild/linux-ppc64@0.27.7': optional: true - '@esbuild/linux-riscv64@0.27.3': + '@esbuild/linux-ppc64@0.28.0': optional: true '@esbuild/linux-riscv64@0.27.7': optional: true - '@esbuild/linux-s390x@0.27.3': + '@esbuild/linux-riscv64@0.28.0': optional: true '@esbuild/linux-s390x@0.27.7': optional: true - '@esbuild/linux-x64@0.27.3': + '@esbuild/linux-s390x@0.28.0': optional: true '@esbuild/linux-x64@0.27.7': optional: true - '@esbuild/netbsd-arm64@0.27.3': + '@esbuild/linux-x64@0.28.0': optional: true '@esbuild/netbsd-arm64@0.27.7': optional: true - '@esbuild/netbsd-x64@0.27.3': + '@esbuild/netbsd-arm64@0.28.0': optional: true '@esbuild/netbsd-x64@0.27.7': optional: true - '@esbuild/openbsd-arm64@0.27.3': + '@esbuild/netbsd-x64@0.28.0': optional: true '@esbuild/openbsd-arm64@0.27.7': optional: true - '@esbuild/openbsd-x64@0.27.3': + '@esbuild/openbsd-arm64@0.28.0': optional: true '@esbuild/openbsd-x64@0.27.7': optional: true - '@esbuild/openharmony-arm64@0.27.3': + '@esbuild/openbsd-x64@0.28.0': optional: true '@esbuild/openharmony-arm64@0.27.7': optional: true - '@esbuild/sunos-x64@0.27.3': + '@esbuild/openharmony-arm64@0.28.0': optional: true '@esbuild/sunos-x64@0.27.7': optional: true - '@esbuild/win32-arm64@0.27.3': + '@esbuild/sunos-x64@0.28.0': optional: true '@esbuild/win32-arm64@0.27.7': optional: true - '@esbuild/win32-ia32@0.27.3': + '@esbuild/win32-arm64@0.28.0': optional: true '@esbuild/win32-ia32@0.27.7': optional: true - '@esbuild/win32-x64@0.27.3': + '@esbuild/win32-ia32@0.28.0': optional: true '@esbuild/win32-x64@0.27.7': optional: true + '@esbuild/win32-x64@0.28.0': + optional: true + '@eslint-community/eslint-utils@4.9.1(eslint@10.2.0(jiti@2.6.1))': dependencies: eslint: 10.2.0(jiti@2.6.1) @@ -8201,24 +8193,31 @@ snapshots: p-wait-for: 5.0.2 picoquery: 2.5.0 + '@netlify/api@14.0.19': + dependencies: + '@netlify/open-api': 2.52.0 + node-fetch: 3.3.2 + p-wait-for: 5.0.2 + picoquery: 2.5.0 + '@netlify/binary-info@1.0.0': {} - '@netlify/blobs@10.7.4': + '@netlify/blobs@10.7.9': dependencies: - '@netlify/dev-utils': 4.4.3 - '@netlify/otel': 5.1.5 + '@netlify/dev-utils': 4.4.6 + '@netlify/otel': 6.0.3 '@netlify/runtime-utils': 2.3.0 transitivePeerDependencies: - supports-color - '@netlify/cache@3.4.4': + '@netlify/cache@3.4.8': dependencies: '@netlify/runtime-utils': 2.3.0 - '@netlify/config@24.4.4': + '@netlify/config@24.6.0': dependencies: '@iarna/toml': 2.2.5 - '@netlify/api': 14.0.18 + '@netlify/api': 14.0.19 '@netlify/headers-parser': 9.0.3 '@netlify/redirect-parser': 15.0.4 chalk: 5.6.2 @@ -8243,15 +8242,16 @@ snapshots: yargs: 17.7.2 zod: 4.3.6 - '@netlify/db-dev@0.7.0': + '@netlify/database-dev@0.10.1': dependencies: '@electric-sql/pglite': 0.3.16 pg-gateway: 0.3.0-beta.4 - '@netlify/dev-utils@4.4.3': + '@netlify/dev-utils@4.4.6': dependencies: '@whatwg-node/server': 0.10.18 ansis: 4.2.0 + atomically: 2.1.1 chokidar: 4.0.3 decache: 4.6.2 dettle: 1.0.5 @@ -8263,23 +8263,21 @@ snapshots: parse-gitignore: 2.0.0 semver: 7.7.4 tmp-promise: 3.0.3 - uuid: 13.0.0 - write-file-atomic: 5.0.1 - '@netlify/dev@4.16.5(srvx@0.11.15)': + '@netlify/dev@4.18.7(srvx@0.11.15)': dependencies: '@netlify/ai': 0.4.1 - '@netlify/blobs': 10.7.4 - '@netlify/config': 24.4.4 - '@netlify/db-dev': 0.7.0 - '@netlify/dev-utils': 4.4.3 - '@netlify/edge-functions-dev': 1.0.16 - '@netlify/functions-dev': 1.2.5 - '@netlify/headers': 2.1.8 - '@netlify/images': 1.3.7(@netlify/blobs@10.7.4)(srvx@0.11.15) - '@netlify/redirects': 3.1.10 - '@netlify/runtime': 4.1.20 - '@netlify/static': 3.1.7 + '@netlify/blobs': 10.7.9 + '@netlify/config': 24.6.0 + '@netlify/database-dev': 0.10.1 + '@netlify/dev-utils': 4.4.6 + '@netlify/edge-functions-dev': 1.0.20 + '@netlify/functions-dev': 1.3.0 + '@netlify/headers': 2.1.11 + '@netlify/images': 1.3.10(@netlify/blobs@10.7.9)(srvx@0.11.15) + '@netlify/redirects': 3.1.13 + '@netlify/runtime': 4.1.25 + '@netlify/static': 3.1.10 ulid: 3.0.2 transitivePeerDependencies: - '@azure/app-configuration' @@ -8308,7 +8306,7 @@ snapshots: - supports-color - uploadthing - '@netlify/edge-bundler@14.9.19': + '@netlify/edge-bundler@14.10.3': dependencies: '@import-maps/resolve': 2.0.0 '@sveltejs/acorn-typescript': 1.0.9(acorn@8.16.0) @@ -8318,7 +8316,7 @@ snapshots: better-ajv-errors: 1.2.0(ajv@8.18.0) common-path-prefix: 3.0.0 env-paths: 3.0.0 - esbuild: 0.27.3 + esbuild: 0.28.0 execa: 8.0.1 find-up: 7.0.0 get-port: 7.2.0 @@ -8331,29 +8329,28 @@ snapshots: tar: 7.5.13 tmp-promise: 3.0.3 urlpattern-polyfill: 8.0.2 - uuid: 11.1.0 '@netlify/edge-functions-bootstrap@2.16.0': {} - '@netlify/edge-functions-dev@1.0.16': + '@netlify/edge-functions-dev@1.0.20': dependencies: - '@netlify/dev-utils': 4.4.3 - '@netlify/edge-bundler': 14.9.19 - '@netlify/edge-functions': 3.0.6 + '@netlify/dev-utils': 4.4.6 + '@netlify/edge-bundler': 14.10.3 + '@netlify/edge-functions': 3.0.8 '@netlify/edge-functions-bootstrap': 2.16.0 '@netlify/runtime-utils': 2.3.0 get-port: 7.2.0 - '@netlify/edge-functions@3.0.6': + '@netlify/edge-functions@3.0.8': dependencies: - '@netlify/types': 2.6.0 + '@netlify/types': 2.8.0 - '@netlify/functions-dev@1.2.5': + '@netlify/functions-dev@1.3.0': dependencies: - '@netlify/blobs': 10.7.4 - '@netlify/dev-utils': 4.4.3 - '@netlify/functions': 5.2.0 - '@netlify/zip-it-and-ship-it': 14.5.3 + '@netlify/blobs': 10.7.9 + '@netlify/dev-utils': 4.4.6 + '@netlify/functions': 5.3.0 + '@netlify/zip-it-and-ship-it': 14.7.1 cron-parser: 4.9.0 decache: 4.6.2 extract-zip: 2.0.1 @@ -8371,9 +8368,9 @@ snapshots: - rollup - supports-color - '@netlify/functions@5.2.0': + '@netlify/functions@5.3.0': dependencies: - '@netlify/types': 2.6.0 + '@netlify/types': 2.8.0 '@netlify/headers-parser@9.0.3': dependencies: @@ -8384,13 +8381,13 @@ snapshots: map-obj: 5.0.2 path-exists: 5.0.0 - '@netlify/headers@2.1.8': + '@netlify/headers@2.1.11': dependencies: '@netlify/headers-parser': 9.0.3 - '@netlify/images@1.3.7(@netlify/blobs@10.7.4)(srvx@0.11.15)': + '@netlify/images@1.3.10(@netlify/blobs@10.7.9)(srvx@0.11.15)': dependencies: - ipx: 3.1.1(@netlify/blobs@10.7.4)(srvx@0.11.15) + ipx: 3.1.1(@netlify/blobs@10.7.9)(srvx@0.11.15) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -8415,13 +8412,13 @@ snapshots: '@netlify/open-api@2.52.0': {} - '@netlify/otel@5.1.5': + '@netlify/otel@6.0.3': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-node': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.7.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.217.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.7.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-node': 2.7.1(@opentelemetry/api@1.9.0) transitivePeerDependencies: - supports-color @@ -8432,9 +8429,9 @@ snapshots: is-plain-obj: 4.1.0 path-exists: 5.0.0 - '@netlify/redirects@3.1.10': + '@netlify/redirects@3.1.13': dependencies: - '@netlify/dev-utils': 4.4.3 + '@netlify/dev-utils': 4.4.6 '@netlify/redirect-parser': 15.0.4 cookie: 1.1.1 jsonwebtoken: 9.0.3 @@ -8442,31 +8439,33 @@ snapshots: '@netlify/runtime-utils@2.3.0': {} - '@netlify/runtime@4.1.20': + '@netlify/runtime@4.1.25': dependencies: - '@netlify/blobs': 10.7.4 - '@netlify/cache': 3.4.4 + '@netlify/blobs': 10.7.9 + '@netlify/cache': 3.4.8 '@netlify/runtime-utils': 2.3.0 - '@netlify/types': 2.6.0 + '@netlify/types': 2.8.0 transitivePeerDependencies: - supports-color - '@netlify/serverless-functions-api@2.14.0': + '@netlify/serverless-functions-api@2.16.0': dependencies: '@netlify/types': 2.6.0 - '@netlify/static@3.1.7': + '@netlify/static@3.1.10': dependencies: mime-types: 3.0.2 '@netlify/types@2.6.0': {} - '@netlify/vite-plugin-tanstack-start@1.3.3(@tanstack/react-start@1.167.41(crossws@0.4.4(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)))(srvx@0.11.15)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))': + '@netlify/types@2.8.0': {} + + '@netlify/vite-plugin-tanstack-start@1.3.15(@tanstack/react-start@1.167.41(crossws@0.4.4(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)))(srvx@0.11.15)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: - '@netlify/vite-plugin': 2.11.3(srvx@0.11.15)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) + '@netlify/vite-plugin': 2.12.7(srvx@0.11.15)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) + vite: 8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) optionalDependencies: - '@tanstack/react-start': 1.167.41(crossws@0.4.4(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) + '@tanstack/react-start': 1.167.41(crossws@0.4.4(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -8495,12 +8494,12 @@ snapshots: - supports-color - uploadthing - '@netlify/vite-plugin@2.11.3(srvx@0.11.15)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))': + '@netlify/vite-plugin@2.12.7(srvx@0.11.15)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: - '@netlify/dev': 4.16.5(srvx@0.11.15) - '@netlify/dev-utils': 4.4.3 + '@netlify/dev': 4.18.7(srvx@0.11.15) + '@netlify/dev-utils': 4.4.6 dedent: 1.7.2 - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -8529,18 +8528,18 @@ snapshots: - supports-color - uploadthing - '@netlify/zip-it-and-ship-it@14.5.3': + '@netlify/zip-it-and-ship-it@14.7.1': dependencies: '@babel/parser': 7.29.2 '@babel/types': 7.29.0 '@netlify/binary-info': 1.0.0 - '@netlify/serverless-functions-api': 2.14.0 + '@netlify/serverless-functions-api': 2.16.0 '@vercel/nft': 0.29.4 archiver: 7.0.1 common-path-prefix: 3.0.0 copy-file: 11.1.0 es-module-lexer: 1.7.0 - esbuild: 0.27.3 + esbuild: 0.28.0 execa: 8.0.1 fast-glob: 3.3.3 filter-obj: 6.1.0 @@ -8688,64 +8687,51 @@ snapshots: '@open-draft/until@2.1.0': {} - '@opentelemetry/api-logs@0.203.0': + '@opentelemetry/api-logs@0.217.0': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/api@1.9.0': {} - '@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0)': + '@opentelemetry/context-async-hooks@2.7.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0)': + '@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/semantic-conventions': 1.28.0 + '@opentelemetry/semantic-conventions': 1.41.1 - '@opentelemetry/instrumentation@0.203.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation@0.217.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.203.0 - import-in-the-middle: 1.15.0 - require-in-the-middle: 7.5.2 + '@opentelemetry/api-logs': 0.217.0 + import-in-the-middle: 3.0.2 + require-in-the-middle: 8.0.1 transitivePeerDependencies: - supports-color - '@opentelemetry/propagator-b3@1.30.1(@opentelemetry/api@1.9.0)': + '@opentelemetry/resources@2.7.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.7.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.41.1 - '@opentelemetry/propagator-jaeger@1.30.1(@opentelemetry/api@1.9.0)': + '@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.7.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.7.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.41.1 - '@opentelemetry/resources@1.30.1(@opentelemetry/api@1.9.0)': + '@opentelemetry/sdk-trace-node@2.7.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.28.0 + '@opentelemetry/context-async-hooks': 2.7.1(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.7.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.7.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.28.0 - - '@opentelemetry/sdk-trace-node@1.30.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/context-async-hooks': 1.30.1(@opentelemetry/api@1.9.0) - '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) - '@opentelemetry/propagator-b3': 1.30.1(@opentelemetry/api@1.9.0) - '@opentelemetry/propagator-jaeger': 1.30.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.0) - semver: 7.7.4 - - '@opentelemetry/semantic-conventions@1.28.0': {} + '@opentelemetry/semantic-conventions@1.41.1': {} '@oxc-project/runtime@0.123.0': {} @@ -9347,12 +9333,12 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.2.2 '@tailwindcss/oxide-win32-x64-msvc': 4.2.2 - '@tailwindcss/vite@4.2.2(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))': + '@tailwindcss/vite@4.2.2(vite@8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@tailwindcss/node': 4.2.2 '@tailwindcss/oxide': 4.2.2 tailwindcss: 4.2.2 - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) '@tanstack/devtools-client@0.0.6': dependencies: @@ -9376,7 +9362,7 @@ snapshots: transitivePeerDependencies: - csstype - '@tanstack/devtools-vite@0.6.0(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))': + '@tanstack/devtools-vite@0.6.0(vite@8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@babel/core': 7.29.0 '@babel/generator': 7.29.1 @@ -9388,7 +9374,7 @@ snapshots: chalk: 5.6.2 launch-editor: 2.13.2 picomatch: 4.0.4 - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - bufferutil - supports-color @@ -9453,7 +9439,7 @@ snapshots: react: 19.2.5 react-dom: 19.2.5(react@19.2.5) - '@tanstack/react-start-rsc@0.0.20(crossws@0.4.4(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))': + '@tanstack/react-start-rsc@0.0.20(crossws@0.4.4(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@tanstack/react-router': 1.168.22(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@tanstack/react-start-server': 1.166.40(crossws@0.4.4(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5) @@ -9461,7 +9447,7 @@ snapshots: '@tanstack/router-utils': 1.161.6 '@tanstack/start-client-core': 1.167.17 '@tanstack/start-fn-stubs': 1.161.6 - '@tanstack/start-plugin-core': 1.167.35(@tanstack/react-router@1.168.22(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(crossws@0.4.4(srvx@0.11.15))(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) + '@tanstack/start-plugin-core': 1.167.35(@tanstack/react-router@1.168.22(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(crossws@0.4.4(srvx@0.11.15))(vite@8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) '@tanstack/start-server-core': 1.167.19(crossws@0.4.4(srvx@0.11.15)) '@tanstack/start-storage-context': 1.166.29 pathe: 2.0.3 @@ -9487,20 +9473,20 @@ snapshots: transitivePeerDependencies: - crossws - '@tanstack/react-start@1.167.41(crossws@0.4.4(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))': + '@tanstack/react-start@1.167.41(crossws@0.4.4(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@tanstack/react-router': 1.168.22(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@tanstack/react-start-client': 1.166.39(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@tanstack/react-start-rsc': 0.0.20(crossws@0.4.4(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) + '@tanstack/react-start-rsc': 0.0.20(crossws@0.4.4(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) '@tanstack/react-start-server': 1.166.40(crossws@0.4.4(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@tanstack/router-utils': 1.161.6 '@tanstack/start-client-core': 1.167.17 - '@tanstack/start-plugin-core': 1.167.35(@tanstack/react-router@1.168.22(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(crossws@0.4.4(srvx@0.11.15))(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) + '@tanstack/start-plugin-core': 1.167.35(@tanstack/react-router@1.168.22(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(crossws@0.4.4(srvx@0.11.15))(vite@8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) '@tanstack/start-server-core': 1.167.19(crossws@0.4.4(srvx@0.11.15)) pathe: 2.0.3 react: 19.2.5 react-dom: 19.2.5(react@19.2.5) - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - '@rsbuild/core' - crossws @@ -9543,7 +9529,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.167.22(@tanstack/react-router@1.168.22(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))': + '@tanstack/router-plugin@1.167.22(@tanstack/react-router@1.168.22(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) @@ -9560,7 +9546,7 @@ snapshots: zod: 3.25.76 optionalDependencies: '@tanstack/react-router': 1.168.22(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - supports-color @@ -9587,7 +9573,7 @@ snapshots: '@tanstack/start-fn-stubs@1.161.6': {} - '@tanstack/start-plugin-core@1.167.35(@tanstack/react-router@1.168.22(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(crossws@0.4.4(srvx@0.11.15))(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))': + '@tanstack/start-plugin-core@1.167.35(@tanstack/react-router@1.168.22(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(crossws@0.4.4(srvx@0.11.15))(vite@8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@babel/code-frame': 7.27.1 '@babel/core': 7.29.0 @@ -9595,7 +9581,7 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.40 '@tanstack/router-core': 1.168.15 '@tanstack/router-generator': 1.166.32 - '@tanstack/router-plugin': 1.167.22(@tanstack/react-router@1.168.22(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) + '@tanstack/router-plugin': 1.167.22(@tanstack/react-router@1.168.22(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) '@tanstack/router-utils': 1.161.6 '@tanstack/start-client-core': 1.167.17 '@tanstack/start-server-core': 1.167.19(crossws@0.4.4(srvx@0.11.15)) @@ -9608,8 +9594,8 @@ snapshots: srvx: 0.11.15 tinyglobby: 0.2.16 ufo: 1.6.3 - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) - vitefu: 1.1.3(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) + vite: 8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) + vitefu: 1.1.3(vite@8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) xmlbuilder2: 4.0.3 zod: 3.25.76 transitivePeerDependencies: @@ -9849,7 +9835,7 @@ snapshots: '@visulima/path@2.0.5': {} - '@vitejs/plugin-react@4.7.0(@voidzero-dev/vite-plus-core@0.1.16(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))': + '@vitejs/plugin-react@4.7.0(@voidzero-dev/vite-plus-core@0.1.16(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) @@ -9857,14 +9843,14 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.27 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: '@voidzero-dev/vite-plus-core@0.1.16(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)' + vite: '@voidzero-dev/vite-plus-core@0.1.16(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)' transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@6.0.1(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))': + '@vitejs/plugin-react@6.0.1(vite@8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@rolldown/pluginutils': 1.0.0-rc.7 - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) '@vitest/expect@4.1.4': dependencies: @@ -9875,14 +9861,14 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.4(msw@2.13.2(@types/node@24.12.2)(typescript@5.9.3))(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))': + '@vitest/mocker@4.1.4(msw@2.13.2(@types/node@24.12.2)(typescript@5.9.3))(vite@8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@vitest/spy': 4.1.4 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: msw: 2.13.2(@types/node@24.12.2)(typescript@5.9.3) - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) '@vitest/pretty-format@4.1.4': dependencies: @@ -9908,7 +9894,7 @@ snapshots: convert-source-map: 2.0.0 tinyrainbow: 3.1.0 - '@voidzero-dev/vite-plus-core@0.1.16(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)': + '@voidzero-dev/vite-plus-core@0.1.16(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)': dependencies: '@oxc-project/runtime': 0.123.0 '@oxc-project/types': 0.123.0 @@ -9916,14 +9902,14 @@ snapshots: postcss: 8.5.9 optionalDependencies: '@types/node': 24.12.2 - esbuild: 0.27.7 + esbuild: 0.28.0 fsevents: 2.3.3 jiti: 2.6.1 tsx: 4.21.0 typescript: 5.9.3 yaml: 2.8.3 - '@voidzero-dev/vite-plus-core@0.1.18(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)': + '@voidzero-dev/vite-plus-core@0.1.18(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)': dependencies: '@oxc-project/runtime': 0.124.0 '@oxc-project/types': 0.124.0 @@ -9931,7 +9917,7 @@ snapshots: postcss: 8.5.9 optionalDependencies: '@types/node': 24.12.2 - esbuild: 0.27.7 + esbuild: 0.28.0 fsevents: 2.3.3 jiti: 2.6.1 tsx: 4.21.0 @@ -9956,11 +9942,11 @@ snapshots: '@voidzero-dev/vite-plus-linux-x64-musl@0.1.18': optional: true - '@voidzero-dev/vite-plus-test@0.1.18(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(@voidzero-dev/vite-plus-core@0.1.16(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(esbuild@0.27.7)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@1.8.0))(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)': + '@voidzero-dev/vite-plus-test@0.1.18(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(@voidzero-dev/vite-plus-core@0.1.16(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(esbuild@0.28.0)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@1.8.0))(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)': dependencies: '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.3 - '@voidzero-dev/vite-plus-core': 0.1.18(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3) + '@voidzero-dev/vite-plus-core': 0.1.18(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3) es-module-lexer: 1.7.0 obug: 2.1.1 pixelmatch: 7.1.0 @@ -9970,7 +9956,7 @@ snapshots: tinybench: 2.9.0 tinyexec: 1.1.1 tinyglobby: 0.2.16 - vite: '@voidzero-dev/vite-plus-core@0.1.16(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)' + vite: '@voidzero-dev/vite-plus-core@0.1.16(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)' ws: 8.20.0 optionalDependencies: '@opentelemetry/api': 1.9.0 @@ -9997,11 +9983,11 @@ snapshots: - utf-8-validate - yaml - '@voidzero-dev/vite-plus-test@0.1.18(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@1.8.0))(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3)': + '@voidzero-dev/vite-plus-test@0.1.18(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@1.8.0))(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3)': dependencies: '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.3 - '@voidzero-dev/vite-plus-core': 0.1.18(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3) + '@voidzero-dev/vite-plus-core': 0.1.18(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3) es-module-lexer: 1.7.0 obug: 2.1.1 pixelmatch: 7.1.0 @@ -10011,7 +9997,7 @@ snapshots: tinybench: 2.9.0 tinyexec: 1.1.1 tinyglobby: 0.2.16 - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) ws: 8.20.0 optionalDependencies: '@opentelemetry/api': 1.9.0 @@ -10254,6 +10240,11 @@ snapshots: async@3.2.6: {} + atomically@2.1.1: + dependencies: + stubborn-fs: 2.0.0 + when-exit: 2.1.5 + available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.1.0 @@ -10484,7 +10475,7 @@ snapshots: citty@0.2.2: {} - cjs-module-lexer@1.4.3: {} + cjs-module-lexer@2.2.0: {} class-variance-authority@0.7.1: dependencies: @@ -11074,35 +11065,6 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 - esbuild@0.27.3: - optionalDependencies: - '@esbuild/aix-ppc64': 0.27.3 - '@esbuild/android-arm': 0.27.3 - '@esbuild/android-arm64': 0.27.3 - '@esbuild/android-x64': 0.27.3 - '@esbuild/darwin-arm64': 0.27.3 - '@esbuild/darwin-x64': 0.27.3 - '@esbuild/freebsd-arm64': 0.27.3 - '@esbuild/freebsd-x64': 0.27.3 - '@esbuild/linux-arm': 0.27.3 - '@esbuild/linux-arm64': 0.27.3 - '@esbuild/linux-ia32': 0.27.3 - '@esbuild/linux-loong64': 0.27.3 - '@esbuild/linux-mips64el': 0.27.3 - '@esbuild/linux-ppc64': 0.27.3 - '@esbuild/linux-riscv64': 0.27.3 - '@esbuild/linux-s390x': 0.27.3 - '@esbuild/linux-x64': 0.27.3 - '@esbuild/netbsd-arm64': 0.27.3 - '@esbuild/netbsd-x64': 0.27.3 - '@esbuild/openbsd-arm64': 0.27.3 - '@esbuild/openbsd-x64': 0.27.3 - '@esbuild/openharmony-arm64': 0.27.3 - '@esbuild/sunos-x64': 0.27.3 - '@esbuild/win32-arm64': 0.27.3 - '@esbuild/win32-ia32': 0.27.3 - '@esbuild/win32-x64': 0.27.3 - esbuild@0.27.7: optionalDependencies: '@esbuild/aix-ppc64': 0.27.7 @@ -11132,6 +11094,35 @@ snapshots: '@esbuild/win32-ia32': 0.27.7 '@esbuild/win32-x64': 0.27.7 + esbuild@0.28.0: + optionalDependencies: + '@esbuild/aix-ppc64': 0.28.0 + '@esbuild/android-arm': 0.28.0 + '@esbuild/android-arm64': 0.28.0 + '@esbuild/android-x64': 0.28.0 + '@esbuild/darwin-arm64': 0.28.0 + '@esbuild/darwin-x64': 0.28.0 + '@esbuild/freebsd-arm64': 0.28.0 + '@esbuild/freebsd-x64': 0.28.0 + '@esbuild/linux-arm': 0.28.0 + '@esbuild/linux-arm64': 0.28.0 + '@esbuild/linux-ia32': 0.28.0 + '@esbuild/linux-loong64': 0.28.0 + '@esbuild/linux-mips64el': 0.28.0 + '@esbuild/linux-ppc64': 0.28.0 + '@esbuild/linux-riscv64': 0.28.0 + '@esbuild/linux-s390x': 0.28.0 + '@esbuild/linux-x64': 0.28.0 + '@esbuild/netbsd-arm64': 0.28.0 + '@esbuild/netbsd-x64': 0.28.0 + '@esbuild/openbsd-arm64': 0.28.0 + '@esbuild/openbsd-x64': 0.28.0 + '@esbuild/openharmony-arm64': 0.28.0 + '@esbuild/sunos-x64': 0.28.0 + '@esbuild/win32-arm64': 0.28.0 + '@esbuild/win32-ia32': 0.28.0 + '@esbuild/win32-x64': 0.28.0 + escalade@3.2.0: {} escape-html@1.0.3: {} @@ -11763,11 +11754,11 @@ snapshots: transitivePeerDependencies: - supports-color - import-in-the-middle@1.15.0: + import-in-the-middle@3.0.2: dependencies: acorn: 8.16.0 acorn-import-attributes: 1.9.5(acorn@8.16.0) - cjs-module-lexer: 1.4.3 + cjs-module-lexer: 2.2.0 module-details-from-path: 1.0.4 import-meta-resolve@4.2.0: {} @@ -11799,7 +11790,7 @@ snapshots: ipaddr.js@1.9.1: {} - ipx@3.1.1(@netlify/blobs@10.7.4)(srvx@0.11.15): + ipx@3.1.1(@netlify/blobs@10.7.9)(srvx@0.11.15): dependencies: '@fastify/accept-negotiator': 2.0.1 citty: 0.1.6 @@ -11815,7 +11806,7 @@ snapshots: sharp: 0.34.5 svgo: 4.0.1 ufo: 1.6.3 - unstorage: 1.17.5(@netlify/blobs@10.7.4) + unstorage: 1.17.5(@netlify/blobs@10.7.9) xss: 1.0.15 transitivePeerDependencies: - '@azure/app-configuration' @@ -13186,11 +13177,10 @@ snapshots: require-from-string@2.0.2: {} - require-in-the-middle@7.5.2: + require-in-the-middle@8.0.1: dependencies: debug: 4.4.3 module-details-from-path: 1.0.4 - resolve: 1.22.11 transitivePeerDependencies: - supports-color @@ -13204,12 +13194,6 @@ snapshots: resolve-pkg-maps@1.0.0: {} - resolve@1.22.11: - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - resolve@2.0.0-next.6: dependencies: es-errors: 1.3.0 @@ -13705,6 +13689,12 @@ snapshots: strip-json-comments@2.0.1: {} + stubborn-fs@2.0.0: + dependencies: + stubborn-utils: 1.0.2 + + stubborn-utils@1.0.2: {} + super-regex@1.1.0: dependencies: function-timeout: 1.0.2 @@ -14040,7 +14030,7 @@ snapshots: picomatch: 4.0.4 webpack-virtual-modules: 0.6.2 - unstorage@1.17.5(@netlify/blobs@10.7.4): + unstorage@1.17.5(@netlify/blobs@10.7.9): dependencies: anymatch: 3.1.3 chokidar: 5.0.0 @@ -14051,7 +14041,7 @@ snapshots: ofetch: 1.5.1 ufo: 1.6.3 optionalDependencies: - '@netlify/blobs': 10.7.4 + '@netlify/blobs': 10.7.9 until-async@3.0.2: {} @@ -14085,10 +14075,6 @@ snapshots: util-deprecate@1.0.2: {} - uuid@11.1.0: {} - - uuid@13.0.0: {} - validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 @@ -14110,20 +14096,20 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite-imagetools@10.0.0(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)): + vite-imagetools@10.0.0(vite@8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: '@rollup/pluginutils': 5.3.0 imagetools-core: 9.1.0 sharp: 0.34.5 - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - rollup - vite-plus@0.1.18(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(@voidzero-dev/vite-plus-core@0.1.16(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(esbuild@0.27.7)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@1.8.0))(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3): + vite-plus@0.1.18(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(@voidzero-dev/vite-plus-core@0.1.16(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(esbuild@0.28.0)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@1.8.0))(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3): dependencies: '@oxc-project/types': 0.124.0 - '@voidzero-dev/vite-plus-core': 0.1.18(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3) - '@voidzero-dev/vite-plus-test': 0.1.18(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(@voidzero-dev/vite-plus-core@0.1.16(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(esbuild@0.27.7)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@1.8.0))(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3) + '@voidzero-dev/vite-plus-core': 0.1.18(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3) + '@voidzero-dev/vite-plus-test': 0.1.18(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(@voidzero-dev/vite-plus-core@0.1.16(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3))(esbuild@0.28.0)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@1.8.0))(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3) oxfmt: 0.45.0 oxlint: 1.60.0(oxlint-tsgolint@0.20.0) oxlint-tsgolint: 0.20.0 @@ -14166,11 +14152,11 @@ snapshots: - vite - yaml - vite-plus@0.1.18(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@1.8.0))(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3): + vite-plus@0.1.18(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@1.8.0))(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3): dependencies: '@oxc-project/types': 0.124.0 - '@voidzero-dev/vite-plus-core': 0.1.18(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3) - '@voidzero-dev/vite-plus-test': 0.1.18(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@1.8.0))(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3) + '@voidzero-dev/vite-plus-core': 0.1.18(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3) + '@voidzero-dev/vite-plus-test': 0.1.18(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@1.8.0))(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3) oxfmt: 0.45.0 oxlint: 1.60.0(oxlint-tsgolint@0.20.0) oxlint-tsgolint: 0.20.0 @@ -14213,7 +14199,7 @@ snapshots: - vite - yaml - vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3): + vite@8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 @@ -14222,20 +14208,20 @@ snapshots: tinyglobby: 0.2.16 optionalDependencies: '@types/node': 24.12.2 - esbuild: 0.27.7 + esbuild: 0.28.0 fsevents: 2.3.3 jiti: 2.6.1 tsx: 4.21.0 yaml: 2.8.3 - vitefu@1.1.3(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)): + vitefu@1.1.3(vite@8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)): optionalDependencies: - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) - vitest@4.1.4(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(jsdom@28.1.0(@noble/hashes@1.8.0))(msw@2.13.2(@types/node@24.12.2)(typescript@5.9.3))(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)): + vitest@4.1.4(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(jsdom@28.1.0(@noble/hashes@1.8.0))(msw@2.13.2(@types/node@24.12.2)(typescript@5.9.3))(vite@8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: '@vitest/expect': 4.1.4 - '@vitest/mocker': 4.1.4(msw@2.13.2(@types/node@24.12.2)(typescript@5.9.3))(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vitest/mocker': 4.1.4(msw@2.13.2(@types/node@24.12.2)(typescript@5.9.3))(vite@8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) '@vitest/pretty-format': 4.1.4 '@vitest/runner': 4.1.4 '@vitest/snapshot': 4.1.4 @@ -14252,7 +14238,7 @@ snapshots: tinyexec: 1.1.1 tinyglobby: 0.2.16 tinyrainbow: 3.1.0 - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 @@ -14296,6 +14282,8 @@ snapshots: tr46: 0.0.3 webidl-conversions: 3.0.1 + when-exit@2.1.5: {} + which-boxed-primitive@1.1.1: dependencies: is-bigint: 1.1.0 @@ -14400,11 +14388,6 @@ snapshots: wrappy@1.0.2: {} - write-file-atomic@5.0.1: - dependencies: - imurmurhash: 0.1.4 - signal-exit: 4.1.0 - ws@8.20.0: {} wsl-utils@0.3.1: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index f9ca716..3b6b5be 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -13,7 +13,7 @@ catalog: "@js-temporal/polyfill": ^0.5.1 "@klinking/squircle": ^0.8.0 "@markdoc/markdoc": ^0.5.6 - "@netlify/vite-plugin-tanstack-start": ^1.3.3 + "@netlify/vite-plugin-tanstack-start": ^1.3.15 "@playwright/test": ^1.58.2 "@semantic-release/commit-analyzer": ^13.0.1 "@semantic-release/github": ^11.0.1 diff --git a/website/src/components/demo/AppControls.tsx b/website/src/components/demo/AppControls.tsx index c268517..5e6799d 100644 --- a/website/src/components/demo/AppControls.tsx +++ b/website/src/components/demo/AppControls.tsx @@ -3,7 +3,7 @@ import { Fieldset as FieldsetPrimitive } from "@base-ui/react/fieldset"; import { Temporal } from "@js-temporal/polyfill"; import type { OutsideDays, - OverflowBehavior, + OutOfRangeBehavior, RangeMode, } from "@klinking/colander"; import type { ComponentProps } from "react"; @@ -150,14 +150,14 @@ export interface AppControlsProps { setWeekCount: (v: number) => void; scrollBy: "row" | "page"; setScrollBy: (v: "row" | "page") => void; - overflowBehavior: OverflowBehavior; - setOverflowBehavior: (v: OverflowBehavior) => void; + outOfRangeBehavior: OutOfRangeBehavior; + setOutOfRangeBehavior: (v: OutOfRangeBehavior) => void; showMonthSeparators: boolean; setShowMonthSeparators: (v: boolean) => void; disableDateMode: string; setDisableDateMode: (v: string) => void; - monthOverflowBehavior: "unbounded" | "stop"; - setMonthOverflowBehavior: (v: "unbounded" | "stop") => void; + monthOutOfRangeBehavior: "unbounded" | "stop"; + setMonthOutOfRangeBehavior: (v: "unbounded" | "stop") => void; selectionDisplay: string; lastMonthChange: string; } @@ -220,14 +220,14 @@ export function AppControls(props: AppControlsProps) { setWeekCount, scrollBy, setScrollBy, - overflowBehavior, - setOverflowBehavior, + outOfRangeBehavior, + setOutOfRangeBehavior, showMonthSeparators, setShowMonthSeparators, disableDateMode, setDisableDateMode, - monthOverflowBehavior, - setMonthOverflowBehavior, + monthOutOfRangeBehavior, + setMonthOutOfRangeBehavior, } = props; return ( @@ -502,11 +502,11 @@ export function AppControls(props: AppControlsProps) { - overflowBehavior + outOfRangeBehavior - setMonthOverflowBehavior(v as "unbounded" | "stop") + setMonthOutOfRangeBehavior(v as "unbounded" | "stop") } > @@ -561,14 +561,14 @@ export function AppControls(props: AppControlsProps) { - overflowBehavior + outOfRangeBehavior