diff --git a/packages/frosted-ui/.storybook/stories/components/calendar.stories.tsx b/packages/frosted-ui/.storybook/stories/components/calendar.stories.tsx new file mode 100644 index 00000000..49992883 --- /dev/null +++ b/packages/frosted-ui/.storybook/stories/components/calendar.stories.tsx @@ -0,0 +1,90 @@ +import type { Meta, StoryObj } from '@storybook/react'; + +import { + DateValue, + getLocalTimeZone, + isWeekend, + parseDate, + today, +} from '@internationalized/date'; +import { useLocale } from '@react-aria/i18n'; +import React from 'react'; +import { Calendar } from '../../../src/components'; + +// More on how to set up stories at: https://storybook.js.org/docs/react/writing-stories/introduction#default-export +const meta = { + title: 'Controls/Dates/Calendar', + component: Calendar, + args: { + isDisabled: false, + }, + parameters: { + // Optional parameter to center the component in the Canvas. More info: https://storybook.js.org/docs/react/configure/story-layout + layout: 'centered', + }, + // This component will have an automatically generated Autodocs entry: https://storybook.js.org/docs/react/writing-docs/autodocs + tags: ['autodocs'], +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +// More on writing stories with args: https://storybook.js.org/docs/react/writing-stories/args +export const Default: Story = { + args: {}, + render: (args) => ( +
+ console.log(date.toString())} + /> +
+ ), +}; +export const Disabled: Story = { + args: {}, + render: (args) => ( +
+ console.log(date.toString())} + /> +
+ ), +}; + +export const UnavailableDates: Story = { + name: 'Unavailable Dates', + args: {}, + render: (args) => { + let now = today(getLocalTimeZone()); + let disabledRanges = [ + [now, now.add({ days: 5 })], + [now.add({ days: 14 }), now.add({ days: 16 })], + [now.add({ days: 23 }), now.add({ days: 24 })], + ]; + + let { locale } = useLocale(); + let isDateUnavailable = (date: DateValue) => + isWeekend(date, locale) || + disabledRanges.some( + (interval) => + date.compare(interval[0]) >= 0 && date.compare(interval[1]) <= 0, + ); + + return ( +
+ +
+ ); + }, +}; diff --git a/packages/frosted-ui/.storybook/stories/components/date-field.stories.tsx b/packages/frosted-ui/.storybook/stories/components/date-field.stories.tsx new file mode 100644 index 00000000..d7b62cf3 --- /dev/null +++ b/packages/frosted-ui/.storybook/stories/components/date-field.stories.tsx @@ -0,0 +1,98 @@ +import type { Meta, StoryObj } from '@storybook/react'; + +import { + getLocalTimeZone, + parseDate, + parseZonedDateTime, + today, +} from '@internationalized/date'; +import React from 'react'; +import { DateField, Flex, dateFieldPropDefs } from '../../../src/components'; +// More on how to set up stories at: https://storybook.js.org/docs/react/writing-stories/introduction#default-export +const meta = { + title: 'Controls/Dates/DateField', + component: DateField, + args: { + size: dateFieldPropDefs.size.default, + color: dateFieldPropDefs.color.default, + 'aria-label': 'Birth date', + }, + parameters: { + // Optional parameter to center the component in the Canvas. More info: https://storybook.js.org/docs/react/configure/story-layout + layout: 'centered', + }, + // This component will have an automatically generated Autodocs entry: https://storybook.js.org/docs/react/writing-docs/autodocs + tags: ['autodocs'], +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +// More on writing stories with args: https://storybook.js.org/docs/react/writing-stories/args +export const Default: Story = { + args: {}, + render: (args) => ( +
+ console.log(date?.toString())} + /> +
+ ), +}; + +export const Size: Story = { + args: {}, + render: (args) => ( + + + + + + ), +}; + +export const MinValue: Story = { + args: {}, + render: (args) => ( + + + + ), +}; + +export const WithTime: Story = { + name: 'With time', + args: {}, + render: (args) => ( + + + + + + ), +}; diff --git a/packages/frosted-ui/.storybook/stories/components/date-picker.stories.tsx b/packages/frosted-ui/.storybook/stories/components/date-picker.stories.tsx new file mode 100644 index 00000000..43673318 --- /dev/null +++ b/packages/frosted-ui/.storybook/stories/components/date-picker.stories.tsx @@ -0,0 +1,115 @@ +import type { Meta, StoryObj } from '@storybook/react'; + +import { DateValue, parseDate } from '@internationalized/date'; +import React from 'react'; +import { + Button, + Calendar, + DatePicker, + Flex, + Popover, + datePickerPropDefs, +} from '../../../src/components'; + +// More on how to set up stories at: https://storybook.js.org/docs/react/writing-stories/introduction#default-export +const meta = { + title: 'Controls/Dates/DatePicker', + component: DatePicker, + args: { + size: datePickerPropDefs.size.default, + color: datePickerPropDefs.color.default, + defaultValue: parseDate('2020-02-03'), + onChange: (date) => console.log(date?.toString()), + 'aria-label': 'Birth date', + isDisabled: false, + }, + parameters: { + // Optional parameter to center the component in the Canvas. More info: https://storybook.js.org/docs/react/configure/story-layout + layout: 'centered', + }, + // This component will have an automatically generated Autodocs entry: https://storybook.js.org/docs/react/writing-docs/autodocs + tags: ['autodocs'], +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +// More on writing stories with args: https://storybook.js.org/docs/react/writing-stories/args +export const Default: Story = { + args: {}, + render: (args) => ( + + + + ), +}; + +export const Sizes: Story = { + args: {}, + render: (args) => ( + + + + + + ), +}; + +export const Custom: Story = { + args: {}, + render: () => { + const [date, setDate] = React.useState(parseDate('2020-02-03')); + const [open, setOpen] = React.useState(true); + return ( +
+ + + + + + { + setDate(value); + setOpen(false); + }} + /> + + +
+ ); + }, +}; + +const CalendarIcon = () => ( + + + + + + + + + + +); diff --git a/packages/frosted-ui/.storybook/stories/components/date-range-picker.stories.tsx b/packages/frosted-ui/.storybook/stories/components/date-range-picker.stories.tsx new file mode 100644 index 00000000..52d5679f --- /dev/null +++ b/packages/frosted-ui/.storybook/stories/components/date-range-picker.stories.tsx @@ -0,0 +1,242 @@ +import type { Meta, StoryObj } from '@storybook/react'; + +import { + DateValue, + getLocalTimeZone, + parseDate, +} from '@internationalized/date'; +import { useDateFormatter } from '@react-aria/i18n'; +import React from 'react'; +import { + Button, + DateField, + DateRangePicker, + Flex, + Inset, + Popover, + RangeCalendar, + Separator, + dateRangePickerPropDefs, +} from '../../../src/components'; + +// More on how to set up stories at: https://storybook.js.org/docs/react/writing-stories/introduction#default-export +const meta = { + title: 'Controls/Dates/DateRangePicker', + component: DateRangePicker, + args: { + size: dateRangePickerPropDefs.size.default, + color: dateRangePickerPropDefs.color.default, + defaultValue: { + start: parseDate('2020-02-03'), + end: parseDate('2020-02-08'), + }, + onChange: (date) => + console.log( + date ? date.start.toString() + ' - ' + date.end.toString() : date, + ), + 'aria-label': 'Birth date', + isDisabled: false, + }, + parameters: { + // Optional parameter to center the component in the Canvas. More info: https://storybook.js.org/docs/react/configure/story-layout + layout: 'centered', + }, + // This component will have an automatically generated Autodocs entry: https://storybook.js.org/docs/react/writing-docs/autodocs + tags: ['autodocs'], +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +// More on writing stories with args: https://storybook.js.org/docs/react/writing-stories/args +export const Default: Story = { + args: {}, + render: (args) => ( + + + + ), +}; + +export const Sizes: Story = { + args: {}, + render: (args) => ( + + + + + + ), +}; + +export const Custom: Story = { + args: {}, + render: (args) => { + const [date, setDate] = React.useState<{ + start: DateValue; + end: DateValue; + } | null>(null); + const [calendarDate, setCalendarDate] = React.useState<{ + start: DateValue | null; + end: DateValue | null; + }>(date || { start: null, end: null }); + + const [focusedDate, setFocusedDate] = React.useState< + DateValue | undefined + >(); + + let formatter = useDateFormatter({ dateStyle: 'medium' }); + + return ( +
+ { + if (!open) { + setCalendarDate(date || { start: null, end: null }); + setFocusedDate( + date + ? date.start + : calendarDate.start + ? calendarDate.start + : calendarDate.end + ? calendarDate.end + : undefined, + ); + } + }} + > + + + + + + + { + setCalendarDate((state) => ({ + ...state, + start: date || null, + })); + setFocusedDate(date || undefined); + }} + /> + + { + setCalendarDate((state) => ({ + ...state, + end: date || null, + })); + setFocusedDate(date || undefined); + }} + /> + + + + + + + + + + + + + + + + +
+ ); + }, +}; + +const ArrowRightIcon = () => ( + + + +); + +const CalendarIcon = () => ( + + + + + + + + + + +); diff --git a/packages/frosted-ui/.storybook/stories/components/range-calendar.stories.tsx b/packages/frosted-ui/.storybook/stories/components/range-calendar.stories.tsx new file mode 100644 index 00000000..7e1dcba3 --- /dev/null +++ b/packages/frosted-ui/.storybook/stories/components/range-calendar.stories.tsx @@ -0,0 +1,89 @@ +import type { Meta, StoryObj } from '@storybook/react'; + +import { + DateValue, + getLocalTimeZone, + isWeekend, + parseDate, + today, +} from '@internationalized/date'; +import { useLocale } from '@react-aria/i18n'; +import React from 'react'; +import { RangeCalendar } from '../../../src/components'; + +// More on how to set up stories at: https://storybook.js.org/docs/react/writing-stories/introduction#default-export +const meta = { + title: 'Controls/Dates/RangeCalendar', + component: RangeCalendar, + args: { + defaultValue: { + start: parseDate('2020-02-03'), + end: parseDate('2020-02-08'), + }, + onChange: (dateRange) => + console.log( + dateRange + ? dateRange.start.toString() + ' - ' + dateRange.end.toString() + : dateRange, + ), + }, + parameters: { + // Optional parameter to center the component in the Canvas. More info: https://storybook.js.org/docs/react/configure/story-layout + layout: 'centered', + }, + // This component will have an automatically generated Autodocs entry: https://storybook.js.org/docs/react/writing-docs/autodocs + tags: ['autodocs'], +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +// More on writing stories with args: https://storybook.js.org/docs/react/writing-stories/args +export const Default: Story = { + args: {}, + render: (args) => ( +
+ +
+ ), +}; + +export const Disabled: Story = { + args: {}, + render: (args) => ( +
+ +
+ ), +}; + +export const UnavailableDates: Story = { + name: 'Unavailable Dates', + args: {}, + render: (args) => { + const now = today(getLocalTimeZone()); + const disabledRanges = [ + [now, now.add({ days: 5 })], + [now.add({ days: 14 }), now.add({ days: 16 })], + [now.add({ days: 23 }), now.add({ days: 24 })], + ]; + + const { locale } = useLocale(); + const isDateUnavailable = (date: DateValue) => + isWeekend(date, locale) || + disabledRanges.some( + (interval) => + date.compare(interval[0]) >= 0 && date.compare(interval[1]) <= 0, + ); + + return ( +
+ +
+ ); + }, +}; diff --git a/packages/frosted-ui/.storybook/stories/components/select.stories.tsx b/packages/frosted-ui/.storybook/stories/components/select.stories.tsx index 26bb5897..23170435 100644 --- a/packages/frosted-ui/.storybook/stories/components/select.stories.tsx +++ b/packages/frosted-ui/.storybook/stories/components/select.stories.tsx @@ -8,6 +8,13 @@ const meta = { title: 'Controls/Select', component: Select.Root, args: {}, + argTypes: { + onValueChange: { + action: 'onValueChange', + description: `(value: string) => void`, + type: 'function', + }, + }, parameters: { // Optional parameter to center the component in the Canvas. More info: https://storybook.js.org/docs/react/configure/story-layout layout: 'centered', diff --git a/packages/frosted-ui/package.json b/packages/frosted-ui/package.json index 74230ce1..0cb93987 100644 --- a/packages/frosted-ui/package.json +++ b/packages/frosted-ui/package.json @@ -50,6 +50,7 @@ "release": "turbo-module publish" }, "dependencies": { + "@internationalized/date": "^3.5.1", "@radix-ui/colors": "^3.0.0", "@radix-ui/primitive": "^1.0.1", "@radix-ui/react-accessible-icon": "^1.0.3", @@ -77,7 +78,15 @@ "@radix-ui/react-tooltip": "^1.0.7", "@radix-ui/react-use-callback-ref": "^1.0.1", "@radix-ui/react-visually-hidden": "^1.0.3", + "@react-aria/calendar": "^3.5.3", + "@react-aria/datepicker": "^3.9.1", + "@react-aria/focus": "^3.15.0", + "@react-aria/i18n": "^3.9.0", + "@react-aria/utils": "^3.22.0", + "@react-stately/calendar": "^3.4.2", + "@react-stately/datepicker": "^3.9.1", "classnames": "^2.3.2", + "react-aria-components": "1.0.0-rc.0", "tailwindcss": "^3.3.5", "tslib": "^2.6.2" }, diff --git a/packages/frosted-ui/src/components/calendar.css b/packages/frosted-ui/src/components/calendar.css new file mode 100644 index 00000000..06ff2944 --- /dev/null +++ b/packages/frosted-ui/src/components/calendar.css @@ -0,0 +1,149 @@ +.fui-CalendarRoot { + display: inline-block; +} + +.fui-CalendarHeader { + display: flex; + align-items: center; + gap: 6px; + margin: 0 2px 12px 2px; +} + +.fui-CalendarDropdowns { + flex: 1; + display: flex; + gap: 6px; + justify-content: center; +} +.fui-CalendarDropdowns > * { + flex: 1; +} + +.fui-CalendarGrid { + width: 100%; + user-select: none; + border-spacing: 0; + border-collapse: collapse; + isolation: isolate; +} + +.fui-CalendarGrid th { + font-size: var(--font-size-2); + font-weight: var(--font-weight-regular); + color: var(--gray-a10); +} + +.fui-CalendarGridCellInner { + position: relative; + cursor: default; + text-align: center; + padding: 6px 8px; + margin: 2px 0; + position: relative; + outline: none; + + font-size: var(--font-size-2); + font-weight: var(--font-weight-regular); + line-height: var(--line-height-2); + color: var(--gray-a12); +} + +.fui-CalendarGridCellInner::before { + content: ''; + position: absolute; + inset: 0; + z-index: -1; +} +.fui-CalendarGridCellInner[data-selection-state]::before { + background: var(--accent-a4); + border-top-right-radius: inherit; + border-bottom-right-radius: inherit; + border-top-left-radius: inherit; + border-bottom-left-radius: inherit; +} +.fui-CalendarGridCellInner[data-selection-state='selected'] { + border-radius: 6px; +} + +.fui-CalendarGridCellInner:where(:not([aria-disabled]):hover) { + background: var(--gray-a3); + border-radius: 6px; +} +.fui-CalendarGridCellInner[data-selection-state='range']::before { + border-radius: 0; +} +.fui-CalendarGridCellInner.selected + .fui-CalendarGridCellInner.selected { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.fui-CalendarGridCellInner:where([aria-disabled]:hover) { + cursor: var(--cursor-disabled); +} + +.fui-CalendarGridCellInner[data-rounded='left']::before { + border-top-left-radius: 6px; + border-bottom-left-radius: 6px; +} +.fui-CalendarGridCellInner[data-rounded='right']::before { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} + +.fui-CalendarGridCellInner.selected { + background: var(--accent-9); + color: white; +} + +.fui-CalendarGridCellInner[data-selection-state='start'], +.fui-CalendarGridCellInner[data-selection-state='end'] { + border-radius: 6px; +} +.fui-CalendarGridCellInner[data-selection-state='end']::before { + border-top-left-radius: unset; + border-bottom-left-radius: unset; +} +.fui-CalendarGridCellInner[data-selection-state='start']::before { + border-top-right-radius: unset; + border-bottom-right-radius: unset; +} +.fui-CalendarGridCell:has([data-selection-state='start']) + + .fui-CalendarGridCell:has([data-selection-state='end']) + .fui-CalendarGridCellInner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.fui-CalendarGridCell:has([data-selection-state='start']):has( + + .fui-CalendarGridCell [data-selection-state='end'] + ) + .fui-CalendarGridCellInner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.fui-CalendarGridCellInner.focusRing:focus-visible:after { + content: ''; + position: absolute; + inset: 0px; + border-radius: 6px; + z-index: -1; + outline: 2px solid var(--accent-9); + outline-offset: 2px; + z-index: 1; + mix-blend-mode: screen; +} + +.fui-CalendarGridCellInner[aria-disabled] { + opacity: 0.6; +} + +.fui-CalendarGridCellInner.unavailable { + color: var(--danger-9); + text-decoration: line-through; +} + +.fui-CalendarGridCellInnerPlaceholder { + opacity: 0; + pointer-events: none; +} diff --git a/packages/frosted-ui/src/components/calendar.tsx b/packages/frosted-ui/src/components/calendar.tsx new file mode 100644 index 00000000..e208cb94 --- /dev/null +++ b/packages/frosted-ui/src/components/calendar.tsx @@ -0,0 +1,457 @@ +'use client'; + +import { + CalendarDate, + CalendarDateTime, + ZonedDateTime, + createCalendar, + getDayOfWeek, + getWeeksInMonth, + isSameDay, +} from '@internationalized/date'; +import { + AriaCalendarCellProps, + useCalendar, + useCalendarCell, + useCalendarGrid, + useRangeCalendar, +} from '@react-aria/calendar'; +import { useFocusRing } from '@react-aria/focus'; +import { useDateFormatter, useLocale } from '@react-aria/i18n'; +import { mergeProps } from '@react-aria/utils'; +import { + CalendarState, + CalendarStateOptions, + RangeCalendarState, + RangeCalendarStateOptions, + useCalendarState, + useRangeCalendarState, +} from '@react-stately/calendar'; +import classNames from 'classnames'; +import React, { useRef } from 'react'; + +import { IconButton } from './icon-button'; +import { Select } from './select'; + +export type MappedDateValue = T extends ZonedDateTime + ? ZonedDateTime + : T extends CalendarDateTime + ? CalendarDateTime + : T extends CalendarDate + ? CalendarDate + : never; + +type CalendarProps = Omit & { + className?: string; +}; + +function Calendar({ className, ...props }: CalendarProps) { + const { locale } = useLocale(); + const state = useCalendarState({ + ...props, + locale, + createCalendar, + }); + + // Destructuring props to remap/omit React Aria button props to avoid warnings + const { + calendarProps, + prevButtonProps: { + onPress: prevOnPress, + isDisabled: prevIsDisabled, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + onFocusChange: prevOnFocusChange, + ...otherPrevButtonProps + }, + nextButtonProps: { + onPress: nextOnPress, + isDisabled: nextIsDisabled, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + onFocusChange: nextOnFocusChange, + ...otherNextVuttonProps + }, + } = useCalendar(props, state); + + return ( +
+
+ + + +
+ + +
+ + + +
+ +
+ ); +} + +type RangeCalendarProps = Omit< + RangeCalendarStateOptions, + 'locale' | 'createCalendar' +> & { + className?: string; +}; + +function RangeCalendar({ className, ...props }: RangeCalendarProps) { + const { locale } = useLocale(); + const state = useRangeCalendarState({ + ...props, + locale, + createCalendar, + }); + const ref = useRef(null); + + // Destructuring props to remap/omit React Aria button props to avoid warnings + const { + calendarProps, + prevButtonProps: { + onPress: prevOnPress, + isDisabled: prevIsDisabled, + // Omit "onFocusChange" because it's not recognized by FUI button (plus we don't really need it) + // eslint-disable-next-line @typescript-eslint/no-unused-vars + onFocusChange: prevOnFocusChange, + ...otherPrevButtonProps + }, + nextButtonProps: { + onPress: nextOnPress, + isDisabled: nextIsDisabled, + // Omit "onFocusChange" because it's not recognized by FUI button (plus we don't really need it) + // eslint-disable-next-line @typescript-eslint/no-unused-vars + onFocusChange: nextOnFocusChange, + ...otherNextVuttonProps + }, + } = useRangeCalendar(props, state, ref); + + return ( +
+
+ + + +
+ + +
+ + + +
+ +
+ ); +} + +function MonthDropdown({ + state, +}: { + state: CalendarState | RangeCalendarState; +}) { + const months: Array = []; + const formatter = useDateFormatter({ + month: 'long', + timeZone: state.timeZone, + }); + + // Format the name of each month in the year according to the + // current locale and calendar system. Note that in some calendar + // systems, such as the Hebrew, the number of months may differ + // between years. + const numMonths = state.focusedDate.calendar.getMonthsInYear( + state.focusedDate, + ); + for (let i = 1; i <= numMonths; i++) { + const date = state.focusedDate.set({ month: i }); + months.push(formatter.format(date.toDate(state.timeZone))); + } + + const onChange = (newValue: string) => { + const value = Number(newValue); + const date = state.focusedDate.set({ month: value }); + state.setFocusedDate(date); + state.setFocused(false); + }; + + return ( + + + + {months.map((month, i) => ( + + {month} + + ))} + + + ); +} + +type YearItem = { + value: CalendarDate; + formatted: string; +}; + +function YearDropdown({ + state, +}: { + state: CalendarState | RangeCalendarState; +}) { + const years: Array = []; + const formatter = useDateFormatter({ + year: 'numeric', + timeZone: state.timeZone, + }); + + // Format 20 years on each side of the current year according + // to the current locale and calendar system. + for (let i = -20; i <= 20; i++) { + const date = state.focusedDate.add({ years: i }); + years.push({ + value: date, + formatted: formatter.format(date.toDate(state.timeZone)), + }); + } + + const onChange = (newValue: string) => { + const index = Number(newValue); + const date = years[index].value; + state.setFocusedDate(date); + state.setFocused(false); + }; + + return ( + + e.stopPropagation()} /> + + {years.map((year, i) => ( + + {year.formatted} + + ))} + + + ); +} + +function CalendarGrid({ + state, + ...props +}: { + state: CalendarState | RangeCalendarState; +}) { + const { locale } = useLocale(); + + const { gridProps, headerProps, weekDays } = useCalendarGrid( + { ...props, weekdayStyle: 'narrow' }, + state, + ); + + // Get the number of weeks in the month so we can render the proper number of rows. + const weeksInMonth = getWeeksInMonth(state.visibleRange.start, locale); + const placeholderWeeks = Math.max(0, 6 - weeksInMonth); + return ( + + + + {weekDays.map((day, index) => ( + + ))} + + + + {[...new Array(weeksInMonth).keys()].map((weekIndex) => ( + + {state + .getDatesInWeek(weekIndex) + .map((date, i) => + date ? ( + + ) : ( + + ))} + {[...new Array(placeholderWeeks).keys()].map((_, index) => ( + + {[...new Array(7).keys()].map((_, i) => ( + + ))} + + ))} + +
{day}
+ ), + )} +
+
+ 0 +
+
+ ); +} + +function CalendarCell({ + state, + ...props +}: AriaCalendarCellProps & { + state: CalendarState | RangeCalendarState; +}) { + const ref = useRef(null); + const { + cellProps, + buttonProps, + formattedDate, + isSelected, + isDisabled, + isOutsideVisibleRange, + isUnavailable, + } = useCalendarCell(props, state, ref); + + const { focusProps, isFocused, isFocusVisible } = useFocusRing(); + + // The start and end date of the selected range will have + // an emphasized appearance. + const isSelectionStart = + 'highlightedRange' in state && state.highlightedRange + ? isSameDay(props.date, state.highlightedRange.start) + : isSelected; + const isSelectionEnd = + 'highlightedRange' in state && state.highlightedRange + ? isSameDay(props.date, state.highlightedRange.end) + : isSelected; + + let isHighlighted = false; + + if ('highlightedRange' in state && state.highlightedRange) { + const { highlightedRange } = state; + const { start, end } = highlightedRange; + if (start && end) { + isHighlighted = + props.date.compare(start) >= 0 && props.date.compare(end) <= 0; + } + } + + let isSingleDateSelected = false; + if (!('highlightedRange' in state)) { + isSingleDateSelected = state.value && props.date.compare(state.value) === 0; + } + + const { locale } = useLocale(); + + const dayOfWeek = getDayOfWeek(props.date, locale); + const isRoundedLeft = + isSelected && (isSelectionStart || dayOfWeek === 0 || props.date.day === 1); + const isRoundedRight = + isSelected && + (isSelectionEnd || + dayOfWeek === 6 || + props.date.day === props.date.calendar.getDaysInMonth(props.date)); + + return ( + + + + ); +} + +const CalendaChevronLeftIcon = (props: React.SVGProps) => ( + + + +); + +export { Calendar, RangeCalendar }; +export type { CalendarProps, RangeCalendarProps }; diff --git a/packages/frosted-ui/src/components/card.css b/packages/frosted-ui/src/components/card.css index 2c725eea..8347a7c0 100644 --- a/packages/frosted-ui/src/components/card.css +++ b/packages/frosted-ui/src/components/card.css @@ -127,7 +127,7 @@ .fui-Card:where(.fui-variant-surface) { --card-border-width: 1px; - background-color: var(--color-panel); + background: var(--card-background); &::after { border-radius: var(--card-after-border-radius); @@ -173,6 +173,7 @@ 0 2px 3px -2px var(--black-a1), 0 3px 12px -4px var(--gray-a3), 0 4px 16px -8px var(--black-a1); + --card-background: var(--color-background); } /* prettier-ignore */ :is(.dark, .dark-theme), @@ -184,6 +185,7 @@ 0 0 3px -2px var(--gray-a3), 0 0 12px -2px var(--gray-a3), 0 0 16px -8px var(--gray-a9); + --card-background: linear-gradient(var(--color-panel-elevation-a3), var(--color-panel-elevation-a3)), var(--color-background); } /* prettier-ignore */ @@ -202,7 +204,7 @@ .fui-Card:where(.fui-variant-classic) { --card-border-width: 1px; - background-color: var(--color-panel); + background: var(--card-background); &::after { border-radius: var(--card-after-border-radius); diff --git a/packages/frosted-ui/src/components/date-field.css b/packages/frosted-ui/src/components/date-field.css new file mode 100644 index 00000000..a9358471 --- /dev/null +++ b/packages/frosted-ui/src/components/date-field.css @@ -0,0 +1,94 @@ +.fui-DateFieldRoot { + position: relative; + display: inline-block; +} +.fui-DateFieldInput { + height: var(--height); + font-size: var(--font-size); + line-height: var(--font-size); + padding: var(--padding); + + display: inline-flex; + flex-wrap: nowrap; + gap: 2px; + + border-radius: var(--radius); + + background-color: var(--gray-a3); + color: var(--gray-12); + caret-color: transparent; + overflow: hidden; +} + +.fui-DateFieldInput:where([data-invalid]) { + background-color: var(--danger-a3); + color: var(--danger-12); +} +.fui-DateFieldInput:where([data-focus-visible]) { + outline: 2px solid var(--color-focus-root); + outline-offset: 1px; +} +.fui-DateFieldInput:where([data-invalid][data-focus-visible]) { + outline: 2px solid var(--danger-8); + outline-offset: 1px; +} +.fui-DateFieldSegment:where(:not([data-type='literal'])) { + box-sizing: content-box; + border-radius: calc(var(--radius) - var(--padding)); + padding: 0 2px; + color: var(--accent-12); + display: flex; + align-items: center; + justify-content: flex-end; + text-align: right; + + font-variant-numeric: tabular-nums; + font-family: var(--code-font-family); + outline: none; +} + +.fui-DateFieldSegment:where([data-hovered]) { + background: var(--gray-a4); +} +.fui-DateFieldSegment:where([data-invalid][data-hovered]) { + background: var(--danger-a4); +} +.fui-DateFieldSegment:where([data-focused]) { + background: var(--accent-a9); + color: var(--accent-9-contrast); +} +.fui-DateFieldSegment:where([data-invalid][data-focused]) { + background: var(--danger-a9); + color: var(--danger-9-contrast); +} +.fui-DateFieldSegment[data-type='literal'] { + color: var(--gray-a10); + display: flex; + align-items: center; +} + +@breakpoints { + .fui-DateFieldRoot { + &:where(.fui-r-size-1) { + --height: var(--space-5); + --font-size: var(--font-size-1); + --letter-spacing: var(--letter-spacing-1); + --padding: 4px; + --radius: var(--radius-3); + } + &:where(.fui-r-size-2) { + --height: var(--space-6); + --font-size: var(--font-size-2); + --letter-spacing: var(--letter-spacing-2); + --padding: 6px; + --radius: var(--radius-4); + } + &:where(.fui-r-size-3) { + --height: var(--space-7); + --font-size: var(--font-size-3); + --letter-spacing: var(--letter-spacing-3); + --padding: 8px; + --radius: var(--radius-5); + } + } +} diff --git a/packages/frosted-ui/src/components/date-field.props.ts b/packages/frosted-ui/src/components/date-field.props.ts new file mode 100644 index 00000000..1b5d3ac6 --- /dev/null +++ b/packages/frosted-ui/src/components/date-field.props.ts @@ -0,0 +1,13 @@ +import { PropDef, colorProp } from '../helpers'; + +const sizes = ['1', '2', '3'] as const; + +const dateFieldPropDefs = { + size: { type: 'enum', values: sizes, default: '2', responsive: true }, + color: colorProp, +} satisfies { + size: PropDef<(typeof sizes)[number]>; + color: typeof colorProp; +}; + +export { dateFieldPropDefs }; diff --git a/packages/frosted-ui/src/components/date-field.tsx b/packages/frosted-ui/src/components/date-field.tsx new file mode 100644 index 00000000..682c6909 --- /dev/null +++ b/packages/frosted-ui/src/components/date-field.tsx @@ -0,0 +1,74 @@ +'use client'; + +import classNames from 'classnames'; +import React from 'react'; +import type { + DateFieldProps as AriaDateFieldProps, + DateValue as AriaDateValue, +} from 'react-aria-components'; +import { + DateField as AriaDateField, + DateInput as AriaDateInput, + DateSegment as AriaDateSegment, +} from 'react-aria-components'; +import { + MarginProps, + extractMarginProps, + withBreakpoints, + withMarginProps, + type GetPropDefTypes, +} from '../helpers'; +import { MappedDateValue } from './calendar'; +import { dateFieldPropDefs } from './date-field.props'; + +type DateFieldFUIProps = GetPropDefTypes; +interface DateFieldProps + extends AriaDateFieldProps, + DateFieldFUIProps, + MarginProps { + className?: string; + // TODO: React Aria types for onChange are incorrect - missing UNDEFINED type + onChange?: (value: MappedDateValue | undefined) => void; +} + +function DateField(props: DateFieldProps) { + const { rest: marginRest, ...marginProps } = extractMarginProps(props); + const { className, ...otherProps } = marginRest; + + const { + color = dateFieldPropDefs.color.default, + size = dateFieldPropDefs.size.default, + ...dateFieldProps + } = otherProps; + + return ( + + + {(segment) => ( + + )} + + + ); +} + +export { DateField }; +export type { DateFieldProps }; diff --git a/packages/frosted-ui/src/components/date-picker.props.ts b/packages/frosted-ui/src/components/date-picker.props.ts new file mode 100644 index 00000000..010d73e0 --- /dev/null +++ b/packages/frosted-ui/src/components/date-picker.props.ts @@ -0,0 +1 @@ +export { dateFieldPropDefs as datePickerPropDefs } from './date-field.props'; diff --git a/packages/frosted-ui/src/components/date-picker.tsx b/packages/frosted-ui/src/components/date-picker.tsx new file mode 100644 index 00000000..cbbc1f64 --- /dev/null +++ b/packages/frosted-ui/src/components/date-picker.tsx @@ -0,0 +1,122 @@ +'use client'; + +import { + AriaDatePickerProps, + DateValue, + useDatePicker, +} from '@react-aria/datepicker'; + +import { useDatePickerState } from '@react-stately/datepicker'; +import classNames from 'classnames'; +import React, { useRef } from 'react'; +import { + GetPropDefTypes, + MarginProps, + extractMarginProps, + withMarginProps, +} from '../helpers'; +import { Calendar, MappedDateValue } from './calendar'; +import { DateField } from './date-field'; +import { datePickerPropDefs } from './date-picker.props'; +import { Flex } from './flex'; +import { IconButton } from './icon-button'; +import { Popover } from './popover'; + +type DatePickerFUIProps = GetPropDefTypes; + +interface DatePickerProps + extends AriaDatePickerProps, + DatePickerFUIProps, + MarginProps { + className?: string; + onChange?: (value: MappedDateValue | undefined) => void; +} + +export function DatePicker(props: DatePickerProps) { + const { rest: marginRest, ...marginProps } = extractMarginProps(props); + const { className, ...otherProps } = marginRest; + + const { + color = datePickerPropDefs.color.default, + size = datePickerPropDefs.size.default, + ...datePickerProps + } = otherProps; + + const state = useDatePickerState(datePickerProps); + + const ref = useRef(null); + const { + groupProps, + fieldProps: { onChange, ...otherFieldProps }, + buttonProps: { + isDisabled: isButtonDisabled, + onPress: onButtonClick, + ...buttonProps + }, + calendarProps, + } = useDatePicker(props, state, ref); + + return ( + + + state.setOpen(open)} + > + { + // Radix and Aria keyboard event handlers are clashing + // when pressing space or enter on the button. + // Stop propagation to avoid that. + if (e.code === 'Space' || e.code === 'Enter') { + e.stopPropagation(); + } + }} + > + + + + + + + + + + + + + + ); +} diff --git a/packages/frosted-ui/src/components/date-range-picker.props.ts b/packages/frosted-ui/src/components/date-range-picker.props.ts new file mode 100644 index 00000000..58bb4708 --- /dev/null +++ b/packages/frosted-ui/src/components/date-range-picker.props.ts @@ -0,0 +1 @@ +export { dateFieldPropDefs as dateRangePickerPropDefs } from './date-field.props'; diff --git a/packages/frosted-ui/src/components/date-range-picker.tsx b/packages/frosted-ui/src/components/date-range-picker.tsx new file mode 100644 index 00000000..f91d53b2 --- /dev/null +++ b/packages/frosted-ui/src/components/date-range-picker.tsx @@ -0,0 +1,143 @@ +'use client'; + +import { + AriaDateRangePickerProps, + DateValue, + useDateRangePicker, +} from '@react-aria/datepicker'; + +import { useDateRangePickerState } from '@react-stately/datepicker'; +import classNames from 'classnames'; +import React, { useRef } from 'react'; +import { + GetPropDefTypes, + MarginProps, + extractMarginProps, + withMarginProps, +} from '../helpers'; +import { MappedDateValue, RangeCalendar } from './calendar'; +import { DateField } from './date-field'; +import { datePickerPropDefs } from './date-picker.props'; +import { Flex } from './flex'; +import { IconButton } from './icon-button'; +import { Popover } from './popover'; + +interface RangeValue { + /** The start value of the range. */ + start: T; + /** The end value of the range. */ + end: T; +} + +type DateRangePickerFUIProps = GetPropDefTypes; + +interface DateRangePickerProps + extends AriaDateRangePickerProps, + DateRangePickerFUIProps, + MarginProps { + className?: string; + onChange?: (value: RangeValue> | null) => void; +} + +export function DateRangePicker( + props: DateRangePickerProps, +) { + const { rest: marginRest, ...marginProps } = extractMarginProps(props); + const { className, ...otherProps } = marginRest; + + const { + color = datePickerPropDefs.color.default, + size = datePickerPropDefs.size.default, + ...datePickerProps + } = otherProps; + datePickerProps.onChange; + const state = useDateRangePickerState({ + ...datePickerProps, + // shouldCloseOnSelect: false, + }); + + const ref = useRef(null); + const { + groupProps, + startFieldProps: { onChange: onStartChange, ...startFieldProps }, + endFieldProps: { onChange: onEndChange, ...endFieldProps }, + buttonProps: { + isDisabled: isButtonDisabled, + onPress: onButtonClick, + ...otherButtonProps + }, + calendarProps, + } = useDateRangePicker(props, state, ref); + + return ( + + + + state.setOpen(open)} + > + + { + // Radix and Aria keyboard event handlers are clashing + // when pressing space or enter on the button. + // Stop propagation to avoid that. + if (e.code === 'Space' || e.code === 'Enter') { + e.stopPropagation(); + } + }} + size={size} + > + + + + + + + + + + + + + ); +} diff --git a/packages/frosted-ui/src/components/index.ts b/packages/frosted-ui/src/components/index.ts index c3e1d36d..996585f6 100644 --- a/packages/frosted-ui/src/components/index.ts +++ b/packages/frosted-ui/src/components/index.ts @@ -32,6 +32,7 @@ export { Strong } from './strong'; // FORMS //------------------------------------------------------------------------------ // export * from './form'; 👈 +export { Calendar, RangeCalendar } from './calendar'; export { Checkbox } from './checkbox'; export * from './checkbox.props'; export { Progress } from './progress'; @@ -39,6 +40,12 @@ export * from './progress.props'; export { RadioGroup, RadioGroupItem, RadioGroupRoot } from './radio-group'; export * from './radio-group.props'; // export * from './radio-card-group'; +export { DateField } from './date-field'; +export * from './date-field.props'; +export { DatePicker } from './date-picker'; +export * from './date-picker.props'; +export { DateRangePicker } from './date-range-picker'; +export * from './date-range-picker.props'; export { Shine } from './lab/shine'; export { Select, diff --git a/packages/frosted-ui/src/styles/index.css b/packages/frosted-ui/src/styles/index.css index 8e261e36..9d1e253e 100644 --- a/packages/frosted-ui/src/styles/index.css +++ b/packages/frosted-ui/src/styles/index.css @@ -19,6 +19,7 @@ @import '../components/box.css'; @import '../components/lab/breadcrumbs.css'; @import '../components/button.css'; +@import '../components/calendar.css'; @import '../components/callout.css'; @import '../components/card.css'; @import '../components/checkbox.css'; @@ -54,6 +55,7 @@ @import '../components/table.css'; @import '../components/text-area.css'; @import '../components/text-field.css'; +@import '../components/date-field.css'; @import '../components/text.css'; @import '../components/tooltip.css'; diff --git a/packages/frosted-ui/src/styles/tokens/color.css b/packages/frosted-ui/src/styles/tokens/color.css index 8fc607d1..f11c1cf9 100644 --- a/packages/frosted-ui/src/styles/tokens/color.css +++ b/packages/frosted-ui/src/styles/tokens/color.css @@ -201,7 +201,7 @@ --color-panel-solid: var(--gray-2); --color-panel-translucent: var(--gray-2-translucent); --color-surface: rgba(0, 0, 0, 0.25); - --backdrop-filter-panel: blur(10px) saturate(190%) contrast(70%) + --backdrop-filter-panel: blur(10px) saturate(190%) contrast(90%) brightness(80%); } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index de2b263d..6233b26d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,7 +16,7 @@ importers: version: link:packages/eslint-config-custom prettier: specifier: latest - version: 3.1.0 + version: 3.1.1 turbo: specifier: latest version: 1.10.14 @@ -140,6 +140,9 @@ importers: packages/frosted-ui: dependencies: + '@internationalized/date': + specifier: ^3.5.1 + version: 3.5.1 '@radix-ui/colors': specifier: ^3.0.0 version: 3.0.0 @@ -221,9 +224,33 @@ importers: '@radix-ui/react-visually-hidden': specifier: ^1.0.3 version: 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0) + '@react-aria/calendar': + specifier: ^3.5.3 + version: 3.5.3(react-dom@18.2.0)(react@18.2.0) + '@react-aria/datepicker': + specifier: ^3.9.1 + version: 3.9.1(react-dom@18.2.0)(react@18.2.0) + '@react-aria/focus': + specifier: ^3.15.0 + version: 3.15.0(react@18.2.0) + '@react-aria/i18n': + specifier: ^3.9.0 + version: 3.9.0(react@18.2.0) + '@react-aria/utils': + specifier: ^3.22.0 + version: 3.22.0(react@18.2.0) + '@react-stately/calendar': + specifier: ^3.4.2 + version: 3.4.2(react@18.2.0) + '@react-stately/datepicker': + specifier: ^3.9.1 + version: 3.9.1(react@18.2.0) classnames: specifier: ^2.3.2 version: 2.3.2 + react-aria-components: + specifier: 1.0.0-rc.0 + version: 1.0.0-rc.0(react-dom@18.2.0)(react@18.2.0) tailwindcss: specifier: ^3.3.5 version: 3.3.5 @@ -2021,6 +2048,40 @@ packages: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + /@formatjs/ecma402-abstract@1.18.0: + resolution: {integrity: sha512-PEVLoa3zBevWSCZzPIM/lvPCi8P5l4G+NXQMc/CjEiaCWgyHieUoo0nM7Bs0n/NbuQ6JpXEolivQ9pKSBHaDlA==} + dependencies: + '@formatjs/intl-localematcher': 0.5.2 + tslib: 2.6.2 + dev: false + + /@formatjs/fast-memoize@2.2.0: + resolution: {integrity: sha512-hnk/nY8FyrL5YxwP9e4r9dqeM6cAbo8PeU9UjyXojZMNvVad2Z06FAVHyR3Ecw6fza+0GH7vdJgiKIVXTMbSBA==} + dependencies: + tslib: 2.6.2 + dev: false + + /@formatjs/icu-messageformat-parser@2.7.3: + resolution: {integrity: sha512-X/jy10V9S/vW+qlplqhMUxR8wErQ0mmIYSq4mrjpjDl9mbuGcCILcI1SUYkL5nlM4PJqpc0KOS0bFkkJNPxYRw==} + dependencies: + '@formatjs/ecma402-abstract': 1.18.0 + '@formatjs/icu-skeleton-parser': 1.7.0 + tslib: 2.6.2 + dev: false + + /@formatjs/icu-skeleton-parser@1.7.0: + resolution: {integrity: sha512-Cfdo/fgbZzpN/jlN/ptQVe0lRHora+8ezrEeg2RfrNjyp+YStwBy7cqDY8k5/z2LzXg6O0AdzAV91XS0zIWv+A==} + dependencies: + '@formatjs/ecma402-abstract': 1.18.0 + tslib: 2.6.2 + dev: false + + /@formatjs/intl-localematcher@0.5.2: + resolution: {integrity: sha512-txaaE2fiBMagLrR4jYhxzFO6wEdEG4TPMqrzBAcbr4HFUYzH/YC+lg6OIzKCHm8WgDdyQevxbAAV1OgcXctuGw==} + dependencies: + tslib: 2.6.2 + dev: false + /@humanwhocodes/config-array@0.5.0: resolution: {integrity: sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==} engines: {node: '>=10.10.0'} @@ -2045,6 +2106,43 @@ packages: /@humanwhocodes/object-schema@1.2.1: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + /@internationalized/date@3.5.1: + resolution: {integrity: sha512-LUQIfwU9e+Fmutc/DpRTGXSdgYZLBegi4wygCWDSVmUdLTaMHsQyASDiJtREwanwKuQLq0hY76fCJ9J/9I2xOQ==} + dependencies: + '@swc/helpers': 0.5.1 + dev: false + + /@internationalized/message@3.1.1: + resolution: {integrity: sha512-ZgHxf5HAPIaR0th+w0RUD62yF6vxitjlprSxmLJ1tam7FOekqRSDELMg4Cr/DdszG5YLsp5BG3FgHgqquQZbqw==} + dependencies: + '@swc/helpers': 0.5.1 + intl-messageformat: 10.5.8 + dev: false + + /@internationalized/number@3.4.0: + resolution: {integrity: sha512-8TvotW3qVDHC4uv/BVoN6Qx0Dm8clHY1/vpH+dh+XRiPW/9NVpKn1P8d1A+WLphWrMwyqyWXI7uWehJPviaeIw==} + dependencies: + '@swc/helpers': 0.5.1 + dev: false + + /@internationalized/number@3.5.0: + resolution: {integrity: sha512-ZY1BW8HT9WKYvaubbuqXbbDdHhOUMfE2zHHFJeTppid0S+pc8HtdIxFxaYMsGjCb4UsF+MEJ4n2TfU7iHnUK8w==} + dependencies: + '@swc/helpers': 0.5.1 + dev: false + + /@internationalized/string@3.1.1: + resolution: {integrity: sha512-fvSr6YRoVPgONiVIUhgCmIAlifMVCeej/snPZVzbzRPxGpHl3o1GRe+d/qh92D8KhgOciruDUH8I5mjdfdjzfA==} + dependencies: + '@swc/helpers': 0.5.1 + dev: false + + /@internationalized/string@3.2.0: + resolution: {integrity: sha512-Xx3Sy3f2c9ctT+vh8c7euEaEHQZltp0euZ3Hy4UfT3E13r6lxpUS3kgKyumEjboJZSnaZv7JhqWz3D75v+IxQg==} + dependencies: + '@swc/helpers': 0.5.1 + dev: false + /@isaacs/cliui@8.0.2: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -3324,265 +3422,1674 @@ packages: '@types/react': 18.2.15 '@types/react-dom': 18.2.7 react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-tabs@1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-egZfYY/+wRNCflXNHx+dePvnz9FbmssDTJBtgRfDY7e8SE5oIo3Py2eCB1ckAbh1Q7cQ/6yJZThJ++sgbxibog==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-context': 1.0.1(@types/react@18.2.15)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.15)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.15)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.15)(react@18.2.0) + '@types/react': 18.2.15 + '@types/react-dom': 18.2.7 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-toggle-group@1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Uaj/M/cMyiyT9Bx6fOZO0SAG4Cls0GptBWiBmBxofmDbNVnYYoyRWj/2M/6VCi/7qcXFWnHhRUfdfZFvvkuu8A==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-context': 1.0.1(@types/react@18.2.15)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.15)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-toggle': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.15)(react@18.2.0) + '@types/react': 18.2.15 + '@types/react-dom': 18.2.7 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: true + + /@radix-ui/react-toggle@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Pkqg3+Bc98ftZGsl60CLANXQBBQ4W3mTFS9EJvNxKMZ7magklKV69/id1mlAlOFDDfHvlCms0fx8fA4CMKDJHg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.15)(react@18.2.0) + '@types/react': 18.2.15 + '@types/react-dom': 18.2.7 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: true + + /@radix-ui/react-toolbar@1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-tBgmM/O7a07xbaEkYJWYTXkIdU/1pW4/KZORR43toC/4XWyBCURK0ei9kMUdp+gTPPKBgYLxXmRSH1EVcIDp8Q==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-context': 1.0.1(@types/react@18.2.15)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.15)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-separator': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-toggle-group': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.15 + '@types/react-dom': 18.2.7 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: true + + /@radix-ui/react-tooltip@1.0.7(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-lPh5iKNFVQ/jav/j6ZrWq3blfDJ0OH9R6FlNUHPMqdLuQ9vwDgFsRxvl8b7Asuy5c8xmoojHUxKHQSOAvMHxyw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.15)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.15)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.15)(react@18.2.0) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.15)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.15)(react@18.2.0) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.15 + '@types/react-dom': 18.2.7 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.2.15)(react@18.2.0): + resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@types/react': 18.2.15 + react: 18.2.0 + + /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.15)(react@18.2.0): + resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.15)(react@18.2.0) + '@types/react': 18.2.15 + react: 18.2.0 + + /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.2.15)(react@18.2.0): + resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.15)(react@18.2.0) + '@types/react': 18.2.15 + react: 18.2.0 + + /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.2.15)(react@18.2.0): + resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@types/react': 18.2.15 + react: 18.2.0 + + /@radix-ui/react-use-previous@1.0.1(@types/react@18.2.15)(react@18.2.0): + resolution: {integrity: sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@types/react': 18.2.15 + react: 18.2.0 + + /@radix-ui/react-use-rect@1.0.1(@types/react@18.2.15)(react@18.2.0): + resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@radix-ui/rect': 1.0.1 + '@types/react': 18.2.15 + react: 18.2.0 + + /@radix-ui/react-use-size@1.0.1(@types/react@18.2.15)(react@18.2.0): + resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.15)(react@18.2.0) + '@types/react': 18.2.15 + react: 18.2.0 + + /@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.15 + '@types/react-dom': 18.2.7 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + + /@radix-ui/rect@1.0.1: + resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==} + dependencies: + '@babel/runtime': 7.22.6 + + /@react-aria/breadcrumbs@3.5.9(react@18.2.0): + resolution: {integrity: sha512-asbXTL5NjeHl1+YIF0K70y8tNHk8Lb6VneYH8yOkpLO49ejyNDYBK0tp0jtI9IZAQiTa2qkhYq58c9LloTwebQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-aria/i18n': 3.10.0(react@18.2.0) + '@react-aria/link': 3.6.3(react@18.2.0) + '@react-aria/utils': 3.23.0(react@18.2.0) + '@react-types/breadcrumbs': 3.7.2(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-aria/button@3.9.1(react@18.2.0): + resolution: {integrity: sha512-nAnLMUAnwIVcRkKzS1G2IU6LZSkIWPJGu9amz/g7Y02cGUwFp3lk5bEw2LdoaXiSDJNSX8g0SZFU8FROg57jfQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-aria/focus': 3.16.0(react@18.2.0) + '@react-aria/interactions': 3.20.1(react@18.2.0) + '@react-aria/utils': 3.23.0(react@18.2.0) + '@react-stately/toggle': 3.7.0(react@18.2.0) + '@react-types/button': 3.9.1(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-aria/calendar@3.5.3(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-jW48jk0TIe0HAJS+z8zqd8M86FEuqrk1qEIjMWnf8rFnA7hPPpjdjUrY9vSIeC95NcbyZbFnr1bHzQjAIzosQw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@internationalized/date': 3.5.1 + '@react-aria/i18n': 3.9.0(react@18.2.0) + '@react-aria/interactions': 3.20.0(react@18.2.0) + '@react-aria/live-announcer': 3.3.1 + '@react-aria/utils': 3.22.0(react@18.2.0) + '@react-stately/calendar': 3.4.2(react@18.2.0) + '@react-types/button': 3.9.1(react@18.2.0) + '@react-types/calendar': 3.4.2(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@react-aria/calendar@3.5.4(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-8k7khgea5kwfWriZJWCADNB0R2d7g5A6tTjUEktK4FFZcTb0RCubFejts4hRyzKlF9XHUro2dfh6sbZrzfMKDQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@internationalized/date': 3.5.1 + '@react-aria/i18n': 3.10.0(react@18.2.0) + '@react-aria/interactions': 3.20.1(react@18.2.0) + '@react-aria/live-announcer': 3.3.1 + '@react-aria/utils': 3.23.0(react@18.2.0) + '@react-stately/calendar': 3.4.3(react@18.2.0) + '@react-types/button': 3.9.1(react@18.2.0) + '@react-types/calendar': 3.4.3(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@react-aria/checkbox@3.13.0(react@18.2.0): + resolution: {integrity: sha512-eylJwtADIPKJ1Y5rITNJm/8JD8sXG2nhiZBIg1ko44Szxrpu+Le53NoGtg8nlrfh9vbUrXVvuFtf2jxbPXR5Jw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-aria/form': 3.0.1(react@18.2.0) + '@react-aria/label': 3.7.4(react@18.2.0) + '@react-aria/toggle': 3.10.0(react@18.2.0) + '@react-aria/utils': 3.23.0(react@18.2.0) + '@react-stately/checkbox': 3.6.1(react@18.2.0) + '@react-stately/form': 3.0.0(react@18.2.0) + '@react-stately/toggle': 3.7.0(react@18.2.0) + '@react-types/checkbox': 3.6.0(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-aria/combobox@3.8.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-0Zsy91WC2uhnIjtProL1E5qRjBtRVdsNgpr8T9QCQht4i2sHd8L/srrOx7b6vRIngUMZq7GofOpQcKVdxx4kEA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-aria/i18n': 3.10.0(react@18.2.0) + '@react-aria/listbox': 3.11.3(react-dom@18.2.0)(react@18.2.0) + '@react-aria/live-announcer': 3.3.1 + '@react-aria/menu': 3.12.0(react-dom@18.2.0)(react@18.2.0) + '@react-aria/overlays': 3.20.0(react-dom@18.2.0)(react@18.2.0) + '@react-aria/selection': 3.17.3(react-dom@18.2.0)(react@18.2.0) + '@react-aria/textfield': 3.14.0(react@18.2.0) + '@react-aria/utils': 3.23.0(react@18.2.0) + '@react-stately/collections': 3.10.4(react@18.2.0) + '@react-stately/combobox': 3.8.1(react@18.2.0) + '@react-stately/form': 3.0.0(react@18.2.0) + '@react-types/button': 3.9.1(react@18.2.0) + '@react-types/combobox': 3.10.0(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@react-aria/datepicker@3.9.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-bdlY2H/zwe3hQf64Lp1oGTf7Va8ennDyAv4Ffowb+BOoL8+FB9smtGyONKe87zXu7VJL2M5xYAi4n7c004PM+w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@internationalized/date': 3.5.1 + '@internationalized/number': 3.5.0 + '@internationalized/string': 3.2.0 + '@react-aria/focus': 3.16.0(react@18.2.0) + '@react-aria/form': 3.0.1(react@18.2.0) + '@react-aria/i18n': 3.10.0(react@18.2.0) + '@react-aria/interactions': 3.20.1(react@18.2.0) + '@react-aria/label': 3.7.4(react@18.2.0) + '@react-aria/spinbutton': 3.6.1(react-dom@18.2.0)(react@18.2.0) + '@react-aria/utils': 3.23.0(react@18.2.0) + '@react-stately/datepicker': 3.9.1(react@18.2.0) + '@react-stately/form': 3.0.0(react@18.2.0) + '@react-types/button': 3.9.1(react@18.2.0) + '@react-types/calendar': 3.4.3(react@18.2.0) + '@react-types/datepicker': 3.7.1(react@18.2.0) + '@react-types/dialog': 3.5.7(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@react-aria/dialog@3.5.9(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Eg5pFJN3b5NitKL60nf30iPpQGCyOcU4YakUVn5+GWKLBlm8ryE8jyoIIO0e0LCM65K+fL+gGHGK01GCZyKrpQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-aria/focus': 3.16.0(react@18.2.0) + '@react-aria/overlays': 3.20.0(react-dom@18.2.0)(react@18.2.0) + '@react-aria/utils': 3.23.0(react@18.2.0) + '@react-types/dialog': 3.5.7(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@react-aria/dnd@3.5.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-7OPGePdle+xNYHAIAUOvIETRMfnkRt7h/C0bCkxUR2GYefEbTzfraso4ppNH2JZ7fCRd0K/Qe+jvQklwusHAKA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@internationalized/string': 3.2.0 + '@react-aria/i18n': 3.10.0(react@18.2.0) + '@react-aria/interactions': 3.20.1(react@18.2.0) + '@react-aria/live-announcer': 3.3.1 + '@react-aria/overlays': 3.20.0(react-dom@18.2.0)(react@18.2.0) + '@react-aria/utils': 3.23.0(react@18.2.0) + '@react-stately/dnd': 3.2.7(react@18.2.0) + '@react-types/button': 3.9.1(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@react-aria/focus@3.15.0(react@18.2.0): + resolution: {integrity: sha512-nnxRyfqHuAjRwdQ4BpQyZPtGFKZmRU6cnaIb3pqWFCqEyJQensV7MA3TJ4Jhadq67cy1Ji5SYSlr1duBwjoYvw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-aria/interactions': 3.20.0(react@18.2.0) + '@react-aria/utils': 3.22.0(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + clsx: 1.2.1 + react: 18.2.0 + dev: false + + /@react-aria/focus@3.16.0(react@18.2.0): + resolution: {integrity: sha512-GP6EYI07E8NKQQcXHjpIocEU0vh0oi0Vcsd+/71fKS0NnTR0TUOEeil0JuuQ9ymkmPDTu51Aaaa4FxVsuN/23A==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-aria/interactions': 3.20.1(react@18.2.0) + '@react-aria/utils': 3.23.0(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + clsx: 2.0.0 + react: 18.2.0 + dev: false + + /@react-aria/form@3.0.1(react@18.2.0): + resolution: {integrity: sha512-6586oODMDR4/ciGRwXjpvEAg7tWGSDrXE//waK0n5e5sMuzlPOo1DHc5SpPTvz0XdJsu6VDt2rHdVWVIC9LEyw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-aria/interactions': 3.20.1(react@18.2.0) + '@react-aria/utils': 3.23.0(react@18.2.0) + '@react-stately/form': 3.0.0(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-aria/grid@3.8.6(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-JlQDkdm5heG1FfRyy5KnB8b6s/hRqSI6Xt2xN2AccLX5kcbfFr2/d5KVxyf6ahfa4Gfd46alN6477ju5eTWJew==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-aria/focus': 3.16.0(react@18.2.0) + '@react-aria/i18n': 3.10.0(react@18.2.0) + '@react-aria/interactions': 3.20.1(react@18.2.0) + '@react-aria/live-announcer': 3.3.1 + '@react-aria/selection': 3.17.3(react-dom@18.2.0)(react@18.2.0) + '@react-aria/utils': 3.23.0(react@18.2.0) + '@react-stately/collections': 3.10.4(react@18.2.0) + '@react-stately/grid': 3.8.4(react@18.2.0) + '@react-stately/selection': 3.14.2(react@18.2.0) + '@react-stately/virtualizer': 3.6.6(react@18.2.0) + '@react-types/checkbox': 3.6.0(react@18.2.0) + '@react-types/grid': 3.2.3(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@react-aria/gridlist@3.7.3(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-rkkepYM7xJiebR0g3uC4zzkdR7a8z0fLaM+sg9lSTbdElHMLAlrebS2ytEyZnhiu9nbOnw13GN1OC4/ZenzbHQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-aria/focus': 3.16.0(react@18.2.0) + '@react-aria/grid': 3.8.6(react-dom@18.2.0)(react@18.2.0) + '@react-aria/i18n': 3.10.0(react@18.2.0) + '@react-aria/interactions': 3.20.1(react@18.2.0) + '@react-aria/selection': 3.17.3(react-dom@18.2.0)(react@18.2.0) + '@react-aria/utils': 3.23.0(react@18.2.0) + '@react-stately/list': 3.10.2(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@react-aria/i18n@3.10.0(react@18.2.0): + resolution: {integrity: sha512-sviD5Y1pLPG49HHRmVjR+5nONrp0HK219+nu9Y7cDfUhXu2EjyhMS9t/n9/VZ69hHChZ2PnHYLEE2visu9CuCg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@internationalized/date': 3.5.1 + '@internationalized/message': 3.1.1 + '@internationalized/number': 3.5.0 + '@internationalized/string': 3.2.0 + '@react-aria/ssr': 3.9.1(react@18.2.0) + '@react-aria/utils': 3.23.0(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-aria/i18n@3.9.0(react@18.2.0): + resolution: {integrity: sha512-ebGP/sVG0ZtNF4RNFzs/W01tl7waYpBManh1kKWgA4roDPFt/odkgkDBzKGl+ggBb7TQRHsfUFHuqKsrsMy9TA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@internationalized/date': 3.5.1 + '@internationalized/message': 3.1.1 + '@internationalized/number': 3.4.0 + '@internationalized/string': 3.1.1 + '@react-aria/ssr': 3.9.0(react@18.2.0) + '@react-aria/utils': 3.22.0(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-aria/interactions@3.20.0(react@18.2.0): + resolution: {integrity: sha512-JCCEyK2Nb4mEHucrgmqhTHTNAEqhsiM07jJmmY22eikxnCQnsEfdwXyg9cgZLG79D5V7jyqVRqOp2OsG7Qx7kQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-aria/ssr': 3.9.0(react@18.2.0) + '@react-aria/utils': 3.22.0(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-aria/interactions@3.20.1(react@18.2.0): + resolution: {integrity: sha512-PLNBr87+SzRhe9PvvF9qvzYeP4ofTwfKSorwmO+hjr3qoczrSXf4LRQlb27wB6hF10C7ZE/XVbUI1lj4QQrZ/g==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-aria/ssr': 3.9.1(react@18.2.0) + '@react-aria/utils': 3.23.0(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-aria/label@3.7.4(react@18.2.0): + resolution: {integrity: sha512-3Y0yyrqpLzZdzHw+TOyzwuyx5wa2ujU5DGfKuL5GFnU9Ii4DtdwBGSYS7Yu7qadU+eQmG4OGhAgFVswbIgIwJw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-aria/utils': 3.23.0(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-aria/link@3.6.3(react@18.2.0): + resolution: {integrity: sha512-8kPWc4u/lDow3Ll0LDxeMgaxt9Y3sl8UldKLGli8tzRSltYFugNh/n+i9sCnmo4Qv9Tp9kYv+yxBK50Uk9sINw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-aria/focus': 3.16.0(react@18.2.0) + '@react-aria/interactions': 3.20.1(react@18.2.0) + '@react-aria/utils': 3.23.0(react@18.2.0) + '@react-types/link': 3.5.2(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-aria/listbox@3.11.3(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-PBrnldmyEYUUJvfDeljW8ITvZyBTfGpLNf0b5kfBPK3TDgRH4niEH2vYEcaZvSqb0FrpdvcunuTRXcOpfb+gCQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-aria/interactions': 3.20.1(react@18.2.0) + '@react-aria/label': 3.7.4(react@18.2.0) + '@react-aria/selection': 3.17.3(react-dom@18.2.0)(react@18.2.0) + '@react-aria/utils': 3.23.0(react@18.2.0) + '@react-stately/collections': 3.10.4(react@18.2.0) + '@react-stately/list': 3.10.2(react@18.2.0) + '@react-types/listbox': 3.4.6(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@react-aria/live-announcer@3.3.1: + resolution: {integrity: sha512-hsc77U7S16trM86d+peqJCOCQ7/smO1cybgdpOuzXyiwcHQw8RQ4GrXrS37P4Ux/44E9nMZkOwATQRT2aK8+Ew==} + dependencies: + '@swc/helpers': 0.5.1 + dev: false + + /@react-aria/menu@3.12.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Nsujv3b61WR0gybDKnBjAeyxDVJOfPLMggRUf9SQDfPWnrPXEsAFxaPaVcAkzlfI4HiQs1IxNwsKFNpc3PPZTQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-aria/focus': 3.16.0(react@18.2.0) + '@react-aria/i18n': 3.10.0(react@18.2.0) + '@react-aria/interactions': 3.20.1(react@18.2.0) + '@react-aria/overlays': 3.20.0(react-dom@18.2.0)(react@18.2.0) + '@react-aria/selection': 3.17.3(react-dom@18.2.0)(react@18.2.0) + '@react-aria/utils': 3.23.0(react@18.2.0) + '@react-stately/collections': 3.10.4(react@18.2.0) + '@react-stately/menu': 3.6.0(react@18.2.0) + '@react-stately/tree': 3.7.5(react@18.2.0) + '@react-types/button': 3.9.1(react@18.2.0) + '@react-types/menu': 3.9.6(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@react-aria/meter@3.4.9(react@18.2.0): + resolution: {integrity: sha512-1/FHFmFmSyfQBJ2oH152lp4nps76v1UdhnFbIsmRIH+0g0IfMv1yDT2M9dIZ/b9DgVZSx527FmWOXm0eHGKD6w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-aria/progress': 3.4.9(react@18.2.0) + '@react-types/meter': 3.3.6(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-aria/numberfield@3.10.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-9rt+O63UL3zKR99c+8njbtBeVoEhitzzSCFWsqbtStyoUEV5tJQDgD9kSlozFLAzYftq2pJ7uazlptMEXyS13g==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-aria/i18n': 3.10.0(react@18.2.0) + '@react-aria/interactions': 3.20.1(react@18.2.0) + '@react-aria/spinbutton': 3.6.1(react-dom@18.2.0)(react@18.2.0) + '@react-aria/textfield': 3.14.0(react@18.2.0) + '@react-aria/utils': 3.23.0(react@18.2.0) + '@react-stately/form': 3.0.0(react@18.2.0) + '@react-stately/numberfield': 3.8.0(react@18.2.0) + '@react-types/button': 3.9.1(react@18.2.0) + '@react-types/numberfield': 3.7.0(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@react-aria/overlays@3.20.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-2m7MpRJL5UucbEuu08lMHsiFJoDowkJV4JAIFBZYK1NzVH0vF/A+w9HRNM7jRwx2DUxE+iIsZnl8yKV/7KY8OQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-aria/focus': 3.16.0(react@18.2.0) + '@react-aria/i18n': 3.10.0(react@18.2.0) + '@react-aria/interactions': 3.20.1(react@18.2.0) + '@react-aria/ssr': 3.9.1(react@18.2.0) + '@react-aria/utils': 3.23.0(react@18.2.0) + '@react-aria/visually-hidden': 3.8.8(react@18.2.0) + '@react-stately/overlays': 3.6.4(react@18.2.0) + '@react-types/button': 3.9.1(react@18.2.0) + '@react-types/overlays': 3.8.4(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@react-aria/progress@3.4.9(react@18.2.0): + resolution: {integrity: sha512-CME1ZLsJHOmSgK8IAPOC/+vYO5Oc614mkEw5MluT/yclw5rMyjAkK1XsHLjEXy81uwPeiRyoQQIMPKG2/sMxFQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-aria/i18n': 3.10.0(react@18.2.0) + '@react-aria/label': 3.7.4(react@18.2.0) + '@react-aria/utils': 3.23.0(react@18.2.0) + '@react-types/progress': 3.5.1(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-aria/radio@3.10.0(react@18.2.0): + resolution: {integrity: sha512-6NaKzdGymdcVWLYgHT0cHsVmNzPOp89o8r41w29OPBQWu8w2c9mxg4366OiIZn/uXIBS4abhQ4nL4toBRLgBrg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-aria/focus': 3.16.0(react@18.2.0) + '@react-aria/form': 3.0.1(react@18.2.0) + '@react-aria/i18n': 3.10.0(react@18.2.0) + '@react-aria/interactions': 3.20.1(react@18.2.0) + '@react-aria/label': 3.7.4(react@18.2.0) + '@react-aria/utils': 3.23.0(react@18.2.0) + '@react-stately/radio': 3.10.1(react@18.2.0) + '@react-types/radio': 3.7.0(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-aria/searchfield@3.7.0(react@18.2.0): + resolution: {integrity: sha512-btBbkIwsExXWv5av62gINEbm4QFmDDT7r+d5TAKin5tvKqU8zrsM9fm7KCDEhIGcpUW+q2AUS589iw19z9uCcA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-aria/i18n': 3.10.0(react@18.2.0) + '@react-aria/textfield': 3.14.0(react@18.2.0) + '@react-aria/utils': 3.23.0(react@18.2.0) + '@react-stately/searchfield': 3.5.0(react@18.2.0) + '@react-types/button': 3.9.1(react@18.2.0) + '@react-types/searchfield': 3.5.2(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-aria/select@3.14.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-pAy/+Xbj11Lx6bi/O1hWH0NSIDRxFb6V7N0ry2L8x7MALljh516VbpnAc5RgvbjbuKq0cHUAcdINOzOzpYWm4A==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-aria/form': 3.0.1(react@18.2.0) + '@react-aria/i18n': 3.10.0(react@18.2.0) + '@react-aria/interactions': 3.20.1(react@18.2.0) + '@react-aria/label': 3.7.4(react@18.2.0) + '@react-aria/listbox': 3.11.3(react-dom@18.2.0)(react@18.2.0) + '@react-aria/menu': 3.12.0(react-dom@18.2.0)(react@18.2.0) + '@react-aria/selection': 3.17.3(react-dom@18.2.0)(react@18.2.0) + '@react-aria/utils': 3.23.0(react@18.2.0) + '@react-aria/visually-hidden': 3.8.8(react@18.2.0) + '@react-stately/select': 3.6.1(react@18.2.0) + '@react-types/button': 3.9.1(react@18.2.0) + '@react-types/select': 3.9.1(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@react-aria/selection@3.17.3(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-xl2sgeGH61ngQeE05WOWWPVpGRTPMjQEFmsAWEprArFi4Z7ihSZgpGX22l1w7uSmtXM/eN/v0W8hUYUju5iXlQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-aria/focus': 3.16.0(react@18.2.0) + '@react-aria/i18n': 3.10.0(react@18.2.0) + '@react-aria/interactions': 3.20.1(react@18.2.0) + '@react-aria/utils': 3.23.0(react@18.2.0) + '@react-stately/selection': 3.14.2(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@react-aria/separator@3.3.9(react@18.2.0): + resolution: {integrity: sha512-1wEXiaSJjq2+DR5TC0RKnUBsfZN+YXTzyI7XMzjQoc3YlclumX8wQtzPAOGOEjHB1JKUgo1Gw70FtupVXz58QQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-aria/utils': 3.23.0(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-aria/slider@3.7.4(react@18.2.0): + resolution: {integrity: sha512-OFJWeGSL2duVDFs/kcjlWsY6bqCVKZgM0aFn2QN4wmID+vfBvBnqGHAgWv3BCePTAPS3+GBjMN002TrftorjwQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-aria/focus': 3.16.0(react@18.2.0) + '@react-aria/i18n': 3.10.0(react@18.2.0) + '@react-aria/interactions': 3.20.1(react@18.2.0) + '@react-aria/label': 3.7.4(react@18.2.0) + '@react-aria/utils': 3.23.0(react@18.2.0) + '@react-stately/slider': 3.5.0(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@react-types/slider': 3.7.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-aria/spinbutton@3.6.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-u5GuOP3k4Zis055iY0fZJNHU7dUNCoSfUq5LKwJ1iNaCqDcavdstAnAg+X1a7rhpp5zCnJmAMseo3Qmzi9P+Ew==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-aria/i18n': 3.10.0(react@18.2.0) + '@react-aria/live-announcer': 3.3.1 + '@react-aria/utils': 3.23.0(react@18.2.0) + '@react-types/button': 3.9.1(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@react-aria/ssr@3.9.0(react@18.2.0): + resolution: {integrity: sha512-Bz6BqP6ZorCme9tSWHZVmmY+s7AU8l6Vl2NUYmBzezD//fVHHfFo4lFBn5tBuAaJEm3AuCLaJQ6H2qhxNSb7zg==} + engines: {node: '>= 12'} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-aria/ssr@3.9.1(react@18.2.0): + resolution: {integrity: sha512-NqzkLFP8ZVI4GSorS0AYljC13QW2sc8bDqJOkBvkAt3M8gbcAXJWVRGtZBCRscki9RZF+rNlnPdg0G0jYkhJcg==} + engines: {node: '>= 12'} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-aria/switch@3.6.0(react@18.2.0): + resolution: {integrity: sha512-YNWc5fGLNXE4XlmDAKyqAdllRiClGR7ki4KGFY7nL+xR5jxzjCGU3S3ToMK5Op3QSMGZLxY/aYmC4O+MvcoADQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-aria/toggle': 3.10.0(react@18.2.0) + '@react-stately/toggle': 3.7.0(react@18.2.0) + '@react-types/switch': 3.5.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-aria/table@3.13.3(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-AzmETpyxwNqISTzwHJPs85x9gujG40IIsSOBUdp49oKhB85RbPLvMwhadp4wCVAoHw3erOC/TJxHtVc7o2K1LA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-aria/focus': 3.16.0(react@18.2.0) + '@react-aria/grid': 3.8.6(react-dom@18.2.0)(react@18.2.0) + '@react-aria/i18n': 3.10.0(react@18.2.0) + '@react-aria/interactions': 3.20.1(react@18.2.0) + '@react-aria/live-announcer': 3.3.1 + '@react-aria/utils': 3.23.0(react@18.2.0) + '@react-aria/visually-hidden': 3.8.8(react@18.2.0) + '@react-stately/collections': 3.10.4(react@18.2.0) + '@react-stately/flags': 3.0.0 + '@react-stately/table': 3.11.4(react@18.2.0) + '@react-stately/virtualizer': 3.6.6(react@18.2.0) + '@react-types/checkbox': 3.6.0(react@18.2.0) + '@react-types/grid': 3.2.3(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@react-types/table': 3.9.2(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@react-aria/tabs@3.8.3(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Plw0K/5Qv35vYq7pHZFfQB2BF5OClFx4Abzo9hLVx4oMy3qb7i5lxmLBVbt81yPX/MdjYeP4zO1EHGBl4zMRhA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-aria/focus': 3.16.0(react@18.2.0) + '@react-aria/i18n': 3.10.0(react@18.2.0) + '@react-aria/selection': 3.17.3(react-dom@18.2.0)(react@18.2.0) + '@react-aria/utils': 3.23.0(react@18.2.0) + '@react-stately/tabs': 3.6.3(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@react-types/tabs': 3.3.4(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@react-aria/tag@3.3.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-w7d8sVZqxTo8VFfeg2ixLp5kawtrcguGznVY4mt5aE6K8LMJOeNVDqNNfolfyia80VjOWjeX+RpVdVJRdrv/GQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-aria/gridlist': 3.7.3(react-dom@18.2.0)(react@18.2.0) + '@react-aria/i18n': 3.10.0(react@18.2.0) + '@react-aria/interactions': 3.20.1(react@18.2.0) + '@react-aria/label': 3.7.4(react@18.2.0) + '@react-aria/selection': 3.17.3(react-dom@18.2.0)(react@18.2.0) + '@react-aria/utils': 3.23.0(react@18.2.0) + '@react-stately/list': 3.10.2(react@18.2.0) + '@react-types/button': 3.9.1(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@react-aria/textfield@3.14.0(react@18.2.0): + resolution: {integrity: sha512-LtHFcPK/N9m3KWSRM5KdmlIk7cUEk0OF+uBUrfKsGGc1bJKVToimdW7jQusChHmHhslHUR7WQ4KDjXyFjoLXOw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-aria/focus': 3.16.0(react@18.2.0) + '@react-aria/form': 3.0.1(react@18.2.0) + '@react-aria/label': 3.7.4(react@18.2.0) + '@react-aria/utils': 3.23.0(react@18.2.0) + '@react-stately/form': 3.0.0(react@18.2.0) + '@react-stately/utils': 3.9.0(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@react-types/textfield': 3.9.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-aria/toggle@3.10.0(react@18.2.0): + resolution: {integrity: sha512-6cUf4V9TuG2J7AvXUdU/GspEPFCubUOID3mrselSe563RViy+mMZk0vUEOdyoNanDcEXl58W4dE3SGWxFn71vg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-aria/focus': 3.16.0(react@18.2.0) + '@react-aria/interactions': 3.20.1(react@18.2.0) + '@react-aria/utils': 3.23.0(react@18.2.0) + '@react-stately/toggle': 3.7.0(react@18.2.0) + '@react-types/checkbox': 3.6.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-aria/toolbar@3.0.0-beta.0(react@18.2.0): + resolution: {integrity: sha512-5DCnasHCKxpzm2g7NkFggZF4A65snLL7Nz+0dhqvFTHVLYPEzgKnx7nJ4tFO9z7i9BL8+HrNmaur/eE+OVKVJg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-aria/focus': 3.16.0(react@18.2.0) + '@react-aria/i18n': 3.10.0(react@18.2.0) + '@react-aria/utils': 3.23.0(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-aria/tooltip@3.7.0(react@18.2.0): + resolution: {integrity: sha512-+u9Sftkfe09IDyPEnbbreFKS50vh9X/WTa7n1u2y3PenI9VreLpUR6czyzda4BlvQ95e9jQz1cVxUjxTNaZmBw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-aria/focus': 3.16.0(react@18.2.0) + '@react-aria/interactions': 3.20.1(react@18.2.0) + '@react-aria/utils': 3.23.0(react@18.2.0) + '@react-stately/tooltip': 3.4.6(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@react-types/tooltip': 3.4.6(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-aria/utils@3.22.0(react@18.2.0): + resolution: {integrity: sha512-Qi/m65GFFljXA/ayj1m5g3KZdgbZY3jacSSqD5vNUOEGiKsn4OQcsw8RfC2c0SgtLV1hLzsfvFI1OiryPlGCcw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-aria/ssr': 3.9.0(react@18.2.0) + '@react-stately/utils': 3.9.0(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + clsx: 1.2.1 + react: 18.2.0 + dev: false + + /@react-aria/utils@3.23.0(react@18.2.0): + resolution: {integrity: sha512-fJA63/VU4iQNT8WUvrmll3kvToqMurD69CcgVmbQ56V7ZbvlzFi44E7BpnoaofScYLLtFWRjVdaHsohT6O/big==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-aria/ssr': 3.9.1(react@18.2.0) + '@react-stately/utils': 3.9.0(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + clsx: 2.0.0 + react: 18.2.0 + dev: false + + /@react-aria/visually-hidden@3.8.8(react@18.2.0): + resolution: {integrity: sha512-Cn2PYKD4ijGDtF0+dvsh8qa4y7KTNAlkTG6h20r8Q+6UTyRNmtE2/26QEaApRF8CBiNy9/BZC/ZC4FK2OjvCoA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-aria/interactions': 3.20.1(react@18.2.0) + '@react-aria/utils': 3.23.0(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-stately/calendar@3.4.2(react@18.2.0): + resolution: {integrity: sha512-RfH40rVa2EhUnQgqH3HTZL+YhL+6tZ8T9GbN1K3AbIM5BBEtkb3P8qGhcaI7WpwNy1rlRFFFXGcqFAMUncDg2Q==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@internationalized/date': 3.5.1 + '@react-stately/utils': 3.9.0(react@18.2.0) + '@react-types/calendar': 3.4.2(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-stately/calendar@3.4.3(react@18.2.0): + resolution: {integrity: sha512-OrEcdskszDjnjVnFuSiDC2PVBJ6lWMCJROD5s6W1LUehUtBp8LX9wPavAGHV43LbhN9ldj560sxaQ4WCddrRCA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@internationalized/date': 3.5.1 + '@react-stately/utils': 3.9.0(react@18.2.0) + '@react-types/calendar': 3.4.3(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-stately/checkbox@3.6.1(react@18.2.0): + resolution: {integrity: sha512-rOjFeVBy32edYwhKiHj3ZLdLeO+xZ2fnBwxnOBjcygnw4Neygm8FJH/dB1J0hdYYR349yby86ED2x0wRc84zPw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-stately/form': 3.0.0(react@18.2.0) + '@react-stately/utils': 3.9.0(react@18.2.0) + '@react-types/checkbox': 3.6.0(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-stately/collections@3.10.3(react@18.2.0): + resolution: {integrity: sha512-fA28HIApAIz9sNGeOVXZJPgV5Kig6M72KI1t9sUbnRUr9Xq9OMJTR6ElDMXNe0iTeZffRFDOPYyqnX9zkxof6Q==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-stately/collections@3.10.4(react@18.2.0): + resolution: {integrity: sha512-OHhCrItGt4zB2bSrgObRo0H2SC7QlkH8ReGxo+NVIWchXRLRoiWBP7S+IwleewEo5gOqDVPY3hqA9n4iiI8twg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-stately/combobox@3.8.1(react@18.2.0): + resolution: {integrity: sha512-FaWkqTXQdWg7ptaeU4iPcqF/kxbRg2ZNUcvW/hiL/enciV5tRCsddvfNqvDvy1L30z9AUwlp9MWqzm/DhBITCw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-stately/collections': 3.10.4(react@18.2.0) + '@react-stately/form': 3.0.0(react@18.2.0) + '@react-stately/list': 3.10.2(react@18.2.0) + '@react-stately/overlays': 3.6.4(react@18.2.0) + '@react-stately/select': 3.6.1(react@18.2.0) + '@react-stately/utils': 3.9.0(react@18.2.0) + '@react-types/combobox': 3.10.0(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-stately/data@3.11.0(react@18.2.0): + resolution: {integrity: sha512-0BlPT58WrAtUvpiEfUuyvIsGFTzp/9vA5y+pk53kGJhOdc5tqBGHi9cg40pYE/i1vdHJGMpyHGRD9nkQb8wN3Q==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-stately/datepicker@3.9.1(react@18.2.0): + resolution: {integrity: sha512-o5xLvlZGJyAbTev2yruGlV2fzQyIDuYTgL19TTt0W0WCfjGGr/AAA9GjGXXmyoRA7sZMxqIPnnv7lNrdA38ofA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@internationalized/date': 3.5.1 + '@internationalized/string': 3.2.0 + '@react-stately/form': 3.0.0(react@18.2.0) + '@react-stately/overlays': 3.6.4(react@18.2.0) + '@react-stately/utils': 3.9.0(react@18.2.0) + '@react-types/datepicker': 3.7.1(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-stately/dnd@3.2.7(react@18.2.0): + resolution: {integrity: sha512-QqSCvE9Rhp+Mr8Mt/SrByze24BFX1cy7gmXbwoqAYgHNIx3gWCVdBLqxfpfgYIhZdF9H72EWS8lQkfkZla06Ng==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-stately/selection': 3.14.2(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-stately/flags@3.0.0: + resolution: {integrity: sha512-e3i2ItHbIa0eEwmSXAnPdD7K8syW76JjGe8ENxwFJPW/H1Pu9RJfjkCb/Mq0WSPN/TpxBb54+I9TgrGhbCoZ9w==} + dependencies: + '@swc/helpers': 0.4.36 + dev: false + + /@react-stately/form@3.0.0(react@18.2.0): + resolution: {integrity: sha512-C8wkfFmtx1escizibhdka5JvTy9/Vp173CS9cakjvWTmnjYYC1nOlzwp7BsYWTgerCFbRY/BU/Cf/bJDxPiUKQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-stately/grid@3.8.3(react@18.2.0): + resolution: {integrity: sha512-JceGSJcuO6Zv+Aq5s2NZvmbMjdPjTtGNQR9kTgXKC/pOfM6FJ58bJiOmEllyN6oawqh4Ey8Xdqk9NuW4l2ctuw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-stately/collections': 3.10.3(react@18.2.0) + '@react-stately/selection': 3.14.1(react@18.2.0) + '@react-types/grid': 3.2.3(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-stately/grid@3.8.4(react@18.2.0): + resolution: {integrity: sha512-rwqV1K4lVhaiaqJkt4TfYqdJoVIyqvSm98rKAYfCNzrKcivVpoiCMJ2EMt6WlYCjDVBdEOQ7fMV1I60IV0pntA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-stately/collections': 3.10.4(react@18.2.0) + '@react-stately/selection': 3.14.2(react@18.2.0) + '@react-types/grid': 3.2.3(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-stately/list@3.10.2(react@18.2.0): + resolution: {integrity: sha512-INt+zofkIg2KN8B95xPi9pJG7ZFWAm30oIm/lCPBqM3K1Nm03/QaAbiQj2QeJcOsG3lb7oqI6D6iwTolwJkjIQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-stately/collections': 3.10.4(react@18.2.0) + '@react-stately/selection': 3.14.2(react@18.2.0) + '@react-stately/utils': 3.9.0(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-stately/menu@3.6.0(react@18.2.0): + resolution: {integrity: sha512-OB6CjNyfOkAuirqx1oTL8z8epS9WDzLyrXjmRnxdiCU9EgRXLGAQNECuO7VIpl58oDry8tgRJiJ8fn8FivWSQA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-stately/overlays': 3.6.4(react@18.2.0) + '@react-types/menu': 3.9.6(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-stately/numberfield@3.8.0(react@18.2.0): + resolution: {integrity: sha512-1XvB8tDOvZKcFnMM6qNLEaTVJcIc0jRFS/9jtS8MzalZvh8DbKi0Ucm1bGU7S5rkCx2QWqZ0rGOIm2h/RlcpkA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@internationalized/number': 3.5.0 + '@react-stately/form': 3.0.0(react@18.2.0) + '@react-stately/utils': 3.9.0(react@18.2.0) + '@react-types/numberfield': 3.7.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-stately/overlays@3.6.4(react@18.2.0): + resolution: {integrity: sha512-tHEaoAGpE9dSnsskqLPVKum59yGteoSqsniTopodM+miQozbpPlSjdiQnzGLroy5Afx5OZYClE616muNHUILXA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-stately/utils': 3.9.0(react@18.2.0) + '@react-types/overlays': 3.8.4(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-stately/radio@3.10.1(react@18.2.0): + resolution: {integrity: sha512-MsBYbcLCvjKsqTAKe43T681F2XwKMsS7PLG0eplZgWP9210AMY78GeY1XPYZKHPAau8XkbYiuJqbqTerIJ3DBw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-stately/form': 3.0.0(react@18.2.0) + '@react-stately/utils': 3.9.0(react@18.2.0) + '@react-types/radio': 3.7.0(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-stately/searchfield@3.5.0(react@18.2.0): + resolution: {integrity: sha512-SStjChkn/33pEn40slKQPnBnmQYyxVazVwPjiBkdeVejC42lUVairUTrGJgF0PNoZTbxn0so2/XzjqTC9T8iCw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-stately/utils': 3.9.0(react@18.2.0) + '@react-types/searchfield': 3.5.2(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-stately/select@3.6.1(react@18.2.0): + resolution: {integrity: sha512-e5ixtLiYLlFWM8z1msDqXWhflF9esIRfroptZsltMn1lt2iImUlDRlOTZlMtPQzUrDWoiHXRX88sSKUM/jXjQQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-stately/form': 3.0.0(react@18.2.0) + '@react-stately/list': 3.10.2(react@18.2.0) + '@react-stately/overlays': 3.6.4(react@18.2.0) + '@react-types/select': 3.9.1(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-stately/selection@3.14.1(react@18.2.0): + resolution: {integrity: sha512-96/CerrB6yH4Ad9FkzBzyVerSPjcIj1NBTWTFHo1N+oHECvyGsDxZl7Y4LQR++teFK66FhX5KjCJQGae4IZd6A==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-stately/collections': 3.10.3(react@18.2.0) + '@react-stately/utils': 3.9.0(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-stately/selection@3.14.2(react@18.2.0): + resolution: {integrity: sha512-mL7OoiUgVWaaF7ks5XSxgbXeShijYmD4G3bkBHhqkpugU600QH6BM2hloCq8KOUupk1y8oTljPtF9EmCv375DA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-stately/collections': 3.10.4(react@18.2.0) + '@react-stately/utils': 3.9.0(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-stately/slider@3.5.0(react@18.2.0): + resolution: {integrity: sha512-dOVpIxb7XKuiRxgpHt1bUSlsklciFki100tKIyBPR+Okar9iC/CwLYROYgVfLkGe77jEBNkor9tDLjDGEWcc1w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-stately/utils': 3.9.0(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@react-types/slider': 3.7.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-stately/table@3.11.3(react@18.2.0): + resolution: {integrity: sha512-r0rzSKbtMG4tjFpCGtXb8p6hOuek03c6rheJE88z4I/ujZ5EmEO6Ps8q0JMNEDCY2qigvKM+ODisMBeZCEkIJg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-stately/collections': 3.10.3(react@18.2.0) + '@react-stately/flags': 3.0.0 + '@react-stately/grid': 3.8.3(react@18.2.0) + '@react-stately/selection': 3.14.1(react@18.2.0) + '@react-stately/utils': 3.9.0(react@18.2.0) + '@react-types/grid': 3.2.3(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@react-types/table': 3.9.1(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-stately/table@3.11.4(react@18.2.0): + resolution: {integrity: sha512-dWINJIEOKQl4qq3moq+S8xCD3m+yJqBj0dahr+rOkS+t2uqORwzsusTM35D2T/ZHZi49S2GpE7QuDa+edCynPw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-stately/collections': 3.10.4(react@18.2.0) + '@react-stately/flags': 3.0.0 + '@react-stately/grid': 3.8.4(react@18.2.0) + '@react-stately/selection': 3.14.2(react@18.2.0) + '@react-stately/utils': 3.9.0(react@18.2.0) + '@react-types/grid': 3.2.3(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@react-types/table': 3.9.2(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-stately/tabs@3.6.3(react@18.2.0): + resolution: {integrity: sha512-Nj+Gacwa2SIzYIvHW40GsyX4Q6c8kF7GOuXESeQswbCjnwqhrSbDBp+ngPcUPUJxqFh6JhDCVwAS3wMhUoyUwA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-stately/list': 3.10.2(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@react-types/tabs': 3.3.4(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-stately/toggle@3.7.0(react@18.2.0): + resolution: {integrity: sha512-TRksHkCJk/Xogq4181g3CYgJf+EfsJCqX5UZDSw1Z1Kgpvonjmdf6FAfQfCh9QR2OuXUL6hOLUDVLte5OPI+5g==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-stately/utils': 3.9.0(react@18.2.0) + '@react-types/checkbox': 3.6.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-stately/tooltip@3.4.6(react@18.2.0): + resolution: {integrity: sha512-uL93bmsXf+OOgpKLPEKfpDH4z+MK2CuqlqVxx7rshN0vjWOSoezE5nzwgee90+RpDrLNNNWTNa7n+NkDRpI1jA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-stately/overlays': 3.6.4(react@18.2.0) + '@react-types/tooltip': 3.4.6(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-stately/tree@3.7.5(react@18.2.0): + resolution: {integrity: sha512-xTJVwvhAeY0N5rui4N/TxN7f8hjXdqApDuGDxMZeFAWoQz8Abf7LFKBVQ3OkT6qVr7P+23dgoisUDBhD5a45Hg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-stately/collections': 3.10.4(react@18.2.0) + '@react-stately/selection': 3.14.2(react@18.2.0) + '@react-stately/utils': 3.9.0(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-stately/utils@3.9.0(react@18.2.0): + resolution: {integrity: sha512-yPKFY1F88HxuZ15BG2qwAYxtpE4HnIU0Ofi4CuBE0xC6I8mwo4OQjDzi+DZjxQngM9D6AeTTD6F1V8gkozA0Gw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-stately/virtualizer@3.6.6(react@18.2.0): + resolution: {integrity: sha512-9hWvfITdE/028q4YFve6FxlmA3PdSMkUwpYA+vfaGCXI/4DFZIssBMspUeu4PTRJoV+k+m0z1wYHPmufrq6a3g==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-aria/utils': 3.23.0(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + dev: false + + /@react-types/breadcrumbs@3.7.2(react@18.2.0): + resolution: {integrity: sha512-esl6RucDW2CNMsApJxNYfMtDaUcfLlwKMPH/loYsOBbKxGl2HsgVLMcdpjEkTRs2HCTNCbBXWpeU8AY77t+bsw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-types/link': 3.5.2(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + react: 18.2.0 + dev: false + + /@react-types/button@3.9.1(react@18.2.0): + resolution: {integrity: sha512-bf9iTar3PtqnyV9rA+wyFyrskZKhwmOuOd/ifYIjPs56YNVXWH5Wfqj6Dx3xdFBgtKx8mEVQxVhoX+WkHX+rtw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-types/shared': 3.22.0(react@18.2.0) + react: 18.2.0 + dev: false + + /@react-types/calendar@3.4.2(react@18.2.0): + resolution: {integrity: sha512-tCZ21un/8OAhpNtmSXDkOVvS5Pzp+y/JwNr6VGFi8HBC5F/c8SzuwV0jKN8ymsZSWbDQ68xXGNWxFaG43Bw8Pg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@internationalized/date': 3.5.1 + '@react-types/shared': 3.22.0(react@18.2.0) + react: 18.2.0 + dev: false + + /@react-types/calendar@3.4.3(react@18.2.0): + resolution: {integrity: sha512-96x57ctX5wNEl+8et3sc2NQm8neOJayEeqOQQpyPtI7jyvst/xBrKCwysf9W/dhgPlUC+KeBAYFWfjd5hFVHYA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@internationalized/date': 3.5.1 + '@react-types/shared': 3.22.0(react@18.2.0) + react: 18.2.0 + dev: false + + /@react-types/checkbox@3.6.0(react@18.2.0): + resolution: {integrity: sha512-vgbuJzQpVCNT5AZWV0OozXCnihqrXxoZKfJFIw0xro47pT2sn3t5UC4RA9wfjDGMoK4frw1K/4HQLsQIOsPBkw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-types/shared': 3.22.0(react@18.2.0) + react: 18.2.0 + dev: false + + /@react-types/combobox@3.10.0(react@18.2.0): + resolution: {integrity: sha512-1IXSNS02TPbguyYopaW2snU6sZusbClHrEyVr4zPeexTV4kpUUBNXOzFQ+eSQRR0r2XW57Z0yRW4GJ6FGU0yCA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-types/shared': 3.22.0(react@18.2.0) + react: 18.2.0 + dev: false + + /@react-types/datepicker@3.7.1(react@18.2.0): + resolution: {integrity: sha512-5juVDULOytNzkotqX8j5mYKJckeIpkgbHqVSGkPgLw0++FceIaSZ6RH56cqLup0pO45paqIt9zHh+QXBYX+syg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@internationalized/date': 3.5.1 + '@react-types/calendar': 3.4.3(react@18.2.0) + '@react-types/overlays': 3.8.4(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + react: 18.2.0 + dev: false + + /@react-types/dialog@3.5.7(react@18.2.0): + resolution: {integrity: sha512-geYoqAyQaTLG43AaXdMUVqZXYgkSifrD9cF7lR2kPAT0uGFv0YREi6ieU+aui8XJ83EW0xcxP+EPWd2YkN4D4w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-types/overlays': 3.8.4(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + react: 18.2.0 + dev: false + + /@react-types/form@3.6.0(react@18.2.0): + resolution: {integrity: sha512-+k6IpjQE+sVi/xoK5lnRGyeISkOQ+CKfuH8IeGcYVHr2voDxSJC5WZsp+L5zeoxuSorKokeEPKGOX2HFj9BG/A==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-types/shared': 3.22.0(react@18.2.0) + react: 18.2.0 + dev: false + + /@react-types/grid@3.2.3(react@18.2.0): + resolution: {integrity: sha512-GQM4RDmYhstcYZ0Odjq+xUwh1fhLmRebG6qMM8OXHTPQ77nhl3wc1UTGRhZm6mzEionplSRx4GCpEMEHMJIU0w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-types/shared': 3.22.0(react@18.2.0) + react: 18.2.0 + dev: false + + /@react-types/link@3.5.2(react@18.2.0): + resolution: {integrity: sha512-/s51/WejmpLiyxOgP89s4txgxYoGaPe8pVDItVo1h4+BhU1Puyvgv/Jx8t9dPvo6LUXbraaN+SgKk/QDxaiirw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-types/shared': 3.22.0(react@18.2.0) + react: 18.2.0 + dev: false + + /@react-types/listbox@3.4.6(react@18.2.0): + resolution: {integrity: sha512-XOQvrTqNh5WIPDvKiWiep8T07RAsMfjAXTjDbnjxVlKACUXkcwpts9kFaLnJ9LJRFt6DwItfP+WMkzvmx63/NQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-types/shared': 3.22.0(react@18.2.0) + react: 18.2.0 + dev: false + + /@react-types/menu@3.9.6(react@18.2.0): + resolution: {integrity: sha512-w/RbFInOf4nNayQDv5c2L8IMJbcFOkBhsT3xvvpTy+CHvJcQdjggwaV1sRiw7eF/PwB81k2CwigmidUzHJhKDg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-types/overlays': 3.8.4(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + react: 18.2.0 + dev: false + + /@react-types/meter@3.3.6(react@18.2.0): + resolution: {integrity: sha512-1XYp1fA9UU0lO6kjf3TwVE8mppOJa64mBKAcLWtTyq1e/cYIAbx5o6CsuUx0YDpXKF6gdtvIWvfmxeWsmqJ1jQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-types/progress': 3.5.1(react@18.2.0) + react: 18.2.0 dev: false - /@radix-ui/react-tabs@1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-egZfYY/+wRNCflXNHx+dePvnz9FbmssDTJBtgRfDY7e8SE5oIo3Py2eCB1ckAbh1Q7cQ/6yJZThJ++sgbxibog==} + /@react-types/numberfield@3.7.0(react@18.2.0): + resolution: {integrity: sha512-gaGi+vqm1Y8LCWRsWYUjcGftPIzl+8W2VOfkgKMLM8y76nnwTPtmAqs+Ap1cg7sEJSfsiKMq93e9yvP3udrC2w==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@babel/runtime': 7.22.6 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-context': 1.0.1(@types/react@18.2.15)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.15)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.15)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.15)(react@18.2.0) - '@types/react': 18.2.15 - '@types/react-dom': 18.2.7 + '@react-types/shared': 3.22.0(react@18.2.0) react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-toggle-group@1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Uaj/M/cMyiyT9Bx6fOZO0SAG4Cls0GptBWiBmBxofmDbNVnYYoyRWj/2M/6VCi/7qcXFWnHhRUfdfZFvvkuu8A==} + /@react-types/overlays@3.8.4(react@18.2.0): + resolution: {integrity: sha512-pfgNlQnbF6RB/R2oSxyqAP3Uzz0xE/k5q4n5gUeCDNLjY5qxFHGE8xniZZ503nZYw6VBa9XMN1efDOKQyeiO0w==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@babel/runtime': 7.22.6 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-context': 1.0.1(@types/react@18.2.15)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.15)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-toggle': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.15)(react@18.2.0) - '@types/react': 18.2.15 - '@types/react-dom': 18.2.7 + '@react-types/shared': 3.22.0(react@18.2.0) react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true + dev: false - /@radix-ui/react-toggle@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Pkqg3+Bc98ftZGsl60CLANXQBBQ4W3mTFS9EJvNxKMZ7magklKV69/id1mlAlOFDDfHvlCms0fx8fA4CMKDJHg==} + /@react-types/progress@3.5.1(react@18.2.0): + resolution: {integrity: sha512-CqsUjczUK/SfuFzDcajBBaXRTW0D3G9S/yqLDj9e8E0ii+lGDLt1PHj24t1J7E88U2rVYqmM9VL4NHTt8o3IYA==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@babel/runtime': 7.22.6 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.15)(react@18.2.0) - '@types/react': 18.2.15 - '@types/react-dom': 18.2.7 + '@react-types/shared': 3.22.0(react@18.2.0) react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true + dev: false - /@radix-ui/react-toolbar@1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-tBgmM/O7a07xbaEkYJWYTXkIdU/1pW4/KZORR43toC/4XWyBCURK0ei9kMUdp+gTPPKBgYLxXmRSH1EVcIDp8Q==} + /@react-types/radio@3.7.0(react@18.2.0): + resolution: {integrity: sha512-EcwGAXzSHjSqpFZha7xn3IUrhPiJLj+0yb1Ip0qPmhWz0VVw2DwrkY7q/jfaKroVvQhTo2TbfGhcsAQrt0fRqg==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@babel/runtime': 7.22.6 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-context': 1.0.1(@types/react@18.2.15)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.15)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-separator': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-toggle-group': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.15 - '@types/react-dom': 18.2.7 + '@react-types/shared': 3.22.0(react@18.2.0) react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true + dev: false - /@radix-ui/react-tooltip@1.0.7(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-lPh5iKNFVQ/jav/j6ZrWq3blfDJ0OH9R6FlNUHPMqdLuQ9vwDgFsRxvl8b7Asuy5c8xmoojHUxKHQSOAvMHxyw==} + /@react-types/searchfield@3.5.2(react@18.2.0): + resolution: {integrity: sha512-JAK2/Kg4Dr393FYfbRw0TlXKnJPX77sq1x/ZBxtO6p64+MuuIYKqw0i9PwDlo1PViw2QI5u8GFhKA2TgemY9uA==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@babel/runtime': 7.22.6 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.15)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.15)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.15)(react@18.2.0) - '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.15)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.15)(react@18.2.0) - '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.15 - '@types/react-dom': 18.2.7 + '@react-types/shared': 3.22.0(react@18.2.0) + '@react-types/textfield': 3.9.0(react@18.2.0) react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.2.15)(react@18.2.0): - resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} + /@react-types/select@3.9.1(react@18.2.0): + resolution: {integrity: sha512-EpKSxrnh8HdZvOF9dHQkjivAcdIp1K81FaxmvosH8Lygqh0iYXxAdZGtKLMyBoPI8YFhA+rotIzTcOqgCCnqWA==} peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@babel/runtime': 7.22.6 - '@types/react': 18.2.15 + '@react-types/shared': 3.22.0(react@18.2.0) react: 18.2.0 + dev: false - /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.15)(react@18.2.0): - resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} + /@react-types/shared@3.22.0(react@18.2.0): + resolution: {integrity: sha512-yVOekZWbtSmmiThGEIARbBpnmUIuePFlLyctjvCbgJgGhz8JnEJOipLQ/a4anaWfzAgzSceQP8j/K+VOOePleA==} peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@babel/runtime': 7.22.6 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.15)(react@18.2.0) - '@types/react': 18.2.15 react: 18.2.0 + dev: false - /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.2.15)(react@18.2.0): - resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} + /@react-types/slider@3.7.0(react@18.2.0): + resolution: {integrity: sha512-uyQXUVFfqc9SPUW0LZLMan2n232F/OflRafiHXz9viLFa9tVOupVa7GhASRAoHojwkjoJ1LjFlPih7g5dOZ0/Q==} peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@babel/runtime': 7.22.6 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.15)(react@18.2.0) - '@types/react': 18.2.15 + '@react-types/shared': 3.22.0(react@18.2.0) react: 18.2.0 + dev: false - /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.2.15)(react@18.2.0): - resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} + /@react-types/switch@3.5.0(react@18.2.0): + resolution: {integrity: sha512-/wNmUGjk69bP6t5k2QkAdrNN5Eb9Rz4dOyp0pCPmoeE+5haW6sV5NmtkvWX1NSc4DQz1xL/a5b+A0vxPCP22Jw==} peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@babel/runtime': 7.22.6 - '@types/react': 18.2.15 + '@react-types/shared': 3.22.0(react@18.2.0) react: 18.2.0 + dev: false - /@radix-ui/react-use-previous@1.0.1(@types/react@18.2.15)(react@18.2.0): - resolution: {integrity: sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==} + /@react-types/table@3.9.1(react@18.2.0): + resolution: {integrity: sha512-3e+Oouw9jGqNDg+JRg7v7fgPqDZd6DtST9S/UPp81f32ntnQ8Wsu7S/J4eyLHu5CVQDqcHkf4xPeeXBgPx4qmw==} peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@babel/runtime': 7.22.6 - '@types/react': 18.2.15 + '@react-types/grid': 3.2.3(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) react: 18.2.0 + dev: false - /@radix-ui/react-use-rect@1.0.1(@types/react@18.2.15)(react@18.2.0): - resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==} + /@react-types/table@3.9.2(react@18.2.0): + resolution: {integrity: sha512-brw5JUANOzBa2rYNpN8AIl9nDZ9RwRZC6G/wTM/JhtirjC1S42oCtf8Ap5rWJBdmMG/5KOfcGNcAl/huyqb3gg==} peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@babel/runtime': 7.22.6 - '@radix-ui/rect': 1.0.1 - '@types/react': 18.2.15 + '@react-types/grid': 3.2.3(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) react: 18.2.0 + dev: false - /@radix-ui/react-use-size@1.0.1(@types/react@18.2.15)(react@18.2.0): - resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} + /@react-types/tabs@3.3.4(react@18.2.0): + resolution: {integrity: sha512-4mCTtFrwMRypyGTZCvNYVT9CkknexO/UYvqwDm2jMYb8JgjRvxnomu776Yh7uyiYKWyql2upm20jqasEOm620w==} peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@babel/runtime': 7.22.6 - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.15)(react@18.2.0) - '@types/react': 18.2.15 + '@react-types/shared': 3.22.0(react@18.2.0) react: 18.2.0 + dev: false - /@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==} + /@react-types/textfield@3.9.0(react@18.2.0): + resolution: {integrity: sha512-D/DiwzsfkwlAg3uv8hoIfwju+zhB/hWDEdTvxQbPkntDr0kmN/QfI17NMSzbOBCInC4ABX87ViXLGxr940ykGA==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@babel/runtime': 7.22.6 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.15 - '@types/react-dom': 18.2.7 + '@react-types/shared': 3.22.0(react@18.2.0) react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + dev: false - /@radix-ui/rect@1.0.1: - resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==} + /@react-types/tooltip@3.4.6(react@18.2.0): + resolution: {integrity: sha512-RaZewdER7ZcsNL99RhVHs8kSLyzIBkwc0W6eFZrxST2MD9J5GzkVWRhIiqtFOd5U1aYnxdJ6woq72Ef+le6Vfw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@babel/runtime': 7.22.6 + '@react-types/overlays': 3.8.4(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + react: 18.2.0 + dev: false /@rollup/pluginutils@5.0.5: resolution: {integrity: sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==} @@ -4518,6 +6025,19 @@ packages: file-system-cache: 2.3.0 dev: true + /@swc/helpers@0.4.14: + resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==} + dependencies: + tslib: 2.6.2 + dev: false + + /@swc/helpers@0.4.36: + resolution: {integrity: sha512-5lxnyLEYFskErRPenYItLRSge5DjrJngYKdVjRSrWfza9G6KkgHEXi0vUZiyUeMU5JfXH1YnvXZzSp8ul88o2Q==} + dependencies: + legacy-swc-helpers: /@swc/helpers@0.4.14 + tslib: 2.6.2 + dev: false + /@swc/helpers@0.5.1: resolution: {integrity: sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==} dependencies: @@ -5717,6 +7237,16 @@ packages: engines: {node: '>=0.8'} dev: true + /clsx@1.2.1: + resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} + engines: {node: '>=6'} + dev: false + + /clsx@2.0.0: + resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==} + engines: {node: '>=6'} + dev: false + /color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: @@ -7350,6 +8880,15 @@ packages: side-channel: 1.0.4 dev: true + /intl-messageformat@10.5.8: + resolution: {integrity: sha512-NRf0jpBWV0vd671G5b06wNofAN8tp7WWDogMZyaU8GUAsmbouyvgwmFJI7zLjfAMpm3zK+vSwRP3jzaoIcMbaA==} + dependencies: + '@formatjs/ecma402-abstract': 1.18.0 + '@formatjs/fast-memoize': 2.2.0 + '@formatjs/icu-messageformat-parser': 2.7.3 + tslib: 2.6.2 + dev: false + /invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} dependencies: @@ -8883,8 +10422,8 @@ packages: hasBin: true dev: true - /prettier@3.1.0: - resolution: {integrity: sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==} + /prettier@3.1.1: + resolution: {integrity: sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==} engines: {node: '>=14'} hasBin: true dev: true @@ -9041,6 +10580,77 @@ packages: strip-json-comments: 2.0.1 dev: true + /react-aria-components@1.0.0-rc.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-N8fE1iMd8dBxKOmN3XEk+RloHGOcOMEJyeabZCJRDY2F4M2GWYpZ4vCYad1jDD+UByumGW4JZInnDh1FlXdDZw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@internationalized/date': 3.5.1 + '@react-aria/focus': 3.15.0(react@18.2.0) + '@react-aria/interactions': 3.20.0(react@18.2.0) + '@react-aria/toolbar': 3.0.0-beta.0(react@18.2.0) + '@react-aria/utils': 3.22.0(react@18.2.0) + '@react-stately/table': 3.11.3(react@18.2.0) + '@react-types/form': 3.6.0(react@18.2.0) + '@react-types/grid': 3.2.3(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + '@react-types/table': 3.9.1(react@18.2.0) + '@swc/helpers': 0.5.1 + react: 18.2.0 + react-aria: 3.31.0(react-dom@18.2.0)(react@18.2.0) + react-dom: 18.2.0(react@18.2.0) + react-stately: 3.29.0(react@18.2.0) + use-sync-external-store: 1.2.0(react@18.2.0) + dev: false + + /react-aria@3.31.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-fdmiEhopCq4TIP0BMMsDh92RMfGzVyNaSPdYLs5qqhDlVmaVL3NqWcK8RVstgI13ST/DIM+h9jgtp8+X1EDHMw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@internationalized/string': 3.2.0 + '@react-aria/breadcrumbs': 3.5.9(react@18.2.0) + '@react-aria/button': 3.9.1(react@18.2.0) + '@react-aria/calendar': 3.5.4(react-dom@18.2.0)(react@18.2.0) + '@react-aria/checkbox': 3.13.0(react@18.2.0) + '@react-aria/combobox': 3.8.1(react-dom@18.2.0)(react@18.2.0) + '@react-aria/datepicker': 3.9.1(react-dom@18.2.0)(react@18.2.0) + '@react-aria/dialog': 3.5.9(react-dom@18.2.0)(react@18.2.0) + '@react-aria/dnd': 3.5.1(react-dom@18.2.0)(react@18.2.0) + '@react-aria/focus': 3.16.0(react@18.2.0) + '@react-aria/gridlist': 3.7.3(react-dom@18.2.0)(react@18.2.0) + '@react-aria/i18n': 3.10.0(react@18.2.0) + '@react-aria/interactions': 3.20.1(react@18.2.0) + '@react-aria/label': 3.7.4(react@18.2.0) + '@react-aria/link': 3.6.3(react@18.2.0) + '@react-aria/listbox': 3.11.3(react-dom@18.2.0)(react@18.2.0) + '@react-aria/menu': 3.12.0(react-dom@18.2.0)(react@18.2.0) + '@react-aria/meter': 3.4.9(react@18.2.0) + '@react-aria/numberfield': 3.10.1(react-dom@18.2.0)(react@18.2.0) + '@react-aria/overlays': 3.20.0(react-dom@18.2.0)(react@18.2.0) + '@react-aria/progress': 3.4.9(react@18.2.0) + '@react-aria/radio': 3.10.0(react@18.2.0) + '@react-aria/searchfield': 3.7.0(react@18.2.0) + '@react-aria/select': 3.14.1(react-dom@18.2.0)(react@18.2.0) + '@react-aria/selection': 3.17.3(react-dom@18.2.0)(react@18.2.0) + '@react-aria/separator': 3.3.9(react@18.2.0) + '@react-aria/slider': 3.7.4(react@18.2.0) + '@react-aria/ssr': 3.9.1(react@18.2.0) + '@react-aria/switch': 3.6.0(react@18.2.0) + '@react-aria/table': 3.13.3(react-dom@18.2.0)(react@18.2.0) + '@react-aria/tabs': 3.8.3(react-dom@18.2.0)(react@18.2.0) + '@react-aria/tag': 3.3.1(react-dom@18.2.0)(react@18.2.0) + '@react-aria/textfield': 3.14.0(react@18.2.0) + '@react-aria/tooltip': 3.7.0(react@18.2.0) + '@react-aria/utils': 3.23.0(react@18.2.0) + '@react-aria/visually-hidden': 3.8.8(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /react-colorful@5.6.1(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==} peerDependencies: @@ -9168,6 +10778,37 @@ packages: use-callback-ref: 1.3.0(@types/react@18.2.15)(react@18.2.0) use-sidecar: 1.1.2(@types/react@18.2.15)(react@18.2.0) + /react-stately@3.29.0(react@18.2.0): + resolution: {integrity: sha512-JWPgEg2RxDtSmMkypsBLuhsuiaMDfJcnFw96oDRg8lAGqkslZmbmYH/O1Wz08k2W6P3Bds4rZz6iK91XMNXomA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + dependencies: + '@react-stately/calendar': 3.4.3(react@18.2.0) + '@react-stately/checkbox': 3.6.1(react@18.2.0) + '@react-stately/collections': 3.10.4(react@18.2.0) + '@react-stately/combobox': 3.8.1(react@18.2.0) + '@react-stately/data': 3.11.0(react@18.2.0) + '@react-stately/datepicker': 3.9.1(react@18.2.0) + '@react-stately/dnd': 3.2.7(react@18.2.0) + '@react-stately/form': 3.0.0(react@18.2.0) + '@react-stately/list': 3.10.2(react@18.2.0) + '@react-stately/menu': 3.6.0(react@18.2.0) + '@react-stately/numberfield': 3.8.0(react@18.2.0) + '@react-stately/overlays': 3.6.4(react@18.2.0) + '@react-stately/radio': 3.10.1(react@18.2.0) + '@react-stately/searchfield': 3.5.0(react@18.2.0) + '@react-stately/select': 3.6.1(react@18.2.0) + '@react-stately/selection': 3.14.2(react@18.2.0) + '@react-stately/slider': 3.5.0(react@18.2.0) + '@react-stately/table': 3.11.4(react@18.2.0) + '@react-stately/tabs': 3.6.3(react@18.2.0) + '@react-stately/toggle': 3.7.0(react@18.2.0) + '@react-stately/tooltip': 3.4.6(react@18.2.0) + '@react-stately/tree': 3.7.5(react@18.2.0) + '@react-types/shared': 3.22.0(react@18.2.0) + react: 18.2.0 + dev: false + /react-style-singleton@2.2.1(@types/react@18.2.15)(react@18.2.0): resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} engines: {node: '>=10'} @@ -10535,6 +12176,14 @@ packages: react: 18.2.0 tslib: 2.6.2 + /use-sync-external-store@1.2.0(react@18.2.0): + resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 + dev: false + /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}