diff --git a/package.json b/package.json index c77f542c..ecb9130a 100644 --- a/package.json +++ b/package.json @@ -21,5 +21,5 @@ "devDependencies": { "husky": "^9.0.0" }, - "packageManager": "yarn@4.3.1" + "packageManager": "yarn@4.6.0" } diff --git a/packages/react-calendar/src/Calendar.tsx b/packages/react-calendar/src/Calendar.tsx index a9aa6745..ff555497 100644 --- a/packages/react-calendar/src/Calendar.tsx +++ b/packages/react-calendar/src/Calendar.tsx @@ -39,10 +39,11 @@ import type { formatWeekday as defaultFormatWeekday, formatYear as defaultFormatYear, } from './shared/dateFormatter.js'; +import WeekView from './WeekView.js'; const baseClassName = 'react-calendar'; -const allViews = ['century', 'decade', 'year', 'month'] as const; -const allValueTypes = ['decade', 'year', 'month', 'day'] as const; +const allViews = ['century', 'decade', 'year', 'month', 'week'] as const; +const allValueTypes = ['decade', 'year', 'month', 'day', 'day'] as const; const defaultMinDate = new Date(); defaultMinDate.setFullYear(1, 0, 1); @@ -487,13 +488,14 @@ function getValue(value: LooseValue | undefined, index: 0 | 1): Date | null { } type DetailArgs = { + calendarType?: CalendarType; value?: LooseValue; minDate?: Date; maxDate?: Date; maxDetail: Detail; }; -function getDetailValue({ value, minDate, maxDate, maxDetail }: DetailArgs, index: 0 | 1) { +function getDetailValue({ calendarType, value, minDate, maxDate, maxDetail }: DetailArgs, index: 0 | 1) { const valuePiece = getValue(value, index); if (!valuePiece) { @@ -505,9 +507,9 @@ function getDetailValue({ value, minDate, maxDate, maxDetail }: DetailArgs, inde const detailValueFrom = (() => { switch (index) { case 0: - return getBegin(valueType, valuePiece); + return getBegin(valueType, valuePiece, calendarType); case 1: - return getEnd(valueType, valuePiece); + return getEnd(valueType, valuePiece, calendarType); default: throw new Error(`Invalid index value: ${index}`); } @@ -527,6 +529,7 @@ const getDetailValueArray = (args: DetailArgs) => ]; function getActiveStartDate({ + calendarType, maxDate, maxDetail, minDate, @@ -540,17 +543,19 @@ function getActiveStartDate({ const rangeType = getView(view, minDetail, maxDetail); const valueFrom = getDetailValueFrom({ + calendarType, value, minDate, maxDate, maxDetail, }) || new Date(); - return getBegin(rangeType, valueFrom); + return getBegin(rangeType, valueFrom, calendarType); } function getInitialActiveStartDate({ activeStartDate, + calendarType, defaultActiveStartDate, defaultValue, defaultView, @@ -562,6 +567,7 @@ function getInitialActiveStartDate({ view, }: { activeStartDate?: Date; + calendarType?: CalendarType; defaultActiveStartDate?: Date; defaultValue?: LooseValue; defaultView?: View; @@ -576,10 +582,11 @@ function getInitialActiveStartDate({ const valueFrom = activeStartDate || defaultActiveStartDate; if (valueFrom) { - return getBegin(rangeType, valueFrom); + return getBegin(rangeType, valueFrom, calendarType); } return getActiveStartDate({ + calendarType, maxDate, maxDetail, minDate, @@ -675,6 +682,7 @@ const Calendar: React.ForwardRefExoticComponent ); } + case 'week': { + return ( + + ); + } default: throw new Error(`Invalid view: ${view}.`); } @@ -1088,6 +1122,7 @@ const Calendar: React.ForwardRefExoticComponent { const defaultProps = { diff --git a/packages/react-calendar/src/Calendar/Navigation.tsx b/packages/react-calendar/src/Calendar/Navigation.tsx index 46a1b892..c0b5fd60 100644 --- a/packages/react-calendar/src/Calendar/Navigation.tsx +++ b/packages/react-calendar/src/Calendar/Navigation.tsx @@ -11,13 +11,16 @@ import { getBeginPrevious2, getEndPrevious, getEndPrevious2, + getWeekEndDate, + getWeekStartDate, } from '../shared/dates.js'; import { formatMonthYear as defaultFormatMonthYear, formatYear as defaultFormatYear, + formatShortDayMonthYear, } from '../shared/dateFormatter.js'; -import type { Action, NavigationLabelFunc, RangeType } from '../shared/types.js'; +import type { Action, CalendarType, NavigationLabelFunc, RangeType } from '../shared/types.js'; const className = 'react-calendar__navigation'; @@ -28,6 +31,12 @@ type NavigationProps = { * @example new Date(2017, 0, 1) */ activeStartDate: Date; + + /** + * Assists with "week" view to know which day to start on + */ + calendarType?: CalendarType; + drillUp: () => void; /** * Function called to override default formatting of months and years. Can be used to use your own formatting function. @@ -151,6 +160,7 @@ type NavigationProps = { export default function Navigation({ activeStartDate, + calendarType, drillUp, formatMonthYear = defaultFormatMonthYear, formatYear = defaultFormatYear, @@ -176,20 +186,20 @@ export default function Navigation({ const drillUpAvailable = views.indexOf(view) > 0; const shouldShowPrevNext2Buttons = view !== 'century'; - const previousActiveStartDate = getBeginPrevious(view, activeStartDate); + const previousActiveStartDate = getBeginPrevious(view, activeStartDate, calendarType); const previousActiveStartDate2 = shouldShowPrevNext2Buttons - ? getBeginPrevious2(view, activeStartDate) + ? getBeginPrevious2(view, activeStartDate, calendarType) : undefined; - const nextActiveStartDate = getBeginNext(view, activeStartDate); + const nextActiveStartDate = getBeginNext(view, activeStartDate, calendarType); const nextActiveStartDate2 = shouldShowPrevNext2Buttons - ? getBeginNext2(view, activeStartDate) + ? getBeginNext2(view, activeStartDate, calendarType) : undefined; const prevButtonDisabled = (() => { if (previousActiveStartDate.getFullYear() < 0) { return true; } - const previousActiveEndDate = getEndPrevious(view, activeStartDate); + const previousActiveEndDate = getEndPrevious(view, activeStartDate, calendarType); return minDate && minDate >= previousActiveEndDate; })(); @@ -199,7 +209,7 @@ export default function Navigation({ if ((previousActiveStartDate2 as Date).getFullYear() < 0) { return true; } - const previousActiveEndDate = getEndPrevious2(view, activeStartDate); + const previousActiveEndDate = getEndPrevious2(view, activeStartDate, calendarType); return minDate && minDate >= previousActiveEndDate; })(); @@ -224,7 +234,7 @@ export default function Navigation({ setActiveStartDate(nextActiveStartDate2 as Date, 'next2'); } - function renderLabel(date: Date) { + function renderLabel(date: Date, calendarType?: CalendarType) { const label = (() => { switch (view) { case 'century': @@ -235,6 +245,13 @@ export default function Navigation({ return formatYear(locale, date); case 'month': return formatMonthYear(locale, date); + case 'week': { + // start + const startDate = getWeekStartDate(date, calendarType); + // end + const endDate = getWeekEndDate(date, calendarType); + return `${formatShortDayMonthYear(locale, startDate)}-${formatShortDayMonthYear(locale, endDate)}`; + } default: throw new Error(`Invalid view: ${view}.`); } @@ -263,13 +280,13 @@ export default function Navigation({ type="button" > - {renderLabel(activeStartDate)} + {renderLabel(activeStartDate, calendarType)} {showDoubleView ? ( <> - {renderLabel(nextActiveStartDate)} + {renderLabel(nextActiveStartDate, calendarType)} ) : null} diff --git a/packages/react-calendar/src/WeekView.spec.tsx b/packages/react-calendar/src/WeekView.spec.tsx new file mode 100644 index 00000000..c010c1dc --- /dev/null +++ b/packages/react-calendar/src/WeekView.spec.tsx @@ -0,0 +1,224 @@ +import { describe, expect, it } from 'vitest'; + +import { render } from '@testing-library/react'; + +import WeekView from './WeekView.js'; +import { formatShortWeekday } from './shared/dateFormatter.js'; + +const { format } = new Intl.DateTimeFormat('en-US', { + day: 'numeric', + month: 'long', + year: 'numeric', +}); + +describe('WeekView', () => { + const defaultProps = { + activeStartDate: new Date(2017, 0, 1), + valueType: 'day', + } satisfies React.ComponentProps; + + it('renders proper view when given activeStartDate', () => { + const activeStartDate = new Date(2017, 0, 1); + + const { container } = render( + , + ); + + const firstDayTile = container.querySelector('.react-calendar__tile') as HTMLDivElement; + const firstDayTileTimeAbbr = firstDayTile.querySelector('abbr'); + + expect(firstDayTileTimeAbbr).toHaveAccessibleName(format(activeStartDate)); + }); + + it('applies tileClassName to its tiles when given a string', () => { + const tileClassName = 'testClassName'; + + const { container } = render( + , + ); + + const firstDayTile = container.querySelector('.react-calendar__tile'); + + expect(firstDayTile).toHaveClass(tileClassName); + }); + + it('applies tileClassName to its tiles conditionally when given a function that returns a string', () => { + const activeStartDate = new Date(2017, 0, 1); + const tileClassNameFn = ({ date }: { date: Date }) => { + if (date.getTime() === activeStartDate.getTime()) { + return 'firstDayOfTheMonth'; + } + + return null; + }; + + const { container } = render( + , + ); + + const tiles = container.querySelectorAll('.react-calendar__tile'); + + const firstDayTile = tiles[0]; + const secondDayTile = tiles[1]; + + expect(firstDayTile).toHaveClass('firstDayOfTheMonth'); + expect(secondDayTile).not.toHaveClass('firstDayOfTheMonth'); + }); + + it('renders tileContent in its tiles when given a node', () => { + const tileContent =
; + + const { container } = render( + , + ); + + const firstDayTile = container.querySelector('.react-calendar__tile') as HTMLDivElement; + const firstDayTileContent = firstDayTile.querySelector('.testContent'); + + expect(firstDayTileContent).toBeInTheDocument(); + }); + + it('renders tileContent in its tiles conditionally when given a function that returns a node', () => { + const activeStartDate = new Date(2017, 0, 1); + const tileContentFn = ({ date }: { date: Date }) => { + if (date.getTime() === activeStartDate.getTime()) { + return
; + } + + return null; + }; + + const { container } = render( + , + ); + + const tiles = container.querySelectorAll('.react-calendar__tile'); + + const firstDayTile = tiles[0] as HTMLDivElement; + const secondDayTile = tiles[1] as HTMLDivElement; + + const firstDayTileContent = firstDayTile.querySelector('.testContent'); + const secondDayTileContent = secondDayTile.querySelector('.testContent'); + + expect(firstDayTileContent).toBeInTheDocument(); + expect(secondDayTileContent).not.toBeInTheDocument(); + }); + + it('does not render WeekNumbers component by default', () => { + const { container } = render(); + + const weekNumbers = container.querySelector('.react-calendar__month-view__weekNumbers'); + + expect(weekNumbers).not.toBeInTheDocument(); + }); + + it('renders WeekNumbers component by given showWeekNumbers flag', () => { + const { container } = render(); + + const weekNumbers = container.querySelector('.react-calendar__month-view__weekNumbers'); + + expect(weekNumbers).toBeInTheDocument(); + }); + + it('passes calendarType to Weekdays component', () => { + const calendarType = 'iso8601'; + + const { container } = render(); + + const firstWeekday = container.querySelector('.react-calendar__month-view__weekdays__weekday'); + + // ISO 8601 calendar week starts on Monday + expect(firstWeekday).toHaveTextContent('Mon'); + }); + + it('passes derived calendarType to Weekdays component if calendarType is not given', () => { + const locale = 'en-US'; + + const { container } = render(); + + const firstWeekday = container.querySelector('.react-calendar__month-view__weekdays__weekday'); + + // US calendar week starts on Sunday + expect(firstWeekday).toHaveTextContent('Sun'); + }); + + it('passes formatShortWeekday to Weekdays component', () => { + const formatShortWeekday = () => 'Wkdy'; + + const { container } = render( + , + ); + + const weekdays = container.querySelector('.react-calendar__month-view__weekdays'); + + expect(weekdays).toHaveTextContent('Wkdy'); + }); + + it('passes formatWeekday to Weekdays component', () => { + const formatWeekday = () => 'Weekday'; + + const { container } = render(); + + const weekday = container.querySelector( + '.react-calendar__month-view__weekdays__weekday', + ) as HTMLDivElement; + const abbr = weekday.querySelector('abbr'); + + expect(abbr).toHaveAccessibleName('Weekday'); + }); + + it('passes calendarType to Days component', () => { + const calendarType = 'iso8601'; + + const { container } = render( + , + ); + + const firstDay = container.querySelector('.react-calendar__month-view__days__day'); + + // ISO 8601 calendar week starts on Monday + expect(firstDay).toHaveTextContent('Mon'); + }); + + it('passes derived calendarType to Days component if calendarType is not given', () => { + const locale = 'en-US'; + + const { container } = render( + , + ); + + const firstDay = container.querySelector('.react-calendar__month-view__days__day'); + + // US calendar week starts on Sunday + expect(firstDay).toHaveTextContent('Sun'); + }); + + it('displays month view with custom day formatting', () => { + const formatDay = () => 'Day'; + + const { container } = render(); + + const day = container.querySelector('.react-calendar__month-view__days__day'); + + expect(day).toHaveTextContent('Day'); + }); +}); diff --git a/packages/react-calendar/src/WeekView.tsx b/packages/react-calendar/src/WeekView.tsx new file mode 100644 index 00000000..baed3b8d --- /dev/null +++ b/packages/react-calendar/src/WeekView.tsx @@ -0,0 +1,113 @@ +import clsx from 'clsx'; + +import Days from './WeekView/Days.js'; +import Weekdays from './WeekView/Weekdays.js'; +import WeekNumbers from './WeekView/WeekNumbers.js'; + +import { CALENDAR_TYPES, CALENDAR_TYPE_LOCALES } from './shared/const.js'; + +import type { CalendarType } from './shared/types.js'; + +function getCalendarTypeFromLocale(locale: string | undefined): CalendarType { + if (locale) { + for (const [calendarType, locales] of Object.entries(CALENDAR_TYPE_LOCALES)) { + if (locales.includes(locale)) { + return calendarType as CalendarType; + } + } + } + + return CALENDAR_TYPES.ISO_8601; +} + +type WeekViewProps = { + /** + * Type of calendar that should be used. Can be `'gregory`, `'hebrew'`, `'islamic'`, `'iso8601'`. Setting to `"gregory"` or `"hebrew"` will change the first day of the week to Sunday. Setting to `"islamic"` will change the first day of the week to Saturday. Setting to `"islamic"` or `"hebrew"` will make weekends appear on Friday to Saturday. + * + * @example 'iso8601' + */ + calendarType?: CalendarType; + /** + * Whether week numbers shall be shown at the left of WeekView or not. + * + * @default false + * @example true + */ + showWeekNumbers?: boolean; +} & Omit< + React.ComponentProps & + React.ComponentProps & + React.ComponentProps, + 'calendarType' +>; + +/** + * Displays a given month. + */ +export default function WeekView(props: WeekViewProps): React.ReactElement { + const { activeStartDate, locale, onMouseLeave, showFixedNumberOfWeeks } = props; + const { + calendarType = getCalendarTypeFromLocale(locale), + formatShortWeekday, + formatWeekday, + onClickWeekNumber, + showWeekNumbers, + ...childProps + } = props; + + function renderWeekdays() { + return ( + + ); + } + + function renderWeekNumbers() { + if (!showWeekNumbers) { + return null; + } + + return ( + + ); + } + + function renderDays() { + return ; + } + + const className = 'react-week-view'; + + return ( +
+
+ {renderWeekNumbers()} +
+ {renderWeekdays()} + {renderDays()} +
+
+
+ ); +} diff --git a/packages/react-calendar/src/WeekView/Day.spec.tsx b/packages/react-calendar/src/WeekView/Day.spec.tsx new file mode 100644 index 00000000..13dba760 --- /dev/null +++ b/packages/react-calendar/src/WeekView/Day.spec.tsx @@ -0,0 +1,203 @@ +import { describe, expect, it, vi } from 'vitest'; + +import { fireEvent, render } from '@testing-library/react'; + +import Day from './Day.js'; + +const tileProps = { + activeStartDate: new Date(2018, 0, 1), + calendarType: 'iso8601', + classes: ['react-calendar__tile'], + currentMonthIndex: 0, + date: new Date(2018, 0, 1), +} satisfies React.ComponentProps; + +describe('WeekViewDay', () => { + it('applies given classNames properly', () => { + const { container } = render( + 'testFunctionClassName'} + />, + ); + + const wrapper = container.querySelector('.react-calendar__tile'); + + expect(wrapper).toHaveClass('react-calendar__tile'); + expect(wrapper).toHaveClass('react-calendar__tile--flag'); + expect(wrapper).toHaveClass('react-calendar__month-view__days__day'); + expect(wrapper).toHaveClass('testFunctionClassName'); + }); + + it('applies additional classNames for weekends', () => { + const { container } = render( + , + ); + + const wrapper = container.querySelector('.react-calendar__tile'); + + expect(wrapper).toHaveClass('react-calendar__month-view__days__day--weekend'); + }); + + it('applies additional classNames for neighboring months', () => { + const { container } = render(); + + const wrapper = container.querySelector('.react-calendar__tile'); + + expect(wrapper).toHaveClass('react-calendar__month-view__days__day--neighboringMonth'); + }); + + it('renders component with proper abbreviation', () => { + const { container } = render(); + + const abbr = container.querySelector('abbr'); + + expect(abbr).toBeInTheDocument(); + expect(abbr).toHaveAccessibleName('January 1, 2018'); + expect(container).toHaveTextContent('1'); + }); + + it("is disabled when date is before beginning of minDate's day", () => { + const { container } = render( + , + ); + + const tile = container.querySelector('.react-calendar__tile'); + + expect(tile).toBeDisabled(); + }); + + it("is not disabled when date is after beginning of minDate's day", () => { + const { container } = render( + , + ); + + const tile = container.querySelector('.react-calendar__tile'); + + expect(tile).toBeEnabled(); + }); + + it("is disabled when date is after end of maxDate's day", () => { + const { container } = render( + , + ); + + const tile = container.querySelector('.react-calendar__tile'); + + expect(tile).toBeDisabled(); + }); + + it("is not disabled when date is before end of maxDate's day", () => { + const { container } = render( + , + ); + + const tile = container.querySelector('.react-calendar__tile'); + + expect(tile).toBeEnabled(); + }); + + it('calls onClick callback when clicked and sends proper date as an argument', () => { + const date = new Date(2018, 0, 1); + const onClick = vi.fn(); + + const { container } = render(); + + fireEvent.click(container.querySelector('.react-calendar__tile') as HTMLDivElement); + + expect(onClick).toHaveBeenCalled(); + expect(onClick).toHaveBeenCalledWith(date, expect.any(Object)); + }); + + it('calls onMouseOver callback when hovered and sends proper date as an argument', () => { + const date = new Date(2018, 0, 1); + const onMouseOver = vi.fn(); + + const { container } = render(); + + const tile = container.querySelector('.react-calendar__tile') as HTMLDivElement; + fireEvent.mouseOver(tile); + + expect(onMouseOver).toHaveBeenCalled(); + expect(onMouseOver).toHaveBeenCalledWith(date); + }); + + it('calls onMouseOver callback when focused and sends proper date as an argument', () => { + const date = new Date(2018, 0, 1); + const onMouseOver = vi.fn(); + + const { container } = render(); + + const tile = container.querySelector('.react-calendar__tile') as HTMLDivElement; + fireEvent.focus(tile); + + expect(onMouseOver).toHaveBeenCalled(); + expect(onMouseOver).toHaveBeenCalledWith(date); + }); + + it('renders tileContent properly', () => { + const { container } = render( + } />, + ); + + const testContent = container.querySelector('.testContent'); + + expect(testContent).toBeInTheDocument(); + }); + + it('renders tileContent function result properly and sends proper arguments to it', () => { + const date = new Date(2018, 0, 1); + const tileContent = vi.fn(); + tileContent.mockReturnValue(
); + + const { container } = render(); + + const testContent = container.querySelector('.testContent'); + + expect(tileContent).toHaveBeenCalled(); + expect(tileContent).toHaveBeenCalledWith({ + activeStartDate: tileProps.activeStartDate, + date, + view: 'month', + }); + expect(testContent).toBeInTheDocument(); + }); + + it('uses formatDay if given', () => { + const locale = 'en-US'; + const date = new Date(2018, 0, 1); + const formatDay = vi.fn(); + formatDay.mockReturnValue('Mock format'); + + const { container } = render( + , + ); + + const tile = container.querySelector('.react-calendar__tile'); + + expect(formatDay).toHaveBeenCalled(); + expect(formatDay).toHaveBeenCalledWith(locale, date); + expect(tile).toHaveTextContent('Mock format'); + }); + + it('uses formatLongDate if given', () => { + const locale = 'en-US'; + const date = new Date(2018, 0, 1); + const formatLongDate = vi.fn(); + formatLongDate.mockReturnValue('Mock format'); + + const { container } = render( + , + ); + + const abbr = container.querySelector('abbr'); + + expect(formatLongDate).toHaveBeenCalled(); + expect(formatLongDate).toHaveBeenCalledWith(locale, date); + expect(abbr).toHaveAccessibleName('Mock format'); + }); +}); diff --git a/packages/react-calendar/src/WeekView/Day.tsx b/packages/react-calendar/src/WeekView/Day.tsx new file mode 100644 index 00000000..317740c9 --- /dev/null +++ b/packages/react-calendar/src/WeekView/Day.tsx @@ -0,0 +1,81 @@ +import { getDayStart, getDayEnd } from '@wojtekmaj/date-utils'; + +import Tile from '../Tile.js'; + +import { isWeekend } from '../shared/dates.js'; +import { + formatDay as defaultFormatDay, + formatLongDate as defaultFormatLongDate, +} from '../shared/dateFormatter.js'; + +import type { CalendarType } from '../shared/types.js'; + +const className = 'react-calendar__month-view__days__day'; + +type WeekViewDayProps = { + /** + * Type of calendar that should be used. Can be `'gregory`, `'hebrew'`, `'islamic'`, `'iso8601'`. Setting to `"gregory"` or `"hebrew"` will change the first day of the week to Sunday. Setting to `"islamic"` will change the first day of the week to Saturday. Setting to `"islamic"` or `"hebrew"` will make weekends appear on Friday to Saturday. + * + * @example 'iso8601' + */ + calendarType: CalendarType | undefined; + classes?: string[]; + currentMonthIndex: number; + /** + * Function called to override default formatting of day tile labels. Can be used to use your own formatting function. + * + * @example (locale, date) => formatDate(date, 'd') + */ + formatDay?: typeof defaultFormatDay; + /** + * Function called to override default formatting of day tile `abbr` labels. Can be used to use your own formatting function. + * + * @example (locale, date) => formatDate(date, 'dd MMM YYYY') + */ + formatLongDate?: typeof defaultFormatLongDate; +} & Omit< + React.ComponentProps, + 'children' | 'formatAbbr' | 'maxDateTransform' | 'minDateTransform' | 'view' +>; + +export default function WeekViewDay({ + calendarType, + classes = [], + currentMonthIndex, + formatDay = defaultFormatDay, + formatLongDate = defaultFormatLongDate, + ...otherProps +}: WeekViewDayProps): React.ReactElement { + const { date, locale } = otherProps; + + const classesProps: string[] = []; + + if (classes) { + classesProps.push(...classes); + } + + if (className) { + classesProps.push(className); + } + + if (isWeekend(date, calendarType)) { + classesProps.push(`${className}--weekend`); + } + + if (date.getMonth() !== currentMonthIndex) { + classesProps.push(`${className}--neighboringMonth`); + } + + return ( + + {formatDay(locale, date)} + + ); +} diff --git a/packages/react-calendar/src/WeekView/Days.tsx b/packages/react-calendar/src/WeekView/Days.tsx new file mode 100644 index 00000000..313b304d --- /dev/null +++ b/packages/react-calendar/src/WeekView/Days.tsx @@ -0,0 +1,81 @@ +import { getYear, getMonth, getDayStart, getDate } from '@wojtekmaj/date-utils'; +import TileGroup from '../TileGroup.js'; +import Day from './Day.js'; + +import type { CalendarType } from '../shared/types.js'; +import {getWeekEndDate} from '../shared/dates.js'; + +type WeekViewDaysProps = { + /** + * The beginning of a period that shall be displayed. + * + * @example new Date(2017, 0, 1) + */ + activeStartDate: Date; + /** + * Type of calendar that should be used. Can be `'gregory`, `'hebrew'`, `'islamic'`, `'iso8601'`. Setting to `"gregory"` or `"hebrew"` will change the first day of the week to Sunday. Setting to `"islamic"` will change the first day of the week to Saturday. Setting to `"islamic"` or `"hebrew"` will make weekends appear on Friday to Saturday. + * + * @example 'iso8601' + */ + calendarType: CalendarType | undefined; +} & Omit< + React.ComponentProps, + 'dateTransform' | 'dateType' | 'end' | 'renderTile' | 'start' +> & + Omit, 'classes' | 'currentMonthIndex' | 'date' | 'point'>; + +export default function WeekViewDays(props: WeekViewDaysProps): React.ReactElement { + const { activeStartDate, calendarType, hover, value, valueType, ...otherProps } = props; + + const year = getYear(activeStartDate); + const monthIndex = getMonth(activeStartDate); + const offset = 0; + const start = getDate(activeStartDate); + const end = start + 6; + + const endDate = getWeekEndDate(activeStartDate, calendarType); + const endMonthIndex = getMonth(endDate); + const dateMap = new Map(); + + for (let i = 0; i <= 6; i++) { + const d = new Date(activeStartDate.getTime()); + const day = d.getDate() + i; + d.setDate(day); + getDayStart(d); + dateMap.set(day, d); + } + + return ( + { + let value = dateMap.get(day); + if (value) { + return value; + } + value = new Date(); + value.setFullYear(year, monthIndex, day); + return getDayStart(value); + }} + dateType="day" + hover={hover} + end={end} + renderTile={({ date, ...otherTileProps }) => ( + + )} + offset={offset} + start={start} + value={value} + valueType={valueType} + /> + ); +} diff --git a/packages/react-calendar/src/WeekView/WeekNumber.spec.tsx b/packages/react-calendar/src/WeekView/WeekNumber.spec.tsx new file mode 100644 index 00000000..cc6386e6 --- /dev/null +++ b/packages/react-calendar/src/WeekView/WeekNumber.spec.tsx @@ -0,0 +1,37 @@ +import { describe, expect, it } from 'vitest'; +import { render } from '@testing-library/react'; + +import WeekNumber from './WeekNumber.js'; + +describe(' component', () => { + const defaultProps = { + date: new Date(2019, 0, 1), + weekNumber: 1, + } satisfies React.ComponentProps; + + it('renders div by default', () => { + const { container } = render(); + + expect(container.querySelector('div')).toBeInTheDocument(); + }); + + it('renders button given onClickWeekNumber prop', () => { + const onClickWeekNumber = () => { + // Intentionally empty + }; + + const { container } = render( + , + ); + + expect(container.querySelector('button')).toBeInTheDocument(); + }); + + it('renders weekNumber properly', () => { + const weekNumber = 42; + + const { container } = render(); + + expect(container).toHaveTextContent(`${weekNumber}`); + }); +}); diff --git a/packages/react-calendar/src/WeekView/WeekNumber.tsx b/packages/react-calendar/src/WeekView/WeekNumber.tsx new file mode 100644 index 00000000..38f1a86b --- /dev/null +++ b/packages/react-calendar/src/WeekView/WeekNumber.tsx @@ -0,0 +1,48 @@ +import type { OnClickWeekNumberFunc } from '../shared/types.js'; + +const className = 'react-calendar__tile'; + +type ButtonProps = Omit, 'onClick'> & { + onClickWeekNumber: OnClickWeekNumberFunc; +}; + +type DivProps = React.HTMLAttributes & { + onClickWeekNumber?: undefined; +}; + +type WeekNumberProps = (T extends OnClickWeekNumberFunc + ? ButtonProps + : DivProps) & { + date: Date; + weekNumber: number; +}; + +export default function WeekViewWeekNumber(props: WeekNumberProps): React.ReactElement { + const { onClickWeekNumber, weekNumber } = props; + + const children = {weekNumber}; + + if (onClickWeekNumber) { + const { date, onClickWeekNumber, weekNumber, ...otherProps } = props; + + return ( + + ); + // biome-ignore lint/style/noUselessElse: TypeScript is unhappy if we remove this else + } else { + const { date, onClickWeekNumber, weekNumber, ...otherProps } = props; + + return ( +
+ {children} +
+ ); + } +} diff --git a/packages/react-calendar/src/WeekView/WeekNumbers.spec.tsx b/packages/react-calendar/src/WeekView/WeekNumbers.spec.tsx new file mode 100644 index 00000000..d59d1818 --- /dev/null +++ b/packages/react-calendar/src/WeekView/WeekNumbers.spec.tsx @@ -0,0 +1,137 @@ +import { describe, expect, it, vi } from 'vitest'; +import { fireEvent, render } from '@testing-library/react'; + +import WeekNumbers from './WeekNumbers.js'; + +describe('.react-calendar__month-view__weekNumbers', () => { + const defaultProps = { + activeStartDate: new Date(2017, 0, 1), + } satisfies Partial>; + + it('renders proper weekNumbers for a year that starts in week 1 (ISO 8601)', () => { + const { container } = render( + , + ); + + const weekNumbers = container.querySelectorAll('.react-calendar__tile'); + + expect(weekNumbers).toHaveLength(5); + expect(weekNumbers[0]).toHaveTextContent('1'); + }); + + it('renders proper weekNumbers for a year that starts on week 52 (ISO 8601)', () => { + const { container } = render( + , + ); + + const weekNumbers = container.querySelectorAll('.react-calendar__tile'); + + expect(weekNumbers).toHaveLength(6); + expect(weekNumbers[0]).toHaveTextContent('52'); + }); + + it('renders proper weekNumbers for a year that starts on week 53 (ISO 8601)', () => { + const { container } = render( + , + ); + + const weekNumbers = container.querySelectorAll('.react-calendar__tile'); + + expect(weekNumbers).toHaveLength(5); + expect(weekNumbers[0]).toHaveTextContent('53'); + }); + + it('renders proper weekNumbers for a year that starts in week 1 (US)', () => { + const { container } = render( + , + ); + + const weekNumbers = container.querySelectorAll('.react-calendar__tile'); + + expect(weekNumbers).toHaveLength(5); + expect(weekNumbers[0]).toHaveTextContent('1'); + }); + + it('renders proper weekNumbers given showFixedNumberOfWeeks flag', () => { + // Same config as in first test which gives 5 weeks, except for the flag + const { container } = render( + , + ); + + const weekNumbers = container.querySelectorAll('.react-calendar__tile'); + + expect(weekNumbers).toHaveLength(6); + expect(weekNumbers[0]).toHaveTextContent('1'); + }); + + it('renders static divs as children when not given onClickWeekNumber', () => { + const { container } = render(); + + const children = container.querySelectorAll('div.react-calendar__tile'); + + expect(children).toHaveLength(6); + }); + + it('renders buttons as children when given onClickWeekNumber', () => { + const { container } = render( + , + ); + + const children = container.querySelectorAll('button.react-calendar__tile'); + + expect(children).toHaveLength(6); + }); + + it('calls onClickWeekNumber function with proper arguments when clicked a week number (ISO 8601)', () => { + const onClickWeekNumber = vi.fn(); + const { container } = render( + , + ); + + const firstChild = container.querySelector('button.react-calendar__tile') as HTMLButtonElement; + fireEvent.click(firstChild); + + expect(onClickWeekNumber).toHaveBeenCalledWith(52, new Date(2016, 11, 26), expect.any(Object)); + }); + + it('calls onClickWeekNumber function with proper arguments when clicked a week number (US)', () => { + const onClickWeekNumber = vi.fn(); + const { container } = render( + , + ); + + const firstChild = container.querySelector('button.react-calendar__tile') as HTMLButtonElement; + fireEvent.click(firstChild); + + expect(onClickWeekNumber).toHaveBeenCalledWith(1, new Date(2017, 0, 1), expect.any(Object)); + }); +}); diff --git a/packages/react-calendar/src/WeekView/WeekNumbers.tsx b/packages/react-calendar/src/WeekView/WeekNumbers.tsx new file mode 100644 index 00000000..1dbaa29f --- /dev/null +++ b/packages/react-calendar/src/WeekView/WeekNumbers.tsx @@ -0,0 +1,88 @@ +import { getYear, getMonth, getDate } from '@wojtekmaj/date-utils'; + +import WeekNumber from './WeekNumber.js'; +import Flex from '../Flex.js'; + +import { getBeginOfWeek, getWeekNumber } from '../shared/dates.js'; + +import type { CalendarType, OnClickWeekNumberFunc } from '../shared/types.js'; + +type WeekNumbersProps = { + /** + * The beginning of a period that shall be displayed. + * + * @example new Date(2017, 0, 1) + */ + activeStartDate: Date; + /** + * Type of calendar that should be used. Can be `'gregory`, `'hebrew'`, `'islamic'`, `'iso8601'`. Setting to `"gregory"` or `"hebrew"` will change the first day of the week to Sunday. Setting to `"islamic"` will change the first day of the week to Saturday. Setting to `"islamic"` or `"hebrew"` will make weekends appear on Friday to Saturday. + * + * @example 'iso8601' + */ + calendarType: CalendarType | undefined; + /** + * Function called when the user clicks a week number. + * + * @example (weekNumber, date, event) => alert('Clicked week: ', weekNumber, 'that starts on: ', date) + */ + onClickWeekNumber?: OnClickWeekNumberFunc; + onMouseLeave?: () => void; + /** + * Whether to always show fixed number of weeks (6). Forces `showNeighboringMonth` prop to be `true`. + * + * @default false + * @example true + */ + showFixedNumberOfWeeks?: boolean; +}; + +export default function WeekViewWeekNumbers(props: WeekNumbersProps): React.ReactElement { + const { activeStartDate, calendarType, onClickWeekNumber, onMouseLeave } = + props; + + const numberOfWeeks = (() => { + return 1; + })(); + + const dates = (() => { + const year = getYear(activeStartDate); + const monthIndex = getMonth(activeStartDate); + const day = getDate(activeStartDate); + + const result = []; + for (let index = 0; index < numberOfWeeks; index += 1) { + result.push(getBeginOfWeek(new Date(year, monthIndex, day + index * 7), calendarType)); + } + return result; + })(); + + const weekNumbers = dates.map((date) => getWeekNumber(date, calendarType)); + + return ( + + {weekNumbers.map((weekNumber, weekIndex) => { + const date = dates[weekIndex]; + + if (!date) { + throw new Error('date is not defined'); + } + + return ( + + ); + })} + + ); +} diff --git a/packages/react-calendar/src/WeekView/Weekdays.spec.tsx b/packages/react-calendar/src/WeekView/Weekdays.spec.tsx new file mode 100644 index 00000000..f7ba1acd --- /dev/null +++ b/packages/react-calendar/src/WeekView/Weekdays.spec.tsx @@ -0,0 +1,53 @@ +import { describe, expect, it } from 'vitest'; +import { render } from '@testing-library/react'; + +import Weekdays from './Weekdays.js'; + +describe('WeekViewWeekDays', () => { + const defaultProps = { + calendarType: 'iso8601', + } satisfies React.ComponentProps; + + it('renders proper weekdays (ISO 8601)', () => { + const { container } = render(); + + const weekdays = container.querySelectorAll('.react-calendar__month-view__weekdays__weekday'); + const [firstWeekday] = weekdays as unknown as [HTMLDivElement]; + const firstWeekdayAbbr = firstWeekday.querySelector('abbr'); + + expect(weekdays).toHaveLength(7); + expect(firstWeekday).toHaveTextContent('Mon'); + expect(firstWeekdayAbbr).toHaveAccessibleName('Monday'); + }); + + it('renders proper weekdays (US)', () => { + const { container } = render(); + + const weekdays = container.querySelectorAll('.react-calendar__month-view__weekdays__weekday'); + const [firstWeekday] = weekdays as unknown as [HTMLDivElement]; + const firstWeekdayAbbr = firstWeekday.querySelector('abbr'); + + expect(weekdays).toHaveLength(7); + expect(firstWeekday).toHaveTextContent('Sun'); + expect(firstWeekdayAbbr).toHaveAccessibleName('Sunday'); + }); + + it('renders weekdays with custom weekdays formatting', () => { + const { container } = render( 'Wkdy'} />); + + const firstWeekday = container.querySelector('.react-calendar__month-view__weekdays__weekday'); + + expect(firstWeekday).toHaveTextContent('Wkdy'); + }); + + it('renders weekdays with custom weekdays formatting', () => { + const { container } = render( 'Weekday'} />); + + const firstWeekday = container.querySelector( + '.react-calendar__month-view__weekdays__weekday', + ) as HTMLDivElement; + const firstWeekdayAbbr = firstWeekday.querySelector('abbr'); + + expect(firstWeekdayAbbr).toHaveAccessibleName('Weekday'); + }); +}); diff --git a/packages/react-calendar/src/WeekView/Weekdays.tsx b/packages/react-calendar/src/WeekView/Weekdays.tsx new file mode 100644 index 00000000..e2a85868 --- /dev/null +++ b/packages/react-calendar/src/WeekView/Weekdays.tsx @@ -0,0 +1,91 @@ +import clsx from 'clsx'; +import { getYear, getMonth, getMonthStart } from '@wojtekmaj/date-utils'; + +import Flex from '../Flex.js'; + +import { getDayOfWeek, isCurrentDayOfWeek, isWeekend } from '../shared/dates.js'; +import { + formatShortWeekday as defaultFormatShortWeekday, + formatWeekday as defaultFormatWeekday, +} from '../shared/dateFormatter.js'; + +import type { CalendarType } from '../shared/types.js'; + +const className = 'react-calendar__month-view__weekdays'; +const weekdayClassName = `${className}__weekday`; + +type WeekViewWeekDays = { + /** + * Type of calendar that should be used. Can be `'gregory`, `'hebrew'`, `'islamic'`, `'iso8601'`. Setting to `"gregory"` or `"hebrew"` will change the first day of the week to Sunday. Setting to `"islamic"` will change the first day of the week to Saturday. Setting to `"islamic"` or `"hebrew"` will make weekends appear on Friday to Saturday. + * + * @example 'iso8601' + */ + calendarType: CalendarType | undefined; + /** + * Function called to override default formatting of weekday names (shortened). Can be used to use your own formatting function. + * + * @example (locale, date) => formatDate(date, 'dd') + */ + formatShortWeekday?: typeof defaultFormatShortWeekday; + /** + * Function called to override default formatting of weekday names. Can be used to use your own formatting function. + * + * @example (locale, date) => formatDate(date, 'dd') + */ + formatWeekday?: typeof defaultFormatWeekday; + /** + * Locale that should be used by the calendar. Can be any [IETF language tag](https://en.wikipedia.org/wiki/IETF_language_tag). **Note**: When using SSR, setting this prop may help resolving hydration errors caused by locale mismatch between server and client. + * + * @example 'hu-HU' + */ + locale?: string; + onMouseLeave?: () => void; +}; + +export default function WeekViewWeekdays(props: WeekViewWeekDays): React.ReactElement { + const { + calendarType, + formatShortWeekday = defaultFormatShortWeekday, + formatWeekday = defaultFormatWeekday, + locale, + onMouseLeave, + } = props; + + const anyDate = new Date(); + const beginOfMonth = getMonthStart(anyDate); + const year = getYear(beginOfMonth); + const monthIndex = getMonth(beginOfMonth); + + const weekdays = []; + + for (let weekday = 1; weekday <= 7; weekday += 1) { + const weekdayDate = new Date( + year, + monthIndex, + weekday - getDayOfWeek(beginOfMonth, calendarType), + ); + + const abbr = formatWeekday(locale, weekdayDate); + + weekdays.push( +
+ + {formatShortWeekday(locale, weekdayDate).replace('.', '')} + +
, + ); + } + + return ( + + {weekdays} + + ); +} diff --git a/packages/react-calendar/src/shared/dateFormatter.ts b/packages/react-calendar/src/shared/dateFormatter.ts index 3cb333ec..018f5386 100644 --- a/packages/react-calendar/src/shared/dateFormatter.ts +++ b/packages/react-calendar/src/shared/dateFormatter.ts @@ -65,6 +65,10 @@ const formatMonthYearOptions = { const formatShortWeekdayOptions = { weekday: 'short' } satisfies Intl.DateTimeFormatOptions; const formatWeekdayOptions = { weekday: 'long' } satisfies Intl.DateTimeFormatOptions; const formatYearOptions = { year: 'numeric' } satisfies Intl.DateTimeFormatOptions; +const formatShortDayMonthYearOptions = { + ...formatDateOptions, + month: 'short', +} satisfies Intl.DateTimeFormatOptions; export const formatDate: (locale: string | undefined, date: Date) => string = getSafeFormatter(formatDateOptions); @@ -76,6 +80,8 @@ export const formatMonth: (locale: string | undefined, date: Date) => string = getSafeFormatter(formatMonthOptions); export const formatMonthYear: (locale: string | undefined, date: Date) => string = getSafeFormatter(formatMonthYearOptions); +export const formatShortDayMonthYear: (locale: string | undefined, date: Date) => string = + getSafeFormatter(formatShortDayMonthYearOptions); export const formatShortWeekday: (locale: string | undefined, date: Date) => string = getSafeFormatter(formatShortWeekdayOptions); export const formatWeekday: (locale: string | undefined, date: Date) => string = diff --git a/packages/react-calendar/src/shared/dates.ts b/packages/react-calendar/src/shared/dates.ts index 5e03be19..40de6f32 100644 --- a/packages/react-calendar/src/shared/dates.ts +++ b/packages/react-calendar/src/shared/dates.ts @@ -28,6 +28,8 @@ import { getDayStart, getDayEnd, getDayRange, + getMonth, + getDate, } from '@wojtekmaj/date-utils'; import { CALENDAR_TYPES, WEEKDAYS } from './const.js'; @@ -146,6 +148,73 @@ export function getWeekNumber( return Math.round((beginOfWeek.getTime() - beginOfFirstWeek.getTime()) / (8.64e7 * 7)) + 1; } +/** + * Gets week start date according to ISO 8601 or US standard. + * In ISO 8601, Arabic and Hebrew week 1 is the one with January 4. + * In US calendar week 1 is the one with January 1. + * + * @param {Date} date Date. + * @param {CalendarType} [calendarType="iso8601"] Calendar type. + * @returns {Date} starting day of the week. + */ +export function getWeekStartDate( + date: Date, + calendarType: CalendarType = CALENDAR_TYPES.ISO_8601, +): Date { + const calendarTypeForWeekNumber = + calendarType === CALENDAR_TYPES.GREGORY ? CALENDAR_TYPES.GREGORY : CALENDAR_TYPES.ISO_8601; + const beginOfWeek = getBeginOfWeek(date, calendarType); + let year = getYear(date) + 1; + let dayInWeekOne: Date; + let beginOfFirstWeek: Date; + + // Look for the first week one that does not come after a given date + do { + dayInWeekOne = new Date(year, 0, calendarTypeForWeekNumber === CALENDAR_TYPES.ISO_8601 ? 4 : 1); + beginOfFirstWeek = getBeginOfWeek(dayInWeekOne, calendarType); + year -= 1; + } while (date < beginOfFirstWeek); + + return beginOfWeek; +} + +/** + * Gets week end date according to ISO 8601 or US standard. + * In ISO 8601, Arabic and Hebrew week 1 is the one with January 4. + * In US calendar week 1 is the one with January 1. + * + * @param {Date} date Date. + * @param {CalendarType} [calendarType="iso8601"] Calendar type. + * @returns {number} Week number. + */ +export function getWeekEndDate( + date: Date, + calendarType: CalendarType = CALENDAR_TYPES.ISO_8601, +): Date { + const beginOfWeek = getWeekStartDate(date, calendarType); + beginOfWeek.setDate(beginOfWeek.getDate() + 6); + return beginOfWeek; +} + +/** + * Gets week date according to ISO 8601 or US standard. + * In ISO 8601, Arabic and Hebrew week 1 is the one with January 4. + * In US calendar week 1 is the one with January 1. + * + * @param {Date} date Date. + * @param {CalendarType} [calendarType="iso8601"] Calendar type. + * @returns {number} Week number. + */ +export function getWeekDate( + date: Date, + calendarType: CalendarType = CALENDAR_TYPES.ISO_8601, + weekOffset = 0, +): Date { + const beginOfWeek = getWeekStartDate(date, calendarType); + beginOfWeek.setDate(beginOfWeek.getDate() + (weekOffset * 7)); + return beginOfWeek; +} + /** * Others */ @@ -157,7 +226,7 @@ export function getWeekNumber( * @param {Date} date Date. * @returns {Date} Beginning of a given range. */ -export function getBegin(rangeType: RangeType, date: Date): Date { +export function getBegin(rangeType: RangeType, date: Date, calendarType: CalendarType = CALENDAR_TYPES.ISO_8601): Date { switch (rangeType) { case 'century': return getCenturyStart(date); @@ -169,6 +238,9 @@ export function getBegin(rangeType: RangeType, date: Date): Date { return getMonthStart(date); case 'day': return getDayStart(date); + case 'week':{ + return getWeekStartDate(date, calendarType); + } default: throw new Error(`Invalid rangeType: ${rangeType}`); } @@ -181,7 +253,7 @@ export function getBegin(rangeType: RangeType, date: Date): Date { * @param {Date} date Date. * @returns {Date} Beginning of a previous given range. */ -export function getBeginPrevious(rangeType: RangeType, date: Date): Date { +export function getBeginPrevious(rangeType: RangeType, date: Date, calendarType: CalendarType = CALENDAR_TYPES.ISO_8601): Date { switch (rangeType) { case 'century': return getPreviousCenturyStart(date); @@ -191,6 +263,9 @@ export function getBeginPrevious(rangeType: RangeType, date: Date): Date { return getPreviousYearStart(date); case 'month': return getPreviousMonthStart(date); + case 'week': { + return getPreviousWeekStart(date, calendarType); + } default: throw new Error(`Invalid rangeType: ${rangeType}`); } @@ -203,7 +278,7 @@ export function getBeginPrevious(rangeType: RangeType, date: Date): Date { * @param {Date} date Date. * @returns {Date} Beginning of a next given range. */ -export function getBeginNext(rangeType: RangeType, date: Date): Date { +export function getBeginNext(rangeType: RangeType, date: Date, calendarType: CalendarType = CALENDAR_TYPES.ISO_8601): Date { switch (rangeType) { case 'century': return getNextCenturyStart(date); @@ -213,12 +288,15 @@ export function getBeginNext(rangeType: RangeType, date: Date): Date { return getNextYearStart(date); case 'month': return getNextMonthStart(date); + case 'week': { + return getNextWeekStart(date, calendarType); + } default: throw new Error(`Invalid rangeType: ${rangeType}`); } } -export function getBeginPrevious2(rangeType: RangeType, date: Date): Date { +export function getBeginPrevious2(rangeType: RangeType, date: Date, calendarType: CalendarType = CALENDAR_TYPES.ISO_8601): Date { switch (rangeType) { case 'decade': return getPreviousDecadeStart(date, -100); @@ -226,12 +304,15 @@ export function getBeginPrevious2(rangeType: RangeType, date: Date): Date { return getPreviousYearStart(date, -10); case 'month': return getPreviousMonthStart(date, -12); + case 'week': { + return getPreviousWeekStart(date, calendarType, -2); + } default: throw new Error(`Invalid rangeType: ${rangeType}`); } } -export function getBeginNext2(rangeType: RangeType, date: Date): Date { +export function getBeginNext2(rangeType: RangeType, date: Date, calendarType: CalendarType = CALENDAR_TYPES.ISO_8601): Date { switch (rangeType) { case 'decade': return getNextDecadeStart(date, 100); @@ -239,6 +320,9 @@ export function getBeginNext2(rangeType: RangeType, date: Date): Date { return getNextYearStart(date, 10); case 'month': return getNextMonthStart(date, 12); + case 'week': { + return getNextWeekStart(date, calendarType, 2); + } default: throw new Error(`Invalid rangeType: ${rangeType}`); } @@ -251,7 +335,7 @@ export function getBeginNext2(rangeType: RangeType, date: Date): Date { * @param {Date} date Date. * @returns {Date} End of a given range. */ -export function getEnd(rangeType: RangeType, date: Date): Date { +export function getEnd(rangeType: RangeType, date: Date, calendarType: CalendarType = CALENDAR_TYPES.ISO_8601): Date { switch (rangeType) { case 'century': return getCenturyEnd(date); @@ -263,6 +347,9 @@ export function getEnd(rangeType: RangeType, date: Date): Date { return getMonthEnd(date); case 'day': return getDayEnd(date); + case 'week': { + return getWeekEndDate(date, calendarType); + } default: throw new Error(`Invalid rangeType: ${rangeType}`); } @@ -275,7 +362,7 @@ export function getEnd(rangeType: RangeType, date: Date): Date { * @param {Date} date Date. * @returns {Date} End of a previous given range. */ -export function getEndPrevious(rangeType: RangeType, date: Date): Date { +export function getEndPrevious(rangeType: RangeType, date: Date, calendarType: CalendarType = CALENDAR_TYPES.ISO_8601): Date { switch (rangeType) { case 'century': return getPreviousCenturyEnd(date); @@ -285,12 +372,14 @@ export function getEndPrevious(rangeType: RangeType, date: Date): Date { return getPreviousYearEnd(date); case 'month': return getPreviousMonthEnd(date); + case 'week': + return getPreviousWeekEnd(date, calendarType); default: throw new Error(`Invalid rangeType: ${rangeType}`); } } -export function getEndPrevious2(rangeType: RangeType, date: Date): Date { +export function getEndPrevious2(rangeType: RangeType, date: Date, calendarType: CalendarType = CALENDAR_TYPES.ISO_8601): Date { switch (rangeType) { case 'decade': return getPreviousDecadeEnd(date, -100); @@ -298,6 +387,8 @@ export function getEndPrevious2(rangeType: RangeType, date: Date): Date { return getPreviousYearEnd(date, -10); case 'month': return getPreviousMonthEnd(date, -12); + case 'week': + return getPreviousWeekEnd(date, calendarType, -2); default: throw new Error(`Invalid rangeType: ${rangeType}`); } @@ -322,6 +413,8 @@ export function getRange(rangeType: RangeType, date: Date): [Date, Date] { return getMonthRange(date); case 'day': return getDayRange(date); + case 'week': + return getWeekRange(date); default: throw new Error(`Invalid rangeType: ${rangeType}`); } @@ -423,3 +516,65 @@ export function isWeekend( throw new Error('Unsupported calendar type.'); } } + + +/** + * Day + */ + +function makeGetEdgeOfNeighborDay(getEdgeOfPeriod: (date: Date) => Date, defaultOffset: number) { + return function makeGetEdgeOfNeighborDayInternal(date: Date, offset: number = defaultOffset) { + const year = getYear(date); + const month = getMonth(date); + const day = getDate(date) + offset; + const previousPeriod = new Date(); + previousPeriod.setFullYear(year, month, day); + previousPeriod.setHours(0, 0, 0, 0); + return getEdgeOfPeriod(previousPeriod); + }; +} + +/** + * Gets previous week start date from a given date. + * + * @param {Date} date Date to get previous week start from + * @returns {Date} Previous week start date + */ +export function getPreviousWeekStart(date: Date, calendarType: CalendarType = CALENDAR_TYPES.ISO_8601, offset = -1): Date { + return getWeekStartDate(getWeekDate(date, calendarType, offset), calendarType); +} + +/** + * Gets next week start date from a given date. + * + * @param {Date} date Date to get next wek start from + * @returns {Date} Next week start date + */ +export function getNextWeekStart(date: Date, calendarType: CalendarType = CALENDAR_TYPES.ISO_8601, offset = 1): Date { + return getWeekStartDate(getWeekDate(date, calendarType, offset), calendarType); +} + +/** + * Gets previous week end date from a given date. + * + * @param {DateLike} date Date to get previous week end from + * @returns {Date} Previous week end date + */ +export function getPreviousWeekEnd(date: Date, calendarType: CalendarType = CALENDAR_TYPES.ISO_8601, offset = -1): Date { + return getWeekEndDate(getWeekDate(date, calendarType, offset), calendarType); +} + + +function makeGetRange(getStart: (date: T) => Date, getEnd: (date: T) => Date) { + return function makeGetRangeInternal(date: T): [Date, Date] { + return [getStart(date), getEnd(date)]; + }; +} + +/** + * Gets week start and end dates from a given date. + * + * @param {DateLike} date Date to get day start and end from + * @returns {[Date, Date]} Day start and end dates + */ +export const getWeekRange: (date: Date) => [Date, Date] = makeGetRange(getDayEnd, makeGetEdgeOfNeighborDay(getDayEnd, 6)); diff --git a/packages/react-calendar/src/shared/types.ts b/packages/react-calendar/src/shared/types.ts index 78b8ab63..030040fe 100644 --- a/packages/react-calendar/src/shared/types.ts +++ b/packages/react-calendar/src/shared/types.ts @@ -8,19 +8,19 @@ export type CalendarType = (typeof CALENDAR_TYPES)[keyof typeof CALENDAR_TYPES]; export type ClassName = string | null | undefined | (string | null | undefined)[]; -export type Detail = 'century' | 'decade' | 'year' | 'month'; +export type Detail = 'century' | 'decade' | 'year' | 'month' | 'week'; type LooseValuePiece = string | Date | null; export type LooseValue = LooseValuePiece | Range; -export type RangeType = 'century' | 'decade' | 'year' | 'month' | 'day'; +export type RangeType = 'century' | 'decade' | 'year' | 'month' | 'week' | 'day'; type ValuePiece = Date | null; export type Value = ValuePiece | Range; -export type View = 'century' | 'decade' | 'year' | 'month'; +export type View = 'century' | 'decade' | 'year' | 'month' | 'week'; export type NavigationLabelArgs = { date: Date; diff --git a/sample/Sample.tsx b/sample/Sample.tsx index 59d1fb7d..044fcf01 100644 --- a/sample/Sample.tsx +++ b/sample/Sample.tsx @@ -18,7 +18,7 @@ export default function Sample() {
- +
diff --git a/test/CalendarTypeOptions.tsx b/test/CalendarTypeOptions.tsx new file mode 100644 index 00000000..83385f99 --- /dev/null +++ b/test/CalendarTypeOptions.tsx @@ -0,0 +1,46 @@ +import { CALENDAR_TYPES, isCalendarType, type CalendarType } from './shared/types.js'; + +const CALENDAR_TYPE_VALUES = Object.values(CALENDAR_TYPES); + +function upperCaseFirstLetter(str: string) { + return str.slice(0, 1).toUpperCase() + str.slice(1); +} + +type CalendarTypeOptionsProps = { + calendarType: CalendarType; + setCalendarType: (calendarType: CalendarType) => void; +}; + +export default function CalendarTypeOptions({ + calendarType, + setCalendarType, +}: CalendarTypeOptionsProps) { + function onChange(event: React.ChangeEvent) { + const { value } = event.target; + + if (isCalendarType(value)) { + setCalendarType(value); + } + } + + return ( +
+ Calendar Type + + {CALENDAR_TYPE_VALUES.map((calendar, index) => ( +
+ + {/* biome-ignore lint/a11y/noLabelWithoutControl: Pinky promise this label won't ever be empty */} + +
+ ))} +
+ ); +} diff --git a/test/MaxDetailOptions.tsx b/test/MaxDetailOptions.tsx index bf9043ef..b1fa840b 100644 --- a/test/MaxDetailOptions.tsx +++ b/test/MaxDetailOptions.tsx @@ -1,6 +1,6 @@ import type { View } from './shared/types.js'; -const allViews = ['century', 'decade', 'year', 'month'] as const; +const allViews = ['century', 'decade', 'year', 'month', 'week'] as const; function upperCaseFirstLetter(str: string) { return str.slice(0, 1).toUpperCase() + str.slice(1); diff --git a/test/MinDetailOptions.tsx b/test/MinDetailOptions.tsx index 962f28e1..731e6b81 100644 --- a/test/MinDetailOptions.tsx +++ b/test/MinDetailOptions.tsx @@ -1,6 +1,6 @@ import type { View } from './shared/types.js'; -const allViews = ['century', 'decade', 'year', 'month'] as const; +const allViews = ['century', 'decade', 'year', 'month', 'week'] as const; function upperCaseFirstLetter(str: string) { return str.slice(0, 1).toUpperCase() + str.slice(1); diff --git a/test/Test.tsx b/test/Test.tsx index 820ca6ed..adf4e29f 100644 --- a/test/Test.tsx +++ b/test/Test.tsx @@ -14,11 +14,15 @@ import { formatDate } from './shared/dateFormatter.js'; import './Test.css'; import type { LooseValue, Value, View } from './shared/types.js'; +import type {CalendarType} from 'react-calendar/src/index.js'; +import CalendarTypeOptions from './CalendarTypeOptions.js'; const now = new Date(); const tileClassName = ({ date, view }: { date: Date; view: View }) => { switch (view) { + case 'week': + return date.getDay() === 0 || date.getDay() === 6 ? 'red' : null; case 'month': return date.getDay() === 0 || date.getDay() === 6 ? 'red' : null; case 'year': @@ -34,6 +38,12 @@ const tileClassName = ({ date, view }: { date: Date; view: View }) => { const tileContent = ({ date, view }: { date: Date; view: View }) => { switch (view) { + case 'week': + return date.getDay() === 0 ? ( +

+ {"It's Sunday!"} +

+ ) : null; case 'month': return date.getDay() === 0 ? (

@@ -74,6 +84,7 @@ export default function Test() { ); const [locale, setLocale] = useState(); const [maxDate, setMaxDate] = useState(fifteenthOfNextMonth); + const [calendarType, setCalendarType] = useState('gregory'); const [maxDetail, setMaxDetail] = useState('month'); const [minDate, setMinDate] = useState(nineteenNinetyFive); const [minDetail, setMinDetail] = useState('century'); @@ -120,6 +131,7 @@ export default function Test() { const commonProps = { className: 'myCustomCalendarClassName', + calendarType, locale, maxDate, maxDetail, @@ -184,6 +196,7 @@ export default function Test() { setMaxDate={setMaxDate} setMinDate={setMinDate} /> + ; -export type View = 'century' | 'decade' | 'year' | 'month'; +export type View = 'century' | 'decade' | 'year' | 'month' | 'week'; + +export const CALENDAR_TYPES = { + GREGORY: 'gregory', + HEBREW: 'hebrew', + ISLAMIC: 'islamic', + ISO_8601: 'iso8601', +} as const; + +export type CalendarType = (typeof CALENDAR_TYPES)[keyof typeof CALENDAR_TYPES]; + +export function isCalendarType(value: unknown): value is CalendarType { + return Object.values(CALENDAR_TYPES).some((v) => v === value); +} diff --git a/yarn.lock b/yarn.lock index 862665c5..323f531c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,10 +5,10 @@ __metadata: version: 8 cacheKey: 10c0 -"@adobe/css-tools@npm:^4.3.1": - version: 4.3.2 - resolution: "@adobe/css-tools@npm:4.3.2" - checksum: 10c0/296a03dd29f227c60500d2da8c7f64991fecf1d8b456ce2b4adb8cec7363d9c08b5b03f1463673fc8cbfe54b538745588e7a13c736d2dd14a80c01a20f127f39 +"@adobe/css-tools@npm:^4.4.0": + version: 4.4.1 + resolution: "@adobe/css-tools@npm:4.4.1" + checksum: 10c0/1a68ad9af490f45fce7b6e50dd2d8ac0c546d74431649c0d42ee4ceb1a9fa057fae0a7ef1e148effa12d84ec00ed71869ebfe0fb1dcdcc80bfcb6048c12abcc0 languageName: node linkType: hard @@ -183,7 +183,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.9.2": +"@babel/runtime@npm:^7.12.5": version: 7.26.0 resolution: "@babel/runtime@npm:7.26.0" dependencies: @@ -218,7 +218,7 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.25.9, @babel/types@npm:^7.26.0, @babel/types@npm:^7.26.3, @babel/types@npm:^7.3.0": +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.25.9, @babel/types@npm:^7.26.0, @babel/types@npm:^7.26.3": version: 7.26.3 resolution: "@babel/types@npm:7.26.3" dependencies: @@ -319,170 +319,177 @@ __metadata: languageName: node linkType: hard -"@esbuild/aix-ppc64@npm:0.24.0": - version: 0.24.0 - resolution: "@esbuild/aix-ppc64@npm:0.24.0" +"@esbuild/aix-ppc64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/aix-ppc64@npm:0.24.2" conditions: os=aix & cpu=ppc64 languageName: node linkType: hard -"@esbuild/android-arm64@npm:0.24.0": - version: 0.24.0 - resolution: "@esbuild/android-arm64@npm:0.24.0" +"@esbuild/android-arm64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/android-arm64@npm:0.24.2" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@esbuild/android-arm@npm:0.24.0": - version: 0.24.0 - resolution: "@esbuild/android-arm@npm:0.24.0" +"@esbuild/android-arm@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/android-arm@npm:0.24.2" conditions: os=android & cpu=arm languageName: node linkType: hard -"@esbuild/android-x64@npm:0.24.0": - version: 0.24.0 - resolution: "@esbuild/android-x64@npm:0.24.0" +"@esbuild/android-x64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/android-x64@npm:0.24.2" conditions: os=android & cpu=x64 languageName: node linkType: hard -"@esbuild/darwin-arm64@npm:0.24.0": - version: 0.24.0 - resolution: "@esbuild/darwin-arm64@npm:0.24.0" +"@esbuild/darwin-arm64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/darwin-arm64@npm:0.24.2" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@esbuild/darwin-x64@npm:0.24.0": - version: 0.24.0 - resolution: "@esbuild/darwin-x64@npm:0.24.0" +"@esbuild/darwin-x64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/darwin-x64@npm:0.24.2" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@esbuild/freebsd-arm64@npm:0.24.0": - version: 0.24.0 - resolution: "@esbuild/freebsd-arm64@npm:0.24.0" +"@esbuild/freebsd-arm64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/freebsd-arm64@npm:0.24.2" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard -"@esbuild/freebsd-x64@npm:0.24.0": - version: 0.24.0 - resolution: "@esbuild/freebsd-x64@npm:0.24.0" +"@esbuild/freebsd-x64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/freebsd-x64@npm:0.24.2" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@esbuild/linux-arm64@npm:0.24.0": - version: 0.24.0 - resolution: "@esbuild/linux-arm64@npm:0.24.0" +"@esbuild/linux-arm64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-arm64@npm:0.24.2" conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"@esbuild/linux-arm@npm:0.24.0": - version: 0.24.0 - resolution: "@esbuild/linux-arm@npm:0.24.0" +"@esbuild/linux-arm@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-arm@npm:0.24.2" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@esbuild/linux-ia32@npm:0.24.0": - version: 0.24.0 - resolution: "@esbuild/linux-ia32@npm:0.24.0" +"@esbuild/linux-ia32@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-ia32@npm:0.24.2" conditions: os=linux & cpu=ia32 languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.24.0": - version: 0.24.0 - resolution: "@esbuild/linux-loong64@npm:0.24.0" +"@esbuild/linux-loong64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-loong64@npm:0.24.2" conditions: os=linux & cpu=loong64 languageName: node linkType: hard -"@esbuild/linux-mips64el@npm:0.24.0": - version: 0.24.0 - resolution: "@esbuild/linux-mips64el@npm:0.24.0" +"@esbuild/linux-mips64el@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-mips64el@npm:0.24.2" conditions: os=linux & cpu=mips64el languageName: node linkType: hard -"@esbuild/linux-ppc64@npm:0.24.0": - version: 0.24.0 - resolution: "@esbuild/linux-ppc64@npm:0.24.0" +"@esbuild/linux-ppc64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-ppc64@npm:0.24.2" conditions: os=linux & cpu=ppc64 languageName: node linkType: hard -"@esbuild/linux-riscv64@npm:0.24.0": - version: 0.24.0 - resolution: "@esbuild/linux-riscv64@npm:0.24.0" +"@esbuild/linux-riscv64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-riscv64@npm:0.24.2" conditions: os=linux & cpu=riscv64 languageName: node linkType: hard -"@esbuild/linux-s390x@npm:0.24.0": - version: 0.24.0 - resolution: "@esbuild/linux-s390x@npm:0.24.0" +"@esbuild/linux-s390x@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-s390x@npm:0.24.2" conditions: os=linux & cpu=s390x languageName: node linkType: hard -"@esbuild/linux-x64@npm:0.24.0": - version: 0.24.0 - resolution: "@esbuild/linux-x64@npm:0.24.0" +"@esbuild/linux-x64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-x64@npm:0.24.2" conditions: os=linux & cpu=x64 languageName: node linkType: hard -"@esbuild/netbsd-x64@npm:0.24.0": - version: 0.24.0 - resolution: "@esbuild/netbsd-x64@npm:0.24.0" +"@esbuild/netbsd-arm64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/netbsd-arm64@npm:0.24.2" + conditions: os=netbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/netbsd-x64@npm:0.24.2" conditions: os=netbsd & cpu=x64 languageName: node linkType: hard -"@esbuild/openbsd-arm64@npm:0.24.0": - version: 0.24.0 - resolution: "@esbuild/openbsd-arm64@npm:0.24.0" +"@esbuild/openbsd-arm64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/openbsd-arm64@npm:0.24.2" conditions: os=openbsd & cpu=arm64 languageName: node linkType: hard -"@esbuild/openbsd-x64@npm:0.24.0": - version: 0.24.0 - resolution: "@esbuild/openbsd-x64@npm:0.24.0" +"@esbuild/openbsd-x64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/openbsd-x64@npm:0.24.2" conditions: os=openbsd & cpu=x64 languageName: node linkType: hard -"@esbuild/sunos-x64@npm:0.24.0": - version: 0.24.0 - resolution: "@esbuild/sunos-x64@npm:0.24.0" +"@esbuild/sunos-x64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/sunos-x64@npm:0.24.2" conditions: os=sunos & cpu=x64 languageName: node linkType: hard -"@esbuild/win32-arm64@npm:0.24.0": - version: 0.24.0 - resolution: "@esbuild/win32-arm64@npm:0.24.0" +"@esbuild/win32-arm64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/win32-arm64@npm:0.24.2" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@esbuild/win32-ia32@npm:0.24.0": - version: 0.24.0 - resolution: "@esbuild/win32-ia32@npm:0.24.0" +"@esbuild/win32-ia32@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/win32-ia32@npm:0.24.2" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@esbuild/win32-x64@npm:0.24.0": - version: 0.24.0 - resolution: "@esbuild/win32-x64@npm:0.24.0" +"@esbuild/win32-x64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/win32-x64@npm:0.24.2" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -501,14 +508,23 @@ __metadata: languageName: node linkType: hard +"@isaacs/fs-minipass@npm:^4.0.0": + version: 4.0.1 + resolution: "@isaacs/fs-minipass@npm:4.0.1" + dependencies: + minipass: "npm:^7.0.4" + checksum: 10c0/c25b6dc1598790d5b55c0947a9b7d111cfa92594db5296c3b907e2f533c033666f692a3939eadac17b1c7c40d362d0b0635dc874cbfe3e70db7c2b07cc97a5d2 + languageName: node + linkType: hard + "@jridgewell/gen-mapping@npm:^0.3.5": - version: 0.3.5 - resolution: "@jridgewell/gen-mapping@npm:0.3.5" + version: 0.3.8 + resolution: "@jridgewell/gen-mapping@npm:0.3.8" dependencies: "@jridgewell/set-array": "npm:^1.2.1" "@jridgewell/sourcemap-codec": "npm:^1.4.10" "@jridgewell/trace-mapping": "npm:^0.3.24" - checksum: 10c0/1be4fd4a6b0f41337c4f5fdf4afc3bd19e39c3691924817108b82ffcb9c9e609c273f936932b9fba4b3a298ce2eb06d9bff4eb1cc3bd81c4f4ee1b4917e25feb + checksum: 10c0/c668feaf86c501d7c804904a61c23c67447b2137b813b9ce03eca82cb9d65ac7006d766c218685d76e3d72828279b6ee26c347aa1119dab23fbaf36aed51585a languageName: node linkType: hard @@ -570,25 +586,25 @@ __metadata: languageName: node linkType: hard -"@npmcli/agent@npm:^2.0.0": - version: 2.2.1 - resolution: "@npmcli/agent@npm:2.2.1" +"@npmcli/agent@npm:^3.0.0": + version: 3.0.0 + resolution: "@npmcli/agent@npm:3.0.0" dependencies: agent-base: "npm:^7.1.0" http-proxy-agent: "npm:^7.0.0" https-proxy-agent: "npm:^7.0.1" lru-cache: "npm:^10.0.1" - socks-proxy-agent: "npm:^8.0.1" - checksum: 10c0/38ee5cbe8f3cde13be916e717bfc54fd1a7605c07af056369ff894e244c221e0b56b08ca5213457477f9bc15bca9e729d51a4788829b5c3cf296b3c996147f76 + socks-proxy-agent: "npm:^8.0.3" + checksum: 10c0/efe37b982f30740ee77696a80c196912c274ecd2cb243bc6ae7053a50c733ce0f6c09fda085145f33ecf453be19654acca74b69e81eaad4c90f00ccffe2f9271 languageName: node linkType: hard -"@npmcli/fs@npm:^3.1.0": - version: 3.1.0 - resolution: "@npmcli/fs@npm:3.1.0" +"@npmcli/fs@npm:^4.0.0": + version: 4.0.0 + resolution: "@npmcli/fs@npm:4.0.0" dependencies: semver: "npm:^7.3.5" - checksum: 10c0/162b4a0b8705cd6f5c2470b851d1dc6cd228c86d2170e1769d738c1fbb69a87160901411c3c035331e9e99db72f1f1099a8b734bf1637cc32b9a5be1660e4e1e + checksum: 10c0/c90935d5ce670c87b6b14fab04a965a3b8137e585f8b2a6257263bd7f97756dd736cb165bb470e5156a9e718ecd99413dccc54b1138c1a46d6ec7cf325982fe5 languageName: node linkType: hard @@ -599,142 +615,142 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-android-arm-eabi@npm:4.28.1": - version: 4.28.1 - resolution: "@rollup/rollup-android-arm-eabi@npm:4.28.1" +"@rollup/rollup-android-arm-eabi@npm:4.29.1": + version: 4.29.1 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.29.1" conditions: os=android & cpu=arm languageName: node linkType: hard -"@rollup/rollup-android-arm64@npm:4.28.1": - version: 4.28.1 - resolution: "@rollup/rollup-android-arm64@npm:4.28.1" +"@rollup/rollup-android-arm64@npm:4.29.1": + version: 4.29.1 + resolution: "@rollup/rollup-android-arm64@npm:4.29.1" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-darwin-arm64@npm:4.28.1": - version: 4.28.1 - resolution: "@rollup/rollup-darwin-arm64@npm:4.28.1" +"@rollup/rollup-darwin-arm64@npm:4.29.1": + version: 4.29.1 + resolution: "@rollup/rollup-darwin-arm64@npm:4.29.1" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-darwin-x64@npm:4.28.1": - version: 4.28.1 - resolution: "@rollup/rollup-darwin-x64@npm:4.28.1" +"@rollup/rollup-darwin-x64@npm:4.29.1": + version: 4.29.1 + resolution: "@rollup/rollup-darwin-x64@npm:4.29.1" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@rollup/rollup-freebsd-arm64@npm:4.28.1": - version: 4.28.1 - resolution: "@rollup/rollup-freebsd-arm64@npm:4.28.1" +"@rollup/rollup-freebsd-arm64@npm:4.29.1": + version: 4.29.1 + resolution: "@rollup/rollup-freebsd-arm64@npm:4.29.1" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-freebsd-x64@npm:4.28.1": - version: 4.28.1 - resolution: "@rollup/rollup-freebsd-x64@npm:4.28.1" +"@rollup/rollup-freebsd-x64@npm:4.29.1": + version: 4.29.1 + resolution: "@rollup/rollup-freebsd-x64@npm:4.29.1" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@rollup/rollup-linux-arm-gnueabihf@npm:4.28.1": - version: 4.28.1 - resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.28.1" +"@rollup/rollup-linux-arm-gnueabihf@npm:4.29.1": + version: 4.29.1 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.29.1" conditions: os=linux & cpu=arm & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-arm-musleabihf@npm:4.28.1": - version: 4.28.1 - resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.28.1" +"@rollup/rollup-linux-arm-musleabihf@npm:4.29.1": + version: 4.29.1 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.29.1" conditions: os=linux & cpu=arm & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-arm64-gnu@npm:4.28.1": - version: 4.28.1 - resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.28.1" +"@rollup/rollup-linux-arm64-gnu@npm:4.29.1": + version: 4.29.1 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.29.1" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-arm64-musl@npm:4.28.1": - version: 4.28.1 - resolution: "@rollup/rollup-linux-arm64-musl@npm:4.28.1" +"@rollup/rollup-linux-arm64-musl@npm:4.29.1": + version: 4.29.1 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.29.1" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-loongarch64-gnu@npm:4.28.1": - version: 4.28.1 - resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.28.1" +"@rollup/rollup-linux-loongarch64-gnu@npm:4.29.1": + version: 4.29.1 + resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.29.1" conditions: os=linux & cpu=loong64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-powerpc64le-gnu@npm:4.28.1": - version: 4.28.1 - resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.28.1" +"@rollup/rollup-linux-powerpc64le-gnu@npm:4.29.1": + version: 4.29.1 + resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.29.1" conditions: os=linux & cpu=ppc64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-riscv64-gnu@npm:4.28.1": - version: 4.28.1 - resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.28.1" +"@rollup/rollup-linux-riscv64-gnu@npm:4.29.1": + version: 4.29.1 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.29.1" conditions: os=linux & cpu=riscv64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-s390x-gnu@npm:4.28.1": - version: 4.28.1 - resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.28.1" +"@rollup/rollup-linux-s390x-gnu@npm:4.29.1": + version: 4.29.1 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.29.1" conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-x64-gnu@npm:4.28.1": - version: 4.28.1 - resolution: "@rollup/rollup-linux-x64-gnu@npm:4.28.1" +"@rollup/rollup-linux-x64-gnu@npm:4.29.1": + version: 4.29.1 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.29.1" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-x64-musl@npm:4.28.1": - version: 4.28.1 - resolution: "@rollup/rollup-linux-x64-musl@npm:4.28.1" +"@rollup/rollup-linux-x64-musl@npm:4.29.1": + version: 4.29.1 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.29.1" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-win32-arm64-msvc@npm:4.28.1": - version: 4.28.1 - resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.28.1" +"@rollup/rollup-win32-arm64-msvc@npm:4.29.1": + version: 4.29.1 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.29.1" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-win32-ia32-msvc@npm:4.28.1": - version: 4.28.1 - resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.28.1" +"@rollup/rollup-win32-ia32-msvc@npm:4.29.1": + version: 4.29.1 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.29.1" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@rollup/rollup-win32-x64-msvc@npm:4.28.1": - version: 4.28.1 - resolution: "@rollup/rollup-win32-x64-msvc@npm:4.28.1" +"@rollup/rollup-win32-x64-msvc@npm:4.29.1": + version: 4.29.1 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.29.1" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@testing-library/dom@npm:^10.0.0": - version: 10.0.0 - resolution: "@testing-library/dom@npm:10.0.0" + version: 10.4.0 + resolution: "@testing-library/dom@npm:10.4.0" dependencies: "@babel/code-frame": "npm:^7.10.4" "@babel/runtime": "npm:^7.12.5" @@ -744,64 +760,49 @@ __metadata: dom-accessibility-api: "npm:^0.5.9" lz-string: "npm:^1.5.0" pretty-format: "npm:^27.0.2" - checksum: 10c0/2d12d2a6018a6f1d15e91834180bc068932c699ff1fcbfb80aa21aba519a4f5329c861dfa852e06ee5615bcb92ef2a0f0e755e32684ea3dada63bc34248382ab + checksum: 10c0/0352487720ecd433400671e773df0b84b8268fb3fe8e527cdfd7c11b1365b398b4e0eddba6e7e0c85e8d615f48257753283fccec41f6b986fd6c85f15eb5f84f languageName: node linkType: hard "@testing-library/jest-dom@npm:^6.0.0": - version: 6.1.4 - resolution: "@testing-library/jest-dom@npm:6.1.4" + version: 6.6.3 + resolution: "@testing-library/jest-dom@npm:6.6.3" dependencies: - "@adobe/css-tools": "npm:^4.3.1" - "@babel/runtime": "npm:^7.9.2" + "@adobe/css-tools": "npm:^4.4.0" aria-query: "npm:^5.0.0" chalk: "npm:^3.0.0" css.escape: "npm:^1.5.1" - dom-accessibility-api: "npm:^0.5.6" - lodash: "npm:^4.17.15" + dom-accessibility-api: "npm:^0.6.3" + lodash: "npm:^4.17.21" redent: "npm:^3.0.0" - peerDependencies: - "@jest/globals": ">= 28" - "@types/jest": ">= 28" - jest: ">= 28" - vitest: ">= 0.32" - peerDependenciesMeta: - "@jest/globals": - optional: true - "@types/jest": - optional: true - jest: - optional: true - vitest: - optional: true - checksum: 10c0/2e23f120613fd8ae6d5169bbc94f1a2e4c82b07182057dc94db8ec54ebf32555833442e6c43a187e59715d83704ffb5df49ba88a71f6f32d2683f3d95ba721c7 + checksum: 10c0/5566b6c0b7b0709bc244aec3aa3dc9e5f4663e8fb2b99d8cd456fc07279e59db6076cbf798f9d3099a98fca7ef4cd50e4e1f4c4dec5a60a8fad8d24a638a5bf6 languageName: node linkType: hard "@testing-library/react@npm:^16.0.0": - version: 16.0.0 - resolution: "@testing-library/react@npm:16.0.0" + version: 16.1.0 + resolution: "@testing-library/react@npm:16.1.0" dependencies: "@babel/runtime": "npm:^7.12.5" peerDependencies: "@testing-library/dom": ^10.0.0 - "@types/react": ^18.0.0 - "@types/react-dom": ^18.0.0 - react: ^18.0.0 - react-dom: ^18.0.0 + "@types/react": ^18.0.0 || ^19.0.0 + "@types/react-dom": ^18.0.0 || ^19.0.0 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 peerDependenciesMeta: "@types/react": optional: true "@types/react-dom": optional: true - checksum: 10c0/297f97bf4722dad05f11d9cafd47d387dbdb096fea4b79b876c7466460f0f2e345b55b81b3e37fc81ed8185c528cb53dd8455ca1b6b019b229edf6c796f11c9f + checksum: 10c0/8451dcc76ba0d4f3504af78f2a4aacc13117691f4b7a3c279f3e047d5ea817ff686496ad53e7f65f6183112aef2be3f318af609b1f5d666eed42b1014d1c68d5 languageName: node linkType: hard "@types/aria-query@npm:^5.0.1": - version: 5.0.1 - resolution: "@types/aria-query@npm:5.0.1" - checksum: 10c0/bc9e40ce37bd3a1654948778c7829bd55aea1bc5f2cd06fcf6cd650b07bb388995799e9aab6e2d93a6cf55dcba3b85c155f7ba93adefcc7c2e152fc6057061b5 + version: 5.0.4 + resolution: "@types/aria-query@npm:5.0.4" + checksum: 10c0/dc667bc6a3acc7bba2bccf8c23d56cb1f2f4defaa704cfef595437107efaa972d3b3db9ec1d66bc2711bfc35086821edd32c302bffab36f2e79b97f312069f08 languageName: node linkType: hard @@ -819,30 +820,30 @@ __metadata: linkType: hard "@types/babel__generator@npm:*": - version: 7.6.4 - resolution: "@types/babel__generator@npm:7.6.4" + version: 7.6.8 + resolution: "@types/babel__generator@npm:7.6.8" dependencies: "@babel/types": "npm:^7.0.0" - checksum: 10c0/e0051b450e4ba2df0a7e386f08df902a4e920f6f8d6f185d69ddbe9b0e2e2d3ae434bb51e437bc0fca2a9a0f5dc4ca44d3a1941ef75e74371e8be5bf64416fe4 + checksum: 10c0/f0ba105e7d2296bf367d6e055bb22996886c114261e2cb70bf9359556d0076c7a57239d019dee42bb063f565bade5ccb46009bce2044b2952d964bf9a454d6d2 languageName: node linkType: hard "@types/babel__template@npm:*": - version: 7.4.1 - resolution: "@types/babel__template@npm:7.4.1" + version: 7.4.4 + resolution: "@types/babel__template@npm:7.4.4" dependencies: "@babel/parser": "npm:^7.1.0" "@babel/types": "npm:^7.0.0" - checksum: 10c0/6f180e96c39765487f27e861d43eebed341ec7a2fc06cdf5a52c22872fae67f474ca165d149c708f4fd9d5482beb66c0a92f77411b234bb30262ed2303e50b1a + checksum: 10c0/cc84f6c6ab1eab1427e90dd2b76ccee65ce940b778a9a67be2c8c39e1994e6f5bbc8efa309f6cea8dc6754994524cd4d2896558df76d92e7a1f46ecffee7112b languageName: node linkType: hard "@types/babel__traverse@npm:*": - version: 7.18.3 - resolution: "@types/babel__traverse@npm:7.18.3" + version: 7.20.6 + resolution: "@types/babel__traverse@npm:7.20.6" dependencies: - "@babel/types": "npm:^7.3.0" - checksum: 10c0/4214fd3e95925d9a7efa01142969a310263430d4f5de89be6c9c193110666677415161b474fa627d751dfd0f1eb7dc1c84c48f8b53098625c6bc78917683215a + "@babel/types": "npm:^7.20.7" + checksum: 10c0/7ba7db61a53e28cac955aa99af280d2600f15a8c056619c05b6fc911cbe02c61aa4f2823299221b23ce0cce00b294c0e5f618ec772aa3f247523c2e48cf7b888 languageName: node linkType: hard @@ -853,62 +854,30 @@ __metadata: languageName: node linkType: hard -"@types/lodash.memoize@npm:^4.1.7": - version: 4.1.7 - resolution: "@types/lodash.memoize@npm:4.1.7" - dependencies: - "@types/lodash": "npm:*" - checksum: 10c0/979a59dbbae968a03834fdb544dc5ddd34620a2912d5030c997a1aa919326425a900c93bc69554b2a873cf54f09b4dd2752b3a1c29ab4bffac5983113c58b1b5 - languageName: node - linkType: hard - -"@types/lodash@npm:*": - version: 4.14.192 - resolution: "@types/lodash@npm:4.14.192" - checksum: 10c0/6807402e293cb943808a444d1ef514ce13de4f870b3b382fe729f8235ea280c4d037b9514443723afd3d04b2cf9e8f1b3fc0075d947edfeb1078347dc2b471b0 - languageName: node - linkType: hard - "@types/node@npm:*": - version: 20.11.26 - resolution: "@types/node@npm:20.11.26" + version: 22.10.2 + resolution: "@types/node@npm:22.10.2" dependencies: - undici-types: "npm:~5.26.4" - checksum: 10c0/2df81e4f109588c4c490f2c7d616a06d2b3b9298f217468134b80711af810c9a6017a59beb3e6b1c596eb9b6c5a39d33403b99179acb89006badfbc55f2468bb - languageName: node - linkType: hard - -"@types/prop-types@npm:*": - version: 15.7.5 - resolution: "@types/prop-types@npm:15.7.5" - checksum: 10c0/648aae41423821c61c83823ae36116c8d0f68258f8b609bdbc257752dcd616438d6343d554262aa9a7edaee5a19aca2e028a74fa2d0f40fffaf2816bc7056857 + undici-types: "npm:~6.20.0" + checksum: 10c0/2c7b71a040f1ef5320938eca8ebc946e6905caa9bbf3d5665d9b3774a8d15ea9fab1582b849a6d28c7fc80756a62c5666bc66b69f42f4d5dafd1ccb193cdb4ac languageName: node linkType: hard "@types/react-dom@npm:*": - version: 18.0.11 - resolution: "@types/react-dom@npm:18.0.11" - dependencies: - "@types/react": "npm:*" - checksum: 10c0/8bf1e3f710221a937613df4d192f3b9e5a30e5c3103cac52c5210fb56b79f7a8cc66137d3bc5c9d92d375165a97fae53284724191bc01cb9898564fa02595569 + version: 19.0.2 + resolution: "@types/react-dom@npm:19.0.2" + peerDependencies: + "@types/react": ^19.0.0 + checksum: 10c0/3d0c7b78dbe8df64ea769f30af990a5950173a8321c745fe11094d765423f7964c3519dca6e7cd36b4be6521c8efc690bdd3b79b327b229dd1e9d5a8bad677dd languageName: node linkType: hard "@types/react@npm:*": - version: 18.0.31 - resolution: "@types/react@npm:18.0.31" + version: 19.0.2 + resolution: "@types/react@npm:19.0.2" dependencies: - "@types/prop-types": "npm:*" - "@types/scheduler": "npm:*" csstype: "npm:^3.0.2" - checksum: 10c0/608b7fe96cbbc16458a1874c79843da8e6732d79894eca60368ded6f28a5a659e935933f2ed99ec1b7331834ca23ac22be37aed2f49f6ad3081dfe00f34a7d80 - languageName: node - linkType: hard - -"@types/scheduler@npm:*": - version: 0.16.3 - resolution: "@types/scheduler@npm:0.16.3" - checksum: 10c0/c249d4b96fa05165ac22c214f94a045ee0af8beedefdbc54b769febd0044cab3a874e55419841a0dcc76439e379a63e257f3253c87168e3261e7bc783d623302 + checksum: 10c0/8992f39701fcf1bf893ef8f94a56196445667baf08fe4f6050a14e229a17aad3265ad3efc01595ff3b4d5d5c69da885f9aa4ff80f164a613018734efcff1eb8f languageName: node linkType: hard @@ -934,91 +903,91 @@ __metadata: languageName: node linkType: hard -"@vitest/expect@npm:3.0.0-beta.2": - version: 3.0.0-beta.2 - resolution: "@vitest/expect@npm:3.0.0-beta.2" +"@vitest/expect@npm:3.0.0-beta.3": + version: 3.0.0-beta.3 + resolution: "@vitest/expect@npm:3.0.0-beta.3" dependencies: - "@vitest/spy": "npm:3.0.0-beta.2" - "@vitest/utils": "npm:3.0.0-beta.2" + "@vitest/spy": "npm:3.0.0-beta.3" + "@vitest/utils": "npm:3.0.0-beta.3" chai: "npm:^5.1.2" tinyrainbow: "npm:^1.2.0" - checksum: 10c0/5cb65a233e16a52a0a7b5037aecde11a711d0d9425a8bab07fafd6baeb2e3f0f280edd45683ab9670732dad3af6d6177ed67bcc60ee13e2aa0182e3b66c7041f + checksum: 10c0/41b5bc8eb9ff73c9b372489e90a16f7e0885544cf92831e40482cd0a97c9796a4b18e7abdffb200755d917dfab314806aa7583461312424685acd63db5b55e1d languageName: node linkType: hard -"@vitest/mocker@npm:3.0.0-beta.2": - version: 3.0.0-beta.2 - resolution: "@vitest/mocker@npm:3.0.0-beta.2" +"@vitest/mocker@npm:3.0.0-beta.3": + version: 3.0.0-beta.3 + resolution: "@vitest/mocker@npm:3.0.0-beta.3" dependencies: - "@vitest/spy": "npm:3.0.0-beta.2" + "@vitest/spy": "npm:3.0.0-beta.3" estree-walker: "npm:^3.0.3" - magic-string: "npm:^0.30.14" + magic-string: "npm:^0.30.17" peerDependencies: msw: ^2.4.9 - vite: ^5.0.0 + vite: ^5.0.0 || ^6.0.0 peerDependenciesMeta: msw: optional: true vite: optional: true - checksum: 10c0/abcdaf33824c7d16d4aa5ef401788d9876b586bab49dfcfabef3270c68e40dbce0bb3e1acad9b167f0fb067618fc10cc1b5d72e05974c6fdd2e89b6cc7d794f1 + checksum: 10c0/2402086b8567f860846aa0c00fb0256058a129ad0e4aad0bc691ee9b054c595920df1044b205a650b16f2dfbc535eaf9f39e3bc4e88d0d1c5546dd0dfabbd698 languageName: node linkType: hard -"@vitest/pretty-format@npm:3.0.0-beta.2, @vitest/pretty-format@npm:^3.0.0-beta.2": - version: 3.0.0-beta.2 - resolution: "@vitest/pretty-format@npm:3.0.0-beta.2" +"@vitest/pretty-format@npm:3.0.0-beta.3, @vitest/pretty-format@npm:^3.0.0-beta.3": + version: 3.0.0-beta.3 + resolution: "@vitest/pretty-format@npm:3.0.0-beta.3" dependencies: tinyrainbow: "npm:^1.2.0" - checksum: 10c0/1d5e56208b790aab5ede7ce713721749fa2341da933a9aec486d1a912ac3b30b13bc293a2ef3ffb13deecf1631829895959736afd8ce42df1106953be2388e40 + checksum: 10c0/9cac796784b01d185e97d3f10c008e7b1548c9a854c5e43e96d83340f8a38d2c3e1a094ded4617d0eafb40330e16b3542e5ed91110bec180d504192ad393e298 languageName: node linkType: hard -"@vitest/runner@npm:3.0.0-beta.2": - version: 3.0.0-beta.2 - resolution: "@vitest/runner@npm:3.0.0-beta.2" +"@vitest/runner@npm:3.0.0-beta.3": + version: 3.0.0-beta.3 + resolution: "@vitest/runner@npm:3.0.0-beta.3" dependencies: - "@vitest/utils": "npm:3.0.0-beta.2" + "@vitest/utils": "npm:3.0.0-beta.3" pathe: "npm:^1.1.2" - checksum: 10c0/abc4470f95ab2eb51aae96ea3dc9953263b54a0585817e5a42e9db559102a251415fd718305974f7a11101d21449f71808a9b5bb2bb224c1727c9ab7e61fc703 + checksum: 10c0/c3cdb389cfa44f6a1d4601e6be547c1d233f5a967fbfe729c1c797e98691405569028a0a049952b6153c902ec8750ec93fdd428e41f1854bfe421b6bbad01c15 languageName: node linkType: hard -"@vitest/snapshot@npm:3.0.0-beta.2": - version: 3.0.0-beta.2 - resolution: "@vitest/snapshot@npm:3.0.0-beta.2" +"@vitest/snapshot@npm:3.0.0-beta.3": + version: 3.0.0-beta.3 + resolution: "@vitest/snapshot@npm:3.0.0-beta.3" dependencies: - "@vitest/pretty-format": "npm:3.0.0-beta.2" - magic-string: "npm:^0.30.14" + "@vitest/pretty-format": "npm:3.0.0-beta.3" + magic-string: "npm:^0.30.17" pathe: "npm:^1.1.2" - checksum: 10c0/e8a725c21e3c52d1d3865b390382e9e6e7ee49c906a3aba03ffe3efadb5994073855498a084866fe17b77f66e71d4ac84afbef188610a726af9013f6a350f158 + checksum: 10c0/ca157fa555e3ce5564891dc9fe65e54181c9e39f1d95776492fd23fff17d8a1c1de4ccbf1e026c2b8d7b88b62d3c6ed65ac605baf0549407dd4a9e77161f4f77 languageName: node linkType: hard -"@vitest/spy@npm:3.0.0-beta.2": - version: 3.0.0-beta.2 - resolution: "@vitest/spy@npm:3.0.0-beta.2" +"@vitest/spy@npm:3.0.0-beta.3": + version: 3.0.0-beta.3 + resolution: "@vitest/spy@npm:3.0.0-beta.3" dependencies: tinyspy: "npm:^3.0.2" - checksum: 10c0/c0a34e0b3c413d5f2645ba5fa6b72d4605f84854411a8606cf345fa041e34d7a84d996584494649eb21930f54a712d1e47e37dd6ad63e40344707f1ad1f6fd94 + checksum: 10c0/68177eb00b81eeb26ba320d2bde8fde4fb6d10ba54fb05fad679997e11a9d0a24c30710731cc5c06425ef2d176ba02da47d6bdfe0e99a349411037d2af62081c languageName: node linkType: hard -"@vitest/utils@npm:3.0.0-beta.2": - version: 3.0.0-beta.2 - resolution: "@vitest/utils@npm:3.0.0-beta.2" +"@vitest/utils@npm:3.0.0-beta.3": + version: 3.0.0-beta.3 + resolution: "@vitest/utils@npm:3.0.0-beta.3" dependencies: - "@vitest/pretty-format": "npm:3.0.0-beta.2" + "@vitest/pretty-format": "npm:3.0.0-beta.3" loupe: "npm:^3.1.2" tinyrainbow: "npm:^1.2.0" - checksum: 10c0/1cbd0ee62533cb6f85c2c61b7bc056fe7cabd76f8a1163435a90f72d1ad8c387bd6ba1e18c0b936f3b958ef8efa23822dbf1478aef8b6c0a1d75e8e4d1fe8a51 + checksum: 10c0/9bd9a8dbeae1d54d2912ef12274216e124c8f2db424a8b45c395736824a10cf202c47b7509712bb949869b703894ab41a6953c3f4d748593fe3a1d6066ce38cc languageName: node linkType: hard "@wojtekmaj/date-utils@npm:^1.1.3": - version: 1.1.3 - resolution: "@wojtekmaj/date-utils@npm:1.1.3" - checksum: 10c0/c7af27dc4e5836382c44cd0a4be3b5594705e33976b99269d46b87208154f7d55b4ebb3a56bac7f1ff70136d943bd69ed454a96c672a40ff1ea98db4b6b79e1f + version: 1.5.1 + resolution: "@wojtekmaj/date-utils@npm:1.5.1" + checksum: 10c0/7c213cca5ab6b84ef61b9aea2b9fb8a04bf4c9764b28a97ffc4ee46a3e81560532a74d106a6f8aeef4792e1aaa6ea3dfd3c4a639dddbea560eb3f33cd62b8d7d languageName: node linkType: hard @@ -1029,22 +998,10 @@ __metadata: languageName: node linkType: hard -"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0": - version: 7.1.0 - resolution: "agent-base@npm:7.1.0" - dependencies: - debug: "npm:^4.3.4" - checksum: 10c0/fc974ab57ffdd8421a2bc339644d312a9cca320c20c3393c9d8b1fd91731b9bbabdb985df5fc860f5b79d81c3e350daa3fcb31c5c07c0bb385aafc817df004ce - languageName: node - linkType: hard - -"aggregate-error@npm:^3.0.0": - version: 3.1.0 - resolution: "aggregate-error@npm:3.1.0" - dependencies: - clean-stack: "npm:^2.0.0" - indent-string: "npm:^4.0.0" - checksum: 10c0/a42f67faa79e3e6687a4923050e7c9807db3848a037076f791d10e092677d65c1d2d863b7848560699f40fc0502c19f40963fb1cd1fb3d338a7423df8e45e039 +"agent-base@npm:^7.1.0, agent-base@npm:^7.1.2": + version: 7.1.3 + resolution: "agent-base@npm:7.1.3" + checksum: 10c0/6192b580c5b1d8fb399b9c62bf8343d76654c2dd62afcb9a52b2cf44a8b6ace1e3b704d3fe3547d91555c857d3df02603341ff2cb961b9cfe2b12f9f3c38ee11 languageName: node linkType: hard @@ -1066,9 +1023,9 @@ __metadata: linkType: hard "ansi-regex@npm:^6.0.1": - version: 6.0.1 - resolution: "ansi-regex@npm:6.0.1" - checksum: 10c0/cbe16dbd2c6b2735d1df7976a7070dd277326434f0212f43abf6d87674095d247968209babdaad31bb00882fa68807256ba9be340eec2f1004de14ca75f52a08 + version: 6.1.0 + resolution: "ansi-regex@npm:6.1.0" + checksum: 10c0/a91daeddd54746338478eef88af3439a7edf30f8e23196e2d6ed182da9add559c601266dbef01c2efa46a958ad6f1f8b176799657616c702b5b02e799e7fd8dc languageName: node linkType: hard @@ -1095,7 +1052,7 @@ __metadata: languageName: node linkType: hard -"aria-query@npm:5.3.0, aria-query@npm:^5.0.0": +"aria-query@npm:5.3.0": version: 5.3.0 resolution: "aria-query@npm:5.3.0" dependencies: @@ -1104,6 +1061,13 @@ __metadata: languageName: node linkType: hard +"aria-query@npm:^5.0.0": + version: 5.3.2 + resolution: "aria-query@npm:5.3.2" + checksum: 10c0/003c7e3e2cff5540bf7a7893775fc614de82b0c5dde8ae823d47b7a28a9d4da1f7ed85f340bdb93d5649caa927755f0e31ecc7ab63edfdfc00c8ef07e505e03e + languageName: node + linkType: hard + "arrify@npm:^3.0.0": version: 3.0.0 resolution: "arrify@npm:3.0.0" @@ -1164,11 +1128,11 @@ __metadata: languageName: node linkType: hard -"cacache@npm:^18.0.0": - version: 18.0.2 - resolution: "cacache@npm:18.0.2" +"cacache@npm:^19.0.1": + version: 19.0.1 + resolution: "cacache@npm:19.0.1" dependencies: - "@npmcli/fs": "npm:^3.1.0" + "@npmcli/fs": "npm:^4.0.0" fs-minipass: "npm:^3.0.0" glob: "npm:^10.2.2" lru-cache: "npm:^10.0.1" @@ -1176,11 +1140,11 @@ __metadata: minipass-collect: "npm:^2.0.1" minipass-flush: "npm:^1.0.5" minipass-pipeline: "npm:^1.2.4" - p-map: "npm:^4.0.0" - ssri: "npm:^10.0.0" - tar: "npm:^6.1.11" - unique-filename: "npm:^3.0.0" - checksum: 10c0/7992665305cc251a984f4fdbab1449d50e88c635bc43bf2785530c61d239c61b349e5734461baa461caaee65f040ab14e2d58e694f479c0810cffd181ba5eabc + p-map: "npm:^7.0.2" + ssri: "npm:^12.0.0" + tar: "npm:^7.4.3" + unique-filename: "npm:^4.0.0" + checksum: 10c0/01f2134e1bd7d3ab68be851df96c8d63b492b1853b67f2eecb2c37bb682d37cb70bb858a16f2f0554d3c0071be6dfe21456a1ff6fa4b7eed996570d6a25ffe9c languageName: node linkType: hard @@ -1231,17 +1195,10 @@ __metadata: languageName: node linkType: hard -"chownr@npm:^2.0.0": - version: 2.0.0 - resolution: "chownr@npm:2.0.0" - checksum: 10c0/594754e1303672171cc04e50f6c398ae16128eb134a88f801bf5354fd96f205320f23536a045d9abd8b51024a149696e51231565891d4efdab8846021ecf88e6 - languageName: node - linkType: hard - -"clean-stack@npm:^2.0.0": - version: 2.2.0 - resolution: "clean-stack@npm:2.2.0" - checksum: 10c0/1f90262d5f6230a17e27d0c190b09d47ebe7efdd76a03b5a1127863f7b3c9aec4c3e6c8bb3a7bbf81d553d56a1fd35728f5a8ef4c63f867ac8d690109742a8c1 +"chownr@npm:^3.0.0": + version: 3.0.0 + resolution: "chownr@npm:3.0.0" + checksum: 10c0/43925b87700f7e3893296c8e9c56cc58f926411cce3a6e5898136daaf08f08b9a8eb76d37d3267e707d0dcc17aed2e2ebdf5848c0c3ce95cf910a919935c1b10 languageName: node linkType: hard @@ -1255,9 +1212,9 @@ __metadata: linkType: hard "clsx@npm:^2.0.0": - version: 2.0.0 - resolution: "clsx@npm:2.0.0" - checksum: 10c0/c09f43b3144a0b7826b6b11b6a111b2c7440831004eecc02d333533c5e58ef0aa5f2dce071d3b25fbb8c8ea97b45df96c74bcc1d51c8c2027eb981931107b0cd + version: 2.1.1 + resolution: "clsx@npm:2.1.1" + checksum: 10c0/c4c8eb865f8c82baab07e71bfa8897c73454881c4f99d6bc81585aecd7c441746c1399d08363dc096c550cceaf97bd4ce1e8854e1771e9998d9f94c4fe075839 languageName: node linkType: hard @@ -1342,9 +1299,9 @@ __metadata: linkType: hard "csstype@npm:^3.0.2": - version: 3.1.1 - resolution: "csstype@npm:3.1.1" - checksum: 10c0/7c8b8c5923049d84132581c13bae6e1faf999746fe3998ba5f3819a8e1cdc7512ace87b7d0a4a69f0f4b8ba11daf835d4f1390af23e09fc4f0baad52c084753a + version: 3.1.3 + resolution: "csstype@npm:3.1.3" + checksum: 10c0/80c089d6f7e0c5b2bd83cf0539ab41474198579584fa10d86d0cafe0642202343cbc119e076a0b1aece191989477081415d66c9fefbf3c957fc2fc4b7009f248 languageName: node linkType: hard @@ -1383,13 +1340,20 @@ __metadata: languageName: node linkType: hard -"dom-accessibility-api@npm:^0.5.6, dom-accessibility-api@npm:^0.5.9": +"dom-accessibility-api@npm:^0.5.9": version: 0.5.16 resolution: "dom-accessibility-api@npm:0.5.16" checksum: 10c0/b2c2eda4fae568977cdac27a9f0c001edf4f95a6a6191dfa611e3721db2478d1badc01db5bb4fa8a848aeee13e442a6c2a4386d65ec65a1436f24715a2f8d053 languageName: node linkType: hard +"dom-accessibility-api@npm:^0.6.3": + version: 0.6.3 + resolution: "dom-accessibility-api@npm:0.6.3" + checksum: 10c0/10bee5aa514b2a9a37c87cd81268db607a2e933a050074abc2f6fa3da9080ebed206a320cbc123567f2c3087d22292853bdfdceaffdd4334ffe2af9510b29360 + languageName: node + linkType: hard + "eastasianwidth@npm:^0.2.0": version: 0.2.0 resolution: "eastasianwidth@npm:0.2.0" @@ -1398,9 +1362,9 @@ __metadata: linkType: hard "electron-to-chromium@npm:^1.5.73": - version: 1.5.75 - resolution: "electron-to-chromium@npm:1.5.75" - checksum: 10c0/df769b7a5e9895a8ba8eb7f31b9525a0e00b8aef6e3ecab3faebe90756fc9ac008dddb8d9a2a78d2079cbaebd27da6e1379f77e910163f405bb1a3d622ec4276 + version: 1.5.76 + resolution: "electron-to-chromium@npm:1.5.76" + checksum: 10c0/5a977be9fd5810769a7b4eae0e4b41b6beca65f2b3f3b7442819f6c93366d767d183cfbf408714f944a9bf3aa304f8c9ab9d0cdfd8e878ab8f2cbb61f8b22acd languageName: node linkType: hard @@ -1449,40 +1413,41 @@ __metadata: linkType: hard "es-module-lexer@npm:^1.5.4": - version: 1.5.4 - resolution: "es-module-lexer@npm:1.5.4" - checksum: 10c0/300a469488c2f22081df1e4c8398c78db92358496e639b0df7f89ac6455462aaf5d8893939087c1a1cbcbf20eed4610c70e0bcb8f3e4b0d80a5d2611c539408c - languageName: node - linkType: hard - -"esbuild@npm:0.24.0": - version: 0.24.0 - resolution: "esbuild@npm:0.24.0" - dependencies: - "@esbuild/aix-ppc64": "npm:0.24.0" - "@esbuild/android-arm": "npm:0.24.0" - "@esbuild/android-arm64": "npm:0.24.0" - "@esbuild/android-x64": "npm:0.24.0" - "@esbuild/darwin-arm64": "npm:0.24.0" - "@esbuild/darwin-x64": "npm:0.24.0" - "@esbuild/freebsd-arm64": "npm:0.24.0" - "@esbuild/freebsd-x64": "npm:0.24.0" - "@esbuild/linux-arm": "npm:0.24.0" - "@esbuild/linux-arm64": "npm:0.24.0" - "@esbuild/linux-ia32": "npm:0.24.0" - "@esbuild/linux-loong64": "npm:0.24.0" - "@esbuild/linux-mips64el": "npm:0.24.0" - "@esbuild/linux-ppc64": "npm:0.24.0" - "@esbuild/linux-riscv64": "npm:0.24.0" - "@esbuild/linux-s390x": "npm:0.24.0" - "@esbuild/linux-x64": "npm:0.24.0" - "@esbuild/netbsd-x64": "npm:0.24.0" - "@esbuild/openbsd-arm64": "npm:0.24.0" - "@esbuild/openbsd-x64": "npm:0.24.0" - "@esbuild/sunos-x64": "npm:0.24.0" - "@esbuild/win32-arm64": "npm:0.24.0" - "@esbuild/win32-ia32": "npm:0.24.0" - "@esbuild/win32-x64": "npm:0.24.0" + version: 1.6.0 + resolution: "es-module-lexer@npm:1.6.0" + checksum: 10c0/667309454411c0b95c476025929881e71400d74a746ffa1ff4cb450bd87f8e33e8eef7854d68e401895039ac0bac64e7809acbebb6253e055dd49ea9e3ea9212 + languageName: node + linkType: hard + +"esbuild@npm:^0.24.2": + version: 0.24.2 + resolution: "esbuild@npm:0.24.2" + dependencies: + "@esbuild/aix-ppc64": "npm:0.24.2" + "@esbuild/android-arm": "npm:0.24.2" + "@esbuild/android-arm64": "npm:0.24.2" + "@esbuild/android-x64": "npm:0.24.2" + "@esbuild/darwin-arm64": "npm:0.24.2" + "@esbuild/darwin-x64": "npm:0.24.2" + "@esbuild/freebsd-arm64": "npm:0.24.2" + "@esbuild/freebsd-x64": "npm:0.24.2" + "@esbuild/linux-arm": "npm:0.24.2" + "@esbuild/linux-arm64": "npm:0.24.2" + "@esbuild/linux-ia32": "npm:0.24.2" + "@esbuild/linux-loong64": "npm:0.24.2" + "@esbuild/linux-mips64el": "npm:0.24.2" + "@esbuild/linux-ppc64": "npm:0.24.2" + "@esbuild/linux-riscv64": "npm:0.24.2" + "@esbuild/linux-s390x": "npm:0.24.2" + "@esbuild/linux-x64": "npm:0.24.2" + "@esbuild/netbsd-arm64": "npm:0.24.2" + "@esbuild/netbsd-x64": "npm:0.24.2" + "@esbuild/openbsd-arm64": "npm:0.24.2" + "@esbuild/openbsd-x64": "npm:0.24.2" + "@esbuild/sunos-x64": "npm:0.24.2" + "@esbuild/win32-arm64": "npm:0.24.2" + "@esbuild/win32-ia32": "npm:0.24.2" + "@esbuild/win32-x64": "npm:0.24.2" dependenciesMeta: "@esbuild/aix-ppc64": optional: true @@ -1518,6 +1483,8 @@ __metadata: optional: true "@esbuild/linux-x64": optional: true + "@esbuild/netbsd-arm64": + optional: true "@esbuild/netbsd-x64": optional: true "@esbuild/openbsd-arm64": @@ -1534,7 +1501,7 @@ __metadata: optional: true bin: esbuild: bin/esbuild - checksum: 10c0/9f1aadd8d64f3bff422ae78387e66e51a5e09de6935a6f987b6e4e189ed00fdc2d1bc03d2e33633b094008529c8b6e06c7ad1a9782fb09fec223bf95998c0683 + checksum: 10c0/5a25bb08b6ba23db6e66851828d848bd3ff87c005a48c02d83e38879058929878a6baa5a414e1141faee0d1dece3f32b5fbc2a87b82ed6a7aa857cf40359aeb5 languageName: node linkType: hard @@ -1589,11 +1556,11 @@ __metadata: linkType: hard "fastq@npm:^1.6.0": - version: 1.15.0 - resolution: "fastq@npm:1.15.0" + version: 1.18.0 + resolution: "fastq@npm:1.18.0" dependencies: reusify: "npm:^1.0.4" - checksum: 10c0/5ce4f83afa5f88c9379e67906b4d31bc7694a30826d6cc8d0f0473c966929017fda65c2174b0ec89f064ede6ace6c67f8a4fe04cef42119b6a55b0d465554c24 + checksum: 10c0/7be87ecc41762adbddf558d24182f50a4b1a3ef3ee807d33b7623da7aee5faecdcc94fce5aa13fe91df93e269f383232bbcdb2dc5338cd1826503d6063221f36 languageName: node linkType: hard @@ -1607,21 +1574,12 @@ __metadata: linkType: hard "foreground-child@npm:^3.1.0": - version: 3.1.1 - resolution: "foreground-child@npm:3.1.1" + version: 3.3.0 + resolution: "foreground-child@npm:3.3.0" dependencies: cross-spawn: "npm:^7.0.0" signal-exit: "npm:^4.0.1" - checksum: 10c0/9700a0285628abaeb37007c9a4d92bd49f67210f09067638774338e146c8e9c825c5c877f072b2f75f41dc6a2d0be8664f79ffc03f6576649f54a84fb9b47de0 - languageName: node - linkType: hard - -"fs-minipass@npm:^2.0.0": - version: 2.1.0 - resolution: "fs-minipass@npm:2.1.0" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10c0/703d16522b8282d7299337539c3ed6edddd1afe82435e4f5b76e34a79cd74e488a8a0e26a636afc2440e1a23b03878e2122e3a2cfe375a5cf63c37d92b86a004 + checksum: 10c0/028f1d41000553fcfa6c4bb5c372963bf3d9bf0b1f25a87d1a6253014343fb69dfb1b42d9625d7cf44c8ba429940f3d0ff718b62105d4d4a4f6ef8ca0a53faa2 languageName: node linkType: hard @@ -1661,12 +1619,11 @@ __metadata: linkType: hard "get-user-locale@npm:^2.2.1": - version: 2.2.1 - resolution: "get-user-locale@npm:2.2.1" + version: 2.3.2 + resolution: "get-user-locale@npm:2.3.2" dependencies: - "@types/lodash.memoize": "npm:^4.1.7" - lodash.memoize: "npm:^4.1.1" - checksum: 10c0/c820c890aed5fa661435f0364cde6ec90ed9f497a5451528123571f1a77db45a6e2b92462808648499573cb3f2924f90f629ce4f82a60dc1d55047932a3abe71 + mem: "npm:^8.0.0" + checksum: 10c0/2796b3fc3782b1f4826f31e899642cf72eeb23e296e1cf55280aab5caf7a25f4b906491ee1508a001519d6a410902ccf8fa8edaa895b7aee5dfd422ffe5523b9 languageName: node linkType: hard @@ -1679,18 +1636,19 @@ __metadata: languageName: node linkType: hard -"glob@npm:^10.2.2, glob@npm:^10.3.10": - version: 10.3.10 - resolution: "glob@npm:10.3.10" +"glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.3.7": + version: 10.4.5 + resolution: "glob@npm:10.4.5" dependencies: foreground-child: "npm:^3.1.0" - jackspeak: "npm:^2.3.5" - minimatch: "npm:^9.0.1" - minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry: "npm:^1.10.1" + jackspeak: "npm:^3.1.2" + minimatch: "npm:^9.0.4" + minipass: "npm:^7.1.2" + package-json-from-dist: "npm:^1.0.0" + path-scurry: "npm:^1.11.1" bin: glob: dist/esm/bin.mjs - checksum: 10c0/13d8a1feb7eac7945f8c8480e11cd4a44b24d26503d99a8d8ac8d5aefbf3e9802a2b6087318a829fad04cb4e829f25c5f4f1110c68966c498720dd261c7e344d + checksum: 10c0/19a9759ea77b8e3ca0a43c2f07ecddc2ad46216b786bb8f993c445aee80d345925a21e5280c7b7c6c59e860a0154b84e4b2b60321fea92cd3c56b4a7489f160e languageName: node linkType: hard @@ -1738,13 +1696,13 @@ __metadata: linkType: hard "happy-dom@npm:^15.10.2": - version: 15.10.2 - resolution: "happy-dom@npm:15.10.2" + version: 15.11.7 + resolution: "happy-dom@npm:15.11.7" dependencies: entities: "npm:^4.5.0" webidl-conversions: "npm:^7.0.0" whatwg-mimetype: "npm:^3.0.0" - checksum: 10c0/b0403c4c53021da25989b320f2a6c0ab760cc538f10e403df9d2f14b0a7d20b1be961192c95322b335dc71fa27941e7e8b883b2d79d7c9c51215a97b3e3097a6 + checksum: 10c0/22b08cac20192b08edf2e9c857ceeda8333a3301c4b5965a9550787b00db60d6d107c726390bd45a35305cd12ab086abd656bf957a408be0fcdc9fcd389f1973 languageName: node linkType: hard @@ -1763,31 +1721,31 @@ __metadata: linkType: hard "http-proxy-agent@npm:^7.0.0": - version: 7.0.0 - resolution: "http-proxy-agent@npm:7.0.0" + version: 7.0.2 + resolution: "http-proxy-agent@npm:7.0.2" dependencies: agent-base: "npm:^7.1.0" debug: "npm:^4.3.4" - checksum: 10c0/a11574ff39436cee3c7bc67f259444097b09474605846ddd8edf0bf4ad8644be8533db1aa463426e376865047d05dc22755e638632819317c0c2f1b2196657c8 + checksum: 10c0/4207b06a4580fb85dd6dff521f0abf6db517489e70863dca1a0291daa7f2d3d2d6015a57bd702af068ea5cf9f1f6ff72314f5f5b4228d299c0904135d2aef921 languageName: node linkType: hard "https-proxy-agent@npm:^7.0.1": - version: 7.0.2 - resolution: "https-proxy-agent@npm:7.0.2" + version: 7.0.6 + resolution: "https-proxy-agent@npm:7.0.6" dependencies: - agent-base: "npm:^7.0.2" + agent-base: "npm:^7.1.2" debug: "npm:4" - checksum: 10c0/7735eb90073db087e7e79312e3d97c8c04baf7ea7ca7b013382b6a45abbaa61b281041a98f4e13c8c80d88f843785bcc84ba189165b4b4087b1e3496ba656d77 + checksum: 10c0/f729219bc735edb621fa30e6e84e60ee5d00802b8247aac0d7b79b0bd6d4b3294737a337b93b86a0bd9e68099d031858a39260c976dc14cdbba238ba1f8779ac languageName: node linkType: hard "husky@npm:^9.0.0": - version: 9.0.7 - resolution: "husky@npm:9.0.7" + version: 9.1.7 + resolution: "husky@npm:9.1.7" bin: husky: bin.js - checksum: 10c0/ac36838bc230b42ca878eeb6993cba5499b858700581fa9e8b579227af9ad47bdbf4c050f4145f51f33f77c16d359f329622b7050150c78a7c52be26cc24174e + checksum: 10c0/35bb110a71086c48906aa7cd3ed4913fb913823715359d65e32e0b964cb1e255593b0ae8014a5005c66a68e6fa66c38dcfa8056dbbdfb8b0187c0ffe7ee3a58f languageName: node linkType: hard @@ -1801,9 +1759,9 @@ __metadata: linkType: hard "ignore@npm:^5.2.4": - version: 5.2.4 - resolution: "ignore@npm:5.2.4" - checksum: 10c0/7c7cd90edd9fea6e037f9b9da4b01bf0a86b198ce78345f9bbd983929d68ff14830be31111edc5d70c264921f4962404d75b7262b4d9cc3bc12381eccbd03096 + version: 5.3.2 + resolution: "ignore@npm:5.3.2" + checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 languageName: node linkType: hard @@ -1861,13 +1819,6 @@ __metadata: languageName: node linkType: hard -"is-lambda@npm:^1.0.1": - version: 1.0.1 - resolution: "is-lambda@npm:1.0.1" - checksum: 10c0/85fee098ae62ba6f1e24cf22678805473c7afd0fb3978a3aa260e354cb7bcb3a5806cf0a98403188465efedec41ab4348e8e4e79305d409601323855b3839d4d - languageName: node - linkType: hard - "is-number@npm:^7.0.0": version: 7.0.0 resolution: "is-number@npm:7.0.0" @@ -1889,29 +1840,25 @@ __metadata: languageName: node linkType: hard -"jackspeak@npm:^2.3.5": - version: 2.3.6 - resolution: "jackspeak@npm:2.3.6" +"jackspeak@npm:^3.1.2": + version: 3.4.3 + resolution: "jackspeak@npm:3.4.3" dependencies: "@isaacs/cliui": "npm:^8.0.2" "@pkgjs/parseargs": "npm:^0.11.0" dependenciesMeta: "@pkgjs/parseargs": optional: true - checksum: 10c0/f01d8f972d894cd7638bc338e9ef5ddb86f7b208ce177a36d718eac96ec86638a6efa17d0221b10073e64b45edc2ce15340db9380b1f5d5c5d000cbc517dc111 + checksum: 10c0/6acc10d139eaefdbe04d2f679e6191b3abf073f111edf10b1de5302c97ec93fffeb2fdd8681ed17f16268aa9dd4f8c588ed9d1d3bffbbfa6e8bf897cbb3149b9 languageName: node linkType: hard "jackspeak@npm:^4.0.1": - version: 4.0.1 - resolution: "jackspeak@npm:4.0.1" + version: 4.0.2 + resolution: "jackspeak@npm:4.0.2" dependencies: "@isaacs/cliui": "npm:^8.0.2" - "@pkgjs/parseargs": "npm:^0.11.0" - dependenciesMeta: - "@pkgjs/parseargs": - optional: true - checksum: 10c0/c87997d9c9c5b7366259b1f2a444ef148692f8eedad5307caca939babbb60af2b47d306e5c63bf9d5fefbab2ab48d4da275188c3de525d0e716cc21b784bbccb + checksum: 10c0/b26039d11c0163a95b1e58851b9ac453cce64ad6d1eb98a00b303ad5eeb761b29d33c9419d1e16c016d3f7151c8edf7df223e6cf93a1907655fd95d6ce85c0de languageName: node linkType: hard @@ -1954,14 +1901,7 @@ __metadata: languageName: node linkType: hard -"lodash.memoize@npm:^4.1.1": - version: 4.1.2 - resolution: "lodash.memoize@npm:4.1.2" - checksum: 10c0/c8713e51eccc650422716a14cece1809cfe34bc5ab5e242b7f8b4e2241c2483697b971a604252807689b9dd69bfe3a98852e19a5b89d506b000b4187a1285df8 - languageName: node - linkType: hard - -"lodash@npm:^4.17.15": +"lodash@npm:^4.17.21": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: 10c0/d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c @@ -1986,17 +1926,17 @@ __metadata: languageName: node linkType: hard -"lru-cache@npm:^10.0.1, lru-cache@npm:^9.1.1 || ^10.0.0": - version: 10.2.0 - resolution: "lru-cache@npm:10.2.0" - checksum: 10c0/c9847612aa2daaef102d30542a8d6d9b2c2bb36581c1bf0dc3ebf5e5f3352c772a749e604afae2e46873b930a9e9523743faac4e5b937c576ab29196774712ee +"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": + version: 10.4.3 + resolution: "lru-cache@npm:10.4.3" + checksum: 10c0/ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb languageName: node linkType: hard "lru-cache@npm:^11.0.0": - version: 11.0.0 - resolution: "lru-cache@npm:11.0.0" - checksum: 10c0/827ff0e0739f9b0f30f92f5a5fc97c6a2bd3ae32c0452bc58cb7411d6c589d49536073027293f2d1f02d0c2e72b63b162f238df7e9ff6f4cc0345f92afec4d1d + version: 11.0.2 + resolution: "lru-cache@npm:11.0.2" + checksum: 10c0/c993b8e06ead0b24b969c1dbb5b301716aed66e320e9014a80012f5febe280b438f28ff50046b2c55ff404e889351ccb332ff91f8dd175a21f5eae80e3fb155f languageName: node linkType: hard @@ -2018,7 +1958,7 @@ __metadata: languageName: node linkType: hard -"magic-string@npm:^0.30.14": +"magic-string@npm:^0.30.17": version: 0.30.17 resolution: "magic-string@npm:0.30.17" dependencies: @@ -2027,22 +1967,41 @@ __metadata: languageName: node linkType: hard -"make-fetch-happen@npm:^13.0.0": - version: 13.0.0 - resolution: "make-fetch-happen@npm:13.0.0" +"make-fetch-happen@npm:^14.0.3": + version: 14.0.3 + resolution: "make-fetch-happen@npm:14.0.3" dependencies: - "@npmcli/agent": "npm:^2.0.0" - cacache: "npm:^18.0.0" + "@npmcli/agent": "npm:^3.0.0" + cacache: "npm:^19.0.1" http-cache-semantics: "npm:^4.1.1" - is-lambda: "npm:^1.0.1" minipass: "npm:^7.0.2" - minipass-fetch: "npm:^3.0.0" + minipass-fetch: "npm:^4.0.0" minipass-flush: "npm:^1.0.5" minipass-pipeline: "npm:^1.2.4" - negotiator: "npm:^0.6.3" + negotiator: "npm:^1.0.0" + proc-log: "npm:^5.0.0" promise-retry: "npm:^2.0.1" - ssri: "npm:^10.0.0" - checksum: 10c0/43b9f6dcbc6fe8b8604cb6396957c3698857a15ba4dbc38284f7f0e61f248300585ef1eb8cc62df54e9c724af977e45b5cdfd88320ef7f53e45070ed3488da55 + ssri: "npm:^12.0.0" + checksum: 10c0/c40efb5e5296e7feb8e37155bde8eb70bc57d731b1f7d90e35a092fde403d7697c56fb49334d92d330d6f1ca29a98142036d6480a12681133a0a1453164cb2f0 + languageName: node + linkType: hard + +"map-age-cleaner@npm:^0.1.3": + version: 0.1.3 + resolution: "map-age-cleaner@npm:0.1.3" + dependencies: + p-defer: "npm:^1.0.0" + checksum: 10c0/7495236c7b0950956c144fd8b4bc6399d4e78072a8840a4232fe1c4faccbb5eb5d842e5c0a56a60afc36d723f315c1c672325ca03c1b328650f7fcc478f385fd + languageName: node + linkType: hard + +"mem@npm:^8.0.0": + version: 8.1.1 + resolution: "mem@npm:8.1.1" + dependencies: + map-age-cleaner: "npm:^0.1.3" + mimic-fn: "npm:^3.1.0" + checksum: 10c0/5829c404d024c1accaf76ebacbc7eae9b59e5ce5722d184aa24e8387a8097a499f6aa7e181021003c51eb87b2dcdc9a2270050c58753cce761de206643cba91c languageName: node linkType: hard @@ -2070,6 +2029,13 @@ __metadata: languageName: node linkType: hard +"mimic-fn@npm:^3.1.0": + version: 3.1.0 + resolution: "mimic-fn@npm:3.1.0" + checksum: 10c0/a07cdd8ed6490c2dff5b11f889b245d9556b80f5a653a552a651d17cff5a2d156e632d235106c2369f00cccef4071704589574cf3601bc1b1400a1f620dff067 + languageName: node + linkType: hard + "min-indent@npm:^1.0.0": version: 1.0.1 resolution: "min-indent@npm:1.0.1" @@ -2086,12 +2052,12 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^9.0.1": - version: 9.0.3 - resolution: "minimatch@npm:9.0.3" +"minimatch@npm:^9.0.4": + version: 9.0.5 + resolution: "minimatch@npm:9.0.5" dependencies: brace-expansion: "npm:^2.0.1" - checksum: 10c0/85f407dcd38ac3e180f425e86553911d101455ca3ad5544d6a7cec16286657e4f8a9aa6695803025c55e31e35a91a2252b5dc8e7d527211278b8b65b4dbd5eac + checksum: 10c0/de96cf5e35bdf0eab3e2c853522f98ffbe9a36c37797778d2665231ec1f20a9447a7e567cb640901f89e4daaa95ae5d70c65a9e8aa2bb0019b6facbc3c0575ed languageName: node linkType: hard @@ -2104,18 +2070,18 @@ __metadata: languageName: node linkType: hard -"minipass-fetch@npm:^3.0.0": - version: 3.0.4 - resolution: "minipass-fetch@npm:3.0.4" +"minipass-fetch@npm:^4.0.0": + version: 4.0.0 + resolution: "minipass-fetch@npm:4.0.0" dependencies: encoding: "npm:^0.1.13" minipass: "npm:^7.0.3" minipass-sized: "npm:^1.0.3" - minizlib: "npm:^2.1.2" + minizlib: "npm:^3.0.1" dependenciesMeta: encoding: optional: true - checksum: 10c0/1b63c1f3313e88eeac4689f1b71c9f086598db9a189400e3ee960c32ed89e06737fa23976c9305c2d57464fb3fcdc12749d3378805c9d6176f5569b0d0ee8a75 + checksum: 10c0/7fa30ce7c373fb6f94c086b374fff1589fd7e78451855d2d06c2e2d9df936d131e73e952163063016592ed3081444bd8d1ea608533313b0149156ce23311da4b languageName: node linkType: hard @@ -2155,36 +2121,29 @@ __metadata: languageName: node linkType: hard -"minipass@npm:^5.0.0": - version: 5.0.0 - resolution: "minipass@npm:5.0.0" - checksum: 10c0/a91d8043f691796a8ac88df039da19933ef0f633e3d7f0d35dcd5373af49131cf2399bfc355f41515dc495e3990369c3858cd319e5c2722b4753c90bf3152462 - languageName: node - linkType: hard - -"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.1.2": +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2": version: 7.1.2 resolution: "minipass@npm:7.1.2" checksum: 10c0/b0fd20bb9fb56e5fa9a8bfac539e8915ae07430a619e4b86ff71f5fc757ef3924b23b2c4230393af1eda647ed3d75739e4e0acb250a6b1eb277cf7f8fe449557 languageName: node linkType: hard -"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": - version: 2.1.2 - resolution: "minizlib@npm:2.1.2" +"minizlib@npm:^3.0.1": + version: 3.0.1 + resolution: "minizlib@npm:3.0.1" dependencies: - minipass: "npm:^3.0.0" - yallist: "npm:^4.0.0" - checksum: 10c0/64fae024e1a7d0346a1102bb670085b17b7f95bf6cfdf5b128772ec8faf9ea211464ea4add406a3a6384a7d87a0cd1a96263692134323477b4fb43659a6cab78 + minipass: "npm:^7.0.4" + rimraf: "npm:^5.0.5" + checksum: 10c0/82f8bf70da8af656909a8ee299d7ed3b3372636749d29e105f97f20e88971be31f5ed7642f2e898f00283b68b701cc01307401cdc209b0efc5dd3818220e5093 languageName: node linkType: hard -"mkdirp@npm:^1.0.3": - version: 1.0.4 - resolution: "mkdirp@npm:1.0.4" +"mkdirp@npm:^3.0.1": + version: 3.0.1 + resolution: "mkdirp@npm:3.0.1" bin: - mkdirp: bin/cmd.js - checksum: 10c0/46ea0f3ffa8bc6a5bc0c7081ffc3907777f0ed6516888d40a518c5111f8366d97d2678911ad1a6882bf592fa9de6c784fea32e1687bb94e1f4944170af48a5cf + mkdirp: dist/cjs/src/bin.js + checksum: 10c0/9f2b975e9246351f5e3a40dcfac99fcd0baa31fbfab615fe059fb11e51f10e4803c63de1f384c54d656e4db31d000e4767e9ef076a22e12a641357602e31d57d languageName: node linkType: hard @@ -2204,10 +2163,10 @@ __metadata: languageName: node linkType: hard -"negotiator@npm:^0.6.3": - version: 0.6.3 - resolution: "negotiator@npm:0.6.3" - checksum: 10c0/3ec9fd413e7bf071c937ae60d572bc67155262068ed522cf4b3be5edbe6ddf67d095ec03a3a14ebf8fc8e95f8e1d61be4869db0dbb0de696f6b837358bd43fc2 +"negotiator@npm:^1.0.0": + version: 1.0.0 + resolution: "negotiator@npm:1.0.0" + checksum: 10c0/4c559dd52669ea48e1914f9d634227c561221dd54734070791f999c52ed0ff36e437b2e07d5c1f6e32909fc625fe46491c16e4a8f0572567d4dd15c3a4fda04b languageName: node linkType: hard @@ -2219,22 +2178,22 @@ __metadata: linkType: hard "node-gyp@npm:latest": - version: 10.0.1 - resolution: "node-gyp@npm:10.0.1" + version: 11.0.0 + resolution: "node-gyp@npm:11.0.0" dependencies: env-paths: "npm:^2.2.0" exponential-backoff: "npm:^3.1.1" glob: "npm:^10.3.10" graceful-fs: "npm:^4.2.6" - make-fetch-happen: "npm:^13.0.0" - nopt: "npm:^7.0.0" - proc-log: "npm:^3.0.0" + make-fetch-happen: "npm:^14.0.3" + nopt: "npm:^8.0.0" + proc-log: "npm:^5.0.0" semver: "npm:^7.3.5" - tar: "npm:^6.1.2" - which: "npm:^4.0.0" + tar: "npm:^7.4.3" + which: "npm:^5.0.0" bin: node-gyp: bin/node-gyp.js - checksum: 10c0/abddfff7d873312e4ed4a5fb75ce893a5c4fb69e7fcb1dfa71c28a6b92a7f1ef6b62790dffb39181b5a82728ba8f2f32d229cf8cbe66769fe02cea7db4a555aa + checksum: 10c0/a3b885bbee2d271f1def32ba2e30ffcf4562a3db33af06b8b365e053153e2dd2051b9945783c3c8e852d26a0f20f65b251c7e83361623383a99635c0280ee573 languageName: node linkType: hard @@ -2245,14 +2204,21 @@ __metadata: languageName: node linkType: hard -"nopt@npm:^7.0.0": - version: 7.2.0 - resolution: "nopt@npm:7.2.0" +"nopt@npm:^8.0.0": + version: 8.0.0 + resolution: "nopt@npm:8.0.0" dependencies: abbrev: "npm:^2.0.0" bin: nopt: bin/nopt.js - checksum: 10c0/9bd7198df6f16eb29ff16892c77bcf7f0cc41f9fb5c26280ac0def2cf8cf319f3b821b3af83eba0e74c85807cc430a16efe0db58fe6ae1f41e69519f585b6aff + checksum: 10c0/19cb986f79abaca2d0f0b560021da7b32ee6fcc3de48f3eaeb0c324d36755c17754f886a754c091f01f740c17caf7d6aea8237b7fbaf39f476ae5e30a249f18f + languageName: node + linkType: hard + +"p-defer@npm:^1.0.0": + version: 1.0.0 + resolution: "p-defer@npm:1.0.0" + checksum: 10c0/ed603c3790e74b061ac2cb07eb6e65802cf58dce0fbee646c113a7b71edb711101329ad38f99e462bd2e343a74f6e9366b496a35f1d766c187084d3109900487 languageName: node linkType: hard @@ -2274,15 +2240,6 @@ __metadata: languageName: node linkType: hard -"p-map@npm:^4.0.0": - version: 4.0.0 - resolution: "p-map@npm:4.0.0" - dependencies: - aggregate-error: "npm:^3.0.0" - checksum: 10c0/592c05bd6262c466ce269ff172bb8de7c6975afca9b50c975135b974e9bdaafbfe80e61aaaf5be6d1200ba08b30ead04b88cfa7e25ff1e3b93ab28c9f62a2c75 - languageName: node - linkType: hard - "p-map@npm:^5.1.0": version: 5.5.0 resolution: "p-map@npm:5.5.0" @@ -2299,6 +2256,13 @@ __metadata: languageName: node linkType: hard +"p-map@npm:^7.0.2": + version: 7.0.3 + resolution: "p-map@npm:7.0.3" + checksum: 10c0/46091610da2b38ce47bcd1d8b4835a6fa4e832848a6682cf1652bc93915770f4617afc844c10a77d1b3e56d2472bb2d5622353fa3ead01a7f42b04fc8e744a5c + languageName: node + linkType: hard + "p-timeout@npm:^5.0.2": version: 5.1.0 resolution: "p-timeout@npm:5.1.0" @@ -2307,9 +2271,9 @@ __metadata: linkType: hard "package-json-from-dist@npm:^1.0.0": - version: 1.0.0 - resolution: "package-json-from-dist@npm:1.0.0" - checksum: 10c0/e3ffaf6ac1040ab6082a658230c041ad14e72fabe99076a2081bb1d5d41210f11872403fc09082daf4387fc0baa6577f96c9c0e94c90c394fd57794b66aa4033 + version: 1.0.1 + resolution: "package-json-from-dist@npm:1.0.1" + checksum: 10c0/62ba2785eb655fec084a257af34dbe24292ab74516d6aecef97ef72d4897310bc6898f6c85b5cd22770eaa1ce60d55a0230e150fb6a966e3ecd6c511e23d164b languageName: node linkType: hard @@ -2320,13 +2284,13 @@ __metadata: languageName: node linkType: hard -"path-scurry@npm:^1.10.1": - version: 1.10.1 - resolution: "path-scurry@npm:1.10.1" +"path-scurry@npm:^1.11.1": + version: 1.11.1 + resolution: "path-scurry@npm:1.11.1" dependencies: - lru-cache: "npm:^9.1.1 || ^10.0.0" + lru-cache: "npm:^10.2.0" minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" - checksum: 10c0/e5dc78a7348d25eec61ab166317e9e9c7b46818aa2c2b9006c507a6ff48c672d011292d9662527213e558f5652ce0afcc788663a061d8b59ab495681840c0c1e + checksum: 10c0/32a13711a2a505616ae1cc1b5076801e453e7aae6ac40ab55b388bb91b9d0547a52f5aaceff710ea400205f18691120d4431e520afbe4266b836fadede15872d languageName: node linkType: hard @@ -2397,10 +2361,10 @@ __metadata: languageName: node linkType: hard -"proc-log@npm:^3.0.0": - version: 3.0.0 - resolution: "proc-log@npm:3.0.0" - checksum: 10c0/f66430e4ff947dbb996058f6fd22de2c66612ae1a89b097744e17fb18a4e8e7a86db99eda52ccf15e53f00b63f4ec0b0911581ff2aac0355b625c8eac509b0dc +"proc-log@npm:^5.0.0": + version: 5.0.0 + resolution: "proc-log@npm:5.0.0" + checksum: 10c0/bbe5edb944b0ad63387a1d5b1911ae93e05ce8d0f60de1035b218cdcceedfe39dbd2c697853355b70f1a090f8f58fe90da487c85216bf9671f9499d1a897e9e3 languageName: node linkType: hard @@ -2463,14 +2427,14 @@ __metadata: linkType: soft "react-dom@npm:^18.2.0": - version: 18.2.0 - resolution: "react-dom@npm:18.2.0" + version: 18.3.1 + resolution: "react-dom@npm:18.3.1" dependencies: loose-envify: "npm:^1.1.0" - scheduler: "npm:^0.23.0" + scheduler: "npm:^0.23.2" peerDependencies: - react: ^18.2.0 - checksum: 10c0/66dfc5f93e13d0674e78ef41f92ed21dfb80f9c4ac4ac25a4b51046d41d4d2186abc915b897f69d3d0ebbffe6184e7c5876f2af26bfa956f179225d921be713a + react: ^18.3.1 + checksum: 10c0/a752496c1941f958f2e8ac56239172296fcddce1365ce45222d04a1947e0cc5547df3e8447f855a81d6d39f008d7c32eab43db3712077f09e3f67c4874973e85 languageName: node linkType: hard @@ -2489,11 +2453,11 @@ __metadata: linkType: hard "react@npm:^18.2.0": - version: 18.2.0 - resolution: "react@npm:18.2.0" + version: 18.3.1 + resolution: "react@npm:18.3.1" dependencies: loose-envify: "npm:^1.1.0" - checksum: 10c0/b562d9b569b0cb315e44b48099f7712283d93df36b19a39a67c254c6686479d3980b7f013dc931f4a5a3ae7645eae6386b4aa5eea933baa54ecd0f9acb0902b8 + checksum: 10c0/283e8c5efcf37802c9d1ce767f302dd569dd97a70d9bb8c7be79a789b9902451e0d16334b05d73299b20f048cbc3c7d288bbbde10b701fa194e2089c237dbea3 languageName: node linkType: hard @@ -2508,9 +2472,9 @@ __metadata: linkType: hard "regenerator-runtime@npm:^0.14.0": - version: 0.14.0 - resolution: "regenerator-runtime@npm:0.14.0" - checksum: 10c0/e25f062c1a183f81c99681691a342760e65c55e8d3a4d4fe347ebe72433b123754b942b70b622959894e11f8a9131dc549bd3c9a5234677db06a4af42add8d12 + version: 0.14.1 + resolution: "regenerator-runtime@npm:0.14.1" + checksum: 10c0/1b16eb2c4bceb1665c89de70dcb64126a22bc8eb958feef3cd68fe11ac6d2a4899b5cd1b80b0774c7c03591dc57d16631a7f69d2daa2ec98100e2f29f7ec4cc4 languageName: node linkType: hard @@ -2528,6 +2492,17 @@ __metadata: languageName: node linkType: hard +"rimraf@npm:^5.0.5": + version: 5.0.10 + resolution: "rimraf@npm:5.0.10" + dependencies: + glob: "npm:^10.3.7" + bin: + rimraf: dist/esm/bin.mjs + checksum: 10c0/7da4fd0e15118ee05b918359462cfa1e7fe4b1228c7765195a45b55576e8c15b95db513b8466ec89129666f4af45ad978a3057a02139afba1a63512a2d9644cc + languageName: node + linkType: hard + "rimraf@npm:^6.0.0": version: 6.0.1 resolution: "rimraf@npm:6.0.1" @@ -2541,28 +2516,28 @@ __metadata: linkType: hard "rollup@npm:^4.23.0": - version: 4.28.1 - resolution: "rollup@npm:4.28.1" - dependencies: - "@rollup/rollup-android-arm-eabi": "npm:4.28.1" - "@rollup/rollup-android-arm64": "npm:4.28.1" - "@rollup/rollup-darwin-arm64": "npm:4.28.1" - "@rollup/rollup-darwin-x64": "npm:4.28.1" - "@rollup/rollup-freebsd-arm64": "npm:4.28.1" - "@rollup/rollup-freebsd-x64": "npm:4.28.1" - "@rollup/rollup-linux-arm-gnueabihf": "npm:4.28.1" - "@rollup/rollup-linux-arm-musleabihf": "npm:4.28.1" - "@rollup/rollup-linux-arm64-gnu": "npm:4.28.1" - "@rollup/rollup-linux-arm64-musl": "npm:4.28.1" - "@rollup/rollup-linux-loongarch64-gnu": "npm:4.28.1" - "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.28.1" - "@rollup/rollup-linux-riscv64-gnu": "npm:4.28.1" - "@rollup/rollup-linux-s390x-gnu": "npm:4.28.1" - "@rollup/rollup-linux-x64-gnu": "npm:4.28.1" - "@rollup/rollup-linux-x64-musl": "npm:4.28.1" - "@rollup/rollup-win32-arm64-msvc": "npm:4.28.1" - "@rollup/rollup-win32-ia32-msvc": "npm:4.28.1" - "@rollup/rollup-win32-x64-msvc": "npm:4.28.1" + version: 4.29.1 + resolution: "rollup@npm:4.29.1" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.29.1" + "@rollup/rollup-android-arm64": "npm:4.29.1" + "@rollup/rollup-darwin-arm64": "npm:4.29.1" + "@rollup/rollup-darwin-x64": "npm:4.29.1" + "@rollup/rollup-freebsd-arm64": "npm:4.29.1" + "@rollup/rollup-freebsd-x64": "npm:4.29.1" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.29.1" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.29.1" + "@rollup/rollup-linux-arm64-gnu": "npm:4.29.1" + "@rollup/rollup-linux-arm64-musl": "npm:4.29.1" + "@rollup/rollup-linux-loongarch64-gnu": "npm:4.29.1" + "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.29.1" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.29.1" + "@rollup/rollup-linux-s390x-gnu": "npm:4.29.1" + "@rollup/rollup-linux-x64-gnu": "npm:4.29.1" + "@rollup/rollup-linux-x64-musl": "npm:4.29.1" + "@rollup/rollup-win32-arm64-msvc": "npm:4.29.1" + "@rollup/rollup-win32-ia32-msvc": "npm:4.29.1" + "@rollup/rollup-win32-x64-msvc": "npm:4.29.1" "@types/estree": "npm:1.0.6" fsevents: "npm:~2.3.2" dependenciesMeta: @@ -2608,7 +2583,7 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: 10c0/2d2d0433b7cb53153a04c7b406f342f31517608dc57510e49177941b9e68c30071674b83a0292ef1d87184e5f7c6d0f2945c8b3c74963074de10c75366fe2c14 + checksum: 10c0/fcd0321df78fdc74b36858e92c4b73ebf5aa8f0b9cf7c446f008e0dc3c5c4ed855d662dc44e5a09c7794bbe91017b4dd7be88b619c239f0494f9f0fbfa67c557 languageName: node linkType: hard @@ -2628,12 +2603,12 @@ __metadata: languageName: node linkType: hard -"scheduler@npm:^0.23.0": - version: 0.23.0 - resolution: "scheduler@npm:0.23.0" +"scheduler@npm:^0.23.2": + version: 0.23.2 + resolution: "scheduler@npm:0.23.2" dependencies: loose-envify: "npm:^1.1.0" - checksum: 10c0/b777f7ca0115e6d93e126ac490dbd82642d14983b3079f58f35519d992fa46260be7d6e6cede433a92db70306310c6f5f06e144f0e40c484199e09c1f7be53dd + checksum: 10c0/26383305e249651d4c58e6705d5f8425f153211aef95f15161c151f7b8de885f24751b377e4a0b3dd42cce09aad3f87a61dab7636859c0d89b7daf1a1e2a5c78 languageName: node linkType: hard @@ -2699,18 +2674,18 @@ __metadata: languageName: node linkType: hard -"socks-proxy-agent@npm:^8.0.1": - version: 8.0.2 - resolution: "socks-proxy-agent@npm:8.0.2" +"socks-proxy-agent@npm:^8.0.3": + version: 8.0.5 + resolution: "socks-proxy-agent@npm:8.0.5" dependencies: - agent-base: "npm:^7.0.2" + agent-base: "npm:^7.1.2" debug: "npm:^4.3.4" - socks: "npm:^2.7.1" - checksum: 10c0/a842402fc9b8848a31367f2811ca3cd14c4106588b39a0901cd7a69029998adfc6456b0203617c18ed090542ad0c24ee4e9d4c75a0c4b75071e214227c177eb7 + socks: "npm:^2.8.3" + checksum: 10c0/5d2c6cecba6821389aabf18728325730504bf9bb1d9e342e7987a5d13badd7a98838cc9a55b8ed3cb866ad37cc23e1086f09c4d72d93105ce9dfe76330e9d2a6 languageName: node linkType: hard -"socks@npm:^2.7.1": +"socks@npm:^2.8.3": version: 2.8.3 resolution: "socks@npm:2.8.3" dependencies: @@ -2734,12 +2709,12 @@ __metadata: languageName: node linkType: hard -"ssri@npm:^10.0.0": - version: 10.0.5 - resolution: "ssri@npm:10.0.5" +"ssri@npm:^12.0.0": + version: 12.0.0 + resolution: "ssri@npm:12.0.0" dependencies: minipass: "npm:^7.0.3" - checksum: 10c0/b091f2ae92474183c7ac5ed3f9811457e1df23df7a7e70c9476eaa9a0c4a0c8fc190fb45acefbf023ca9ee864dd6754237a697dc52a0fb182afe65d8e77443d8 + checksum: 10c0/caddd5f544b2006e88fa6b0124d8d7b28208b83c72d7672d5ade44d794525d23b540f3396108c4eb9280dcb7c01f0bef50682f5b4b2c34291f7c5e211fd1417d languageName: node linkType: hard @@ -2815,17 +2790,17 @@ __metadata: languageName: node linkType: hard -"tar@npm:^6.1.11, tar@npm:^6.1.2": - version: 6.2.1 - resolution: "tar@npm:6.2.1" +"tar@npm:^7.4.3": + version: 7.4.3 + resolution: "tar@npm:7.4.3" dependencies: - chownr: "npm:^2.0.0" - fs-minipass: "npm:^2.0.0" - minipass: "npm:^5.0.0" - minizlib: "npm:^2.1.1" - mkdirp: "npm:^1.0.3" - yallist: "npm:^4.0.0" - checksum: 10c0/a5eca3eb50bc11552d453488344e6507156b9193efd7635e98e867fab275d527af53d8866e2370cd09dfe74378a18111622ace35af6a608e5223a7d27fe99537 + "@isaacs/fs-minipass": "npm:^4.0.0" + chownr: "npm:^3.0.0" + minipass: "npm:^7.1.2" + minizlib: "npm:^3.0.1" + mkdirp: "npm:^3.0.1" + yallist: "npm:^5.0.0" + checksum: 10c0/d4679609bb2a9b48eeaf84632b6d844128d2412b95b6de07d53d8ee8baf4ca0857c9331dfa510390a0727b550fd543d4d1a10995ad86cdf078423fbb8d99831d languageName: node linkType: hard @@ -2854,9 +2829,9 @@ __metadata: linkType: hard "tinyexec@npm:^0.3.1": - version: 0.3.1 - resolution: "tinyexec@npm:0.3.1" - checksum: 10c0/11e7a7c5d8b3bddf8b5cbe82a9290d70a6fad84d528421d5d18297f165723cb53d2e737d8f58dcce5ca56f2e4aa2d060f02510b1f8971784f97eb3e9aec28f09 + version: 0.3.2 + resolution: "tinyexec@npm:0.3.2" + checksum: 10c0/3efbf791a911be0bf0821eab37a3445c2ba07acc1522b1fa84ae1e55f10425076f1290f680286345ed919549ad67527d07281f1c19d584df3b74326909eb1f90 languageName: node linkType: hard @@ -2891,47 +2866,47 @@ __metadata: linkType: hard "typescript@npm:^5.5.2": - version: 5.5.2 - resolution: "typescript@npm:5.5.2" + version: 5.7.2 + resolution: "typescript@npm:5.7.2" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10c0/8ca39b27b5f9bd7f32db795045933ab5247897660627251e8254180b792a395bf061ea7231947d5d7ffa5cb4cc771970fd4ef543275f9b559f08c9325cccfce3 + checksum: 10c0/a873118b5201b2ef332127ef5c63fb9d9c155e6fdbe211cbd9d8e65877283797cca76546bad742eea36ed7efbe3424a30376818f79c7318512064e8625d61622 languageName: node linkType: hard "typescript@patch:typescript@npm%3A^5.5.2#optional!builtin": - version: 5.5.2 - resolution: "typescript@patch:typescript@npm%3A5.5.2#optional!builtin::version=5.5.2&hash=379a07" + version: 5.7.2 + resolution: "typescript@patch:typescript@npm%3A5.7.2#optional!builtin::version=5.7.2&hash=5786d5" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10c0/a7b7ede75dc7fc32a76d0d0af6b91f5fbd8620890d84c906f663d8783bf3de6d7bd50f0430b8bb55eac88a38934af847ff709e7156e5138b95ae94cbd5f73e5b + checksum: 10c0/f3b8082c9d1d1629a215245c9087df56cb784f9fb6f27b5d55577a20e68afe2a889c040aacff6d27e35be165ecf9dca66e694c42eb9a50b3b2c451b36b5675cb languageName: node linkType: hard -"undici-types@npm:~5.26.4": - version: 5.26.5 - resolution: "undici-types@npm:5.26.5" - checksum: 10c0/bb673d7876c2d411b6eb6c560e0c571eef4a01c1c19925175d16e3a30c4c428181fb8d7ae802a261f283e4166a0ac435e2f505743aa9e45d893f9a3df017b501 +"undici-types@npm:~6.20.0": + version: 6.20.0 + resolution: "undici-types@npm:6.20.0" + checksum: 10c0/68e659a98898d6a836a9a59e6adf14a5d799707f5ea629433e025ac90d239f75e408e2e5ff086afc3cace26f8b26ee52155293564593fbb4a2f666af57fc59bf languageName: node linkType: hard -"unique-filename@npm:^3.0.0": - version: 3.0.0 - resolution: "unique-filename@npm:3.0.0" +"unique-filename@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-filename@npm:4.0.0" dependencies: - unique-slug: "npm:^4.0.0" - checksum: 10c0/6363e40b2fa758eb5ec5e21b3c7fb83e5da8dcfbd866cc0c199d5534c42f03b9ea9ab069769cc388e1d7ab93b4eeef28ef506ab5f18d910ef29617715101884f + unique-slug: "npm:^5.0.0" + checksum: 10c0/38ae681cceb1408ea0587b6b01e29b00eee3c84baee1e41fd5c16b9ed443b80fba90c40e0ba69627e30855570a34ba8b06702d4a35035d4b5e198bf5a64c9ddc languageName: node linkType: hard -"unique-slug@npm:^4.0.0": - version: 4.0.0 - resolution: "unique-slug@npm:4.0.0" +"unique-slug@npm:^5.0.0": + version: 5.0.0 + resolution: "unique-slug@npm:5.0.0" dependencies: imurmurhash: "npm:^0.1.4" - checksum: 10c0/cb811d9d54eb5821b81b18205750be84cb015c20a4a44280794e915f5a0a70223ce39066781a354e872df3572e8155c228f43ff0cce94c7cbf4da2cc7cbdd635 + checksum: 10c0/d324c5a44887bd7e105ce800fcf7533d43f29c48757ac410afd42975de82cc38ea2035c0483f4de82d186691bf3208ef35c644f73aa2b1b20b8e651be5afd293 languageName: node linkType: hard @@ -2949,9 +2924,9 @@ __metadata: languageName: node linkType: hard -"vite-node@npm:3.0.0-beta.2": - version: 3.0.0-beta.2 - resolution: "vite-node@npm:3.0.0-beta.2" +"vite-node@npm:3.0.0-beta.3": + version: 3.0.0-beta.3 + resolution: "vite-node@npm:3.0.0-beta.3" dependencies: cac: "npm:^6.7.14" debug: "npm:^4.4.0" @@ -2960,15 +2935,15 @@ __metadata: vite: "npm:^5.0.0 || ^6.0.0" bin: vite-node: vite-node.mjs - checksum: 10c0/02beeb3c37f3c3637dd4f96f79c3efda7dd5a66e4e9290692501d70090c7ed40063c60cf7386afd2477f72986316eeee9f6f3e4812c0e4788d94cdb7b291e2c2 + checksum: 10c0/2bb427dea20c4cda571cbd61deca51b7b15de5b1b9e9f0a8b0ecfd184d3416f2793c1a74611a35b00e2ccb3314c273777bbd162414a6091d8acad1246df9e90a languageName: node linkType: hard "vite@npm:^5.0.0 || ^6.0.0, vite@npm:^6.0.0": - version: 6.0.5 - resolution: "vite@npm:6.0.5" + version: 6.0.6 + resolution: "vite@npm:6.0.6" dependencies: - esbuild: "npm:0.24.0" + esbuild: "npm:^0.24.2" fsevents: "npm:~2.3.3" postcss: "npm:^8.4.49" rollup: "npm:^4.23.0" @@ -3012,25 +2987,25 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 10c0/d6927e1795abf0bffbf9183c3c3338c7cc1060bcfbfcd951aa4464c1e5478216f26c95077a2bbd29edbaebc079c1f08a37c7daac8f07c0a6bb53e79d502c70ef + checksum: 10c0/144c3f80a7920a4b2fa14f00f99b58ece246455ca9313561a67a227b45dadac3343e406d3c1dbfafa79992ac88f54cb2b040b229997e432daf47594fe8cacec2 languageName: node linkType: hard "vitest@npm:^3.0.0-beta.2": - version: 3.0.0-beta.2 - resolution: "vitest@npm:3.0.0-beta.2" - dependencies: - "@vitest/expect": "npm:3.0.0-beta.2" - "@vitest/mocker": "npm:3.0.0-beta.2" - "@vitest/pretty-format": "npm:^3.0.0-beta.2" - "@vitest/runner": "npm:3.0.0-beta.2" - "@vitest/snapshot": "npm:3.0.0-beta.2" - "@vitest/spy": "npm:3.0.0-beta.2" - "@vitest/utils": "npm:3.0.0-beta.2" + version: 3.0.0-beta.3 + resolution: "vitest@npm:3.0.0-beta.3" + dependencies: + "@vitest/expect": "npm:3.0.0-beta.3" + "@vitest/mocker": "npm:3.0.0-beta.3" + "@vitest/pretty-format": "npm:^3.0.0-beta.3" + "@vitest/runner": "npm:3.0.0-beta.3" + "@vitest/snapshot": "npm:3.0.0-beta.3" + "@vitest/spy": "npm:3.0.0-beta.3" + "@vitest/utils": "npm:3.0.0-beta.3" chai: "npm:^5.1.2" debug: "npm:^4.4.0" expect-type: "npm:^1.1.0" - magic-string: "npm:^0.30.14" + magic-string: "npm:^0.30.17" pathe: "npm:^1.1.2" std-env: "npm:^3.8.0" tinybench: "npm:^2.9.0" @@ -3038,13 +3013,13 @@ __metadata: tinypool: "npm:^1.0.2" tinyrainbow: "npm:^1.2.0" vite: "npm:^5.0.0 || ^6.0.0" - vite-node: "npm:3.0.0-beta.2" + vite-node: "npm:3.0.0-beta.3" why-is-node-running: "npm:^2.3.0" peerDependencies: "@edge-runtime/vm": "*" "@types/node": ^18.0.0 || ^20.0.0 || >=22.0.0 - "@vitest/browser": 3.0.0-beta.2 - "@vitest/ui": 3.0.0-beta.2 + "@vitest/browser": 3.0.0-beta.3 + "@vitest/ui": 3.0.0-beta.3 happy-dom: "*" jsdom: "*" peerDependenciesMeta: @@ -3062,7 +3037,7 @@ __metadata: optional: true bin: vitest: vitest.mjs - checksum: 10c0/1775886a750afcb71b3fc08c918e07cf5fb677b740f5723b5815ea9c1e0fb2e956fe7d05d31f029d291e2ed1ea4236d4a30a4eada82830a9a8a50e997a69846d + checksum: 10c0/6ddec4cbe4768f6fbf81bce614e1cf2e0b0b00c737486a9ba010816081bd25ef38523029e8454a739210b12ee282d769e89f76a8b318682f55f26a4ce9002991 languageName: node linkType: hard @@ -3100,14 +3075,14 @@ __metadata: languageName: node linkType: hard -"which@npm:^4.0.0": - version: 4.0.0 - resolution: "which@npm:4.0.0" +"which@npm:^5.0.0": + version: 5.0.0 + resolution: "which@npm:5.0.0" dependencies: isexe: "npm:^3.1.1" bin: node-which: bin/which.js - checksum: 10c0/449fa5c44ed120ccecfe18c433296a4978a7583bf2391c50abce13f76878d2476defde04d0f79db8165bdf432853c1f8389d0485ca6e8ebce3bbcded513d5e6a + checksum: 10c0/e556e4cd8b7dbf5df52408c9a9dd5ac6518c8c5267c8953f5b0564073c66ed5bf9503b14d876d0e9c7844d4db9725fb0dcf45d6e911e17e26ab363dc3965ae7b languageName: node linkType: hard @@ -3158,3 +3133,10 @@ __metadata: checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a languageName: node linkType: hard + +"yallist@npm:^5.0.0": + version: 5.0.0 + resolution: "yallist@npm:5.0.0" + checksum: 10c0/a499c81ce6d4a1d260d4ea0f6d49ab4da09681e32c3f0472dee16667ed69d01dae63a3b81745a24bd78476ec4fcf856114cb4896ace738e01da34b2c42235416 + languageName: node + linkType: hard