,
initialEvents: any[]
@@ -138,6 +137,35 @@ export const useCalendar = (
if (activeView === "Day") setCurrentDate((d) => d.subtract(1, "day"));
}, [activeView]);
+ const formatter = useCallback(
+ (val: Date | string) => {
+ const date = dayjs(val);
+
+ if (activeView === "Month") {
+ return date.format("MMMM YYYY");
+ }
+ if (activeView === "Day") {
+ return date.format("ddd, D MMM YYYY");
+ }
+
+ // In week view, format as month if week is within same month, otherwise show month range
+ const weekStart = datesInWeeks[weekIndex]?.[0];
+ const weekEnd = datesInWeeks[weekIndex]?.[6];
+ if (!weekStart || !weekEnd) {
+ return date.format("MMMM YYYY");
+ }
+
+ const startMonth = dayjs(weekStart).month();
+ const endMonth = dayjs(weekEnd).month();
+ if (startMonth === endMonth) {
+ return dayjs(weekStart).format("MMMM YYYY");
+ }
+
+ return `${dayjs(weekStart).format("MMM")} - ${dayjs(weekEnd).format("MMM YYYY")}`;
+ },
+ [activeView, datesInWeeks, weekIndex]
+ );
+
useEffect(() => {
if (!config.enableShortcuts) return;
const handleShortcuts = (e: KeyboardEvent) => {
@@ -167,6 +195,7 @@ export const useCalendar = (
setActiveView,
increment,
decrement,
+ formatter,
createNewEvent,
updateEventState,
handleCellDblClick,
diff --git a/packages/frappe-ui-react/src/components/combobox/combobox.stories.tsx b/packages/frappe-ui-react/src/components/combobox/combobox.stories.tsx
index 949fc35c..7c0fa117 100644
--- a/packages/frappe-ui-react/src/components/combobox/combobox.stories.tsx
+++ b/packages/frappe-ui-react/src/components/combobox/combobox.stories.tsx
@@ -94,6 +94,17 @@ const groupedOptions = [
options: [
{ label: "Carrot", value: "carrot", icon:
🥕 },
{ label: "Broccoli", value: "broccoli", icon:
🥦 },
+ { label: "Tomato", value: "tomato", icon:
🍅 },
+ { label: "Lettuce", value: "lettuce", icon:
🥬 },
+ ],
+ },
+ {
+ group: "Proteins",
+ options: [
+ { label: "Chicken", value: "chicken", icon:
🍗 },
+ { label: "Fish", value: "fish", icon:
🐟 },
+ { label: "Beef", value: "beef", icon:
🥩 },
+ { label: "Tofu", value: "tofu", icon:
🪤 , disabled: true },
],
},
];
@@ -129,11 +140,11 @@ export const SimpleStringOptions: Story = {
args: {
options: simpleOptions,
value: "",
- placeholder: "Select a person",
+ placeholder: "Select a person...",
onChange: () => {},
},
render: (args) => {
- const [val, setVal] = React.useState("");
+ const [val, setVal] = React.useState
("");
return (
Simple Options
@@ -150,11 +161,11 @@ export const ObjectOptions: Story = {
args: {
options: objectOptions,
value: "",
- placeholder: "Select a person",
+ placeholder: "Select a person...",
onChange: () => {},
},
render: (args) => {
- const [val, setVal] = React.useState("");
+ const [val, setVal] = React.useState
("");
return (
Object Options
@@ -172,11 +183,11 @@ export const WithIcons: Story = {
args: {
options: optionsWithIcons,
value: "",
- placeholder: "Select an item",
+ placeholder: "Select an item...",
onChange: () => {},
},
render: (args) => {
- const [val, setVal] = React.useState("");
+ const [val, setVal] = React.useState
("");
return (
@@ -196,11 +207,11 @@ export const Grouped: Story = {
args: {
options: groupedOptions,
value: "",
- placeholder: "Select a food",
+ placeholder: "Select a food...",
onChange: () => {},
},
render: (args) => {
- const [val, setVal] = React.useState("");
+ const [val, setVal] = React.useState("");
return (
@@ -238,11 +249,11 @@ export const PreselectedValue: Story = {
args: {
options: objectOptions,
value: "john-doe",
- placeholder: "Select a person",
+ placeholder: "Select a person...",
onChange: () => {},
},
render: (args) => {
- const [val, setVal] = React.useState("john-doe");
+ const [val, setVal] = React.useState("john-doe");
return (
@@ -278,11 +289,11 @@ export const ComplexObject: Story = {
args: {
options: complexObjects,
value: "",
- placeholder: "Select a user",
+ placeholder: "Select a user...",
onChange: () => {},
},
render: (args) => {
- const [val, setVal] = React.useState("");
+ const [val, setVal] = React.useState("");
const selected = complexObjects.find((o) => o.value === val);
return (
diff --git a/packages/frappe-ui-react/src/components/combobox/combobox.tsx b/packages/frappe-ui-react/src/components/combobox/combobox.tsx
index 62eec66e..5b371c26 100644
--- a/packages/frappe-ui-react/src/components/combobox/combobox.tsx
+++ b/packages/frappe-ui-react/src/components/combobox/combobox.tsx
@@ -1,3 +1,6 @@
+/**
+ * External dependencies.
+ */
import { useCallback, useMemo, useState } from "react";
import {
Combobox as ComboboxRoot,
@@ -6,6 +9,11 @@ import {
ComboboxOptions,
ComboboxOption,
} from "@headlessui/react";
+import { Check } from "lucide-react";
+
+/**
+ * Internal dependencies.
+ */
import type { ComboboxProps, SimpleOption } from "./types";
// Utility for display
@@ -43,16 +51,12 @@ export const Combobox: React.FC = ({
const selectedOption = useMemo(() => {
if (!value) return null;
-
- const opt = allOptionsFlat.find((opt) => getValue(opt) === value) ?? null;
-
- setQuery(opt ? getLabel(opt) : "");
- return opt;
+ return allOptionsFlat.find((opt) => getValue(opt) === value) ?? null;
}, [value, allOptionsFlat]);
const filteredOptions = useMemo(() => {
- if (!query) {
- return options;
+ if (!query || (selectedOption && query === getLabel(selectedOption))) {
+ return options;
}
return options
@@ -60,7 +64,9 @@ export const Combobox: React.FC = ({
typeof opt === "object" && "group" in opt
? {
...opt,
- options: opt.options,
+ options: opt.options.filter((o) =>
+ getLabel(o).toLowerCase().includes(query.toLowerCase())
+ ),
}
: opt
)
@@ -68,13 +74,10 @@ export const Combobox: React.FC = ({
typeof opt === "string"
? opt.toLowerCase().includes(query.toLowerCase())
: "group" in opt
- ? opt.options.some((o) =>
- getLabel(o).toLowerCase().includes(query.toLowerCase())
- )
+ ? opt.options.length > 0
: opt.label.toLowerCase().includes(query.toLowerCase())
);
- }, [options, query]);
-
+ }, [options, query, selectedOption]);
const handleChange = useCallback(
(val: string | null) => {
@@ -122,9 +125,11 @@ export const Combobox: React.FC = ({
disabled:bg-surface-gray-1 disabled:text-ink-gray-5
`}
displayValue={displayValue}
- value={query}
placeholder={placeholder}
onChange={(e) => setQuery(e.target.value)}
+ onFocus={() =>
+ setQuery(selectedOption ? getLabel(selectedOption) : "")
+ }
autoComplete="off"
/>
@@ -140,12 +145,12 @@ export const Combobox: React.FC = ({
{filteredOptions.length === 0 && (
-
- No results found
+
+ No results found for "{query}"
)}
{filteredOptions.map((opt) =>
@@ -159,12 +164,11 @@ export const Combobox: React.FC
= ({
key={getValue(option)}
value={getValue(option)}
disabled={isDisabled(option)}
- className={({ active, selected, disabled }) =>
+ className={({ active, disabled }) =>
`
- text-ink-gray-8 flex items-center gap-2 px-2 py-1 text-base cursor-pointer truncate
+ text-ink-gray-8 flex items-center gap-2 px-2.5 py-1.5 text-base cursor-pointer truncate rounded
${disabled ? "opacity-50" : ""}
${active ? "bg-surface-gray-3" : ""}
- ${selected ? "font-bold" : ""}
`
}
>
@@ -175,14 +179,7 @@ export const Combobox: React.FC = ({
{selectedOption &&
getValue(option) === getValue(selectedOption) && (
-
-
-
+
)}
@@ -193,12 +190,11 @@ export const Combobox: React.FC = ({
key={getValue(opt as SimpleOption)}
value={getValue(opt as SimpleOption)}
disabled={isDisabled(opt as SimpleOption)}
- className={({ active, selected, disabled }) =>
+ className={({ active, disabled }) =>
`
- text-ink-gray-8 flex items-center gap-2 px-2 py-1 text-base cursor-pointer truncate
+ text-ink-gray-8 flex items-center gap-2 px-2.5 py-1.5 text-base cursor-pointer truncate rounded
${disabled ? "opacity-50" : ""}
${active ? "bg-surface-gray-3" : ""}
- ${selected ? "font-bold" : ""}
`
}
>
@@ -210,14 +206,7 @@ export const Combobox: React.FC = ({
getValue(opt as SimpleOption) ===
getValue(selectedOption) && (
-
-
-
+
)}
diff --git a/packages/frappe-ui-react/src/components/datePicker/datePicker.stories.tsx b/packages/frappe-ui-react/src/components/datePicker/datePicker.stories.tsx
index f3fb6087..cf1008ee 100644
--- a/packages/frappe-ui-react/src/components/datePicker/datePicker.stories.tsx
+++ b/packages/frappe-ui-react/src/components/datePicker/datePicker.stories.tsx
@@ -1,7 +1,7 @@
/**
* External dependencies.
*/
-import { Meta, StoryObj } from "@storybook/react-vite";
+import type { Meta, StoryObj } from "@storybook/react-vite";
import { useState } from "react";
/**
@@ -15,9 +15,9 @@ const meta: Meta = {
component: DatePicker,
parameters: {
layout: "centered",
- docs: {
+ docs: {
source: { type: "dynamic" },
- autodocs: true
+ autodocs: true,
},
},
};
@@ -40,13 +40,15 @@ export const Date: DatePickerStory = {
render: (args) => {
const [dateValue, setDateValue] = useState("");
return (
-
- setDateValue(Array.isArray(val) ? val[0] || "" : val)
- }
- />
+
+
+ setDateValue(Array.isArray(val) ? val[0] || "" : val)
+ }
+ />
+
);
},
argTypes: {
@@ -74,13 +76,15 @@ export const DateTime: DateTimePickerStory = {
render: (args) => {
const [dateTimeValue, setDateTimeValue] = useState("");
return (
-
- setDateTimeValue(Array.isArray(val) ? val[0] || "" : val)
- }
- />
+
+
+ setDateTimeValue(Array.isArray(val) ? val[0] || "" : val)
+ }
+ />
+
);
},
argTypes: {
@@ -109,13 +113,15 @@ export const DateRange: DateRangePickerStory = {
render: (args) => {
const [dateRangeValue, setDateRangeValue] = useState(["", ""]);
return (
-
- setDateRangeValue(Array.isArray(val) ? val : [val, ""])
- }
- />
+
+
+ setDateRangeValue(Array.isArray(val) ? val : [val, ""])
+ }
+ />
+
);
},
argTypes: {
diff --git a/packages/frappe-ui-react/src/components/datePicker/datePicker.tsx b/packages/frappe-ui-react/src/components/datePicker/datePicker.tsx
index 333c6f14..d2a7d666 100644
--- a/packages/frappe-ui-react/src/components/datePicker/datePicker.tsx
+++ b/packages/frappe-ui-react/src/components/datePicker/datePicker.tsx
@@ -4,6 +4,7 @@ import { getDate, getDateValue } from "./utils";
import { Popover } from "../popover";
import { Button } from "../button";
import { TextInput } from "../textInput";
+import FeatherIcon from "../featherIcon";
export const DatePicker: React.FC = ({
value,
@@ -11,126 +12,260 @@ export const DatePicker: React.FC = ({
formatter,
placement,
label,
+ clearable = true,
+ variant = "subtle",
onChange,
+ children,
}) => {
const {
open,
setOpen,
dateValue,
selectDate,
- prevMonth,
- nextMonth,
formattedMonth,
datesAsWeeks,
currentMonth,
+ currentYear,
+ view,
+ cycleView,
+ selectMonth,
+ selectYear,
+ yearRangeStart,
+ yearRange,
+ prev,
+ next,
+ resetView,
+ months,
} = useDatePicker({ value, onChange });
+ const handleOpenChange = (isOpen: boolean) => {
+ setOpen(isOpen);
+ if (!isOpen) {
+ resetView();
+ }
+ };
+
+ const displayValue =
+ dateValue && formatter ? formatter(dateValue) : dateValue;
+
return (
(
-
- {label && (
- {label}
- )}
-
-
- )}
- body={({ togglePopover }) => (
-
- {/* Month Switcher */}
-
-
- {"<"}
-
-
- {formattedMonth}
-
-
- {">"}
-
-
- {/* Date Input and Today */}
-
+ onUpdateShow={handleOpenChange}
+ target={({ togglePopover }) =>
+ children ? (
+ children({ togglePopover, isOpen: open, displayValue })
+ ) : (
+
+ {label && (
+ {label}
+ )}
selectDate(getDate(String(e.target.value)))}
+ placeholder={placeholder}
+ value={displayValue}
+ suffix={() => (
+
+ )}
+ variant={variant}
/>
+
+ )
+ }
+ body={({ togglePopover }) => (
+
+ {/* Month Switcher */}
+
{
- const today = getDate();
- today.setHours(0, 0, 0, 0);
- selectDate(today, true);
- togglePopover();
- }}
+ size="sm"
+ className="text-sm font-medium text-ink-gray-7"
+ variant="ghost"
+ onClick={cycleView}
>
- Today
+ {view === "date" && formattedMonth}
+ {view === "month" && currentYear}
+ {view === "year" && `${yearRangeStart} - ${yearRangeStart + 11}`}
-
- {/* Calendar */}
-
-
- {["s", "m", "t", "w", "t", "f", "s"].map((d, i) => (
-
+
+ {!clearable && (
+ {
+ const today = getDate();
+ today.setHours(0, 0, 0, 0);
+ selectDate(today, true);
+ togglePopover();
+ }}
+ variant="ghost"
>
- {d}
-
- ))}
+ Today
+
+ )}
+
- {datesAsWeeks.map((week, i) => (
-
- {week.map((date) => {
- const val = getDateValue(date);
- const today = getDate();
- const isToday =
- date.getDate() === today.getDate() &&
- date.getMonth() === today.getMonth() &&
- date.getFullYear() === today.getFullYear() &&
- date.getMonth() === currentMonth - 1;
- const isSelected = dateValue === val;
- return (
+
+ {/* Calendar / Month Grid / Year Grid */}
+
+ {view === "date" && (
+
+
+ {["S", "M", "T", "W", "T", "F", "S"].map((d, i) => (
+ {d}
+
+ ))}
+
+ {datesAsWeeks.map((week, i) => (
+
+ {week.map((date) => {
+ const val = getDateValue(date);
+ const today = getDate();
+ const isToday =
+ date.getDate() === today.getDate() &&
+ date.getMonth() === today.getMonth() &&
+ date.getFullYear() === today.getFullYear() &&
+ date.getMonth() === currentMonth - 1;
+ const isSelected = dateValue === val;
+ const inMonth = date.getMonth() === currentMonth - 1;
+ return (
+ selectDate(date, true)}
+ >
+ {date.getDate()}
+
+ );
+ })}
+
+ ))}
+
+ )}
+
+ {view === "month" && (
+
e.stopPropagation()}
+ onClick={(e) => e.stopPropagation()}
+ >
+ {months.map((m, i) => {
+ const isSelected = i === currentMonth - 1;
+ return (
+ selectDate(date, true)}
+ aria-selected={isSelected}
+ onClick={() => selectMonth(i)}
>
- {date.getDate()}
-
+ {m.slice(0, 3)}
+
);
})}
- ))}
+ )}
+
+ {view === "year" && (
+
e.stopPropagation()}
+ onClick={(e) => e.stopPropagation()}
+ >
+ {yearRange.map((y) => {
+ const isSelected = y === currentYear;
+ return (
+ selectYear(y)}
+ >
+ {y}
+
+ );
+ })}
+
+ )}
{/* Actions */}
-
- {
- // Clear the value
- onChange?.("");
- setOpen(false);
- }}
- >
- Clear
-
-
+ {clearable && (
+
+
+ {
+ const today = getDate();
+ today.setHours(0, 0, 0, 0);
+ selectDate(today, true);
+ togglePopover();
+ }}
+ variant="outline"
+ >
+ Today
+
+ {
+ const today = getDate();
+ today.setDate(today.getDate() + 1);
+ today.setHours(0, 0, 0, 0);
+ selectDate(today, true);
+ togglePopover();
+ }}
+ variant="outline"
+ >
+ Tomorrow
+
+
+
{
+ // Clear the value
+ onChange?.("");
+ setOpen(false);
+ }}
+ variant="outline"
+ >
+ Clear
+
+
+ )}
)}
/>
diff --git a/packages/frappe-ui-react/src/components/datePicker/dateRangePicker.tsx b/packages/frappe-ui-react/src/components/datePicker/dateRangePicker.tsx
index f6382ea1..98dd166d 100644
--- a/packages/frappe-ui-react/src/components/datePicker/dateRangePicker.tsx
+++ b/packages/frappe-ui-react/src/components/datePicker/dateRangePicker.tsx
@@ -1,11 +1,12 @@
-import { useEffect, useMemo, useState } from "react";
+import { useCallback, useEffect, useState } from "react";
-import type { DatePickerProps } from "./types";
+import type { DateRangePickerProps } from "./types";
import { useDatePicker } from "./useDatePicker";
import { getDate, getDateValue } from "./utils";
import { Popover } from "../popover";
import { Button } from "../button";
import { TextInput } from "../textInput";
+import FeatherIcon from "../featherIcon";
function useDateRangePicker({
value,
@@ -14,58 +15,41 @@ function useDateRangePicker({
value?: string[];
onChange?: (v: string[]) => void;
}) {
- const today = useMemo(() => getDate(), []);
- const [open, setOpen] = useState(false);
// Internal selection state
const [fromDate, setFromDate] = useState
(value?.[0] || "");
const [toDate, setToDate] = useState(value?.[1] || "");
- // Applied (confirmed) state
- const [appliedFromDate, setAppliedFromDate] = useState(
- value?.[0] || ""
- );
- const [appliedToDate, setAppliedToDate] = useState(value?.[1] || "");
- const [currentYear, setCurrentYear] = useState(today.getFullYear());
- const [currentMonth, setCurrentMonth] = useState(
- today.getMonth() + 1
- );
useEffect(() => {
if (Array.isArray(value) && value.length === 2) {
setFromDate(value[0] || "");
setToDate(value[1] || "");
- setAppliedFromDate(value[0] || "");
- setAppliedToDate(value[1] || "");
}
}, [value]);
const {
- datesAsWeeks,
+ open,
+ setOpen,
formattedMonth,
- prevMonth,
- nextMonth,
- today: todayDate,
+ datesAsWeeks,
+ currentMonth,
+ currentYear,
+ view,
+ cycleView,
+ selectMonth,
+ selectYear,
+ yearRangeStart,
+ yearRange,
+ prev,
+ next,
+ resetView,
+ months,
+ today,
} = useDatePicker({
value: fromDate,
onChange: () => {},
});
- function handleDateClick(date: Date) {
- // Zero out time for date
- const d = new Date(date);
- d.setHours(0, 0, 0, 0);
- const v = getDateValue(d);
- if (fromDate && toDate) {
- setFromDate(v);
- setToDate("");
- } else if (fromDate && !toDate) {
- setToDate(v);
- swapDatesIfNecessary(fromDate, v);
- } else {
- setFromDate(v);
- }
- }
-
- function swapDatesIfNecessary(a: string, b: string) {
+ const swapDatesIfNecessary = useCallback((a: string, b: string) => {
if (!a || !b) return;
const from = getDate(a);
from.setHours(0, 0, 0, 0);
@@ -76,33 +60,56 @@ function useDateRangePicker({
setFromDate(getDateValue(to));
setToDate(getDateValue(from));
}
- }
+ }, []);
+
+ const handleDateClick = useCallback(
+ (date: Date): boolean => {
+ // Zero out time for date
+ const d = new Date(date);
+ d.setHours(0, 0, 0, 0);
+ const v = getDateValue(d);
+ if (fromDate && toDate) {
+ setFromDate(v);
+ setToDate("");
+ } else if (fromDate && !toDate) {
+ setToDate(v);
+ swapDatesIfNecessary(fromDate, v);
+ onChange?.([fromDate, v]);
+ return true;
+ } else {
+ setFromDate(v);
+ }
+ return false;
+ },
+ [fromDate, toDate, onChange, swapDatesIfNecessary]
+ );
+
+ const handleToday = useCallback(() => {
+ const d = new Date(today);
+ d.setHours(0, 0, 0, 0);
+ const todayStr = getDateValue(d);
+ setFromDate(todayStr);
+ setToDate(todayStr);
+ }, [today]);
- function clearDates() {
+ const clearDates = useCallback(() => {
setFromDate("");
setToDate("");
- setAppliedFromDate("");
- setAppliedToDate("");
onChange?.(["", ""]);
- }
+ }, [onChange]);
- function selectDates() {
- setAppliedFromDate(fromDate);
- setAppliedToDate(toDate);
+ const selectDates = useCallback(() => {
onChange?.([fromDate, toDate]);
setOpen(false);
- }
+ }, [fromDate, toDate, onChange, setOpen]);
- function isInRange(date: Date) {
- if (!fromDate || !toDate) return false;
- return date >= getDate(fromDate) && date <= getDate(toDate);
- }
-
- function selectCurrentMonthYear() {
- const date = toDate ? getDate(toDate) : today;
- setCurrentYear(date.getFullYear());
- setCurrentMonth(date.getMonth() + 1);
- }
+ const isInRange = useCallback(
+ (date: Date) => {
+ if (!fromDate || !toDate) return false;
+ return date >= getDate(fromDate) && date <= getDate(toDate);
+ },
+ [fromDate, toDate]
+ );
return {
open,
@@ -111,181 +118,288 @@ function useDateRangePicker({
setFromDate,
toDate,
setToDate,
- appliedFromDate,
- appliedToDate,
- currentYear,
- setCurrentYear,
- currentMonth,
- setCurrentMonth,
formattedMonth,
- prevMonth,
- nextMonth,
datesAsWeeks,
- today: todayDate,
+ currentMonth,
+ currentYear,
+ view,
+ cycleView,
+ selectMonth,
+ selectYear,
+ yearRangeStart,
+ yearRange,
+ prev,
+ next,
+ resetView,
+ months,
+ today,
+ handleToday,
handleDateClick,
clearDates,
selectDates,
isInRange,
- selectCurrentMonthYear,
};
}
-export const DateRangePicker: React.FC = ({
+export const DateRangePicker: React.FC = ({
value,
placeholder,
+ formatter,
placement,
label,
onChange,
+ children,
}) => {
const {
open,
setOpen,
fromDate,
- setFromDate,
toDate,
- setToDate,
- appliedFromDate,
- appliedToDate,
- currentMonth,
formattedMonth,
- prevMonth,
- nextMonth,
datesAsWeeks,
+ currentMonth,
+ currentYear,
+ view,
+ cycleView,
+ selectMonth,
+ selectYear,
+ yearRangeStart,
+ yearRange,
+ prev,
+ next,
+ resetView,
+ months,
+ handleToday,
handleDateClick,
clearDates,
isInRange,
} = useDateRangePicker({
value: Array.isArray(value) ? value : undefined,
- onChange: undefined, // Only call onChange on Apply
+ onChange: undefined, // Only call onChange on second date selection
});
+ const handleOpenChange = (isOpen: boolean) => {
+ setOpen(isOpen);
+ if (!isOpen) {
+ resetView();
+ }
+ };
+
return (
(
-
- {label && (
- {label}
- )}
- {
- const from = appliedFromDate ? appliedFromDate.slice(0, 10) : "";
- const to = appliedToDate ? appliedToDate.slice(0, 10) : "";
- if (from && to) return `${from}, ${to}`;
- if (from) return from;
- return "";
- })()}
- />
-
- )}
+ onUpdateShow={handleOpenChange}
+ target={({ togglePopover }) => {
+ const from = fromDate ? fromDate.slice(0, 10) : "";
+ const to = toDate ? toDate.slice(0, 10) : "";
+ const displayValue = formatter
+ ? formatter(from, to)
+ : from && to
+ ? `${from} to ${to}`
+ : from || "";
+
+ if (children) {
+ return children({ togglePopover, isOpen: open, displayValue });
+ }
+
+ return (
+
+ {label && (
+ {label}
+ )}
+ (
+
+ )}
+ />
+
+ );
+ }}
body={({ togglePopover }) => (
-
+
{/* Month Switcher */}
-
-
- {"<"}
+
+
+ {view === "date" && formattedMonth}
+ {view === "month" && currentYear}
+ {view === "year" && `${yearRangeStart} - ${yearRangeStart + 11}`}
-
- {formattedMonth}
+
+
+ {
+ handleToday();
+ togglePopover();
+ }}
+ >
+ Today
+
+
-
- {">"}
-
- {/* Date Range Inputs */}
-
- setFromDate(String(val).slice(0, 10))}
- />
- setToDate(String(val).slice(0, 10))}
- />
-
- {/* Calendar */}
-
-
- {["s", "m", "t", "w", "t", "f", "s"].map((d, i) => (
-
- {d}
+ {/* Calendar / Month Grid / Year Grid */}
+
+ {view === "date" && (
+
+
+ {["S", "M", "T", "W", "T", "F", "S"].map((d, i) => (
+
+ {d}
+
+ ))}
- ))}
-
- {datesAsWeeks.map((week, i) => (
-
- {week.map((date) => {
- const val = getDateValue(date);
- const today = getDate();
- const isToday =
- date.getDate() === today.getDate() &&
- date.getMonth() === today.getMonth() &&
- date.getFullYear() === today.getFullYear() &&
- date.getMonth() === currentMonth - 1;
- const isToDate = toDate && getDateValue(date) === toDate;
- const isFromDate =
- fromDate && getDateValue(date) === fromDate;
+ {datesAsWeeks.map((week, i) => (
+
+ {week.map((date) => {
+ const val = getDateValue(date);
+ const today = getDate();
+ const isToday =
+ date.getDate() === today.getDate() &&
+ date.getMonth() === today.getMonth() &&
+ date.getFullYear() === today.getFullYear() &&
+ date.getMonth() === currentMonth - 1;
+ const isToDate = toDate && getDateValue(date) === toDate;
+ const isFromDate =
+ fromDate && getDateValue(date) === fromDate;
+ return (
+
+ handleDateClick(date) && togglePopover()
+ }
+ >
+ {date.getDate()}
+
+ );
+ })}
+
+ ))}
+
+ )}
+
+ {view === "month" && (
+
e.stopPropagation()}
+ onClick={(e) => e.stopPropagation()}
+ >
+ {months.map((m, i) => {
+ const isSelected = i === currentMonth - 1;
return (
-
selectMonth(i)}
+ >
+ {m.slice(0, 3)}
+
+ );
+ })}
+
+ )}
+
+ {view === "year" && (
+
e.stopPropagation()}
+ onClick={(e) => e.stopPropagation()}
+ >
+ {yearRange.map((y) => {
+ const isSelected = y === currentYear;
+ return (
+ handleDateClick(date)}
+ aria-selected={isSelected}
+ onClick={() => selectYear(y)}
>
- {date.getDate()}
-
+ {y}
+
);
})}
- ))}
+ )}
+
{/* Actions */}
-
- {
- clearDates();
- togglePopover();
- }}
- >
- Clear
-
- {
- onChange?.([fromDate, toDate]);
- togglePopover();
- }}
- disabled={!fromDate || !toDate}
- >
- Apply
-
-
+ {fromDate && toDate && (
+
+ {
+ clearDates();
+ togglePopover();
+ }}
+ variant="outline"
+ >
+ Clear
+
+
+ )}
)}
/>
diff --git a/packages/frappe-ui-react/src/components/datePicker/dateTimePicker.tsx b/packages/frappe-ui-react/src/components/datePicker/dateTimePicker.tsx
index be699c0a..82d523a8 100644
--- a/packages/frappe-ui-react/src/components/datePicker/dateTimePicker.tsx
+++ b/packages/frappe-ui-react/src/components/datePicker/dateTimePicker.tsx
@@ -1,307 +1,329 @@
-import type { DatePickerProps } from "./types";
+import { useCallback, useMemo, useState } from "react";
+import type { DateTimePickerProps } from "./types";
import { useDatePicker } from "./useDatePicker";
import { getDate, getDateValue } from "./utils";
import { Popover } from "../popover";
import { Button } from "../button";
import { TextInput } from "../textInput";
-import { useEffect, useState } from "react";
+import FeatherIcon from "../featherIcon";
-function twoDigit(n: number) {
- return n.toString().padStart(2, "0");
-}
-
-function useDateTimePicker({
- value,
- onChange,
-}: {
- value?: string;
- onChange?: (v: string) => void;
-}) {
- const [open, setOpen] = useState(false);
- const [dateValue, setDateValue] = useState
(
- typeof value === "string" ? value : ""
- );
- const [hour, setHour] = useState(0);
- const [minute, setMinute] = useState(0);
- const [second, setSecond] = useState(0);
-
- useEffect(() => {
- if (typeof value === "string") setDateValue(value);
- }, [value]);
-
- useEffect(() => {
- if (dateValue) {
- const d = getDate(dateValue);
- setHour(d.getHours());
- setMinute(d.getMinutes());
- setSecond(d.getSeconds());
- }
- }, [dateValue]);
-
- const {
- currentMonth,
- datesAsWeeks,
- formattedMonth,
- prevMonth,
- nextMonth,
- today: todayDate,
- } = useDatePicker({
- value: dateValue,
- onChange: () => {},
- });
-
- function selectDate(date: Date | string, isNow = false) {
- const d = typeof date === "string" ? getDate(date) : date;
- let h = hour,
- m = minute,
- s = second;
- if (isNow) {
- h = d.getHours();
- m = d.getMinutes();
- s = d.getSeconds();
- }
- const val =
- d.getFullYear() +
- "-" +
- twoDigit(d.getMonth() + 1) +
- "-" +
- twoDigit(d.getDate()) +
- " " +
- twoDigit(h) +
- ":" +
- twoDigit(m) +
- ":" +
- twoDigit(s);
- setDateValue(val);
- onChange?.(val);
- setOpen(false);
- }
-
- function updateDate(val: string) {
- const d = getDate(val);
- setHour(d.getHours());
- setMinute(d.getMinutes());
- setSecond(d.getSeconds());
- selectDate(d);
- }
-
- function selectNow() {
- const now = getDate();
- setHour(now.getHours());
- setMinute(now.getMinutes());
- setSecond(now.getSeconds());
- selectDate(now, true);
- }
-
- function clearDate() {
- setDateValue("");
- onChange?.("");
- setOpen(false);
- }
-
- return {
- open,
- setOpen,
- dateValue,
- hour,
- setHour,
- minute,
- setMinute,
- second,
- setSecond,
- currentMonth,
- formattedMonth,
- prevMonth,
- nextMonth,
- datesAsWeeks,
- today: todayDate,
- selectDate,
- updateDate,
- selectNow,
- clearDate,
- };
-}
-
-export const DateTimePicker: React.FC = ({
+export const DateTimePicker: React.FC = ({
value,
placeholder,
formatter,
placement,
label,
+ clearable = true,
onChange,
+ children,
}) => {
+ const [timeDropdownOpen, setTimeDropdownOpen] = useState(false);
+ const handleChange = useMemo(() => {
+ if (!onChange) return undefined;
+ return (val: string | string[]) => {
+ if (typeof val === "string") {
+ onChange(val);
+ }
+ };
+ }, [onChange]);
+
const {
open,
setOpen,
dateValue,
- hour,
- setHour,
- minute,
- setMinute,
- second,
- setSecond,
- currentMonth,
formattedMonth,
- prevMonth,
- nextMonth,
datesAsWeeks,
- selectDate,
- updateDate,
+ currentMonth,
+ currentYear,
+ view,
+ cycleView,
+ selectMonth,
+ selectYear,
+ yearRangeStart,
+ yearRange,
+ prev,
+ next,
+ resetView,
+ months,
+ timeValue,
+ timeOptions,
+ selectTime,
selectNow,
- clearDate,
- } = useDateTimePicker({
- value: typeof value === "string" ? value : "",
- onChange,
+ selectTomorrow,
+ clearValue,
+ displayValue,
+ selectDate,
+ } = useDatePicker({
+ value,
+ onChange: handleChange,
+ withTime: true,
});
+ const handleOpenChange = useCallback(
+ (isOpen: boolean) => {
+ setOpen(isOpen);
+ if (!isOpen) {
+ resetView();
+ setTimeDropdownOpen(false);
+ }
+ },
+ [setOpen, resetView]
+ );
+
+ const formattedDisplayValue = formatter
+ ? formatter(displayValue)
+ : displayValue;
+
return (
(
-
- {label && (
- {label}
- )}
-
-
- )}
- body={({ togglePopover }) => (
-
- {/* Month Switcher */}
-
-
- {"<"}
-
-
- {formattedMonth}
-
-
- {">"}
-
-
- {/* Date Time Input and Now button */}
-
+ onUpdateShow={handleOpenChange}
+ target={({ togglePopover }) =>
+ children ? (
+ children({
+ togglePopover,
+ isOpen: open,
+ displayValue: formattedDisplayValue,
+ })
+ ) : (
+
+ {label && (
+ {label}
+ )}
updateDate(String(val))}
+ placeholder={placeholder}
+ value={formattedDisplayValue}
+ suffix={() => (
+
+ )}
/>
+
+ )
+ }
+ body={() => (
+
+ {/* Header (Month/Year navigation) */}
+
{
- selectNow();
- togglePopover();
- }}
+ size="sm"
+ className="text-sm font-medium text-ink-gray-7"
+ variant="ghost"
+ onClick={cycleView}
>
- Now
+ {view === "date" && formattedMonth}
+ {view === "month" && currentYear}
+ {view === "year" && `${yearRangeStart} - ${yearRangeStart + 11}`}
-
- {/* Calendar */}
-
-
- {["s", "m", "t", "w", "t", "f", "s"].map((d, i) => (
-
+
+ {!clearable && (
+
- {d}
-
- ))}
+ Now
+
+ )}
+
- {datesAsWeeks.map((week, i) => (
-
- {week.map((date) => {
- const val = getDateValue(date);
- const today = getDate();
- const isToday =
- date.getDate() === today.getDate() &&
- date.getMonth() === today.getMonth() &&
- date.getFullYear() === today.getFullYear() &&
- date.getMonth() === currentMonth - 1;
- return (
+
+
+ {/* Calendar / Month Grid / Year Grid */}
+
+ {view === "date" && (
+
+
+ {["S", "M", "T", "W", "T", "F", "S"].map((d, i) => (
+ {d}
+
+ ))}
+
+ {datesAsWeeks.map((week, i) => (
+
+ {week.map((date) => {
+ const val = getDateValue(date);
+ const today = getDate();
+ const isToday =
+ date.getDate() === today.getDate() &&
+ date.getMonth() === today.getMonth() &&
+ date.getFullYear() === today.getFullYear() &&
+ date.getMonth() === currentMonth - 1;
+ const isSelected = dateValue === val;
+ const inMonth = date.getMonth() === currentMonth - 1;
+ return (
+ selectDate(date, true)}
+ >
+ {date.getDate()}
+
+ );
+ })}
+
+ ))}
+
+ )}
+
+ {view === "month" && (
+
e.stopPropagation()}
+ onClick={(e) => e.stopPropagation()}
+ >
+ {months.map((m, i) => {
+ const isSelected = i === currentMonth - 1;
+ return (
+ selectMonth(i)}
+ >
+ {m.slice(0, 3)}
+
+ );
+ })}
+
+ )}
+
+ {view === "year" && (
+
e.stopPropagation()}
+ onClick={(e) => e.stopPropagation()}
+ >
+ {yearRange.map((y) => {
+ const isSelected = y === currentYear;
+ return (
+ {
- selectDate(date);
- togglePopover();
- }}
+ aria-selected={isSelected}
+ onClick={() => selectYear(y)}
>
- {date.getDate()}
-
+ {y}
+
);
})}
- ))}
+ )}
- {/* Time Picker */}
-
-
- {twoDigit(hour)} : {twoDigit(minute)} : {twoDigit(second)}
-
-
-
- setHour(Number(e.target.value))}
- />
-
-
- setMinute(Number(e.target.value))}
- />
-
-
-
setSecond(Number(e.target.value))}
+
+ {/* Time Picker Section */}
+
e.stopPropagation()}
+ onClick={(e) => e.stopPropagation()}
+ >
+
(
+ (
+
+ )}
/>
+ )}
+ body={() => (
+ e.stopPropagation()}
+ onClick={(e) => e.stopPropagation()}
+ >
+ {timeOptions.map((time) => {
+ const isSelected = timeValue === time;
+ return (
+ {
+ selectTime(time);
+ setTimeDropdownOpen(false);
+ }}
+ >
+ {time}
+
+ );
+ })}
+
+ )}
+ />
+
+
+ {/* Footer Actions */}
+ {clearable && (
+
+
+
+ Now
+
+
+ Tomorrow
+
+ {(dateValue || timeValue) && (
+
+ Clear
+
+ )}
-
- {/* Actions */}
-
- {
- clearDate();
- togglePopover();
- }}
- >
- Clear
-
-
+ )}
)}
/>
diff --git a/packages/frappe-ui-react/src/components/datePicker/types.ts b/packages/frappe-ui-react/src/components/datePicker/types.ts
index 8563385f..8b0d9435 100644
--- a/packages/frappe-ui-react/src/components/datePicker/types.ts
+++ b/packages/frappe-ui-react/src/components/datePicker/types.ts
@@ -1,10 +1,17 @@
+export interface DatePickerChildrenProps {
+ togglePopover: () => void;
+ isOpen: boolean;
+ displayValue: string;
+}
+
export interface DatePickerProps {
value?: string | string[];
modelValue?: string | string[];
placeholder?: string;
formatter?: (date: string) => string;
readonly?: boolean;
- inputClass?: string | string[] | Record
;
+ inputClass?: string;
+ variant?: "subtle" | "outline" | "ghost";
placement?:
| "top-start"
| "top"
@@ -19,10 +26,59 @@ export interface DatePickerProps {
| "right"
| "right-end";
label?: string;
+ clearable?: boolean;
onChange?: (value: string | string[]) => void;
+ children?: (props: DatePickerChildrenProps) => React.ReactNode;
+}
+
+export interface DateTimePickerProps {
+ value?: string;
+ placeholder?: string;
+ formatter?: (date: string) => string;
+ placement?:
+ | "top-start"
+ | "top"
+ | "top-end"
+ | "bottom-start"
+ | "bottom"
+ | "bottom-end"
+ | "left-start"
+ | "left"
+ | "left-end"
+ | "right-start"
+ | "right"
+ | "right-end";
+ label?: string;
+ clearable?: boolean;
+ onChange?: (value: string) => void;
+ children?: (props: DatePickerChildrenProps) => React.ReactNode;
+}
+
+export interface DateRangePickerProps {
+ value?: string[];
+ placeholder?: string;
+ formatter?: (from: string, to: string) => string;
+ placement?:
+ | "top-start"
+ | "top"
+ | "top-end"
+ | "bottom-start"
+ | "bottom"
+ | "bottom-end"
+ | "left-start"
+ | "left"
+ | "left-end"
+ | "right-start"
+ | "right"
+ | "right-end";
+ label?: string;
+ onChange?: (value: string[]) => void;
+ children?: (props: DatePickerChildrenProps) => React.ReactNode;
}
export type DatePickerEmits = {
(event: "update:modelValue", value: string): void;
(event: "change", value: string): void;
};
+
+export type DatePickerViewMode = "date" | "month" | "year";
diff --git a/packages/frappe-ui-react/src/components/datePicker/useDatePicker.ts b/packages/frappe-ui-react/src/components/datePicker/useDatePicker.ts
index bccc7bd0..89f74817 100644
--- a/packages/frappe-ui-react/src/components/datePicker/useDatePicker.ts
+++ b/packages/frappe-ui-react/src/components/datePicker/useDatePicker.ts
@@ -1,26 +1,114 @@
import { useCallback, useEffect, useMemo, useState } from "react";
-import { getDate, getDatesAfter, getDaysInMonth, getDateValue } from "./utils";
+import {
+ getDate,
+ getDatesAfter,
+ getDaysInMonth,
+ getDateValue,
+ getDateTimeValue,
+ formatDateTime12h,
+} from "./utils";
+import { DatePickerViewMode } from "./types";
+
+const MONTHS = [
+ "January",
+ "February",
+ "March",
+ "April",
+ "May",
+ "June",
+ "July",
+ "August",
+ "September",
+ "October",
+ "November",
+ "December",
+];
+
+/**
+ * Formats time in 12-hour format with AM/PM
+ * @param hours - Hour value (0-23)
+ * @param minutes - Minute value (0-59)
+ * @returns Formatted time string
+ */
+function formatTime12h(hours: number, minutes: number): string {
+ const period = hours >= 12 ? "pm" : "am";
+ const h = hours % 12 || 12;
+ return `${h}:${minutes.toString().padStart(2, "0")} ${period}`;
+}
+
+/**
+ * Parses a 12-hour format time string into hours and minutes
+ * @param timeStr - Time string in format "h:mm am/pm"
+ * @returns Object containing hours and minutes
+ */
+function parseTimeValue(timeStr: string): { hours: number; minutes: number } {
+ if (!timeStr) return { hours: 0, minutes: 0 };
+ const [time, period] = timeStr.split(" ");
+ const [h, m] = time.split(":").map(Number);
+ let hours = h;
+ const periodLower = period?.toLowerCase();
+ if (periodLower === "pm" && h !== 12) hours += 12;
+ if (periodLower === "am" && h === 12) hours = 0;
+ return { hours, minutes: m };
+}
+
+/**
+ * Generates an array of time options in 15-minute intervals for a full day
+ * @returns Array of time strings in 12-hour format (e.g., ["12:00 am", "12:15 am", ...])
+ */
+function generateTimeOptions(): string[] {
+ const options: string[] = [];
+ for (let h = 0; h < 24; h++) {
+ for (let m = 0; m < 60; m += 15) {
+ options.push(formatTime12h(h, m));
+ }
+ }
+ return options;
+}
export function useDatePicker({
value,
onChange,
+ withTime = false,
}: {
value?: string | string[];
onChange?: (value: string | string[]) => void;
+ withTime?: boolean;
} = {}) {
const today = useMemo(() => getDate(), []);
const [open, setOpen] = useState(false);
- const [dateValue, setDateValue] = useState(
- typeof value === "string" ? value : ""
- );
+ const [view, setView] = useState("date");
+ const [dateValue, setDateValue] = useState("");
+ const [timeValue, setTimeValue] = useState(withTime ? "12:00 am" : "");
const [currentYear, setCurrentYear] = useState(today.getFullYear());
const [currentMonth, setCurrentMonth] = useState(
today.getMonth() + 1
);
useEffect(() => {
- if (typeof value === "string") setDateValue(value);
- }, [value]);
+ if (typeof value === "string" && value) {
+ if (withTime) {
+ const parts = value.split(" ");
+ const datePart = parts[0] || "";
+ setDateValue(datePart);
+
+ if (parts.length >= 2) {
+ const timePart = parts.slice(1).join(" ");
+ const timeMatch = timePart.match(/^(\d{1,2}):(\d{2})/);
+ if (timeMatch) {
+ const hours = parseInt(timeMatch[1], 10);
+ const minutes = parseInt(timeMatch[2], 10);
+ setTimeValue(formatTime12h(hours, minutes));
+ }
+ }
+ } else {
+ setDateValue(value);
+ }
+ } else {
+ setDateValue("");
+ setTimeValue("");
+ }
+ }, [value, withTime]);
const dates = useMemo(() => {
if (!(currentYear && currentMonth)) return [];
@@ -36,20 +124,13 @@ export function useDatePicker({
const daysInMonth = getDaysInMonth(monthIndex, year);
const datesInMonth = getDatesAfter(firstDayOfMonth, daysInMonth - 1);
- let allDates = [
+ const allDates = [
...leftPadding,
firstDayOfMonth,
...datesInMonth,
...rightPadding,
];
- if (allDates.length < 42) {
- const lastDate = allDates.at(-1);
- if (lastDate) {
- const finalPadding = getDatesAfter(lastDate, 42 - allDates.length);
- allDates = allDates.concat(finalPadding);
- }
- }
return allDates;
}, [currentYear, currentMonth]);
@@ -65,8 +146,8 @@ export function useDatePicker({
const formattedMonth = useMemo(() => {
if (!(currentYear && currentMonth)) return "";
const date = getDate(currentYear, currentMonth - 1, 1);
- const month = date.toLocaleString("en-US", { month: "long" });
- return `${month}, ${date.getFullYear()}`;
+ const month = date.toLocaleString("en-US", { month: "short" });
+ return `${month} ${date.getFullYear()}`;
}, [currentYear, currentMonth]);
const prevMonth = useCallback(() => {
@@ -93,16 +174,160 @@ export function useDatePicker({
(d: Date, close = false) => {
const v = getDateValue(d);
setDateValue(v);
- onChange?.(v);
+ if (withTime) {
+ const { hours, minutes } = parseTimeValue(timeValue);
+ const newDate = getDate(v);
+ newDate.setHours(hours, minutes, 0, 0);
+ onChange?.(getDateTimeValue(newDate));
+ } else {
+ onChange?.(v);
+ }
if (close) setOpen(false);
},
- [onChange]
+ [onChange, withTime, timeValue]
);
const selectToday = useCallback(() => {
selectDate(getDate(), true);
}, [selectDate]);
+ const timeOptions = useMemo(() => generateTimeOptions(), []);
+
+ const selectTime = useCallback(
+ (time: string) => {
+ setTimeValue(time);
+ if (dateValue) {
+ const { hours, minutes } = parseTimeValue(time);
+ const d = getDate(dateValue);
+ d.setHours(hours, minutes, 0, 0);
+ onChange?.(getDateTimeValue(d));
+ }
+ },
+ [dateValue, onChange]
+ );
+
+ const selectNow = useCallback(() => {
+ const now = getDate();
+ const v = getDateValue(now);
+ setDateValue(v);
+ if (withTime) {
+ const time = formatTime12h(now.getHours(), now.getMinutes());
+ setTimeValue(time);
+ onChange?.(getDateTimeValue(now));
+ } else {
+ onChange?.(v);
+ }
+ setOpen(false);
+ }, [onChange, withTime]);
+
+ const selectTomorrow = useCallback(() => {
+ const tomorrow = getDate();
+ tomorrow.setDate(tomorrow.getDate() + 1);
+ const v = getDateValue(tomorrow);
+ setDateValue(v);
+
+ if (withTime) {
+ const time =
+ timeValue || formatTime12h(getDate().getHours(), getDate().getMinutes());
+ if (!timeValue) setTimeValue(time);
+ const { hours, minutes } = parseTimeValue(time);
+ tomorrow.setHours(hours, minutes, 0, 0);
+ onChange?.(getDateTimeValue(tomorrow));
+ } else {
+ tomorrow.setHours(0, 0, 0, 0);
+ onChange?.(v);
+ }
+ }, [onChange, withTime, timeValue]);
+
+ const clearValue = useCallback(() => {
+ setDateValue("");
+ setTimeValue("");
+ onChange?.("");
+ setOpen(false);
+ }, [onChange]);
+
+ const displayValue = useMemo(() => {
+ if (!dateValue) return "";
+ if (withTime) {
+ const { hours, minutes } = parseTimeValue(timeValue);
+ const d = getDate(dateValue);
+ d.setHours(hours, minutes, 0, 0);
+ return formatDateTime12h(d);
+ }
+ return dateValue;
+ }, [dateValue, timeValue, withTime]);
+
+ const cycleView = useCallback(() => {
+ setView((prev) => {
+ if (prev === "date") return "month";
+ if (prev === "month") return "year";
+ return "date";
+ });
+ }, []);
+
+ const selectMonth = useCallback((monthIndex: number) => {
+ setCurrentMonth(monthIndex + 1);
+ setView("date");
+ }, []);
+
+ const selectYear = useCallback((year: number) => {
+ setCurrentYear(year);
+ setView("month");
+ }, []);
+
+ const yearRangeStart = useMemo(
+ () => currentYear - (currentYear % 12),
+ [currentYear]
+ );
+
+ const yearRange = useMemo(
+ () => Array.from({ length: 12 }, (_, i) => yearRangeStart + i),
+ [yearRangeStart]
+ );
+
+ const prev = useCallback(() => {
+ if (view === "date") {
+ setCurrentMonth((prev) => {
+ if (prev === 1) {
+ setCurrentYear((y) => y - 1);
+ return 12;
+ }
+ return prev - 1;
+ });
+ } else if (view === "month") {
+ setCurrentYear((y) => y - 1);
+ } else {
+ setCurrentYear((y) => y - 12);
+ }
+ }, [view]);
+
+ const next = useCallback(() => {
+ if (view === "date") {
+ setCurrentMonth((prev) => {
+ if (prev === 12) {
+ setCurrentYear((y) => y + 1);
+ return 1;
+ }
+ return prev + 1;
+ });
+ } else if (view === "month") {
+ setCurrentYear((y) => y + 1);
+ } else {
+ setCurrentYear((y) => y + 12);
+ }
+ }, [view]);
+
+ const resetView = useCallback(() => {
+ setView("date");
+ if (dateValue) {
+ const selectedDate = getDate(dateValue);
+ if (!isNaN(selectedDate.getTime())) {
+ setCurrentYear(selectedDate.getFullYear());
+ setCurrentMonth(selectedDate.getMonth() + 1);
+ }
+ }
+ }, [dateValue]);
+
return {
open,
setOpen,
@@ -120,5 +345,24 @@ export function useDatePicker({
nextMonth,
selectDate,
selectToday,
+ view,
+ setView,
+ cycleView,
+ selectMonth,
+ selectYear,
+ yearRangeStart,
+ yearRange,
+ prev,
+ next,
+ resetView,
+ months: MONTHS,
+ timeValue,
+ setTimeValue,
+ timeOptions,
+ selectTime,
+ selectNow,
+ selectTomorrow,
+ clearValue,
+ displayValue,
};
}
diff --git a/packages/frappe-ui-react/src/components/datePicker/utils.ts b/packages/frappe-ui-react/src/components/datePicker/utils.ts
index 61326bd0..ce12b1c4 100644
--- a/packages/frappe-ui-react/src/components/datePicker/utils.ts
+++ b/packages/frappe-ui-react/src/components/datePicker/utils.ts
@@ -27,6 +27,11 @@ export function getDateTimeValue(date: Date | string) {
return dayjs(date).format("YYYY-MM-DD HH:mm:ss");
}
+export function formatDateTime12h(date: Date | string) {
+ if (!date || date.toString() === "Invalid Date") return "";
+ return dayjs(date).format("YYYY-MM-DD h:mm a");
+}
+
export function getDatesAfter(date: Date, count: number) {
let incrementer = 1;
if (count < 0) {
diff --git a/packages/frappe-ui-react/src/components/dropdown/dropdown.stories.tsx b/packages/frappe-ui-react/src/components/dropdown/dropdown.stories.tsx
index c0d0913d..0f3bfa12 100644
--- a/packages/frappe-ui-react/src/components/dropdown/dropdown.stories.tsx
+++ b/packages/frappe-ui-react/src/components/dropdown/dropdown.stories.tsx
@@ -1,9 +1,10 @@
import type { Meta, StoryObj } from "@storybook/react-vite";
import { action } from "storybook/actions";
+import { useState } from "react";
import Dropdown from "./dropdown";
import { Button } from "../button";
-import { DropdownOptions } from "./types";
+import type { DropdownOptions } from "./types";
export default {
title: "Components/Dropdown",
@@ -73,18 +74,6 @@ const groupedActions: DropdownOptions = [
{
label: "Export",
icon: "download",
- submenu: [
- {
- label: "Export as PDF",
- icon: "file-text",
- onClick: () => action("Export as PDF clicked")(),
- },
- {
- label: "Export as CSV",
- icon: "file",
- onClick: () => action("Export as CSV clicked")(),
- },
- ],
},
{
label: "Share",
@@ -244,11 +233,77 @@ export const CenterAligned: StoryObj = {
};
export const WithSubmenus: StoryObj = {
- ...DropdownTemplate,
args: {
options: submenuActions,
button: { label: "With Submenus" },
},
+ render: function Render(args) {
+ const [collaborateValue, setCollaborateValue] = useState(false);
+
+ const options: DropdownOptions = [
+ ...submenuActions,
+ {
+ label: "Collaborate",
+ switch: true,
+ icon: "file-text",
+ switchValue: collaborateValue,
+ onClick: (val) => {
+ setCollaborateValue(val as boolean);
+ action("Collaborate switch value:")(val);
+ },
+ },
+ ];
+
+ return (
+
+
+
+ );
+ },
+};
+
+export const WithSwitches: StoryObj = {
+ args: {
+ button: { label: "With Switches" },
+ },
+ render: function Render(args) {
+ const [lockValue, setLockValue] = useState(true);
+ const [collaborateValue, setCollaborateValue] = useState(false);
+
+ const options: DropdownOptions = [
+ {
+ label: "Rename",
+ icon: "edit",
+ onClick: () => action("Rename clicked")(),
+ },
+ {
+ label: "Lock",
+ icon: "lock",
+ switch: true,
+ switchValue: lockValue,
+ onClick: (val) => {
+ setLockValue(val as boolean);
+ action("Lock switch value:")(val);
+ },
+ },
+ {
+ label: "Collaborate",
+ switch: true,
+ icon: "users",
+ switchValue: collaborateValue,
+ onClick: (val) => {
+ setCollaborateValue(val as boolean);
+ action("Collaborate switch value:")(val);
+ },
+ },
+ ];
+
+ return (
+
+
+
+ );
+ },
};
export const WithNestedSubmenus: StoryObj = {
diff --git a/packages/frappe-ui-react/src/components/dropdown/dropdown.tsx b/packages/frappe-ui-react/src/components/dropdown/dropdown.tsx
index f63950ad..7b8d753f 100644
--- a/packages/frappe-ui-react/src/components/dropdown/dropdown.tsx
+++ b/packages/frappe-ui-react/src/components/dropdown/dropdown.tsx
@@ -2,6 +2,7 @@ import React, { useMemo, useCallback } from "react";
import * as DropdownMenu from "@radix-ui/react-dropdown-menu";
import { Button, ButtonProps } from "../button";
+import { Switch } from "../switch";
import type {
DropdownProps,
DropdownOption,
@@ -14,7 +15,7 @@ const cssClasses = {
dropdownContent:
"min-w-40 divide-y divide-outline-gray-modals rounded-lg bg-surface-modal shadow-2xl ring-black focus:outline-none dropdown-content border border-outline-gray-1 z-100",
groupContainer: "p-1.5",
- groupLabel: "flex h-7 items-center px-2 text-sm font-medium text-ink-gray-5",
+ groupLabel: "flex h-7 items-center px-2 text-sm font-medium text-ink-gray-7",
itemLabel: "whitespace-nowrap",
itemIcon: "mr-2 h-4 w-4 flex-shrink-0",
chevronIcon: "ml-auto h-4 w-4 flex-shrink-0",
@@ -61,10 +62,13 @@ const Dropdown: React.FC = ({
label: option.label,
icon: option.icon,
component: option.component,
- onClick: () => handleItemClick(option),
+ onClick: option.switch ? option.onClick : () => handleItemClick(option),
submenu: option.submenu,
condition: option.condition,
theme: option.theme,
+ disabled: option.disabled,
+ switch: option.switch,
+ switchValue: option.switchValue,
};
},
[handleItemClick]
@@ -151,6 +155,29 @@ const Dropdown: React.FC = ({
if (item.component) {
const CustomComponent = item.component;
return ;
+ } else if (item.switch) {
+ return (
+ e.preventDefault()}
+ >
+ {item.icon &&
+ (typeof item.icon === "string" ? (
+
+ ) : React.isValidElement(item.icon) ? (
+ item.icon
+ ) : null)}
+ {item.label}
+ item.onClick?.(checked)}
+ />
+
+ );
} else if (item.submenu) {
return (
@@ -201,7 +228,7 @@ const Dropdown: React.FC = ({
subItem.onClick?.()}
>
{renderDropdownItem(subItem)}
@@ -268,7 +295,7 @@ const Dropdown: React.FC = ({
)}
{group.items.map((item) => (
-
+ !item.switch && item.onClick?.()}>
{renderDropdownItem(item)}
diff --git a/packages/frappe-ui-react/src/components/dropdown/types.ts b/packages/frappe-ui-react/src/components/dropdown/types.ts
index e673f458..d05eea6e 100644
--- a/packages/frappe-ui-react/src/components/dropdown/types.ts
+++ b/packages/frappe-ui-react/src/components/dropdown/types.ts
@@ -4,7 +4,7 @@ import { ButtonTheme } from "../button";
export interface DropdownOption {
label: string;
- onClick?: () => void;
+ onClick?: (val?: boolean) => void;
link?: string;
icon?: string | ReactNode;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -12,6 +12,9 @@ export interface DropdownOption {
theme?: ButtonTheme;
submenu?: DropdownOptions;
condition?: () => boolean;
+ disabled?: boolean;
+ switch?: boolean;
+ switchValue?: boolean;
}
export interface DropdownGroupOption {
diff --git a/packages/frappe-ui-react/src/components/formControl/formControl.stories.tsx b/packages/frappe-ui-react/src/components/formControl/formControl.stories.tsx
index e967fefa..5a108fe4 100644
--- a/packages/frappe-ui-react/src/components/formControl/formControl.stories.tsx
+++ b/packages/frappe-ui-react/src/components/formControl/formControl.stories.tsx
@@ -3,6 +3,7 @@ import type { Meta, StoryObj } from "@storybook/react-vite";
import FormControl from "./formControl";
import FeatherIcon from "../featherIcon";
import { useState } from "react";
+import { Avatar } from "../avatar";
const meta: Meta = {
title: "Components/FormControl",
@@ -156,11 +157,13 @@ export const Autocomplete: Story = {
render: (args) => {
const [value, setValue] = useState("");
return (
- setValue(_value)}
- />
+
+ setValue(_value)}
+ />
+
);
},
};
@@ -182,10 +185,33 @@ export const Checkbox: Story = {
},
};
-export const WithPrefixIcon: Story = {
+export const PrefixSlotIcon: Story = {
args: {
type: "text",
placeholder: "",
prefix: () => ,
},
};
+
+export const SuffixSlotIcon: Story = {
+ args: {
+ type: "text",
+ placeholder: "",
+ suffix: () => ,
+ },
+};
+
+export const PrefixSlotAvatar: Story = {
+ args: {
+ type: "text",
+ placeholder: "",
+ prefix: () => (
+
+ ),
+ },
+};
diff --git a/packages/frappe-ui-react/src/components/index.ts b/packages/frappe-ui-react/src/components/index.ts
index dc7053e8..f58b081e 100644
--- a/packages/frappe-ui-react/src/components/index.ts
+++ b/packages/frappe-ui-react/src/components/index.ts
@@ -20,6 +20,8 @@ export * from "./formControl";
export * from "./gridLayout";
export * from "./hooks";
export * from "./listview";
+export * from "./multiSelect";
+export * from "./monthPicker";
export * from "./password";
export * from "./progress";
export * from "./popover";
@@ -33,6 +35,7 @@ export * from "./tabs";
export * from "./textInput";
export * from "./textarea";
export { default as TextEditor } from "./textEditor";
+export * from "./timePicker";
export * from "./toast";
export * from "./tooltip";
export * from "./tree";
diff --git a/packages/frappe-ui-react/src/components/listview/listHeader.tsx b/packages/frappe-ui-react/src/components/listview/listHeader.tsx
index 605f3ce3..c1f03207 100644
--- a/packages/frappe-ui-react/src/components/listview/listHeader.tsx
+++ b/packages/frappe-ui-react/src/components/listview/listHeader.tsx
@@ -35,7 +35,7 @@ const ListHeader: React.FC = ({ children }) => {
item={column}
lastItem={index === list.columns.length - 1}
onColumnWidthUpdated={(width: number) => {
- list.updateColumnWidth(index, width);
+ list.options.updateColumnWidth(index, width);
}}
/>
))}
diff --git a/packages/frappe-ui-react/src/components/listview/listView.stories.tsx b/packages/frappe-ui-react/src/components/listview/listView.stories.tsx
index 8b9c0888..b6869d60 100644
--- a/packages/frappe-ui-react/src/components/listview/listView.stories.tsx
+++ b/packages/frappe-ui-react/src/components/listview/listView.stories.tsx
@@ -1,4 +1,5 @@
-import { Meta, StoryObj } from "@storybook/react-vite";
+import type { Meta, StoryObj } from "@storybook/react-vite";
+import { useEffect, useState } from "react";
import ListView from "./listView";
import { Avatar } from "../avatar";
@@ -292,18 +293,31 @@ export const SimpleList: Story = {
export const CustomList: Story = {
render: (args) => {
- return (
+ const [columns, _setColumns] = useState([]);
+ useEffect(() => {
+ _setColumns(custom_columns);
+ }, []);
+
+ return columns.length > 0 ? (
-
+
<>
- {custom_columns.map((column, index) => (
-
+ {columns.map((column, index) => (
+ {
+ _setColumns((prevColumns) => {
+ const newColumns = [...prevColumns];
+ newColumns[index] = {
+ ...newColumns[index],
+ width: `${width}px`,
+ };
+ return newColumns;
+ });
+ }}
+ >
{custom_rows.map((row) => (
- {custom_columns.map((column, index) => {
- //@ts-expects-error
+ {columns.map((column, index) => {
+ //@ts-expect-error item type
const item = row[column.key];
return (
@@ -383,6 +397,8 @@ export const CustomList: Story = {
>
+ ) : (
+ <>>
);
},
args: {
@@ -423,7 +439,7 @@ export const GroupedRows: Story = {
export const CellSlot: Story = {
render: (args) => {
- //@ts-expects-error
+ //@ts-expect-error
const CustomCell = ({ item, column }) => {
if (column.key === "status") {
return {item} ;
diff --git a/packages/frappe-ui-react/src/components/listview/listprovider.tsx b/packages/frappe-ui-react/src/components/listview/listprovider.tsx
index 2c7bc539..4b2ab143 100644
--- a/packages/frappe-ui-react/src/components/listview/listprovider.tsx
+++ b/packages/frappe-ui-react/src/components/listview/listprovider.tsx
@@ -1,4 +1,10 @@
-import React, { ReactNode, useCallback, useMemo, useState } from "react";
+import React, {
+ ReactNode,
+ useCallback,
+ useEffect,
+ useMemo,
+ useState,
+} from "react";
import { ListContext, ListOptionsProps } from "./listContext";
interface ListProviderProps {
@@ -20,6 +26,10 @@ export const ListProvider: React.FC = ({
const [activeRow, setActiveRow] = useState(null);
const [_columns, setColumns] = useState(columns);
+ useEffect(() => {
+ setColumns(columns);
+ }, [columns]);
+
const updateColumnWidth = useCallback((index: number, width: number) => {
setColumns((prevColumns) => {
const newColumns = [...prevColumns];
@@ -58,8 +68,9 @@ export const ListProvider: React.FC = ({
title: "No Data",
description: "No data available",
},
+ updateColumnWidth,
};
- }, [options]);
+ }, [options, updateColumnWidth]);
const showGroupedRows = useMemo(
() => rows.every((row) => row.group && row.rows && Array.isArray(row.rows)),
@@ -135,7 +146,6 @@ export const ListProvider: React.FC = ({
toggleAllRows,
emptyState: options.emptyState,
setColumns: () => {},
- updateColumnWidth,
},
}),
[
@@ -150,7 +160,6 @@ export const ListProvider: React.FC = ({
allRowsSelected,
toggleRow,
toggleAllRows,
- updateColumnWidth,
]
);
return (
diff --git a/packages/frappe-ui-react/src/components/monthPicker/index.ts b/packages/frappe-ui-react/src/components/monthPicker/index.ts
new file mode 100644
index 00000000..671d7dc3
--- /dev/null
+++ b/packages/frappe-ui-react/src/components/monthPicker/index.ts
@@ -0,0 +1,3 @@
+export { default as MonthPicker } from "./monthPicker";
+export * from "./monthPicker";
+export * from "./types";
diff --git a/packages/frappe-ui-react/src/components/monthPicker/monthPicker.stories.tsx b/packages/frappe-ui-react/src/components/monthPicker/monthPicker.stories.tsx
new file mode 100644
index 00000000..86ff895c
--- /dev/null
+++ b/packages/frappe-ui-react/src/components/monthPicker/monthPicker.stories.tsx
@@ -0,0 +1,79 @@
+import type { Meta, StoryObj } from "@storybook/react-vite";
+import { useState } from "react";
+
+import MonthPicker from "./monthPicker";
+import type { MonthPickerProps } from "./types";
+
+export default {
+ title: "Components/MonthPicker",
+ component: MonthPicker,
+ tags: ["autodocs"],
+ argTypes: {
+ value: {
+ control: "text",
+ description:
+ "Selected month value in 'Month Year' format (e.g., 'January 2026').",
+ },
+ placeholder: {
+ control: "text",
+ description: "Placeholder text for the MonthPicker button.",
+ },
+ className: {
+ control: "text",
+ description: "CSS class names to apply to the button.",
+ },
+ placement: {
+ control: "select",
+ options: [
+ "top-start",
+ "top",
+ "top-end",
+ "bottom-start",
+ "bottom",
+ "bottom-end",
+ "left-start",
+ "left",
+ "left-end",
+ "right-start",
+ "right",
+ "right-end",
+ ],
+ description: "Popover placement relative to the target.",
+ },
+ onChange: {
+ action: "onChange",
+ description: "Callback fired when the month value changes.",
+ },
+ },
+ parameters: { docs: { source: { type: "dynamic" } }, layout: "centered" },
+} as Meta;
+
+type Story = StoryObj;
+
+export const Default: Story = {
+ render: (args) => {
+ const [value, setValue] = useState("");
+ return (
+
+
+
+ );
+ },
+ args: {
+ placeholder: "Select month",
+ },
+};
+
+export const FitWidth: Story = {
+ render: (args) => {
+ const [value, setValue] = useState("");
+ return (
+
+
+
+ );
+ },
+ args: {
+ placeholder: "Select month",
+ },
+};
diff --git a/packages/frappe-ui-react/src/components/monthPicker/monthPicker.tsx b/packages/frappe-ui-react/src/components/monthPicker/monthPicker.tsx
new file mode 100644
index 00000000..f20bdd58
--- /dev/null
+++ b/packages/frappe-ui-react/src/components/monthPicker/monthPicker.tsx
@@ -0,0 +1,156 @@
+/**
+ * External dependencies.
+ */
+import { useCallback, useEffect, useMemo, useState } from "react";
+import { ChevronLeft, ChevronRight, Calendar } from "lucide-react";
+import clsx from "clsx";
+
+/**
+ * Internal dependencies.
+ */
+import { dayjs } from "../../utils/dayjs";
+import { Popover } from "../popover";
+import { Button } from "../button";
+import { MonthPickerProps } from "./types";
+
+const MONTHS = [
+ "January",
+ "February",
+ "March",
+ "April",
+ "May",
+ "June",
+ "July",
+ "August",
+ "September",
+ "October",
+ "November",
+ "December",
+];
+
+const MonthPicker = ({
+ value,
+ placeholder = "Select month",
+ className,
+ placement,
+ onChange,
+}: MonthPickerProps) => {
+ const [open, setOpen] = useState(false);
+ const [viewMode, setViewMode] = useState<"month" | "year">("month");
+ const today = useMemo(() => new Date(), []);
+ const [currentYear, setCurrentYear] = useState(today.getFullYear());
+
+ const parseValue = useCallback((val: string) => {
+ if (!val) return null;
+ const parsed = dayjs(val, "MMMM YYYY");
+ if (parsed.isValid()) {
+ return { month: parsed.format("MMMM"), year: parsed.year() };
+ }
+ return null;
+ }, []);
+
+ const yearRangeStart = useMemo(
+ () => currentYear - (currentYear % 12),
+ [currentYear]
+ );
+
+ const yearRange = useMemo(
+ () => Array.from({ length: 12 }, (_, i) => yearRangeStart + i),
+ [yearRangeStart]
+ );
+
+ const pickerList = useMemo(
+ () => (viewMode === "year" ? yearRange : MONTHS),
+ [viewMode, yearRange]
+ );
+
+ const toggleViewMode = useCallback(() => {
+ setViewMode((prevMode) => (prevMode === "month" ? "year" : "month"));
+ }, []);
+
+ const prev = useCallback(() => {
+ setCurrentYear((y) => (viewMode === "year" ? y - 12 : y - 1));
+ }, [viewMode]);
+
+ const next = useCallback(() => {
+ setCurrentYear((y) => (viewMode === "year" ? y + 12 : y + 1));
+ }, [viewMode]);
+
+ const handleOpenChange = useCallback((isOpen: boolean) => {
+ setOpen(isOpen);
+ if (!isOpen) setViewMode("month");
+ }, []);
+
+ const handleOnClick = useCallback(
+ (v: string | number) => {
+ const parts = (value || "").split(" ");
+ const indexToModify = viewMode === "year" ? 1 : 0;
+ parts[indexToModify] = String(v);
+ const newValue = parts.join(" ");
+ onChange?.(newValue);
+ },
+ [value, viewMode, onChange]
+ );
+
+ useEffect(() => {
+ const parsed = parseValue(value || "");
+ if (parsed) {
+ setCurrentYear(parsed.year);
+ }
+ }, [value, parseValue]);
+
+ return (
+ (
+ }
+ >
+ {value || placeholder}
+
+ )}
+ popoverClass="w-min!"
+ body={() => (
+
+
+
+
+
+
+
+ {viewMode === "month"
+ ? (value || "").split(" ")[1] || currentYear
+ : `${yearRangeStart} - ${yearRangeStart + 11}`}
+
+
+
+
+
+
+
+
+
+
+ {pickerList.map((month, index) => (
+ handleOnClick(month)}
+ variant={(value || "").includes(String(month)) ? "solid" : "ghost"}
+ className="text-sm text-ink-gray-9"
+ >
+ {viewMode === "month" ? (month as string).slice(0, 3) : month}
+
+ ))}
+
+
+ )}
+ />
+ );
+};
+
+export default MonthPicker;
diff --git a/packages/frappe-ui-react/src/components/monthPicker/types.ts b/packages/frappe-ui-react/src/components/monthPicker/types.ts
new file mode 100644
index 00000000..bee6d040
--- /dev/null
+++ b/packages/frappe-ui-react/src/components/monthPicker/types.ts
@@ -0,0 +1,19 @@
+export interface MonthPickerProps {
+ value?: string;
+ placeholder?: string;
+ className?: string;
+ placement?:
+ | "top-start"
+ | "top"
+ | "top-end"
+ | "bottom-start"
+ | "bottom"
+ | "bottom-end"
+ | "left-start"
+ | "left"
+ | "left-end"
+ | "right-start"
+ | "right"
+ | "right-end";
+ onChange?: (value: string) => void;
+}
diff --git a/packages/frappe-ui-react/src/components/multiSelect/index.ts b/packages/frappe-ui-react/src/components/multiSelect/index.ts
new file mode 100644
index 00000000..4c938f42
--- /dev/null
+++ b/packages/frappe-ui-react/src/components/multiSelect/index.ts
@@ -0,0 +1,2 @@
+export { MultiSelect } from "./multiSelect";
+export * from "./types";
diff --git a/packages/frappe-ui-react/src/components/multiSelect/multiSelect.stories.tsx b/packages/frappe-ui-react/src/components/multiSelect/multiSelect.stories.tsx
new file mode 100644
index 00000000..c12da41e
--- /dev/null
+++ b/packages/frappe-ui-react/src/components/multiSelect/multiSelect.stories.tsx
@@ -0,0 +1,157 @@
+import { useState } from "react";
+import type { Meta, StoryObj } from "@storybook/react-vite";
+import { CheckCheck, Trash2 } from "lucide-react";
+
+import { MultiSelect } from "./multiSelect";
+import Button from "../button/button";
+import Avatar from "../avatar/avatar";
+
+const meta: Meta = {
+ title: "Components/MultiSelect",
+ component: MultiSelect,
+ parameters: {
+ docs: { source: { type: "dynamic" } },
+ layout: "centered",
+ },
+ tags: ["autodocs"],
+ argTypes: {
+ value: {
+ control: "object",
+ description: "Array of selected values",
+ },
+ options: {
+ control: "object",
+ description: "Array of options to display in the dropdown",
+ },
+ placeholder: {
+ control: "text",
+ description: "Placeholder text when no options are selected",
+ },
+ hideSearch: {
+ control: "boolean",
+ description: "Hide the search input in the dropdown",
+ },
+ loading: {
+ control: "boolean",
+ description: "Show loading indicator",
+ },
+ onChange: {
+ action: "changed",
+ description: "Callback when selection changes",
+ },
+ renderOption: {
+ control: false,
+ description: "Custom render function for each option",
+ },
+ renderFooter: {
+ control: false,
+ description: "Custom render function for the footer",
+ },
+ },
+ args: {
+ placeholder: "Select option",
+ hideSearch: false,
+ loading: false,
+ },
+};
+
+export default meta;
+type Story = StoryObj;
+
+const img =
+ "https://images.unsplash.com/photo-1502741338009-cac2772e18bc?w=100&h=100&fit=crop";
+
+const options = [
+ { value: "red-apple", label: "Red Apple", img },
+ { value: "blueberry-burst", label: "Blueberry Burst", img },
+ { value: "orange-grove", label: "Orange Grove", img },
+ { value: "banana-split", label: "Banana Split", img },
+ { value: "grapes-cluster", label: "Grapes Cluster", img },
+ { value: "kiwi-slice", label: "Kiwi Slice", img },
+ { value: "mango-fusion", label: "Mango Fusion", img },
+];
+
+export const Default: Story = {
+ args: {
+ options: options,
+ value: [],
+ placeholder: "Select fruit",
+ onChange: () => {},
+ },
+ render: (args) => {
+ const [value, setValue] = useState([]);
+ return (
+
+
+
+ );
+ },
+};
+
+export const OptionSlot: Story = {
+ name: "Option slot",
+ args: {
+ options: options,
+ value: [],
+ placeholder: "Select fruit",
+ onChange: () => {},
+ },
+ render: (args) => {
+ const [value, setValue] = useState([]);
+ return (
+
+ );
+ },
+};
+
+export const FooterSlot: Story = {
+ name: "Footer slot",
+ args: {
+ options: options,
+ value: [],
+ onChange: () => {},
+ },
+ render: (args) => {
+ const [value, setValue] = useState([]);
+ return (
+
+
(
+
+ }
+ >
+ Clear All
+
+ }
+ >
+ Select All
+
+
+ )}
+ />
+
+ );
+ },
+};
diff --git a/packages/frappe-ui-react/src/components/multiSelect/multiSelect.tsx b/packages/frappe-ui-react/src/components/multiSelect/multiSelect.tsx
new file mode 100644
index 00000000..b069afee
--- /dev/null
+++ b/packages/frappe-ui-react/src/components/multiSelect/multiSelect.tsx
@@ -0,0 +1,199 @@
+/**
+ * External dependencies
+ */
+import React, { useState, useMemo, useRef, useEffect } from "react";
+import {
+ Combobox,
+ ComboboxInput,
+ ComboboxOption,
+ ComboboxOptions,
+} from "@headlessui/react";
+import { Check, ChevronDown, X } from "lucide-react";
+
+/**
+ * Internal dependencies.
+ */
+import Popover from "../popover/popover";
+import Button from "../button/button";
+import LoadingIndicator from "../loadingIndicator";
+import type { MultiSelectOption, MultiSelectProps } from "./types";
+import clsx from "clsx";
+
+export const MultiSelect: React.FC = ({
+ value = [],
+ options,
+ placeholder = "Select option",
+ hideSearch = false,
+ loading = false,
+ compareFn = (
+ a: NoInfer | object,
+ b: NoInfer | object
+ //@ts-expect-error -- this is fine since we have specified object type in documentation
+ ) => a?.value === b?.value,
+ onChange,
+ renderOption,
+ renderFooter,
+}) => {
+ const [query, setQuery] = useState("");
+ const [showOptions, setShowOptions] = useState(false);
+ const searchInputRef = useRef(null);
+
+ const selectedOptionObjects = useMemo(() => {
+ return value
+ .map((val) => options.find((opt) => opt.value === val))
+ .filter((opt): opt is MultiSelectOption => opt !== undefined);
+ }, [value, options]);
+
+ const selectedOptions = useMemo(() => {
+ if (selectedOptionObjects.length === 0) return placeholder;
+ const labels = selectedOptionObjects.map((opt) => opt.label);
+ return labels.join(", ");
+ }, [selectedOptionObjects, placeholder]);
+
+ const filteredOptions = useMemo(() => {
+ if (!query) return options;
+ const lowerQuery = query.toLowerCase();
+ return options.filter((opt) =>
+ opt.label.toLowerCase().includes(lowerQuery)
+ );
+ }, [options, query]);
+
+ const clearAll = () => {
+ setQuery("");
+ onChange?.([]);
+ };
+
+ const selectAll = () => {
+ setQuery("");
+ const allValues = options.filter((opt) => !opt.disabled).map((opt) => opt.value);
+ onChange?.(allValues);
+ };
+
+ const clearSearch = (e: React.MouseEvent) => {
+ e.preventDefault();
+ e.stopPropagation();
+ setQuery("");
+ searchInputRef.current?.focus();
+ };
+
+ const handleChange = (newValue: MultiSelectOption[]) => {
+ onChange?.(newValue.map((opt) => opt.value));
+ };
+
+ useEffect(() => {
+ if (showOptions && searchInputRef.current && !hideSearch) {
+ requestAnimationFrame(() => {
+ searchInputRef.current?.focus();
+ });
+ }
+ }, [showOptions, hideSearch]);
+
+ return (
+ (
+ }
+ >
+ {selectedOptions}
+
+ )}
+ body={() => (
+
+
+
+ {!hideSearch && (
+
+
query}
+ onChange={(e) => setQuery(e.target.value)}
+ placeholder="Search for..."
+ className="bg-transparent p-0 focus:outline-0 border-0 focus:border-0 focus:ring-0 text-base text-ink-gray-8 h-full placeholder:text-ink-gray-4 w-full"
+ />
+
+ {loading && (
+
+ )}
+ {query && (
+
+
+
+ )}
+
+
+ )}
+
+
+
+ {filteredOptions.length === 0 && (
+
+ No results found
+
+ )}
+
+ {filteredOptions.map((item) => (
+
+ {({ selected }) => (
+ <>
+
+ {renderOption ? renderOption(item) : item.label}
+
+ {selected && (
+
+
+
+ )}
+ >
+ )}
+
+ ))}
+
+
+
+
+ {renderFooter ? (
+ renderFooter({ clearAll, selectAll })
+ ) : (
+
+
+ Clear All
+
+
+ Select All
+
+
+ )}
+
+
+
+
+ )}
+ />
+ );
+};
diff --git a/packages/frappe-ui-react/src/components/multiSelect/types.ts b/packages/frappe-ui-react/src/components/multiSelect/types.ts
new file mode 100644
index 00000000..f4775278
--- /dev/null
+++ b/packages/frappe-ui-react/src/components/multiSelect/types.ts
@@ -0,0 +1,25 @@
+import type { ReactNode } from "react";
+
+export interface MultiSelectOption {
+ label: string;
+ value: string;
+ disabled?: boolean;
+}
+
+export interface MultiSelectProps {
+ value?: string[];
+ options: MultiSelectOption[];
+ placeholder?: string;
+ hideSearch?: boolean;
+ loading?: boolean;
+ compareFn?: (
+ a: NoInfer | object,
+ b: NoInfer | object
+ ) => boolean;
+ onChange?: (value: string[]) => void;
+ renderOption?: (option: MultiSelectOption) => ReactNode;
+ renderFooter?: (props: {
+ clearAll: () => void;
+ selectAll: () => void;
+ }) => ReactNode;
+}
diff --git a/packages/frappe-ui-react/src/components/popover/popover.tsx b/packages/frappe-ui-react/src/components/popover/popover.tsx
index 18050dfb..93b9a5c3 100644
--- a/packages/frappe-ui-react/src/components/popover/popover.tsx
+++ b/packages/frappe-ui-react/src/components/popover/popover.tsx
@@ -16,6 +16,7 @@ function getOrCreatePopoverRoot(): HTMLElement {
if (!root) {
root = document.createElement("div");
root.id = popoverRootId;
+ root.style.position = "absolute";
document.body.appendChild(root);
}
return root;
@@ -363,7 +364,7 @@ const Popover: React.FC = ({
{createPortal(
;
const Template: StoryObj = {
+ args: {
+ value: "",
+ options: [
+ { label: "John Doe", value: "john-doe" },
+ { label: "Jane Doe", value: "jane-doe" },
+ { label: "John Smith", value: "john-smith" },
+ { label: "Jane Smith", value: "jane-smith", disabled: true },
+ { label: "John Wayne", value: "john-wayne" },
+ { label: "Jane Wayne", value: "jane-wayne" },
+ ],
+ },
render: (args) => {
const [value, setValue] = useState(args.value || "");
@@ -58,16 +70,7 @@ const Template: StoryObj = {
👤 }
onChange={(e) => setValue(e.target.value)}
- options={[
- { label: "John Doe", value: "john-doe" },
- { label: "Jane Doe", value: "jane-doe" },
- { label: "John Smith", value: "john-smith" },
- { label: "Jane Smith", value: "jane-smith", disabled: true },
- { label: "John Wayne", value: "john-wayne" },
- { label: "Jane Wayne", value: "jane-wayne" },
- ]}
/>
);
@@ -76,7 +79,12 @@ const Template: StoryObj
= {
export const Default = {
...Template,
+};
+
+export const WithPrefix = {
+ ...Template,
args: {
- value: "",
+ ...Template.args,
+ prefix: () => ,
},
};
diff --git a/packages/frappe-ui-react/src/components/select/select.tsx b/packages/frappe-ui-react/src/components/select/select.tsx
index 828e449e..531c7d10 100644
--- a/packages/frappe-ui-react/src/components/select/select.tsx
+++ b/packages/frappe-ui-react/src/components/select/select.tsx
@@ -7,6 +7,7 @@ const Select: React.FC = ({
variant = "subtle",
disabled = false,
value,
+ defaultValue,
placeholder,
options,
onChange,
@@ -53,10 +54,10 @@ const Select: React.FC = ({
const paddingClasses = useMemo(() => {
return {
- sm: prefix ? "pl-9 pr-5" : "pl-2 pr-5",
- md: prefix ? "pl-10 pr-5.5" : "pl-2.5 pr-5.5",
- lg: prefix ? "pl-12 pr-6" : "pl-3 pr-6",
- xl: prefix ? "pl-13 pr-6" : "pl-3 pr-6",
+ sm: prefix ? "pl-8 pr-5" : "pl-2 pr-5",
+ md: prefix ? "pl-9 pr-5.5" : "pl-2.5 pr-5.5",
+ lg: prefix ? "pl-10 pr-6" : "pl-3 pr-6",
+ xl: prefix ? "pl-10 pr-6" : "pl-3 pr-6",
}[size];
}, [prefix, size]);
@@ -100,7 +101,7 @@ const Select: React.FC = ({
xl: "pl-3",
}[size];
}, [size]);
-
+
return (
{prefix && (
@@ -121,14 +122,13 @@ const Select: React.FC
= ({
className={selectClasses}
disabled={disabled}
id={htmlId}
- value={value}
+ {...(value !== undefined ? { value } : { defaultValue })}
onChange={handleChange}
data-testid="select"
>
{placeholder && !value && }
{selectOptions.map((option) => (
= {
tags: ["autodocs"],
component: Switch,
parameters: { docs: { source: { type: "dynamic" } }, layout: "centered" },
-};
-export default meta;
-
-type StoryType = StoryObj;
-
-export const Label: StoryType = {
- args: {
- size: "sm",
- label: "Enable Notifications",
- description: "",
- disabled: false,
- value: false,
- className: "",
- },
- render: (args) => {
- const [checked, setChecked] = useState(args.value ?? false);
- return ;
- },
argTypes: {
size: {
control: "select",
@@ -57,21 +39,128 @@ export const Label: StoryType = {
control: "text",
description: "CSS classes for the Switch container",
},
+ labelClassName: {
+ control: "text",
+ description: "CSS classes for the Switch label",
+ },
},
};
+export default meta;
+
+type Story = StoryObj;
-export const LabelAndDescription: StoryType = {
+export const Plain: Story = {
+ args: {
+ size: "sm",
+ disabled: false,
+ value: false,
+ },
+ render: (args) => {
+ const [checked, setChecked] = useState(args.value ?? false);
+ return ;
+ },
+};
+
+export const Label: Story = {
+ args: {
+ size: "sm",
+ label: "Enable Notifications",
+ disabled: false,
+ value: false,
+ },
+ render: (args) => {
+ const [checked, setChecked] = useState(args.value ?? false);
+ return (
+
+
+
+ );
+ },
+};
+
+export const DescriptionAndIcon: Story = {
args: {
size: "sm",
label: "Enable Notifications",
description: "Get notified when something happens.",
disabled: false,
value: false,
- className: "",
+ },
+ render: (args) => {
+ const [checked1, setChecked1] = useState(args.value ?? false);
+ const [checked2, setChecked2] = useState(args.value ?? false);
+ return (
+
+
+
+
+ );
+ },
+};
+
+export const Sizes: Story = {
+ args: {
+ label: "Enable Notifications",
+ disabled: false,
+ value: false,
+ },
+ render: (args) => {
+ const [checkedSm, setCheckedSm] = useState(args.value ?? false);
+ const [checkedMd, setCheckedMd] = useState(args.value ?? false);
+ return (
+
+
+
+
+ );
+ },
+};
+
+export const Disabled: Story = {
+ args: {
+ size: "sm",
+ label: "Enable Notifications",
+ disabled: true,
+ value: false,
+ },
+ render: (args) => {
+ const [checked1, setChecked1] = useState(args.value ?? false);
+ const [checked2, setChecked2] = useState(args.value ?? false);
+ return (
+
+
+
+
+ );
+ },
+};
+
+export const Classes: Story = {
+ args: {
+ size: "sm",
+ label: "Enable Notifications",
+ description: "This switch has a normal font.",
+ labelClassName: "font-normal",
+ disabled: false,
+ value: false,
},
render: (args) => {
const [checked, setChecked] = useState(args.value ?? false);
- return ;
+ return (
+
+
+
+ );
},
- argTypes: Label.argTypes,
};
diff --git a/packages/frappe-ui-react/src/components/switch/switch.tsx b/packages/frappe-ui-react/src/components/switch/switch.tsx
index f9465abc..86cd8de2 100644
--- a/packages/frappe-ui-react/src/components/switch/switch.tsx
+++ b/packages/frappe-ui-react/src/components/switch/switch.tsx
@@ -6,6 +6,7 @@ import {
Description,
} from "@headlessui/react";
import { SwitchProps } from "./types";
+import FeatherIcon, { type FeatherIconProps } from "../featherIcon";
enum SwitchVariant {
DEFAULT,
@@ -21,6 +22,8 @@ const Switch: React.FC = ({
description = "",
disabled = false,
className = "",
+ labelClassName = "",
+ icon,
}) => {
// Determine switch type
const switchType = useMemo(() => {
@@ -35,8 +38,12 @@ const Switch: React.FC = ({
"focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-outline-gray-3",
"disabled:cursor-not-allowed disabled:bg-surface-gray-3",
value
- ? "bg-surface-gray-7 enabled:hover:bg-surface-gray-6 active:bg-surface-gray-5 group-hover:enabled:bg-surface-gray-6"
- : "bg-surface-gray-4 enabled:hover:bg-gray-400 active:bg-gray-500 group-hover:enabled:bg-gray-400",
+ ? "bg-surface-gray-7 enabled:hover:bg-surface-gray-6 active:bg-surface-gray-5"
+ : "bg-surface-gray-4 enabled:hover:bg-gray-400 active:bg-gray-500 dark:enabled:hover:bg-dark-gray-100 dark:active:bg-dark-gray-200",
+ switchType === SwitchVariant.ONLY_LABEL &&
+ (value
+ ? "group-hover:enabled:bg-surface-gray-6"
+ : "group-hover:enabled:bg-gray-400 dark:group-hover:enabled:bg-dark-gray-100"),
size === "md" ? "h-5 w-8 border-[3px]" : "h-4 w-[26px] border-2",
].join(" ");
@@ -58,9 +65,12 @@ const Switch: React.FC = ({
? "text-ink-gray-4"
: "text-ink-gray-8",
size === "md" ? "text-lg" : "text-base",
+ labelClassName,
].join(" ");
- const switchDescriptionClasses = "max-w-xs text-p-base text-ink-gray-7";
+ const switchDescriptionClasses = "max-w-xs text-p-sm text-ink-gray-7";
+
+ const iconClasses = "mr-2 h-4 w-4 flex-shrink-0 text-ink-gray-6";
const switchGroupClasses = useMemo(() => {
const classes = ["flex justify-between"];
@@ -76,12 +86,11 @@ const Switch: React.FC = ({
classes.push(size === "md" ? "px-3 py-1.5" : "px-2.5 py-1.5");
} else if (switchType === SwitchVariant.WITH_LABEL_AND_DESCRIPTION) {
classes.push("group items-start");
- classes.push(size === "md" ? "space-x-3.5" : "space-x-2.5");
+ classes.push(size === "md" ? " px-3 space-x-3.5" : "px-2.5 space-x-2.5");
}
return classes.join(" ");
}, [switchType, size, disabled]);
-
- const labelContainerClasses = "flex flex-col space-y-0.5";
+ const labelContainerClasses = "flex flex-col gap-1";
// Keyboard spacebar toggle for ONLY_LABEL
const handleKeyUp = (e: React.KeyboardEvent) => {
@@ -101,18 +110,30 @@ const Switch: React.FC = ({
onKeyUp={handleKeyUp}
className={`${switchGroupClasses} ${className}`}
>
-
- {label && (
-
- {label}
-
- )}
+
+
+ {icon &&
+ (typeof icon === "string" ? (
+
+ ) : React.isValidElement(icon) ? (
+ {icon}
+ ) : null)}
+ {label && (
+
+ {label}
+
+ )}
+
{description && (
{description}
)}
-
+
onChange(!value)}
diff --git a/packages/frappe-ui-react/src/components/switch/types.ts b/packages/frappe-ui-react/src/components/switch/types.ts
index bbec27e3..b81063f7 100644
--- a/packages/frappe-ui-react/src/components/switch/types.ts
+++ b/packages/frappe-ui-react/src/components/switch/types.ts
@@ -1,3 +1,5 @@
+import type { ReactNode } from "react";
+
export type SwitchProps = {
value: boolean;
onChange: (value: boolean) => void;
@@ -6,4 +8,6 @@ export type SwitchProps = {
description?: string;
disabled?: boolean;
className?: string;
+ labelClassName?: string;
+ icon?: string | ReactNode;
};
diff --git a/packages/frappe-ui-react/src/components/tabs/tabList.tsx b/packages/frappe-ui-react/src/components/tabs/tabList.tsx
index 0533ba1d..a46ed87b 100644
--- a/packages/frappe-ui-react/src/components/tabs/tabList.tsx
+++ b/packages/frappe-ui-react/src/components/tabs/tabList.tsx
@@ -27,7 +27,7 @@ export const TabList = ({
indicator.style.height = `${selectedTab.offsetHeight}px`;
indicator.style.top = `${selectedTab.offsetTop}px`;
indicator.style.right = "0px";
- indicator.style.width = "1px";
+ indicator.style.width = "2px";
indicator.style.left = "";
} else {
indicator.style.width = `${selectedTab.offsetWidth}px`;
@@ -44,7 +44,7 @@ export const TabList = ({
className={[
"relative flex border-gray-200",
vertical
- ? "flex-col border-r overflow-y-auto"
+ ? "gap-5 flex-col border-r overflow-y-auto py-3"
: "gap-7.5 border-b overflow-x-auto items-center px-5",
].join(" ")}
>
@@ -59,9 +59,7 @@ export const TabList = ({
className={[
"focus:outline-none focus:transition-none flex items-center gap-1.5 text-base text-ink-gray-5 duration-300 ease-in-out hover:text-ink-gray-9 cursor-pointer",
selected ? "text-ink-gray-9" : "",
- vertical
- ? "py-2.5 px-4 border-r border-transparent hover:border-outline-gray-3"
- : "py-3 border-b border-transparent hover:border-outline-gray-3",
+ vertical ? "px-4" : "py-3",
].join(" ")}
onClick={() => setTabIndex(i)}
type="button"
@@ -76,8 +74,8 @@ export const TabList = ({
diff --git a/packages/frappe-ui-react/src/components/tabs/tabs.stories.tsx b/packages/frappe-ui-react/src/components/tabs/tabs.stories.tsx
index 44c9f7a1..639d547a 100644
--- a/packages/frappe-ui-react/src/components/tabs/tabs.stories.tsx
+++ b/packages/frappe-ui-react/src/components/tabs/tabs.stories.tsx
@@ -54,7 +54,7 @@ const tabsWithoutIcon = [
{
label: "Linkedin",
content:
- "LinkedIn is an American business and employment-oriented online service that operates via websites and mobile apps.",
+ "LinkedIn is an American business and employment‑oriented online networking service platform that operates primarily via websites and mobile apps.",
},
];
@@ -74,7 +74,7 @@ const tabsWithIcon = [
{
label: "Linkedin",
content:
- "LinkedIn is an American business and employment-oriented online service that operates via websites and mobile apps.",
+ "LinkedIn is an American business and employment‑oriented online networking service platform that operates primarily via websites and mobile apps.",
icon: ,
},
];
diff --git a/packages/frappe-ui-react/src/components/textInput/textInput.tsx b/packages/frappe-ui-react/src/components/textInput/textInput.tsx
index c2776adc..838c1127 100644
--- a/packages/frappe-ui-react/src/components/textInput/textInput.tsx
+++ b/packages/frappe-ui-react/src/components/textInput/textInput.tsx
@@ -78,6 +78,7 @@ const TextInput = forwardRef(
disabled: `border ${
variant === "outline" ? "border-outline-gray-2" : "border-transparent"
} bg-surface-gray-1 placeholder-ink-gray-3`,
+ ghost: 'border-0 focus:ring-0 focus-visible:ring-0',
}[currentVariant];
return [
@@ -148,8 +149,8 @@ const TextInput = forwardRef(
value={inputValue}
required={rest.required}
onChange={handleChange}
- className={`appearance-none ${inputClasses}`}
data-testid="text-input"
+ className={`appearance-none ${inputClasses}`}
{...rest}
/>
{suffix && (
diff --git a/packages/frappe-ui-react/src/components/textInput/types.ts b/packages/frappe-ui-react/src/components/textInput/types.ts
index d5e5afb0..f242f397 100644
--- a/packages/frappe-ui-react/src/components/textInput/types.ts
+++ b/packages/frappe-ui-react/src/components/textInput/types.ts
@@ -1,10 +1,10 @@
-import type { ReactNode } from "react";
+import type { ReactNode, InputHTMLAttributes } from "react";
import { TextInputTypes } from "../../common/types";
-export interface TextInputProps {
+export interface TextInputProps extends Omit, 'size' | 'prefix' | 'onChange'> {
type?: TextInputTypes;
size?: "sm" | "md" | "lg" | "xl";
- variant?: "subtle" | "outline";
+ variant?: "subtle" | "outline" | "ghost";
placeholder?: string;
disabled?: boolean;
htmlId?: string;
diff --git a/packages/frappe-ui-react/src/components/textarea/textarea.stories.tsx b/packages/frappe-ui-react/src/components/textarea/textarea.stories.tsx
index 6c9258d7..a19efd41 100644
--- a/packages/frappe-ui-react/src/components/textarea/textarea.stories.tsx
+++ b/packages/frappe-ui-react/src/components/textarea/textarea.stories.tsx
@@ -80,3 +80,13 @@ export const OutlineVariant = {
value: "",
},
};
+
+export const Disabled = {
+ ...Template,
+ args: {
+ placeholder: "Disabled textarea",
+ variant: "outline",
+ value: "",
+ disabled: true,
+ },
+};
diff --git a/packages/frappe-ui-react/src/components/themeShowCase/ThemeShowcase.css b/packages/frappe-ui-react/src/components/themeShowCase/ThemeShowcase.css
index 9ce4c2f9..1440e08e 100644
--- a/packages/frappe-ui-react/src/components/themeShowCase/ThemeShowcase.css
+++ b/packages/frappe-ui-react/src/components/themeShowCase/ThemeShowcase.css
@@ -484,10 +484,6 @@
color: var(--color-ink-gray-8);
}
-.dark .default-token-note p {
- color: var(--color-ink-gray-1);
-}
-
/* Responsive adjustments for default tokens */
@media (max-width: 768px) {
.default-token-grid {
diff --git a/packages/frappe-ui-react/src/components/themeShowCase/ThemeShowcase.tsx b/packages/frappe-ui-react/src/components/themeShowCase/ThemeShowcase.tsx
index aadc5b41..b823d42e 100644
--- a/packages/frappe-ui-react/src/components/themeShowCase/ThemeShowcase.tsx
+++ b/packages/frappe-ui-react/src/components/themeShowCase/ThemeShowcase.tsx
@@ -1326,7 +1326,7 @@ const ThemeShowcase: React.FC = () => {
{fontFamilies.map((font) => (
diff --git a/packages/frappe-ui-react/src/components/timePicker/index.ts b/packages/frappe-ui-react/src/components/timePicker/index.ts
new file mode 100644
index 00000000..812fe952
--- /dev/null
+++ b/packages/frappe-ui-react/src/components/timePicker/index.ts
@@ -0,0 +1,2 @@
+export { default as TimePicker } from "./timePicker";
+export * from "./types";
diff --git a/packages/frappe-ui-react/src/components/timePicker/timePicker.stories.tsx b/packages/frappe-ui-react/src/components/timePicker/timePicker.stories.tsx
new file mode 100644
index 00000000..eac7ce78
--- /dev/null
+++ b/packages/frappe-ui-react/src/components/timePicker/timePicker.stories.tsx
@@ -0,0 +1,198 @@
+import type { Meta, StoryObj } from "@storybook/react-vite";
+import { useState } from "react";
+
+import TimePicker from "./timePicker";
+
+export default {
+ title: "Components/TimePicker",
+ component: TimePicker,
+ argTypes: {
+ value: {
+ control: "text",
+ description: "The time value (HH:MM format)",
+ },
+ interval: {
+ control: "number",
+ description: "Time interval in minutes for generated options",
+ },
+ variant: {
+ control: {
+ type: "select",
+ options: ["outline", "subtle"],
+ },
+ description: "Visual variant of the input",
+ },
+ allowCustom: {
+ control: "boolean",
+ description: "Allow custom time input",
+ },
+ autoClose: {
+ control: "boolean",
+ description: "Auto close on selection",
+ },
+ use12Hour: {
+ control: "boolean",
+ description: "Use 12-hour format",
+ },
+ disabled: {
+ control: "boolean",
+ description: "Disable the input",
+ },
+ placement: {
+ control: "select",
+ options: [
+ "bottom-start",
+ "bottom-end",
+ "top-start",
+ "top-end",
+ "right-start",
+ "right-end",
+ "left-start",
+ "left-end",
+ ],
+ description: "Popover placement",
+ },
+ scrollMode: {
+ control: {
+ type: "select",
+ options: ["center", "start", "nearest"],
+ },
+ description: "Scroll behavior when opening",
+ },
+ minTime: {
+ control: "text",
+ description: "Minimum time (HH:MM)",
+ },
+ maxTime: {
+ control: "text",
+ description: "Maximum time (HH:MM)",
+ },
+ placeholder: {
+ control: "text",
+ description: "Placeholder text",
+ },
+ prefix: {
+ control: false,
+ description: "Prefix element",
+ },
+ suffix: {
+ control: false,
+ description: "Suffix element",
+ },
+ options: {
+ control: "object",
+ description: "Custom time options",
+ },
+ },
+ parameters: {
+ docs: {
+ source: {
+ type: "dynamic",
+ },
+ },
+ layout: "centered",
+ },
+ tags: ["autodocs"],
+} as Meta;
+
+type Story = StoryObj;
+
+export const Basic: Story = {
+ render: (args) => {
+ const [value, setValue] = useState("");
+
+ return (
+
+
+
Value: {value || "—"}
+
+ );
+ },
+ args: {
+ placeholder: "Select time",
+ interval: 15,
+ allowCustom: true,
+ autoClose: true,
+ use12Hour: true,
+ variant: "subtle",
+ placement: "bottom-start",
+ scrollMode: "center",
+ },
+};
+
+export const TwentyFourHourFormat: Story = {
+ render: (args) => {
+ const [value, setValue] = useState("13:30");
+
+ return (
+
+ );
+ },
+ name: "24 Hour Format",
+ args: {
+ use12Hour: false,
+ interval: 15,
+ allowCustom: true,
+ autoClose: true,
+ variant: "subtle",
+ placement: "bottom-start",
+ scrollMode: "center",
+ },
+};
+
+export const CustomOptions: Story = {
+ render: (args) => {
+ const [value, setValue] = useState("09:00");
+
+ return (
+
+ );
+ },
+ name: "Custom Options (no interval generation)",
+ args: {
+ allowCustom: false,
+ autoClose: true,
+ use12Hour: true,
+ variant: "subtle",
+ placement: "bottom-start",
+ scrollMode: "center",
+ options: [
+ { value: "08:00" },
+ { value: "09:00" },
+ { value: "09:30" },
+ { value: "10:00" },
+ { value: "11:15" },
+ { value: "13:45" },
+ ],
+ },
+};
+
+export const MinMaxRange: Story = {
+ render: (args) => {
+ const [value, setValue] = useState("08:00");
+
+ return (
+
+ );
+ },
+ args: {
+ minTime: "08:00",
+ maxTime: "12:00",
+ interval: 15,
+ allowCustom: true,
+ autoClose: true,
+ use12Hour: true,
+ variant: "subtle",
+ placement: "bottom-start",
+ scrollMode: "center",
+ },
+};
diff --git a/packages/frappe-ui-react/src/components/timePicker/timePicker.tsx b/packages/frappe-ui-react/src/components/timePicker/timePicker.tsx
new file mode 100644
index 00000000..c9a012e2
--- /dev/null
+++ b/packages/frappe-ui-react/src/components/timePicker/timePicker.tsx
@@ -0,0 +1,175 @@
+/**
+ * External dependencies.
+ */
+import React from "react";
+import clsx from "clsx";
+
+/**
+ * Internal dependencies.
+ */
+import Popover from "../popover/popover";
+import TextInput from "../textInput/textInput";
+import FeatherIcon from "../featherIcon";
+import type { TimePickerProps, TimePickerOption } from "./types";
+import { useTimePicker } from "./useTimePicker";
+
+const TimePicker: React.FC = ({
+ value = "",
+ onChange,
+ onInputInvalid,
+ onInvalidChange,
+ onOpen,
+ onClose,
+ interval = 15,
+ options = [],
+ placement = "bottom-start",
+ placeholder = "Select time",
+ variant = "subtle",
+ allowCustom = true,
+ autoClose = true,
+ use12Hour = true,
+ disabled = false,
+ scrollMode = "center",
+ minTime = "",
+ maxTime = "",
+ prefix,
+ suffix,
+}) => {
+ const {
+ showOptions,
+ setShowOptions,
+ displayValue,
+ displayedOptions,
+ isTyping,
+ selectedAndNearest,
+ highlightIndex,
+ panelRef,
+ inputRef,
+ handleArrowDown,
+ handleArrowUp,
+ handleEnter,
+ handleClickInput,
+ handleFocus,
+ handleBlur,
+ handleEscape,
+ handleDisplayValueChange,
+ handleMouseEnter,
+ select,
+ optionId,
+ } = useTimePicker({
+ value,
+ onChange,
+ onInputInvalid,
+ onInvalidChange,
+ onOpen,
+ onClose,
+ interval,
+ options,
+ allowCustom,
+ autoClose,
+ use12Hour,
+ scrollMode,
+ minTime,
+ maxTime,
+ });
+
+ const getButtonClasses = (opt: TimePickerOption, idx: number): string => {
+ if (idx === highlightIndex) return "bg-surface-gray-3 text-ink-gray-8";
+ const { selected, nearest } = selectedAndNearest;
+ if (isTyping && !selected) {
+ if (nearest && nearest.value === opt.value)
+ return "text-ink-gray-7 italic bg-surface-gray-2";
+ return "text-ink-gray-6 hover:bg-surface-gray-2 hover:text-ink-gray-8";
+ }
+ if (selected && selected.value === opt.value)
+ return "bg-surface-gray-3 text-ink-gray-8";
+ if (nearest && nearest.value === opt.value)
+ return "text-ink-gray-7 italic bg-surface-gray-2";
+ return "text-ink-gray-6 hover:bg-surface-gray-2 hover:text-ink-gray-8";
+ };
+
+ return (
+ !disabled && setShowOptions(show)}
+ placement={placement}
+ target={({ togglePopover, isOpen }) => (
+ !disabled && handleClickInput(isOpen, togglePopover)}
+ onKeyDown={(e: React.KeyboardEvent) => {
+ if (e.key === "Enter") handleEnter(e);
+ else if (e.key === "Escape") handleEscape(e);
+ else if (e.key === "ArrowDown")
+ handleArrowDown(e, togglePopover, isOpen);
+ else if (e.key === "ArrowUp")
+ handleArrowUp(e, togglePopover, isOpen);
+ }}
+ onBlur={handleBlur}
+ prefix={prefix}
+ suffix={
+ suffix
+ ? suffix
+ : () => (
+ {
+ e.stopPropagation();
+ }}
+ >
+ {
+ e.preventDefault();
+ togglePopover();
+ }}
+ />
+
+ )
+ }
+ />
+ )}
+ body={({ isOpen }) => (
+ = 0 ? optionId(highlightIndex) : undefined
+ }
+ >
+ {displayedOptions.map((opt, idx) => (
+ select(opt.value)}
+ onMouseEnter={() => handleMouseEnter(idx)}
+ role="option"
+ id={optionId(idx)}
+ aria-selected={opt.value === value}
+ >
+ {opt.label}
+
+ ))}
+
+ )}
+ />
+ );
+};
+
+export default TimePicker;
diff --git a/packages/frappe-ui-react/src/components/timePicker/types.ts b/packages/frappe-ui-react/src/components/timePicker/types.ts
new file mode 100644
index 00000000..10973e22
--- /dev/null
+++ b/packages/frappe-ui-react/src/components/timePicker/types.ts
@@ -0,0 +1,46 @@
+import type { ReactNode } from "react";
+import type { Placement } from "@popperjs/core";
+
+export interface TimePickerOption {
+ value: string;
+ label: string;
+}
+
+export interface ParsedTimeValid {
+ valid: true;
+ hh24: string;
+ mm: string;
+ ss?: string;
+ total: number;
+}
+
+export interface ParsedTimeInvalid {
+ valid: false;
+}
+
+export type ParsedTime = ParsedTimeValid | ParsedTimeInvalid;
+
+export interface TimePickerProps {
+ value?: string;
+ onChange?: (value: string) => void;
+ onInputInvalid?: (input: string) => void;
+ onInvalidChange?: (invalid: boolean) => void;
+ onOpen?: () => void;
+ onClose?: () => void;
+ interval?: number;
+ options?: Array<{ value: string; label?: string }>;
+ placement?: Placement;
+ placeholder?: string;
+ variant?: "outline" | "subtle";
+ allowCustom?: boolean;
+ autoClose?: boolean;
+ use12Hour?: boolean;
+ disabled?: boolean;
+ scrollMode?: "center" | "start" | "nearest";
+ minTime?: string;
+ maxTime?: string;
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ prefix?: (args?: any) => ReactNode;
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ suffix?: (args?: any) => ReactNode;
+}
diff --git a/packages/frappe-ui-react/src/components/timePicker/useTimePicker.ts b/packages/frappe-ui-react/src/components/timePicker/useTimePicker.ts
new file mode 100644
index 00000000..8d45725e
--- /dev/null
+++ b/packages/frappe-ui-react/src/components/timePicker/useTimePicker.ts
@@ -0,0 +1,458 @@
+import {
+ useState,
+ useRef,
+ useEffect,
+ useMemo,
+ useCallback,
+ useId,
+} from "react";
+import type { TimePickerOption, TimePickerProps } from "./types";
+import {
+ findNearestIndex,
+ formatDisplay,
+ minutesFromHHMM,
+ normalize24,
+ parseFlexibleTimeHelper,
+} from "./utils";
+
+export function useTimePicker({
+ value = "",
+ onChange,
+ onInputInvalid,
+ onInvalidChange,
+ onOpen,
+ onClose,
+ interval = 15,
+ options = [],
+ allowCustom = true,
+ autoClose = true,
+ use12Hour = true,
+ scrollMode = "center",
+ minTime = "",
+ maxTime = "",
+}: Omit) {
+ const [internalValue, setInternalValue] = useState(normalize24(value));
+ const [displayValue, setDisplayValue] = useState(
+ formatDisplay(normalize24(value), use12Hour)
+ );
+ const [showOptions, setShowOptions] = useState(false);
+ const [highlightIndex, setHighlightIndex] = useState(-1);
+ const [isFocused, setIsFocused] = useState(false);
+ const [isTyping, setIsTyping] = useState(false);
+ const [invalidState, setInvalidState] = useState(false);
+ const [hasSelectedOnFirstClick, setHasSelectedOnFirstClick] = useState(false);
+
+ const panelRef = useRef(null);
+ const inputRef = useRef(null);
+ const navUpdatingRef = useRef(false);
+ const initHighlightRef = useRef<() => void>(() => {});
+ const scheduleScrollRef = useRef<(targetIndex?: number) => void>(() => {});
+ const uid = useId();
+
+ const minMinutes = useMemo(() => minutesFromHHMM(minTime), [minTime]);
+ const maxMinutes = useMemo(() => minutesFromHHMM(maxTime), [maxTime]);
+
+ /**
+ * Strips seconds from HH:MM:SS format
+ * @param time - Time string in HH:MM or HH:MM:SS format
+ * @returns Time string in HH:MM format
+ */
+ const getBaseTime = useCallback((time: string): string => {
+ return time.length === 8 ? time.slice(0, 5) : time;
+ }, []);
+
+ const preserveSeconds = useCallback((newVal: string, currentVal: string): string => {
+ return currentVal.length === 8 && newVal.length === 5
+ ? `${newVal}${currentVal.slice(5)}`
+ : newVal;
+ }, []);
+
+ const selectInputText = useCallback(() => {
+ queueMicrotask(() => {
+ inputRef.current?.select();
+ setHasSelectedOnFirstClick(true);
+ });
+ }, []);
+
+ const displayedOptions = useMemo(() => {
+ if (options.length) {
+ return options.map((o) => {
+ const val = normalize24(o.value);
+ return {
+ value: val,
+ label: o.label || formatDisplay(val, use12Hour),
+ };
+ });
+ }
+
+ const out: TimePickerOption[] = [];
+ for (let m = 0; m < 1440; m += interval) {
+ if (minMinutes != null && m < minMinutes) continue;
+ if (maxMinutes != null && m > maxMinutes) continue;
+ const hh = Math.floor(m / 60)
+ .toString()
+ .padStart(2, "0");
+ const mm = (m % 60).toString().padStart(2, "0");
+ const val = `${hh}:${mm}`;
+ out.push({
+ value: val,
+ label: formatDisplay(val, use12Hour),
+ });
+ }
+ return out;
+ }, [options, interval, minMinutes, maxMinutes, use12Hour]);
+
+ /**
+ * Finds the option that matches or is nearest to the given value.
+ * Returns exact match if exists, otherwise returns nearest option by time.
+ * @param valueToMatch - Time value to match against options
+ * @returns Matching or nearest option, or null if not found
+ */
+ const getTargetOption = useCallback((valueToMatch: string): TimePickerOption | null => {
+ const list = displayedOptions;
+ if (!list.length || !valueToMatch) return null;
+
+ const candidate = normalize24(valueToMatch);
+ const candidateBase = getBaseTime(candidate);
+ const selected = list.find((o) => o.value === candidateBase);
+ if (selected) return selected;
+
+ const parsed = parseFlexibleTimeHelper(candidate);
+ if (!parsed.valid) return null;
+
+ const idx = findNearestIndex(parsed.total, list);
+ return idx > -1 ? list[idx] : null;
+ }, [displayedOptions, getBaseTime]);
+
+ /**
+ * Determines which option should be highlighted
+ */
+ const selectedAndNearest = useMemo((): { selected: TimePickerOption | null; nearest: TimePickerOption | null } => {
+ const candidate = isTyping ? displayValue : internalValue;
+ if (!candidate) return { selected: null, nearest: null };
+
+ const target = getTargetOption(candidate);
+ if (!target) return { selected: null, nearest: null };
+
+ const candidateBase = getBaseTime(normalize24(candidate));
+ const isExactMatch = target.value === candidateBase;
+
+ return isExactMatch
+ ? { selected: target, nearest: null }
+ : { selected: null, nearest: target };
+ }, [displayValue, isTyping, internalValue, getTargetOption, getBaseTime]);
+
+ const isOutOfRange = useCallback(
+ (totalMinutes: number): boolean => {
+ if (minMinutes != null && totalMinutes < minMinutes) return true;
+ if (maxMinutes != null && totalMinutes > maxMinutes) return true;
+ return false;
+ },
+ [minMinutes, maxMinutes]
+ );
+
+ const updateInvalidState = useCallback(
+ (val: boolean) => {
+ if (invalidState !== val) {
+ setInvalidState(val);
+ onInvalidChange?.(val);
+ }
+ },
+ [invalidState, onInvalidChange]
+ );
+
+ /**
+ * Updates internal state and optionally calls onChange.
+ * @param val24 - Time value in 24-hour format
+ * @param commit - If true, always calls onChange. If false, only calls when not focused.
+ */
+ const applyValue = useCallback(
+ (val24: string, commit = false) => {
+ setInternalValue(val24);
+ setDisplayValue(formatDisplay(val24, use12Hour));
+ if (commit || !isFocused) {
+ onChange?.(val24);
+ }
+ updateInvalidState(false);
+ },
+ [use12Hour, isFocused, onChange, updateInvalidState]
+ );
+
+ const commitInput = useCallback(() => {
+ const raw = displayValue;
+
+ if (!raw) {
+ setInternalValue("");
+ if (!isFocused) onChange?.("");
+ updateInvalidState(false);
+ return;
+ }
+
+ const parsed = parseFlexibleTimeHelper(raw);
+ if (!parsed.valid || isOutOfRange(parsed.total)) {
+ onInputInvalid?.(raw);
+ updateInvalidState(true);
+ return;
+ }
+
+ const normalized = normalize24(raw);
+ const isInOptions = displayedOptions.some((o) => o.value === getBaseTime(normalized));
+
+ if (!allowCustom && !isInOptions) {
+ const nearestIdx = findNearestIndex(parsed.total, displayedOptions);
+ if (nearestIdx > -1) {
+ const nearestVal = displayedOptions[nearestIdx].value;
+ applyValue(preserveSeconds(nearestVal, normalized), true);
+ return;
+ }
+ }
+
+ applyValue(normalized, true);
+ }, [
+ displayValue,
+ isFocused,
+ onChange,
+ updateInvalidState,
+ isOutOfRange,
+ onInputInvalid,
+ allowCustom,
+ displayedOptions,
+ applyValue,
+ getBaseTime,
+ preserveSeconds,
+ ]);
+
+ const select = useCallback(
+ (val: string) => {
+ applyValue(val, true);
+ if (autoClose) setShowOptions(false);
+ },
+ [applyValue, autoClose]
+ );
+
+ const initHighlight = useCallback(() => {
+ const { selected, nearest } = selectedAndNearest;
+ const target = selected || nearest;
+ if (!target) {
+ setHighlightIndex(-1);
+ return;
+ }
+ const idx = displayedOptions.findIndex((o) => o.value === target.value);
+ setHighlightIndex(idx);
+ }, [selectedAndNearest, displayedOptions]);
+
+ /**
+ * Scrolls the dropdown to show the target option.
+ * @param targetIndex - Optional index to scroll to directly
+ * @param explicitValue - When provided, uses this value instead of current state
+ */
+ const scheduleScroll = useCallback((targetIndex?: number, explicitValue?: string) => {
+ requestAnimationFrame(() => {
+ if (!panelRef.current || !showOptions) return;
+
+ let targetEl: HTMLElement | null = null;
+
+ if (targetIndex !== undefined && targetIndex > -1) {
+ targetEl = panelRef.current.querySelector(`[data-index="${targetIndex}"]`);
+ } else {
+ const valueToMatch = explicitValue ?? (isTyping ? displayValue : internalValue);
+ const target = getTargetOption(valueToMatch);
+ if (target) {
+ targetEl = panelRef.current.querySelector(`[data-value="${target.value}"]`);
+ }
+ }
+
+ targetEl?.scrollIntoView({ block: scrollMode });
+ });
+ }, [showOptions, scrollMode, isTyping, displayValue, internalValue, getTargetOption]);
+
+ const moveHighlight = useCallback(
+ (delta: number) => {
+ if (!displayedOptions.length) return;
+
+ if (highlightIndex === -1) {
+ initHighlight();
+ return;
+ }
+
+ const newIndex = (highlightIndex + delta + displayedOptions.length) % displayedOptions.length;
+ setHighlightIndex(newIndex);
+
+ const opt = displayedOptions[newIndex];
+ if (opt) {
+ navUpdatingRef.current = true;
+ const val = preserveSeconds(opt.value, internalValue);
+ applyValue(val, false);
+ onChange?.(val);
+ queueMicrotask(() => {
+ navUpdatingRef.current = false;
+ });
+ }
+
+ setIsTyping(false);
+ scheduleScroll(newIndex);
+ },
+ [displayedOptions, highlightIndex, internalValue, applyValue, initHighlight, scheduleScroll, onChange, preserveSeconds]
+ );
+
+ const handleArrowDown = useCallback(
+ (e: React.KeyboardEvent, togglePopover: () => void, isOpen?: boolean) => {
+ e.preventDefault();
+ if (!isOpen) {
+ togglePopover();
+ } else {
+ moveHighlight(1);
+ }
+ },
+ [moveHighlight]
+ );
+
+ const handleArrowUp = useCallback(
+ (e: React.KeyboardEvent, togglePopover: () => void, isOpen?: boolean) => {
+ e.preventDefault();
+ if (!isOpen) {
+ togglePopover();
+ } else {
+ moveHighlight(-1);
+ }
+ },
+ [moveHighlight]
+ );
+
+ const handleEnter = useCallback(
+ (e: React.KeyboardEvent) => {
+ e.preventDefault();
+
+ if (!showOptions) {
+ commitInput();
+ inputRef.current?.blur();
+ return;
+ }
+
+ const normalized = normalize24(displayValue);
+ const isInOptions = normalized
+ ? displayedOptions.some((o) => o.value === getBaseTime(normalized))
+ : false;
+
+ const shouldCommit = normalized && (!isInOptions || isTyping);
+ const hasHighlight = highlightIndex > -1 && displayedOptions[highlightIndex];
+
+ if (shouldCommit) {
+ commitInput();
+ if (autoClose) setShowOptions(false);
+ } else if (hasHighlight) {
+ select(displayedOptions[highlightIndex].value);
+ } else {
+ commitInput();
+ if (autoClose) setShowOptions(false);
+ }
+
+ inputRef.current?.blur();
+ },
+ [showOptions, commitInput, displayValue, displayedOptions, isTyping, autoClose, highlightIndex, select, getBaseTime]
+ );
+
+ const handleClickInput = useCallback(
+ (isOpen: boolean | undefined, togglePopover: () => void) => {
+ if (!isOpen) togglePopover();
+ if (allowCustom) selectInputText();
+ },
+ [allowCustom, selectInputText]
+ );
+
+ const handleFocus = useCallback(() => {
+ setIsFocused(true);
+ if (allowCustom && !hasSelectedOnFirstClick) selectInputText();
+ }, [allowCustom, hasSelectedOnFirstClick, selectInputText]);
+
+ const handleBlur = useCallback(() => {
+ if (showOptions) {
+ setIsFocused(false);
+ return;
+ }
+ commitInput();
+ setIsFocused(false);
+ }, [showOptions, commitInput]);
+
+ const handleEscape = useCallback((e: React.KeyboardEvent) => {
+ e.preventDefault();
+ setShowOptions(false);
+ inputRef.current?.blur();
+ }, []);
+
+ const handleDisplayValueChange = useCallback(
+ (e: React.ChangeEvent) => {
+ const newValue = e.target.value;
+ setDisplayValue(newValue);
+
+ if (navUpdatingRef.current) return;
+
+ if (showOptions) {
+ scheduleScroll(undefined, newValue);
+ }
+ setIsTyping(true);
+ setHighlightIndex(-1);
+ },
+ [showOptions, scheduleScroll]
+ );
+
+ const handleMouseEnter = useCallback((idx: number) => {
+ setHighlightIndex(idx);
+ }, []);
+
+ useEffect(() => {
+ initHighlightRef.current = initHighlight;
+ }, [initHighlight]);
+
+ useEffect(() => {
+ scheduleScrollRef.current = scheduleScroll;
+ }, [scheduleScroll]);
+
+ useEffect(() => {
+ const normalized = normalize24(value);
+ if (navUpdatingRef.current) {
+ return;
+ }
+ if (normalized !== internalValue && !isTyping) {
+ setInternalValue(normalized);
+ setDisplayValue(formatDisplay(normalized, use12Hour));
+ }
+ }, [value, internalValue, use12Hour, isTyping]);
+
+ useEffect(() => {
+ if (showOptions) {
+ onOpen?.();
+ initHighlightRef.current();
+ scheduleScrollRef.current();
+ } else {
+ onClose?.();
+ }
+ }, [showOptions, onOpen, onClose]);
+
+ const optionId = (idx: number): string => `tp-${uid}-${idx}`;
+
+ return {
+ showOptions,
+ setShowOptions,
+ displayValue,
+ internalValue,
+ highlightIndex,
+ setHighlightIndex,
+ isTyping,
+ panelRef,
+ inputRef,
+ displayedOptions,
+ selectedAndNearest,
+ handleArrowDown,
+ handleArrowUp,
+ handleEnter,
+ handleClickInput,
+ handleFocus,
+ handleBlur,
+ handleEscape,
+ handleDisplayValueChange,
+ handleMouseEnter,
+ select,
+ optionId,
+ };
+}
diff --git a/packages/frappe-ui-react/src/components/timePicker/utils.ts b/packages/frappe-ui-react/src/components/timePicker/utils.ts
new file mode 100644
index 00000000..9389a811
--- /dev/null
+++ b/packages/frappe-ui-react/src/components/timePicker/utils.ts
@@ -0,0 +1,242 @@
+import { dayjs } from "../../utils/dayjs";
+import { TimePickerOption } from "./types";
+import { ParsedTime } from "./types";
+
+const isValid24HourFormat = (timeString: string): boolean => {
+ return /^\d{2}:\d{2}(:\d{2})?$/.test(timeString);
+};
+
+/**
+ * Parses flexible time input strings (12-hour or 24-hour format) and converts them to a structured time object.
+ * Accepts formats like "14:30", "2pm", "2:30:45 pm", validates all components, and converts 12-hour times to 24-hour format.
+ *
+ * @param input - The time string to parse in various formats
+ * @returns ParsedTime object with valid flag, 24-hour components (hh24, mm, ss), and total minutes from midnight
+ */
+export const parseFlexibleTimeHelper = (input: string): ParsedTime => {
+ if (!input) {
+ return { valid: false };
+ }
+
+ // Normalize input: lowercase, remove dots, ensure space before am/pm
+ let sanitizedInput = input.trim().toLowerCase();
+ sanitizedInput = sanitizedInput.replace(/\./g, "");
+ sanitizedInput = sanitizedInput.replace(/(\d)(am|pm)$/, "$1 $2");
+
+ // Match pattern: HH[:MM][:SS] [am/pm]
+ const timePattern = /^(\d{1,2})(?::(\d{1,2}))?(?::(\d{1,2}))?\s*([ap]m)?$/;
+ const match = sanitizedInput.match(timePattern);
+
+ if (!match) {
+ return { valid: false };
+ }
+
+ const [, hourString, minuteString, secondString, amPmMarker] = match;
+ let hours = parseInt(hourString);
+
+ if (isNaN(hours)) {
+ return { valid: false };
+ }
+
+ // Validate hour range based on format (12h vs 24h)
+ if (amPmMarker) {
+ // 12-hour format with am/pm
+ if (hours < 1 || hours > 12) {
+ return { valid: false };
+ }
+ } else {
+ // 24-hour format
+ if (hours < 0 || hours > 23) {
+ return { valid: false };
+ }
+ }
+
+ // Cannot have seconds without minutes (e.g., "14::30" is invalid)
+ if (secondString && !minuteString) {
+ return { valid: false };
+ }
+
+ // Parse and validate minutes (default to 0 if not provided)
+ const minutes =
+ minuteString != null && minuteString !== "" ? parseInt(minuteString) : 0;
+
+ if (isNaN(minutes) || minutes < 0 || minutes > 59) {
+ return { valid: false };
+ }
+
+ // Parse and validate seconds
+ let seconds: number | undefined;
+ if (secondString) {
+ seconds = parseInt(secondString);
+ if (isNaN(seconds) || seconds < 0 || seconds > 59) {
+ return { valid: false };
+ }
+ }
+
+ // Convert 12-hour to 24-hour format
+ if (amPmMarker) {
+ if (hours === 12 && amPmMarker === "am") {
+ hours = 0; // 12am = 00:00
+ } else if (hours < 12 && amPmMarker === "pm") {
+ hours += 12; // 1pm-11pm = 13:00-23:00
+ }
+ // 12pm stays as 12
+ }
+
+ return {
+ valid: true,
+ hh24: hours.toString().padStart(2, "0"),
+ mm: minutes.toString().padStart(2, "0"),
+ ss: seconds != null ? seconds.toString().padStart(2, "0") : undefined,
+ total: hours * 60 + minutes,
+ };
+};
+
+/**
+ * Normalizes time strings to standard 24-hour format (HH:MM or HH:MM:SS).
+ * If already in correct format, returns as-is otherwise uses flexible parser.
+ *
+ * @param raw - Raw time string from external source
+ * @returns Normalized time string in HH:MM or HH:MM:SS format, or empty string if invalid
+ */
+export const normalize24 = (raw: string): string => {
+ if (!raw) {
+ return "";
+ }
+
+ if (isValid24HourFormat(raw)) {
+ return raw;
+ }
+
+ const parsedTime = parseFlexibleTimeHelper(raw);
+ if (!parsedTime.valid) {
+ return "";
+ }
+
+ const hasSeconds = parsedTime.ss !== undefined;
+ return hasSeconds
+ ? `${parsedTime.hh24}:${parsedTime.mm}:${parsedTime.ss}`
+ : `${parsedTime.hh24}:${parsedTime.mm}`;
+};
+
+/**
+ * Formats a 24-hour time string for display to the user based on their preference.
+ * Converts from internal 24-hour storage format to user-friendly display format (12-hour with am/pm or 24-hour).
+ *
+ * @param val24 - Time string in 24-hour format (HH:MM or HH:MM:SS)
+ * @param use12Hr - Whether to display in 12-hour format with am/pm
+ * @returns Formatted time string for display
+ */
+export const formatDisplay = (val24: string, use12Hr: boolean): string => {
+ if (!val24) {
+ return "";
+ }
+
+ // Parse the time string with dayjs
+ const timeDate = dayjs(`2000-01-01 ${val24}`);
+
+ if (!timeDate.isValid()) {
+ return "";
+ }
+
+ const hasSeconds = val24.split(":").length === 3;
+
+ // Format based on preference
+ if (use12Hr) {
+ const format = hasSeconds ? "h:mm:ss a" : "h:mm a";
+ return timeDate.format(format);
+ }
+
+ const format = hasSeconds ? "HH:mm:ss" : "HH:mm";
+ return timeDate.format(format);
+};
+
+/**
+ * Converts a time string in HH:MM format to total minutes elapsed since midnight.
+ * Used for numerical time comparisons when validating against minTime/maxTime constraints.
+ *
+ * @param str - Time string that must match HH:MM or HH:MM:SS format exactly
+ * @returns Total minutes from midnight (0-1439), or null if invalid format or out of range
+ */
+export const minutesFromHHMM = (str: string): number | null => {
+ if (!str) {
+ return null;
+ }
+
+ if (!isValid24HourFormat(str)) {
+ return null;
+ }
+
+ const timeDate = dayjs(`2000-01-01 ${str}`);
+
+ if (!timeDate.isValid()) {
+ return null;
+ }
+
+ return timeDate.hour() * 60 + timeDate.minute();
+};
+
+/**
+ * Finds the index of the time option closest to a target time value using binary search.
+ * Used for snapping user input to nearest valid option when allowCustom=false and highlighting nearest option while typing.
+ *
+ * @param targetMinutes - Target time in minutes from midnight (0-1439)
+ * @param list - Array of time options to search through
+ * @returns Index of nearest option, or -1 if list is empty
+ */
+export function findNearestIndex(
+ targetMinutes: number,
+ list: TimePickerOption[]
+): number {
+ if (!list.length) {
+ return -1;
+ }
+
+ // Convert all options to minutes for comparison using dayjs
+ const optionMinutes = list.map((option) => {
+ const timeDate = dayjs(`2000-01-01 ${option.value}`);
+ return timeDate.hour() * 60 + timeDate.minute();
+ });
+
+ // Binary search for exact match or insertion point
+ let leftIndex = 0;
+ let rightIndex = optionMinutes.length - 1;
+
+ while (leftIndex <= rightIndex) {
+ const midIndex = (leftIndex + rightIndex) >> 1;
+ const midValue = optionMinutes[midIndex];
+
+ if (midValue === targetMinutes) {
+ return midIndex; // Exact match found
+ }
+
+ if (midValue < targetMinutes) {
+ leftIndex = midIndex + 1;
+ } else {
+ rightIndex = midIndex - 1;
+ }
+ }
+
+ // No exact match - find nearest neighbor
+ const candidateIndices: number[] = [];
+
+ if (leftIndex < optionMinutes.length) {
+ candidateIndices.push(leftIndex);
+ }
+ if (leftIndex - 1 >= 0) {
+ candidateIndices.push(leftIndex - 1);
+ }
+
+ if (!candidateIndices.length) {
+ return -1;
+ }
+
+ // Return the index with minimum distance to target
+ const nearestIndex = candidateIndices.sort((indexA, indexB) => {
+ const distanceA = Math.abs(optionMinutes[indexA] - targetMinutes);
+ const distanceB = Math.abs(optionMinutes[indexB] - targetMinutes);
+ return distanceA - distanceB;
+ })[0];
+
+ return nearestIndex;
+}
diff --git a/packages/frappe-ui-react/src/theme.css b/packages/frappe-ui-react/src/theme.css
index 556ac879..9d8a1e5a 100644
--- a/packages/frappe-ui-react/src/theme.css
+++ b/packages/frappe-ui-react/src/theme.css
@@ -634,15 +634,15 @@ input {
/* Override semantic colors for dark theme */
--color-ink-white: var(--color-dark-gray-900);
- --color-ink-gray-1: var(--color-dark-gray-100);
- --color-ink-gray-2: var(--color-dark-gray-200);
- --color-ink-gray-3: var(--color-dark-gray-300);
+ --color-ink-gray-1: var(--color-dark-gray-700);
+ --color-ink-gray-2: var(--color-dark-gray-500);
+ --color-ink-gray-3: var(--color-dark-gray-400);
--color-ink-gray-4: var(--color-dark-gray-400);
- --color-ink-gray-5: #999999;
- --color-ink-gray-6: #c7c7c7;
- --color-ink-gray-7: #ededed;
- --color-ink-gray-8: #f3f3f3;
- --color-ink-gray-9: #f8f8f8;
+ --color-ink-gray-5: var(--color-dark-gray-300);
+ --color-ink-gray-6: var(--color-dark-gray-250);
+ --color-ink-gray-7: var(--color-dark-gray-200);
+ --color-ink-gray-8: var(--color-dark-gray-100);
+ --color-ink-gray-9: var(--color-dark-gray-50);
--color-ink-red-1: var(--color-dark-red-50);
--color-ink-red-2: var(--color-dark-red-100);
--color-ink-red-3: var(--color-dark-red-200);
@@ -663,13 +663,13 @@ input {
/* Surface Colors for dark theme */
--color-surface-white: var(--color-dark-gray-900);
- --color-surface-gray-1: var(--color-dark-gray-800);
- --color-surface-gray-2: var(--color-dark-gray-700);
- --color-surface-gray-3: var(--color-dark-gray-650);
- --color-surface-gray-4: var(--color-dark-gray-600);
- --color-surface-gray-5: var(--color-dark-gray-500);
- --color-surface-gray-6: var(--color-dark-gray-400);
- --color-surface-gray-7: #f8f8f8;
+ --color-surface-gray-1: var(--color-dark-gray-700);
+ --color-surface-gray-2: var(--color-dark-gray-650);
+ --color-surface-gray-3: var(--color-dark-gray-600);
+ --color-surface-gray-4: var(--color-dark-gray-500);
+ --color-surface-gray-5: var(--color-dark-gray-200);
+ --color-surface-gray-6: var(--color-dark-gray-100);
+ --color-surface-gray-7: var(--color-dark-gray-50);
--color-surface-red-1: var(--color-dark-red-900);
--color-surface-red-2: var(--color-dark-red-800);
--color-surface-red-3: var(--color-dark-red-700);
@@ -699,18 +699,18 @@ input {
--color-surface-cyan-2: var(--color-dark-cyan-600);
--color-surface-pink-1: var(--color-dark-pink-900);
--color-surface-pink-2: var(--color-dark-pink-600);
- --color-surface-menu-bar: var(--color-dark-gray-800);
- --color-surface-cards: var(--color-dark-gray-700);
- --color-surface-modal: var(--color-dark-gray-650);
- --color-surface-selected: var(--color-dark-gray-600);
+ --color-surface-menu-bar: var(--color-dark-gray-900);
+ --color-surface-cards: var(--color-dark-gray-800);
+ --color-surface-modal: var(--color-dark-gray-700);
+ --color-surface-selected: var(--color-dark-gray-500);
/* Outline Colors for dark theme */
- --color-outline-white: var(--color-dark-gray-900);
- --color-outline-gray-1: var(--color-dark-gray-650);
+ --color-outline-white: var(--color-dark-gray-800);
+ --color-outline-gray-1: var(--color-dark-gray-700);
--color-outline-gray-2: var(--color-dark-gray-600);
--color-outline-gray-3: var(--color-dark-gray-500);
- --color-outline-gray-4: var(--color-dark-gray-400);
- --color-outline-gray-5: var(--color-gray-400);
+ --color-outline-gray-4: var(--color-dark-gray-300);
+ --color-outline-gray-5: var(--color-gray-200);
--color-outline-red-1: var(--color-dark-red-600);
--color-outline-red-2: var(--color-dark-red-500);
--color-outline-red-3: var(--color-dark-red-400);
@@ -720,7 +720,7 @@ input {
--color-outline-amber-2: var(--color-dark-amber-600);
--color-outline-blue-1: var(--color-dark-blue-700);
--color-outline-orange-1: var(--color-dark-orange-700);
- --color-outline-gray-modals: var(--color-dark-gray-650);
+ --color-outline-gray-modals: var(--color-dark-gray-600);
/* Dark theme shadows - make them more prominent */
--shadow-sm: 0px 1px 2px rgba(0, 0, 0, 0.3);
diff --git a/packages/frappe-ui-react/src/themeV3.css b/packages/frappe-ui-react/src/themeV3.css
index 1a8e5095..f9c1bcb1 100644
--- a/packages/frappe-ui-react/src/themeV3.css
+++ b/packages/frappe-ui-react/src/themeV3.css
@@ -635,15 +635,15 @@ input {
/* Override semantic colors for dark theme */
--color-ink-white: var(--color-dark-gray-900);
- --color-ink-gray-1: var(--color-dark-gray-100);
- --color-ink-gray-2: var(--color-dark-gray-200);
- --color-ink-gray-3: var(--color-dark-gray-300);
+ --color-ink-gray-1: var(--color-dark-gray-700);
+ --color-ink-gray-2: var(--color-dark-gray-500);
+ --color-ink-gray-3: var(--color-dark-gray-400);
--color-ink-gray-4: var(--color-dark-gray-400);
- --color-ink-gray-5: #999999;
- --color-ink-gray-6: #c7c7c7;
- --color-ink-gray-7: #ededed;
- --color-ink-gray-8: #f3f3f3;
- --color-ink-gray-9: #f8f8f8;
+ --color-ink-gray-5: var(--color-dark-gray-300);
+ --color-ink-gray-6: var(--color-dark-gray-250);
+ --color-ink-gray-7: var(--color-dark-gray-200);
+ --color-ink-gray-8: var(--color-dark-gray-100);
+ --color-ink-gray-9: var(--color-dark-gray-50);
--color-ink-red-1: var(--color-dark-red-50);
--color-ink-red-2: var(--color-dark-red-100);
--color-ink-red-3: var(--color-dark-red-200);
@@ -664,13 +664,13 @@ input {
/* Surface Colors for dark theme */
--color-surface-white: var(--color-dark-gray-900);
- --color-surface-gray-1: var(--color-dark-gray-800);
- --color-surface-gray-2: var(--color-dark-gray-700);
- --color-surface-gray-3: var(--color-dark-gray-650);
- --color-surface-gray-4: var(--color-dark-gray-600);
- --color-surface-gray-5: var(--color-dark-gray-500);
- --color-surface-gray-6: var(--color-dark-gray-400);
- --color-surface-gray-7: #f8f8f8;
+ --color-surface-gray-1: var(--color-dark-gray-700);
+ --color-surface-gray-2: var(--color-dark-gray-650);
+ --color-surface-gray-3: var(--color-dark-gray-600);
+ --color-surface-gray-4: var(--color-dark-gray-500);
+ --color-surface-gray-5: var(--color-dark-gray-200);
+ --color-surface-gray-6: var(--color-dark-gray-100);
+ --color-surface-gray-7: var(--color-dark-gray-50);
--color-surface-red-1: var(--color-dark-red-900);
--color-surface-red-2: var(--color-dark-red-800);
--color-surface-red-3: var(--color-dark-red-700);
@@ -700,18 +700,18 @@ input {
--color-surface-cyan-2: var(--color-dark-cyan-600);
--color-surface-pink-1: var(--color-dark-pink-900);
--color-surface-pink-2: var(--color-dark-pink-600);
- --color-surface-menu-bar: var(--color-dark-gray-800);
- --color-surface-cards: var(--color-dark-gray-700);
- --color-surface-modal: var(--color-dark-gray-650);
- --color-surface-selected: var(--color-dark-gray-600);
+ --color-surface-menu-bar: var(--color-dark-gray-900);
+ --color-surface-cards: var(--color-dark-gray-800);
+ --color-surface-modal: var(--color-dark-gray-700);
+ --color-surface-selected: var(--color-dark-gray-500);
/* Outline Colors for dark theme */
- --color-outline-white: var(--color-dark-gray-900);
- --color-outline-gray-1: var(--color-dark-gray-650);
+ --color-outline-white: var(--color-dark-gray-800);
+ --color-outline-gray-1: var(--color-dark-gray-700);
--color-outline-gray-2: var(--color-dark-gray-600);
--color-outline-gray-3: var(--color-dark-gray-500);
- --color-outline-gray-4: var(--color-dark-gray-400);
- --color-outline-gray-5: var(--color-gray-400);
+ --color-outline-gray-4: var(--color-dark-gray-300);
+ --color-outline-gray-5: var(--color-gray-200);
--color-outline-red-1: var(--color-dark-red-600);
--color-outline-red-2: var(--color-dark-red-500);
--color-outline-red-3: var(--color-dark-red-400);
@@ -721,7 +721,7 @@ input {
--color-outline-amber-2: var(--color-dark-amber-600);
--color-outline-blue-1: var(--color-dark-blue-700);
--color-outline-orange-1: var(--color-dark-orange-700);
- --color-outline-gray-modals: var(--color-dark-gray-650);
+ --color-outline-gray-modals: var(--color-dark-gray-600);
/* Dark theme shadows - make them more prominent */
--shadow-sm: 0px 1px 2px rgba(0, 0, 0, 0.3);
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
new file mode 100644
index 00000000..858c02e9
--- /dev/null
+++ b/pnpm-lock.yaml
@@ -0,0 +1,9136 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ react-docgen-typescript:
+ specifier: ^2.4.0
+ version: 2.4.0(typescript@5.8.3)
+ devDependencies:
+ '@babel/plugin-transform-react-jsx':
+ specifier: ^7.22.5
+ version: 7.27.1(@babel/core@7.28.5)
+ '@babel/preset-env':
+ specifier: ^7.22.5
+ version: 7.28.5(@babel/core@7.28.5)
+ '@babel/preset-react':
+ specifier: ^7.22.5
+ version: 7.28.5(@babel/core@7.28.5)
+ '@babel/preset-typescript':
+ specifier: ^7.22.5
+ version: 7.28.5(@babel/core@7.28.5)
+ '@chromatic-com/storybook':
+ specifier: ^4.1.1
+ version: 4.1.3(storybook@9.1.17(@testing-library/dom@10.4.1)(prettier@2.8.8)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2)))
+ '@eslint/js':
+ specifier: ^9.30.1
+ version: 9.39.2
+ '@storybook/addon-a11y':
+ specifier: ^9.1.3
+ version: 9.1.17(storybook@9.1.17(@testing-library/dom@10.4.1)(prettier@2.8.8)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2)))
+ '@storybook/addon-docs':
+ specifier: ^9.1.3
+ version: 9.1.17(@types/react@19.2.7)(storybook@9.1.17(@testing-library/dom@10.4.1)(prettier@2.8.8)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2)))
+ '@storybook/addon-onboarding':
+ specifier: ^9.1.3
+ version: 9.1.17(storybook@9.1.17(@testing-library/dom@10.4.1)(prettier@2.8.8)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2)))
+ '@storybook/addon-themes':
+ specifier: ^9.1.10
+ version: 9.1.17(storybook@9.1.17(@testing-library/dom@10.4.1)(prettier@2.8.8)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2)))
+ '@storybook/addon-vitest':
+ specifier: ^9.1.3
+ version: 9.1.17(@vitest/browser@3.2.4)(@vitest/runner@3.2.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@9.1.17(@testing-library/dom@10.4.1)(prettier@2.8.8)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2)))(vitest@3.2.4)
+ '@storybook/react-vite':
+ specifier: ^9.1.3
+ version: 9.1.17(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(rollup@4.54.0)(storybook@9.1.17(@testing-library/dom@10.4.1)(prettier@2.8.8)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2)))(typescript@5.8.3)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2))
+ '@testing-library/jest-dom':
+ specifier: ^6.8.0
+ version: 6.9.1
+ '@testing-library/react':
+ specifier: ^16.3.0
+ version: 16.3.1(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@types/jest':
+ specifier: ^30.0.0
+ version: 30.0.0
+ '@types/react':
+ specifier: ^19.1.8
+ version: 19.2.7
+ '@types/react-dom':
+ specifier: ^19.1.6
+ version: 19.2.3(@types/react@19.2.7)
+ '@vitejs/plugin-react':
+ specifier: ^4.6.0
+ version: 4.7.0(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2))
+ '@vitest/browser':
+ specifier: ^3.2.4
+ version: 3.2.4(playwright@1.57.0)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2))(vitest@3.2.4)
+ '@vitest/coverage-v8':
+ specifier: ^3.2.4
+ version: 3.2.4(@vitest/browser@3.2.4)(vitest@3.2.4)
+ babel-jest:
+ specifier: ^30.1.2
+ version: 30.2.0(@babel/core@7.28.5)
+ babel-plugin-styled-components:
+ specifier: ^2.1.4
+ version: 2.1.4(@babel/core@7.28.5)(styled-components@6.1.19(react-dom@19.2.3(react@19.2.3))(react@19.2.3))
+ eslint:
+ specifier: ^9.30.1
+ version: 9.39.2
+ eslint-plugin-jest:
+ specifier: ^29.0.1
+ version: 29.5.0(@typescript-eslint/eslint-plugin@8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.2)(typescript@5.8.3))(eslint@9.39.2)(typescript@5.8.3))(eslint@9.39.2)(jest@30.2.0(@types/node@25.0.3)(esbuild-register@3.6.0(esbuild@0.25.12)))(typescript@5.8.3)
+ eslint-plugin-react-hooks:
+ specifier: ^5.2.0
+ version: 5.2.0(eslint@9.39.2)
+ eslint-plugin-react-refresh:
+ specifier: ^0.4.20
+ version: 0.4.26(eslint@9.39.2)
+ eslint-plugin-storybook:
+ specifier: ^9.1.3
+ version: 9.1.17(eslint@9.39.2)(storybook@9.1.17(@testing-library/dom@10.4.1)(prettier@2.8.8)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2)))(typescript@5.8.3)
+ globals:
+ specifier: ^16.3.0
+ version: 16.5.0
+ husky:
+ specifier: ^8.0.3
+ version: 8.0.3
+ jest:
+ specifier: ^30.1.3
+ version: 30.2.0(@types/node@25.0.3)(esbuild-register@3.6.0(esbuild@0.25.12))
+ jest-environment-jsdom:
+ specifier: ^30.1.2
+ version: 30.2.0
+ jest-extended:
+ specifier: ^6.0.0
+ version: 6.0.0(jest@30.2.0(@types/node@25.0.3)(esbuild-register@3.6.0(esbuild@0.25.12)))(typescript@5.8.3)
+ lint-staged:
+ specifier: ^16.2.6
+ version: 16.2.7
+ npm-run-all:
+ specifier: ^4.1.5
+ version: 4.1.5
+ playwright:
+ specifier: ^1.54.1
+ version: 1.57.0
+ prettier:
+ specifier: ^2.8.8
+ version: 2.8.8
+ rimraf:
+ specifier: ^5.0.5
+ version: 5.0.10
+ storybook:
+ specifier: ^9.1.17
+ version: 9.1.17(@testing-library/dom@10.4.1)(prettier@2.8.8)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2))
+ typescript:
+ specifier: ~5.8.3
+ version: 5.8.3
+ typescript-eslint:
+ specifier: ^8.35.1
+ version: 8.50.0(eslint@9.39.2)(typescript@5.8.3)
+ vite:
+ specifier: ^7.1.11
+ version: 7.3.0(@types/node@25.0.3)(yaml@2.8.2)
+ vite-plugin-svgr:
+ specifier: ^4.3.0
+ version: 4.5.0(rollup@4.54.0)(typescript@5.8.3)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2))
+ vitest:
+ specifier: ^3.2.4
+ version: 3.2.4(@types/node@25.0.3)(@vitest/browser@3.2.4)(jsdom@26.1.0)(yaml@2.8.2)
+
+packages:
+
+ '@adobe/css-tools@4.4.4':
+ resolution: {integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==}
+
+ '@ampproject/remapping@2.3.0':
+ resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
+ engines: {node: '>=6.0.0'}
+
+ '@asamuzakjp/css-color@3.2.0':
+ resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==}
+
+ '@babel/code-frame@7.27.1':
+ resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/compat-data@7.28.5':
+ resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/core@7.28.5':
+ resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/generator@7.28.5':
+ resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-annotate-as-pure@7.27.3':
+ resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-compilation-targets@7.27.2':
+ resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-create-class-features-plugin@7.28.5':
+ resolution: {integrity: sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-create-regexp-features-plugin@7.28.5':
+ resolution: {integrity: sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-define-polyfill-provider@0.6.5':
+ resolution: {integrity: sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==}
+ peerDependencies:
+ '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+
+ '@babel/helper-globals@7.28.0':
+ resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-member-expression-to-functions@7.28.5':
+ resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-imports@7.27.1':
+ resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-transforms@7.28.3':
+ resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-optimise-call-expression@7.27.1':
+ resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-plugin-utils@7.27.1':
+ resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-remap-async-to-generator@7.27.1':
+ resolution: {integrity: sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-replace-supers@7.27.1':
+ resolution: {integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-skip-transparent-expression-wrappers@7.27.1':
+ resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-string-parser@7.27.1':
+ resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-identifier@7.28.5':
+ resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-option@7.27.1':
+ resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-wrap-function@7.28.3':
+ resolution: {integrity: sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helpers@7.28.4':
+ resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/parser@7.28.5':
+ resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5':
+ resolution: {integrity: sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1':
+ resolution: {integrity: sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1':
+ resolution: {integrity: sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1':
+ resolution: {integrity: sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.13.0
+
+ '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3':
+ resolution: {integrity: sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2':
+ resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-async-generators@7.8.4':
+ resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-bigint@7.8.3':
+ resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-class-properties@7.12.13':
+ resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-class-static-block@7.14.5':
+ resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-import-assertions@7.27.1':
+ resolution: {integrity: sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-import-attributes@7.27.1':
+ resolution: {integrity: sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-import-meta@7.10.4':
+ resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-json-strings@7.8.3':
+ resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-jsx@7.27.1':
+ resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-logical-assignment-operators@7.10.4':
+ resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3':
+ resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-numeric-separator@7.10.4':
+ resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-object-rest-spread@7.8.3':
+ resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-optional-catch-binding@7.8.3':
+ resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-optional-chaining@7.8.3':
+ resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-private-property-in-object@7.14.5':
+ resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-top-level-await@7.14.5':
+ resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-typescript@7.27.1':
+ resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-unicode-sets-regex@7.18.6':
+ resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/plugin-transform-arrow-functions@7.27.1':
+ resolution: {integrity: sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-async-generator-functions@7.28.0':
+ resolution: {integrity: sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-async-to-generator@7.27.1':
+ resolution: {integrity: sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-block-scoped-functions@7.27.1':
+ resolution: {integrity: sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-block-scoping@7.28.5':
+ resolution: {integrity: sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-class-properties@7.27.1':
+ resolution: {integrity: sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-class-static-block@7.28.3':
+ resolution: {integrity: sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.12.0
+
+ '@babel/plugin-transform-classes@7.28.4':
+ resolution: {integrity: sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-computed-properties@7.27.1':
+ resolution: {integrity: sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-destructuring@7.28.5':
+ resolution: {integrity: sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-dotall-regex@7.27.1':
+ resolution: {integrity: sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-duplicate-keys@7.27.1':
+ resolution: {integrity: sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1':
+ resolution: {integrity: sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/plugin-transform-dynamic-import@7.27.1':
+ resolution: {integrity: sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-explicit-resource-management@7.28.0':
+ resolution: {integrity: sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-exponentiation-operator@7.28.5':
+ resolution: {integrity: sha512-D4WIMaFtwa2NizOp+dnoFjRez/ClKiC2BqqImwKd1X28nqBtZEyCYJ2ozQrrzlxAFrcrjxo39S6khe9RNDlGzw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-export-namespace-from@7.27.1':
+ resolution: {integrity: sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-for-of@7.27.1':
+ resolution: {integrity: sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-function-name@7.27.1':
+ resolution: {integrity: sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-json-strings@7.27.1':
+ resolution: {integrity: sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-literals@7.27.1':
+ resolution: {integrity: sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-logical-assignment-operators@7.28.5':
+ resolution: {integrity: sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-member-expression-literals@7.27.1':
+ resolution: {integrity: sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-modules-amd@7.27.1':
+ resolution: {integrity: sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-modules-commonjs@7.27.1':
+ resolution: {integrity: sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-modules-systemjs@7.28.5':
+ resolution: {integrity: sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-modules-umd@7.27.1':
+ resolution: {integrity: sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-named-capturing-groups-regex@7.27.1':
+ resolution: {integrity: sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/plugin-transform-new-target@7.27.1':
+ resolution: {integrity: sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-nullish-coalescing-operator@7.27.1':
+ resolution: {integrity: sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-numeric-separator@7.27.1':
+ resolution: {integrity: sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-object-rest-spread@7.28.4':
+ resolution: {integrity: sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-object-super@7.27.1':
+ resolution: {integrity: sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-optional-catch-binding@7.27.1':
+ resolution: {integrity: sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-optional-chaining@7.28.5':
+ resolution: {integrity: sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-parameters@7.27.7':
+ resolution: {integrity: sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-private-methods@7.27.1':
+ resolution: {integrity: sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-private-property-in-object@7.27.1':
+ resolution: {integrity: sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-property-literals@7.27.1':
+ resolution: {integrity: sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-react-display-name@7.28.0':
+ resolution: {integrity: sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-react-jsx-development@7.27.1':
+ resolution: {integrity: sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-react-jsx-self@7.27.1':
+ resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-react-jsx-source@7.27.1':
+ resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-react-jsx@7.27.1':
+ resolution: {integrity: sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-react-pure-annotations@7.27.1':
+ resolution: {integrity: sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-regenerator@7.28.4':
+ resolution: {integrity: sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-regexp-modifiers@7.27.1':
+ resolution: {integrity: sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/plugin-transform-reserved-words@7.27.1':
+ resolution: {integrity: sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-shorthand-properties@7.27.1':
+ resolution: {integrity: sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-spread@7.27.1':
+ resolution: {integrity: sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-sticky-regex@7.27.1':
+ resolution: {integrity: sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-template-literals@7.27.1':
+ resolution: {integrity: sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-typeof-symbol@7.27.1':
+ resolution: {integrity: sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-typescript@7.28.5':
+ resolution: {integrity: sha512-x2Qa+v/CuEoX7Dr31iAfr0IhInrVOWZU/2vJMJ00FOR/2nM0BcBEclpaf9sWCDc+v5e9dMrhSH8/atq/kX7+bA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-unicode-escapes@7.27.1':
+ resolution: {integrity: sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-unicode-property-regex@7.27.1':
+ resolution: {integrity: sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-unicode-regex@7.27.1':
+ resolution: {integrity: sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-unicode-sets-regex@7.27.1':
+ resolution: {integrity: sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/preset-env@7.28.5':
+ resolution: {integrity: sha512-S36mOoi1Sb6Fz98fBfE+UZSpYw5mJm0NUHtIKrOuNcqeFauy1J6dIvXm2KRVKobOSaGq4t/hBXdN4HGU3wL9Wg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/preset-modules@0.1.6-no-external-plugins':
+ resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0
+
+ '@babel/preset-react@7.28.5':
+ resolution: {integrity: sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/preset-typescript@7.28.5':
+ resolution: {integrity: sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/runtime@7.28.4':
+ resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/template@7.27.2':
+ resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/traverse@7.28.5':
+ resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/types@7.28.5':
+ resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==}
+ engines: {node: '>=6.9.0'}
+
+ '@bcoe/v8-coverage@0.2.3':
+ resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
+
+ '@bcoe/v8-coverage@1.0.2':
+ resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==}
+ engines: {node: '>=18'}
+
+ '@chromatic-com/storybook@4.1.3':
+ resolution: {integrity: sha512-hc0HO9GAV9pxqDE6fTVOV5KeLpTiCfV8Jrpk5ogKLiIgeq2C+NPjpt74YnrZTjiK8E19fYcMP+2WY9ZtX7zHmw==}
+ engines: {node: '>=20.0.0', yarn: '>=1.22.18'}
+ peerDependencies:
+ storybook: ^0.0.0-0 || ^9.0.0 || ^9.1.0-0 || ^9.2.0-0 || ^10.0.0-0 || ^10.1.0-0 || ^10.2.0-0 || ^10.3.0-0
+
+ '@csstools/color-helpers@5.1.0':
+ resolution: {integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==}
+ engines: {node: '>=18'}
+
+ '@csstools/css-calc@2.1.4':
+ resolution: {integrity: sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@csstools/css-parser-algorithms': ^3.0.5
+ '@csstools/css-tokenizer': ^3.0.4
+
+ '@csstools/css-color-parser@3.1.0':
+ resolution: {integrity: sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@csstools/css-parser-algorithms': ^3.0.5
+ '@csstools/css-tokenizer': ^3.0.4
+
+ '@csstools/css-parser-algorithms@3.0.5':
+ resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@csstools/css-tokenizer': ^3.0.4
+
+ '@csstools/css-tokenizer@3.0.4':
+ resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==}
+ engines: {node: '>=18'}
+
+ '@emnapi/core@1.7.1':
+ resolution: {integrity: sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==}
+
+ '@emnapi/runtime@1.7.1':
+ resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==}
+
+ '@emnapi/wasi-threads@1.1.0':
+ resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==}
+
+ '@emotion/is-prop-valid@1.2.2':
+ resolution: {integrity: sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==}
+
+ '@emotion/memoize@0.8.1':
+ resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==}
+
+ '@emotion/unitless@0.8.1':
+ resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==}
+
+ '@esbuild/aix-ppc64@0.25.12':
+ resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/aix-ppc64@0.27.2':
+ resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/android-arm64@0.25.12':
+ resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm64@0.27.2':
+ resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm@0.25.12':
+ resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-arm@0.27.2':
+ resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-x64@0.25.12':
+ resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/android-x64@0.27.2':
+ resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/darwin-arm64@0.25.12':
+ resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-arm64@0.27.2':
+ resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.25.12':
+ resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.27.2':
+ resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/freebsd-arm64@0.25.12':
+ resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-arm64@0.27.2':
+ resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.25.12':
+ resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.27.2':
+ resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/linux-arm64@0.25.12':
+ resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm64@0.27.2':
+ resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.25.12':
+ resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.27.2':
+ resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.25.12':
+ resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.27.2':
+ resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.25.12':
+ resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.27.2':
+ resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.25.12':
+ resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.27.2':
+ resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.25.12':
+ resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.27.2':
+ resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.25.12':
+ resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.27.2':
+ resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.25.12':
+ resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.27.2':
+ resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.25.12':
+ resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.27.2':
+ resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/netbsd-arm64@0.25.12':
+ resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-arm64@0.27.2':
+ resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.25.12':
+ resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.27.2':
+ resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/openbsd-arm64@0.25.12':
+ resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-arm64@0.27.2':
+ resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.25.12':
+ resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.27.2':
+ resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openharmony-arm64@0.25.12':
+ resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@esbuild/openharmony-arm64@0.27.2':
+ resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@esbuild/sunos-x64@0.25.12':
+ resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/sunos-x64@0.27.2':
+ resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/win32-arm64@0.25.12':
+ resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-arm64@0.27.2':
+ resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.25.12':
+ resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.27.2':
+ resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.25.12':
+ resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.27.2':
+ resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
+ '@eslint-community/eslint-utils@4.9.0':
+ resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
+
+ '@eslint-community/regexpp@4.12.2':
+ resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==}
+ engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+
+ '@eslint/config-array@0.21.1':
+ resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/config-helpers@0.4.2':
+ resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/core@0.17.0':
+ resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/eslintrc@3.3.3':
+ resolution: {integrity: sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/js@9.39.2':
+ resolution: {integrity: sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/object-schema@2.1.7':
+ resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/plugin-kit@0.4.1':
+ resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@humanfs/core@0.19.1':
+ resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
+ engines: {node: '>=18.18.0'}
+
+ '@humanfs/node@0.16.7':
+ resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==}
+ engines: {node: '>=18.18.0'}
+
+ '@humanwhocodes/module-importer@1.0.1':
+ resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
+ engines: {node: '>=12.22'}
+
+ '@humanwhocodes/retry@0.4.3':
+ resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
+ engines: {node: '>=18.18'}
+
+ '@isaacs/cliui@8.0.2':
+ resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
+ engines: {node: '>=12'}
+
+ '@istanbuljs/load-nyc-config@1.1.0':
+ resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==}
+ engines: {node: '>=8'}
+
+ '@istanbuljs/schema@0.1.3':
+ resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==}
+ engines: {node: '>=8'}
+
+ '@jest/console@30.2.0':
+ resolution: {integrity: sha512-+O1ifRjkvYIkBqASKWgLxrpEhQAAE7hY77ALLUufSk5717KfOShg6IbqLmdsLMPdUiFvA2kTs0R7YZy+l0IzZQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ '@jest/core@30.2.0':
+ resolution: {integrity: sha512-03W6IhuhjqTlpzh/ojut/pDB2LPRygyWX8ExpgHtQA8H/3K7+1vKmcINx5UzeOX1se6YEsBsOHQ1CRzf3fOwTQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ peerDependencies:
+ node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
+ peerDependenciesMeta:
+ node-notifier:
+ optional: true
+
+ '@jest/diff-sequences@30.0.1':
+ resolution: {integrity: sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ '@jest/environment-jsdom-abstract@30.2.0':
+ resolution: {integrity: sha512-kazxw2L9IPuZpQ0mEt9lu9Z98SqR74xcagANmMBU16X0lS23yPc0+S6hGLUz8kVRlomZEs/5S/Zlpqwf5yu6OQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ peerDependencies:
+ canvas: ^3.0.0
+ jsdom: '*'
+ peerDependenciesMeta:
+ canvas:
+ optional: true
+
+ '@jest/environment@30.2.0':
+ resolution: {integrity: sha512-/QPTL7OBJQ5ac09UDRa3EQes4gt1FTEG/8jZ/4v5IVzx+Cv7dLxlVIvfvSVRiiX2drWyXeBjkMSR8hvOWSog5g==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ '@jest/expect-utils@30.2.0':
+ resolution: {integrity: sha512-1JnRfhqpD8HGpOmQp180Fo9Zt69zNtC+9lR+kT7NVL05tNXIi+QC8Csz7lfidMoVLPD3FnOtcmp0CEFnxExGEA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ '@jest/expect@30.2.0':
+ resolution: {integrity: sha512-V9yxQK5erfzx99Sf+7LbhBwNWEZ9eZay8qQ9+JSC0TrMR1pMDHLMY+BnVPacWU6Jamrh252/IKo4F1Xn/zfiqA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ '@jest/fake-timers@30.2.0':
+ resolution: {integrity: sha512-HI3tRLjRxAbBy0VO8dqqm7Hb2mIa8d5bg/NJkyQcOk7V118ObQML8RC5luTF/Zsg4474a+gDvhce7eTnP4GhYw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ '@jest/get-type@30.1.0':
+ resolution: {integrity: sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ '@jest/globals@30.2.0':
+ resolution: {integrity: sha512-b63wmnKPaK+6ZZfpYhz9K61oybvbI1aMcIs80++JI1O1rR1vaxHUCNqo3ITu6NU0d4V34yZFoHMn/uoKr/Rwfw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ '@jest/pattern@30.0.1':
+ resolution: {integrity: sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ '@jest/reporters@30.2.0':
+ resolution: {integrity: sha512-DRyW6baWPqKMa9CzeiBjHwjd8XeAyco2Vt8XbcLFjiwCOEKOvy82GJ8QQnJE9ofsxCMPjH4MfH8fCWIHHDKpAQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ peerDependencies:
+ node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
+ peerDependenciesMeta:
+ node-notifier:
+ optional: true
+
+ '@jest/schemas@29.6.3':
+ resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/schemas@30.0.5':
+ resolution: {integrity: sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ '@jest/snapshot-utils@30.2.0':
+ resolution: {integrity: sha512-0aVxM3RH6DaiLcjj/b0KrIBZhSX1373Xci4l3cW5xiUWPctZ59zQ7jj4rqcJQ/Z8JuN/4wX3FpJSa3RssVvCug==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ '@jest/source-map@30.0.1':
+ resolution: {integrity: sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ '@jest/test-result@30.2.0':
+ resolution: {integrity: sha512-RF+Z+0CCHkARz5HT9mcQCBulb1wgCP3FBvl9VFokMX27acKphwyQsNuWH3c+ojd1LeWBLoTYoxF0zm6S/66mjg==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ '@jest/test-sequencer@30.2.0':
+ resolution: {integrity: sha512-wXKgU/lk8fKXMu/l5Hog1R61bL4q5GCdT6OJvdAFz1P+QrpoFuLU68eoKuVc4RbrTtNnTL5FByhWdLgOPSph+Q==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ '@jest/transform@30.2.0':
+ resolution: {integrity: sha512-XsauDV82o5qXbhalKxD7p4TZYYdwcaEXC77PPD2HixEFF+6YGppjrAAQurTl2ECWcEomHBMMNS9AH3kcCFx8jA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ '@jest/types@30.2.0':
+ resolution: {integrity: sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ '@joshwooding/vite-plugin-react-docgen-typescript@0.6.1':
+ resolution: {integrity: sha512-J4BaTocTOYFkMHIra1JDWrMWpNmBl4EkplIwHEsV8aeUOtdWjwSnln9U7twjMFTAEB7mptNtSKyVi1Y2W9sDJw==}
+ peerDependencies:
+ typescript: '>= 4.3.x'
+ vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@jridgewell/gen-mapping@0.3.13':
+ resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
+
+ '@jridgewell/remapping@2.3.5':
+ resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
+
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/sourcemap-codec@1.5.5':
+ resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+
+ '@mdx-js/react@3.1.1':
+ resolution: {integrity: sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==}
+ peerDependencies:
+ '@types/react': '>=16'
+ react: '>=16'
+
+ '@napi-rs/wasm-runtime@0.2.12':
+ resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==}
+
+ '@neoconfetti/react@1.0.0':
+ resolution: {integrity: sha512-klcSooChXXOzIm+SE5IISIAn3bYzYfPjbX7D7HoqZL84oAfgREeSg5vSIaSFH+DaGzzvImTyWe1OyrJ67vik4A==}
+
+ '@pkgjs/parseargs@0.11.0':
+ resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
+ engines: {node: '>=14'}
+
+ '@pkgr/core@0.2.9':
+ resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==}
+ engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
+
+ '@polka/url@1.0.0-next.29':
+ resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==}
+
+ '@rolldown/pluginutils@1.0.0-beta.27':
+ resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==}
+
+ '@rollup/pluginutils@5.3.0':
+ resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/rollup-android-arm-eabi@4.54.0':
+ resolution: {integrity: sha512-OywsdRHrFvCdvsewAInDKCNyR3laPA2mc9bRYJ6LBp5IyvF3fvXbbNR0bSzHlZVFtn6E0xw2oZlyjg4rKCVcng==}
+ cpu: [arm]
+ os: [android]
+
+ '@rollup/rollup-android-arm64@4.54.0':
+ resolution: {integrity: sha512-Skx39Uv+u7H224Af+bDgNinitlmHyQX1K/atIA32JP3JQw6hVODX5tkbi2zof/E69M1qH2UoN3Xdxgs90mmNYw==}
+ cpu: [arm64]
+ os: [android]
+
+ '@rollup/rollup-darwin-arm64@4.54.0':
+ resolution: {integrity: sha512-k43D4qta/+6Fq+nCDhhv9yP2HdeKeP56QrUUTW7E6PhZP1US6NDqpJj4MY0jBHlJivVJD5P8NxrjuobZBJTCRw==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rollup/rollup-darwin-x64@4.54.0':
+ resolution: {integrity: sha512-cOo7biqwkpawslEfox5Vs8/qj83M/aZCSSNIWpVzfU2CYHa2G3P1UN5WF01RdTHSgCkri7XOlTdtk17BezlV3A==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rollup/rollup-freebsd-arm64@4.54.0':
+ resolution: {integrity: sha512-miSvuFkmvFbgJ1BevMa4CPCFt5MPGw094knM64W9I0giUIMMmRYcGW/JWZDriaw/k1kOBtsWh1z6nIFV1vPNtA==}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@rollup/rollup-freebsd-x64@4.54.0':
+ resolution: {integrity: sha512-KGXIs55+b/ZfZsq9aR026tmr/+7tq6VG6MsnrvF4H8VhwflTIuYh+LFUlIsRdQSgrgmtM3fVATzEAj4hBQlaqQ==}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.54.0':
+ resolution: {integrity: sha512-EHMUcDwhtdRGlXZsGSIuXSYwD5kOT9NVnx9sqzYiwAc91wfYOE1g1djOEDseZJKKqtHAHGwnGPQu3kytmfaXLQ==}
+ cpu: [arm]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm-musleabihf@4.54.0':
+ resolution: {integrity: sha512-+pBrqEjaakN2ySv5RVrj/qLytYhPKEUwk+e3SFU5jTLHIcAtqh2rLrd/OkbNuHJpsBgxsD8ccJt5ga/SeG0JmA==}
+ cpu: [arm]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm64-gnu@4.54.0':
+ resolution: {integrity: sha512-NSqc7rE9wuUaRBsBp5ckQ5CVz5aIRKCwsoa6WMF7G01sX3/qHUw/z4pv+D+ahL1EIKy6Enpcnz1RY8pf7bjwng==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm64-musl@4.54.0':
+ resolution: {integrity: sha512-gr5vDbg3Bakga5kbdpqx81m2n9IX8M6gIMlQQIXiLTNeQW6CucvuInJ91EuCJ/JYvc+rcLLsDFcfAD1K7fMofg==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rollup/rollup-linux-loong64-gnu@4.54.0':
+ resolution: {integrity: sha512-gsrtB1NA3ZYj2vq0Rzkylo9ylCtW/PhpLEivlgWe0bpgtX5+9j9EZa0wtZiCjgu6zmSeZWyI/e2YRX1URozpIw==}
+ cpu: [loong64]
+ os: [linux]
+
+ '@rollup/rollup-linux-ppc64-gnu@4.54.0':
+ resolution: {integrity: sha512-y3qNOfTBStmFNq+t4s7Tmc9hW2ENtPg8FeUD/VShI7rKxNW7O4fFeaYbMsd3tpFlIg1Q8IapFgy7Q9i2BqeBvA==}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@rollup/rollup-linux-riscv64-gnu@4.54.0':
+ resolution: {integrity: sha512-89sepv7h2lIVPsFma8iwmccN7Yjjtgz0Rj/Ou6fEqg3HDhpCa+Et+YSufy27i6b0Wav69Qv4WBNl3Rs6pwhebQ==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@rollup/rollup-linux-riscv64-musl@4.54.0':
+ resolution: {integrity: sha512-ZcU77ieh0M2Q8Ur7D5X7KvK+UxbXeDHwiOt/CPSBTI1fBmeDMivW0dPkdqkT4rOgDjrDDBUed9x4EgraIKoR2A==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@rollup/rollup-linux-s390x-gnu@4.54.0':
+ resolution: {integrity: sha512-2AdWy5RdDF5+4YfG/YesGDDtbyJlC9LHmL6rZw6FurBJ5n4vFGupsOBGfwMRjBYH7qRQowT8D/U4LoSvVwOhSQ==}
+ cpu: [s390x]
+ os: [linux]
+
+ '@rollup/rollup-linux-x64-gnu@4.54.0':
+ resolution: {integrity: sha512-WGt5J8Ij/rvyqpFexxk3ffKqqbLf9AqrTBbWDk7ApGUzaIs6V+s2s84kAxklFwmMF/vBNGrVdYgbblCOFFezMQ==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rollup/rollup-linux-x64-musl@4.54.0':
+ resolution: {integrity: sha512-JzQmb38ATzHjxlPHuTH6tE7ojnMKM2kYNzt44LO/jJi8BpceEC8QuXYA908n8r3CNuG/B3BV8VR3Hi1rYtmPiw==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rollup/rollup-openharmony-arm64@4.54.0':
+ resolution: {integrity: sha512-huT3fd0iC7jigGh7n3q/+lfPcXxBi+om/Rs3yiFxjvSxbSB6aohDFXbWvlspaqjeOh+hx7DDHS+5Es5qRkWkZg==}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@rollup/rollup-win32-arm64-msvc@4.54.0':
+ resolution: {integrity: sha512-c2V0W1bsKIKfbLMBu/WGBz6Yci8nJ/ZJdheE0EwB73N3MvHYKiKGs3mVilX4Gs70eGeDaMqEob25Tw2Gb9Nqyw==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rollup/rollup-win32-ia32-msvc@4.54.0':
+ resolution: {integrity: sha512-woEHgqQqDCkAzrDhvDipnSirm5vxUXtSKDYTVpZG3nUdW/VVB5VdCYA2iReSj/u3yCZzXID4kuKG7OynPnB3WQ==}
+ cpu: [ia32]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-gnu@4.54.0':
+ resolution: {integrity: sha512-dzAc53LOuFvHwbCEOS0rPbXp6SIhAf2txMP5p6mGyOXXw5mWY8NGGbPMPrs4P1WItkfApDathBj/NzMLUZ9rtQ==}
+ cpu: [x64]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-msvc@4.54.0':
+ resolution: {integrity: sha512-hYT5d3YNdSh3mbCU1gwQyPgQd3T2ne0A3KG8KSBdav5TiBg6eInVmV+TeR5uHufiIgSFg0XsOWGW5/RhNcSvPg==}
+ cpu: [x64]
+ os: [win32]
+
+ '@sinclair/typebox@0.27.8':
+ resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
+
+ '@sinclair/typebox@0.34.41':
+ resolution: {integrity: sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g==}
+
+ '@sinonjs/commons@3.0.1':
+ resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==}
+
+ '@sinonjs/fake-timers@13.0.5':
+ resolution: {integrity: sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==}
+
+ '@storybook/addon-a11y@9.1.17':
+ resolution: {integrity: sha512-xP2Nb+idph2r0wE2Lc3z7LjtyXxTS+U+mJWmS8hw5w0oU2TkVdV7Ew/V7/iNl5jIWMXIp9HCRmcJuKSSGuertA==}
+ peerDependencies:
+ storybook: ^9.1.17
+
+ '@storybook/addon-docs@9.1.17':
+ resolution: {integrity: sha512-yc4hlgkrwNi045qk210dRuIMijkgbLmo3ft6F4lOdpPRn4IUnPDj7FfZR8syGzUzKidxRfNtLx5m0yHIz83xtA==}
+ peerDependencies:
+ storybook: ^9.1.17
+
+ '@storybook/addon-onboarding@9.1.17':
+ resolution: {integrity: sha512-TfpK+wsHX7DQyJ8tI3yEl56nolwne3lWmA5LjBl/AcYUkv87lNrQru47aqvRqnDUyLMWa/yhv3u/pzPomDxCsA==}
+ peerDependencies:
+ storybook: ^9.1.17
+
+ '@storybook/addon-themes@9.1.17':
+ resolution: {integrity: sha512-ffHtZw/eMZY3PsRlcQvV5rfnH88ae7Vi7wIGs3PwkYFxBYvV99UdyQRN9VUzC5Q/SMEnVgSQWZ7mG12GQ9RGuQ==}
+ peerDependencies:
+ storybook: ^9.1.17
+
+ '@storybook/addon-vitest@9.1.17':
+ resolution: {integrity: sha512-2EIvZPz0N+mnIUnUHW3+GIgwJRIqjZrK5BFyHsi82NhOQ1LCh/1GqbcB+kNoaiXioRcAgOsHUDWbQZrvyx3GhQ==}
+ peerDependencies:
+ '@vitest/browser': ^3.0.0 || ^4.0.0
+ '@vitest/browser-playwright': ^4.0.0
+ '@vitest/runner': ^3.0.0 || ^4.0.0
+ storybook: ^9.1.17
+ vitest: ^3.0.0 || ^4.0.0
+ peerDependenciesMeta:
+ '@vitest/browser':
+ optional: true
+ '@vitest/browser-playwright':
+ optional: true
+ '@vitest/runner':
+ optional: true
+ vitest:
+ optional: true
+
+ '@storybook/builder-vite@9.1.17':
+ resolution: {integrity: sha512-OQCYaFWoTBvovN2IJmkAW+7FgHMJiih1WA/xqgpKIx0ImZjB4z5FrKgzQeXsrYcLEsynyaj+xN3JFUKsz5bzGQ==}
+ peerDependencies:
+ storybook: ^9.1.17
+ vite: ^5.0.0 || ^6.0.0 || ^7.0.0
+
+ '@storybook/csf-plugin@9.1.17':
+ resolution: {integrity: sha512-o+ebQDdSfZHDRDhu2hNDGhCLIazEB4vEAqJcHgz1VsURq+l++bgZUcKojPMCAbeblptSEz2bwS0eYAOvG7aSXg==}
+ peerDependencies:
+ storybook: ^9.1.17
+
+ '@storybook/global@5.0.0':
+ resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==}
+
+ '@storybook/icons@1.6.0':
+ resolution: {integrity: sha512-hcFZIjW8yQz8O8//2WTIXylm5Xsgc+lW9ISLgUk1xGmptIJQRdlhVIXCpSyLrQaaRiyhQRaVg7l3BD9S216BHw==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
+
+ '@storybook/react-dom-shim@9.1.17':
+ resolution: {integrity: sha512-Ss/lNvAy0Ziynu+KniQIByiNuyPz3dq7tD62hqSC/pHw190X+M7TKU3zcZvXhx2AQx1BYyxtdSHIZapb+P5mxQ==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
+ storybook: ^9.1.17
+
+ '@storybook/react-vite@9.1.17':
+ resolution: {integrity: sha512-RZHsqD1mnTMo4MCJw68t3swS5BTMSTpeRhlelMwjoTEe7jJCPa+qx00uMlWliR1QBN1hMO8Y1dkchxSiUS9otA==}
+ engines: {node: '>=20.0.0'}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
+ storybook: ^9.1.17
+ vite: ^5.0.0 || ^6.0.0 || ^7.0.0
+
+ '@storybook/react@9.1.17':
+ resolution: {integrity: sha512-TZCplpep5BwjHPIIcUOMHebc/2qKadJHYPisRn5Wppl014qgT3XkFLpYkFgY1BaRXtqw8Mn3gqq4M/49rQ7Iww==}
+ engines: {node: '>=20.0.0'}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
+ storybook: ^9.1.17
+ typescript: '>= 4.9.x'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@svgr/babel-plugin-add-jsx-attribute@8.0.0':
+ resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@svgr/babel-plugin-remove-jsx-attribute@8.0.0':
+ resolution: {integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0':
+ resolution: {integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0':
+ resolution: {integrity: sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@svgr/babel-plugin-svg-dynamic-title@8.0.0':
+ resolution: {integrity: sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@svgr/babel-plugin-svg-em-dimensions@8.0.0':
+ resolution: {integrity: sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@svgr/babel-plugin-transform-react-native-svg@8.1.0':
+ resolution: {integrity: sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@svgr/babel-plugin-transform-svg-component@8.0.0':
+ resolution: {integrity: sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==}
+ engines: {node: '>=12'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@svgr/babel-preset@8.1.0':
+ resolution: {integrity: sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@svgr/core@8.1.0':
+ resolution: {integrity: sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==}
+ engines: {node: '>=14'}
+
+ '@svgr/hast-util-to-babel-ast@8.0.0':
+ resolution: {integrity: sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==}
+ engines: {node: '>=14'}
+
+ '@svgr/plugin-jsx@8.1.0':
+ resolution: {integrity: sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@svgr/core': '*'
+
+ '@testing-library/dom@10.4.1':
+ resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==}
+ engines: {node: '>=18'}
+
+ '@testing-library/jest-dom@6.9.1':
+ resolution: {integrity: sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==}
+ engines: {node: '>=14', npm: '>=6', yarn: '>=1'}
+
+ '@testing-library/react@16.3.1':
+ resolution: {integrity: sha512-gr4KtAWqIOQoucWYD/f6ki+j5chXfcPc74Col/6poTyqTmn7zRmodWahWRCp8tYd+GMqBonw6hstNzqjbs6gjw==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@testing-library/dom': ^10.0.0
+ '@types/react': ^18.0.0 || ^19.0.0
+ '@types/react-dom': ^18.0.0 || ^19.0.0
+ react: ^18.0.0 || ^19.0.0
+ react-dom: ^18.0.0 || ^19.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@testing-library/user-event@14.6.1':
+ resolution: {integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==}
+ engines: {node: '>=12', npm: '>=6'}
+ peerDependencies:
+ '@testing-library/dom': '>=7.21.4'
+
+ '@tybys/wasm-util@0.10.1':
+ resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==}
+
+ '@types/aria-query@5.0.4':
+ resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==}
+
+ '@types/babel__core@7.20.5':
+ resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
+
+ '@types/babel__generator@7.27.0':
+ resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==}
+
+ '@types/babel__template@7.4.4':
+ resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
+
+ '@types/babel__traverse@7.28.0':
+ resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==}
+
+ '@types/chai@5.2.3':
+ resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==}
+
+ '@types/deep-eql@4.0.2':
+ resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==}
+
+ '@types/doctrine@0.0.9':
+ resolution: {integrity: sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==}
+
+ '@types/estree@1.0.8':
+ resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+
+ '@types/istanbul-lib-coverage@2.0.6':
+ resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==}
+
+ '@types/istanbul-lib-report@3.0.3':
+ resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==}
+
+ '@types/istanbul-reports@3.0.4':
+ resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==}
+
+ '@types/jest@30.0.0':
+ resolution: {integrity: sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==}
+
+ '@types/jsdom@21.1.7':
+ resolution: {integrity: sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==}
+
+ '@types/json-schema@7.0.15':
+ resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+
+ '@types/mdx@2.0.13':
+ resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==}
+
+ '@types/node@25.0.3':
+ resolution: {integrity: sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==}
+
+ '@types/react-dom@19.2.3':
+ resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==}
+ peerDependencies:
+ '@types/react': ^19.2.0
+
+ '@types/react@19.2.7':
+ resolution: {integrity: sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==}
+
+ '@types/resolve@1.20.6':
+ resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==}
+
+ '@types/stack-utils@2.0.3':
+ resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==}
+
+ '@types/stylis@4.2.5':
+ resolution: {integrity: sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==}
+
+ '@types/tough-cookie@4.0.5':
+ resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==}
+
+ '@types/yargs-parser@21.0.3':
+ resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==}
+
+ '@types/yargs@17.0.35':
+ resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==}
+
+ '@typescript-eslint/eslint-plugin@8.50.0':
+ resolution: {integrity: sha512-O7QnmOXYKVtPrfYzMolrCTfkezCJS9+ljLdKW/+DCvRsc3UAz+sbH6Xcsv7p30+0OwUbeWfUDAQE0vpabZ3QLg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ '@typescript-eslint/parser': ^8.50.0
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <6.0.0'
+
+ '@typescript-eslint/parser@8.50.0':
+ resolution: {integrity: sha512-6/cmF2piao+f6wSxUsJLZjck7OQsYyRtcOZS02k7XINSNlz93v6emM8WutDQSXnroG2xwYlEVHJI+cPA7CPM3Q==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <6.0.0'
+
+ '@typescript-eslint/project-service@8.50.0':
+ resolution: {integrity: sha512-Cg/nQcL1BcoTijEWyx4mkVC56r8dj44bFDvBdygifuS20f3OZCHmFbjF34DPSi07kwlFvqfv/xOLnJ5DquxSGQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ typescript: '>=4.8.4 <6.0.0'
+
+ '@typescript-eslint/scope-manager@8.50.0':
+ resolution: {integrity: sha512-xCwfuCZjhIqy7+HKxBLrDVT5q/iq7XBVBXLn57RTIIpelLtEIZHXAF/Upa3+gaCpeV1NNS5Z9A+ID6jn50VD4A==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@typescript-eslint/tsconfig-utils@8.50.0':
+ resolution: {integrity: sha512-vxd3G/ybKTSlm31MOA96gqvrRGv9RJ7LGtZCn2Vrc5htA0zCDvcMqUkifcjrWNNKXHUU3WCkYOzzVSFBd0wa2w==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ typescript: '>=4.8.4 <6.0.0'
+
+ '@typescript-eslint/type-utils@8.50.0':
+ resolution: {integrity: sha512-7OciHT2lKCewR0mFoBrvZJ4AXTMe/sYOe87289WAViOocEmDjjv8MvIOT2XESuKj9jp8u3SZYUSh89QA4S1kQw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <6.0.0'
+
+ '@typescript-eslint/types@8.50.0':
+ resolution: {integrity: sha512-iX1mgmGrXdANhhITbpp2QQM2fGehBse9LbTf0sidWK6yg/NE+uhV5dfU1g6EYPlcReYmkE9QLPq/2irKAmtS9w==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@typescript-eslint/typescript-estree@8.50.0':
+ resolution: {integrity: sha512-W7SVAGBR/IX7zm1t70Yujpbk+zdPq/u4soeFSknWFdXIFuWsBGBOUu/Tn/I6KHSKvSh91OiMuaSnYp3mtPt5IQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ typescript: '>=4.8.4 <6.0.0'
+
+ '@typescript-eslint/utils@8.50.0':
+ resolution: {integrity: sha512-87KgUXET09CRjGCi2Ejxy3PULXna63/bMYv72tCAlDJC3Yqwln0HiFJ3VJMst2+mEtNtZu5oFvX4qJGjKsnAgg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <6.0.0'
+
+ '@typescript-eslint/visitor-keys@8.50.0':
+ resolution: {integrity: sha512-Xzmnb58+Db78gT/CCj/PVCvK+zxbnsw6F+O1oheYszJbBSdEjVhQi3C/Xttzxgi/GLmpvOggRs1RFpiJ8+c34Q==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@ungap/structured-clone@1.3.0':
+ resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
+
+ '@unrs/resolver-binding-android-arm-eabi@1.11.1':
+ resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==}
+ cpu: [arm]
+ os: [android]
+
+ '@unrs/resolver-binding-android-arm64@1.11.1':
+ resolution: {integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==}
+ cpu: [arm64]
+ os: [android]
+
+ '@unrs/resolver-binding-darwin-arm64@1.11.1':
+ resolution: {integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@unrs/resolver-binding-darwin-x64@1.11.1':
+ resolution: {integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@unrs/resolver-binding-freebsd-x64@1.11.1':
+ resolution: {integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1':
+ resolution: {integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==}
+ cpu: [arm]
+ os: [linux]
+
+ '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1':
+ resolution: {integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==}
+ cpu: [arm]
+ os: [linux]
+
+ '@unrs/resolver-binding-linux-arm64-gnu@1.11.1':
+ resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@unrs/resolver-binding-linux-arm64-musl@1.11.1':
+ resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1':
+ resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1':
+ resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@unrs/resolver-binding-linux-riscv64-musl@1.11.1':
+ resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@unrs/resolver-binding-linux-s390x-gnu@1.11.1':
+ resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==}
+ cpu: [s390x]
+ os: [linux]
+
+ '@unrs/resolver-binding-linux-x64-gnu@1.11.1':
+ resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==}
+ cpu: [x64]
+ os: [linux]
+
+ '@unrs/resolver-binding-linux-x64-musl@1.11.1':
+ resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==}
+ cpu: [x64]
+ os: [linux]
+
+ '@unrs/resolver-binding-wasm32-wasi@1.11.1':
+ resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+
+ '@unrs/resolver-binding-win32-arm64-msvc@1.11.1':
+ resolution: {integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@unrs/resolver-binding-win32-ia32-msvc@1.11.1':
+ resolution: {integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==}
+ cpu: [ia32]
+ os: [win32]
+
+ '@unrs/resolver-binding-win32-x64-msvc@1.11.1':
+ resolution: {integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==}
+ cpu: [x64]
+ os: [win32]
+
+ '@vitejs/plugin-react@4.7.0':
+ resolution: {integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ peerDependencies:
+ vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0
+
+ '@vitest/browser@3.2.4':
+ resolution: {integrity: sha512-tJxiPrWmzH8a+w9nLKlQMzAKX/7VjFs50MWgcAj7p9XQ7AQ9/35fByFYptgPELyLw+0aixTnC4pUWV+APcZ/kw==}
+ peerDependencies:
+ playwright: '*'
+ safaridriver: '*'
+ vitest: 3.2.4
+ webdriverio: ^7.0.0 || ^8.0.0 || ^9.0.0
+ peerDependenciesMeta:
+ playwright:
+ optional: true
+ safaridriver:
+ optional: true
+ webdriverio:
+ optional: true
+
+ '@vitest/coverage-v8@3.2.4':
+ resolution: {integrity: sha512-EyF9SXU6kS5Ku/U82E259WSnvg6c8KTjppUncuNdm5QHpe17mwREHnjDzozC8x9MZ0xfBUFSaLkRv4TMA75ALQ==}
+ peerDependencies:
+ '@vitest/browser': 3.2.4
+ vitest: 3.2.4
+ peerDependenciesMeta:
+ '@vitest/browser':
+ optional: true
+
+ '@vitest/expect@3.2.4':
+ resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==}
+
+ '@vitest/mocker@3.2.4':
+ resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==}
+ peerDependencies:
+ msw: ^2.4.9
+ vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0
+ peerDependenciesMeta:
+ msw:
+ optional: true
+ vite:
+ optional: true
+
+ '@vitest/pretty-format@3.2.4':
+ resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==}
+
+ '@vitest/runner@3.2.4':
+ resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==}
+
+ '@vitest/snapshot@3.2.4':
+ resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==}
+
+ '@vitest/spy@3.2.4':
+ resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==}
+
+ '@vitest/utils@3.2.4':
+ resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==}
+
+ acorn-jsx@5.3.2:
+ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+
+ acorn@8.15.0:
+ resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
+ agent-base@7.1.4:
+ resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==}
+ engines: {node: '>= 14'}
+
+ ajv@6.12.6:
+ resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+
+ ansi-escapes@4.3.2:
+ resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
+ engines: {node: '>=8'}
+
+ ansi-escapes@7.2.0:
+ resolution: {integrity: sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==}
+ engines: {node: '>=18'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-regex@6.2.2:
+ resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==}
+ engines: {node: '>=12'}
+
+ ansi-styles@3.2.1:
+ resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
+ engines: {node: '>=4'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ ansi-styles@5.2.0:
+ resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
+ engines: {node: '>=10'}
+
+ ansi-styles@6.2.3:
+ resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==}
+ engines: {node: '>=12'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@1.0.10:
+ resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ aria-query@5.3.0:
+ resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==}
+
+ aria-query@5.3.2:
+ resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==}
+ engines: {node: '>= 0.4'}
+
+ array-buffer-byte-length@1.0.2:
+ resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==}
+ engines: {node: '>= 0.4'}
+
+ arraybuffer.prototype.slice@1.0.4:
+ resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==}
+ engines: {node: '>= 0.4'}
+
+ assertion-error@2.0.1:
+ resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
+ engines: {node: '>=12'}
+
+ ast-types@0.16.1:
+ resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==}
+ engines: {node: '>=4'}
+
+ ast-v8-to-istanbul@0.3.9:
+ resolution: {integrity: sha512-dSC6tJeOJxbZrPzPbv5mMd6CMiQ1ugaVXXPRad2fXUSsy1kstFn9XQWemV9VW7Y7kpxgQ/4WMoZfwdH8XSU48w==}
+
+ async-function@1.0.0:
+ resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
+ engines: {node: '>= 0.4'}
+
+ available-typed-arrays@1.0.7:
+ resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
+ engines: {node: '>= 0.4'}
+
+ axe-core@4.11.0:
+ resolution: {integrity: sha512-ilYanEU8vxxBexpJd8cWM4ElSQq4QctCLKih0TSfjIfCQTeyH/6zVrmIJfLPrKTKJRbiG+cfnZbQIjAlJmF1jQ==}
+ engines: {node: '>=4'}
+
+ babel-jest@30.2.0:
+ resolution: {integrity: sha512-0YiBEOxWqKkSQWL9nNGGEgndoeL0ZpWrbLMNL5u/Kaxrli3Eaxlt3ZtIDktEvXt4L/R9r3ODr2zKwGM/2BjxVw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ peerDependencies:
+ '@babel/core': ^7.11.0 || ^8.0.0-0
+
+ babel-plugin-istanbul@7.0.1:
+ resolution: {integrity: sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==}
+ engines: {node: '>=12'}
+
+ babel-plugin-jest-hoist@30.2.0:
+ resolution: {integrity: sha512-ftzhzSGMUnOzcCXd6WHdBGMyuwy15Wnn0iyyWGKgBDLxf9/s5ABuraCSpBX2uG0jUg4rqJnxsLc5+oYBqoxVaA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ babel-plugin-polyfill-corejs2@0.4.14:
+ resolution: {integrity: sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==}
+ peerDependencies:
+ '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+
+ babel-plugin-polyfill-corejs3@0.13.0:
+ resolution: {integrity: sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==}
+ peerDependencies:
+ '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+
+ babel-plugin-polyfill-regenerator@0.6.5:
+ resolution: {integrity: sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==}
+ peerDependencies:
+ '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+
+ babel-plugin-styled-components@2.1.4:
+ resolution: {integrity: sha512-Xgp9g+A/cG47sUyRwwYxGM4bR/jDRg5N6it/8+HxCnbT5XNKSKDT9xm4oag/osgqjC2It/vH0yXsomOG6k558g==}
+ peerDependencies:
+ styled-components: '>= 2'
+
+ babel-preset-current-node-syntax@1.2.0:
+ resolution: {integrity: sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==}
+ peerDependencies:
+ '@babel/core': ^7.0.0 || ^8.0.0-0
+
+ babel-preset-jest@30.2.0:
+ resolution: {integrity: sha512-US4Z3NOieAQumwFnYdUWKvUKh8+YSnS/gB3t6YBiz0bskpu7Pine8pPCheNxlPEW4wnUkma2a94YuW2q3guvCQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ peerDependencies:
+ '@babel/core': ^7.11.0 || ^8.0.0-beta.1
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ baseline-browser-mapping@2.9.11:
+ resolution: {integrity: sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==}
+ hasBin: true
+
+ better-opn@3.0.2:
+ resolution: {integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==}
+ engines: {node: '>=12.0.0'}
+
+ brace-expansion@1.1.12:
+ resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
+
+ brace-expansion@2.0.2:
+ resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browserslist@4.28.1:
+ resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+
+ bser@2.1.1:
+ resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ cac@6.7.14:
+ resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
+ engines: {node: '>=8'}
+
+ call-bind-apply-helpers@1.0.2:
+ resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
+ engines: {node: '>= 0.4'}
+
+ call-bind@1.0.8:
+ resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==}
+ engines: {node: '>= 0.4'}
+
+ call-bound@1.0.4:
+ resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==}
+ engines: {node: '>= 0.4'}
+
+ callsites@3.1.0:
+ resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
+ engines: {node: '>=6'}
+
+ camelcase@5.3.1:
+ resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
+ engines: {node: '>=6'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ camelize@1.0.1:
+ resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==}
+
+ caniuse-lite@1.0.30001761:
+ resolution: {integrity: sha512-JF9ptu1vP2coz98+5051jZ4PwQgd2ni8A+gYSN7EA7dPKIMf0pDlSUxhdmVOaV3/fYK5uWBkgSXJaRLr4+3A6g==}
+
+ chai@5.3.3:
+ resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==}
+ engines: {node: '>=18'}
+
+ chalk@2.4.2:
+ resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ char-regex@1.0.2:
+ resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==}
+ engines: {node: '>=10'}
+
+ check-error@2.1.1:
+ resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==}
+ engines: {node: '>= 16'}
+
+ chromatic@13.3.4:
+ resolution: {integrity: sha512-TR5rvyH0ESXobBB3bV8jc87AEAFQC7/n+Eb4XWhJz6hW3YNxIQPVjcbgLv+a4oKHEl1dUBueWSoIQsOVGTd+RQ==}
+ hasBin: true
+ peerDependencies:
+ '@chromatic-com/cypress': ^0.*.* || ^1.0.0
+ '@chromatic-com/playwright': ^0.*.* || ^1.0.0
+ peerDependenciesMeta:
+ '@chromatic-com/cypress':
+ optional: true
+ '@chromatic-com/playwright':
+ optional: true
+
+ ci-info@4.3.1:
+ resolution: {integrity: sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==}
+ engines: {node: '>=8'}
+
+ cjs-module-lexer@2.1.1:
+ resolution: {integrity: sha512-+CmxIZ/L2vNcEfvNtLdU0ZQ6mbq3FZnwAP2PPTiKP+1QOoKwlKlPgb8UKV0Dds7QVaMnHm+FwSft2VB0s/SLjQ==}
+
+ cli-cursor@5.0.0:
+ resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==}
+ engines: {node: '>=18'}
+
+ cli-truncate@5.1.1:
+ resolution: {integrity: sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A==}
+ engines: {node: '>=20'}
+
+ cliui@8.0.1:
+ resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
+ engines: {node: '>=12'}
+
+ co@4.6.0:
+ resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==}
+ engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'}
+
+ collect-v8-coverage@1.0.3:
+ resolution: {integrity: sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==}
+
+ color-convert@1.9.3:
+ resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.3:
+ resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ colorette@2.0.20:
+ resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
+
+ commander@14.0.2:
+ resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==}
+ engines: {node: '>=20'}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
+ convert-source-map@2.0.0:
+ resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+
+ core-js-compat@3.47.0:
+ resolution: {integrity: sha512-IGfuznZ/n7Kp9+nypamBhvwdwLsW6KC8IOaURw2doAK5e98AG3acVLdh0woOnEqCfUtS+Vu882JE4k/DAm3ItQ==}
+
+ cosmiconfig@8.3.6:
+ resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ typescript: '>=4.9.5'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ cross-spawn@6.0.6:
+ resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==}
+ engines: {node: '>=4.8'}
+
+ cross-spawn@7.0.6:
+ resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
+ engines: {node: '>= 8'}
+
+ css-color-keywords@1.0.0:
+ resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==}
+ engines: {node: '>=4'}
+
+ css-to-react-native@3.2.0:
+ resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==}
+
+ css.escape@1.5.1:
+ resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==}
+
+ cssstyle@4.6.0:
+ resolution: {integrity: sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==}
+ engines: {node: '>=18'}
+
+ csstype@3.1.3:
+ resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
+
+ csstype@3.2.3:
+ resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
+
+ data-urls@5.0.0:
+ resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==}
+ engines: {node: '>=18'}
+
+ data-view-buffer@1.0.2:
+ resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==}
+ engines: {node: '>= 0.4'}
+
+ data-view-byte-length@1.0.2:
+ resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==}
+ engines: {node: '>= 0.4'}
+
+ data-view-byte-offset@1.0.1:
+ resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==}
+ engines: {node: '>= 0.4'}
+
+ debug@4.4.3:
+ resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decimal.js@10.6.0:
+ resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==}
+
+ dedent@1.7.1:
+ resolution: {integrity: sha512-9JmrhGZpOlEgOLdQgSm0zxFaYoQon408V1v49aqTWuXENVlnCuY9JBZcXZiCsZQWDjTm5Qf/nIvAy77mXDAjEg==}
+ peerDependencies:
+ babel-plugin-macros: ^3.1.0
+ peerDependenciesMeta:
+ babel-plugin-macros:
+ optional: true
+
+ deep-eql@5.0.2:
+ resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
+ engines: {node: '>=6'}
+
+ deep-is@0.1.4:
+ resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
+
+ deepmerge@4.3.1:
+ resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
+ engines: {node: '>=0.10.0'}
+
+ define-data-property@1.1.4:
+ resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
+ engines: {node: '>= 0.4'}
+
+ define-lazy-prop@2.0.0:
+ resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
+ engines: {node: '>=8'}
+
+ define-properties@1.2.1:
+ resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
+ engines: {node: '>= 0.4'}
+
+ dequal@2.0.3:
+ resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
+ engines: {node: '>=6'}
+
+ detect-newline@3.1.0:
+ resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==}
+ engines: {node: '>=8'}
+
+ diff-sequences@29.6.3:
+ resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ doctrine@3.0.0:
+ resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
+ engines: {node: '>=6.0.0'}
+
+ dom-accessibility-api@0.5.16:
+ resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==}
+
+ dom-accessibility-api@0.6.3:
+ resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==}
+
+ dot-case@3.0.4:
+ resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
+
+ dunder-proto@1.0.1:
+ resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
+ engines: {node: '>= 0.4'}
+
+ eastasianwidth@0.2.0:
+ resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
+
+ electron-to-chromium@1.5.267:
+ resolution: {integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==}
+
+ emittery@0.13.1:
+ resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==}
+ engines: {node: '>=12'}
+
+ emoji-regex@10.6.0:
+ resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ emoji-regex@9.2.2:
+ resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+
+ entities@4.5.0:
+ resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
+ engines: {node: '>=0.12'}
+
+ entities@6.0.1:
+ resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
+ engines: {node: '>=0.12'}
+
+ environment@1.1.0:
+ resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==}
+ engines: {node: '>=18'}
+
+ error-ex@1.3.4:
+ resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==}
+
+ es-abstract@1.24.1:
+ resolution: {integrity: sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==}
+ engines: {node: '>= 0.4'}
+
+ es-define-property@1.0.1:
+ resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
+ engines: {node: '>= 0.4'}
+
+ es-errors@1.3.0:
+ resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
+ engines: {node: '>= 0.4'}
+
+ es-module-lexer@1.7.0:
+ resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==}
+
+ es-object-atoms@1.1.1:
+ resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
+ engines: {node: '>= 0.4'}
+
+ es-set-tostringtag@2.1.0:
+ resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
+ engines: {node: '>= 0.4'}
+
+ es-to-primitive@1.3.0:
+ resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==}
+ engines: {node: '>= 0.4'}
+
+ esbuild-register@3.6.0:
+ resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==}
+ peerDependencies:
+ esbuild: '>=0.12 <1'
+
+ esbuild@0.25.12:
+ resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ esbuild@0.27.2:
+ resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@1.0.5:
+ resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
+ engines: {node: '>=0.8.0'}
+
+ escape-string-regexp@2.0.0:
+ resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==}
+ engines: {node: '>=8'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eslint-plugin-jest@29.5.0:
+ resolution: {integrity: sha512-DAi9H8xN/TUuNOt+xDP1RqpCJLsSxBb5u1zXSpCyp0VAWGL8MBAg5t7/Dk+76iX7d1LhWu4DDH77IQNUolLDyg==}
+ engines: {node: ^20.12.0 || ^22.0.0 || >=24.0.0}
+ peerDependencies:
+ '@typescript-eslint/eslint-plugin': ^8.0.0
+ eslint: ^8.57.0 || ^9.0.0
+ jest: '*'
+ peerDependenciesMeta:
+ '@typescript-eslint/eslint-plugin':
+ optional: true
+ jest:
+ optional: true
+
+ eslint-plugin-react-hooks@5.2.0:
+ resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0
+
+ eslint-plugin-react-refresh@0.4.26:
+ resolution: {integrity: sha512-1RETEylht2O6FM/MvgnyvT+8K21wLqDNg4qD51Zj3guhjt433XbnnkVttHMyaVyAFD03QSV4LPS5iE3VQmO7XQ==}
+ peerDependencies:
+ eslint: '>=8.40'
+
+ eslint-plugin-storybook@9.1.17:
+ resolution: {integrity: sha512-7Qn3XxXdWLAt6arSH8Tt8Su/fAAqA+d5Oc51g7ubOE5Yfc5x0dMIgCfCG5RrIjt0RDRpwp4n194Mge+sAA3WMQ==}
+ engines: {node: '>=20.0.0'}
+ peerDependencies:
+ eslint: '>=8'
+ storybook: ^9.1.17
+
+ eslint-scope@8.4.0:
+ resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ eslint-visitor-keys@3.4.3:
+ resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ eslint-visitor-keys@4.2.1:
+ resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ eslint@9.39.2:
+ resolution: {integrity: sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ hasBin: true
+ peerDependencies:
+ jiti: '*'
+ peerDependenciesMeta:
+ jiti:
+ optional: true
+
+ espree@10.4.0:
+ resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ esprima@4.0.1:
+ resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ esquery@1.6.0:
+ resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
+ engines: {node: '>=0.10'}
+
+ esrecurse@4.3.0:
+ resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
+ engines: {node: '>=4.0'}
+
+ estraverse@5.3.0:
+ resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
+ engines: {node: '>=4.0'}
+
+ estree-walker@2.0.2:
+ resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+
+ estree-walker@3.0.3:
+ resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
+
+ esutils@2.0.3:
+ resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
+ engines: {node: '>=0.10.0'}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ execa@5.1.1:
+ resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
+ engines: {node: '>=10'}
+
+ exit-x@0.2.2:
+ resolution: {integrity: sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==}
+ engines: {node: '>= 0.8.0'}
+
+ expect-type@1.3.0:
+ resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==}
+ engines: {node: '>=12.0.0'}
+
+ expect@30.2.0:
+ resolution: {integrity: sha512-u/feCi0GPsI+988gU2FLcsHyAHTU0MX1Wg68NhAnN7z/+C5wqG+CY8J53N9ioe8RXgaoz0nBR/TYMf3AycUuPw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ fast-deep-equal@3.1.3:
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+
+ fast-json-stable-stringify@2.1.0:
+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+
+ fast-levenshtein@2.0.6:
+ resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+
+ fb-watchman@2.0.2:
+ resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==}
+
+ fdir@6.5.0:
+ resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ picomatch: ^3 || ^4
+ peerDependenciesMeta:
+ picomatch:
+ optional: true
+
+ file-entry-cache@8.0.0:
+ resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
+ engines: {node: '>=16.0.0'}
+
+ filesize@10.1.6:
+ resolution: {integrity: sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w==}
+ engines: {node: '>= 10.4.0'}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up@4.1.0:
+ resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ find-up@7.0.0:
+ resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==}
+ engines: {node: '>=18'}
+
+ flat-cache@4.0.1:
+ resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
+ engines: {node: '>=16'}
+
+ flatted@3.3.3:
+ resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
+
+ for-each@0.3.5:
+ resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==}
+ engines: {node: '>= 0.4'}
+
+ foreground-child@3.3.1:
+ resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
+ engines: {node: '>=14'}
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.2:
+ resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+ function.prototype.name@1.1.8:
+ resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==}
+ engines: {node: '>= 0.4'}
+
+ functions-have-names@1.2.3:
+ resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
+
+ generator-function@2.0.1:
+ resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==}
+ engines: {node: '>= 0.4'}
+
+ gensync@1.0.0-beta.2:
+ resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
+ engines: {node: '>=6.9.0'}
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-east-asian-width@1.4.0:
+ resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==}
+ engines: {node: '>=18'}
+
+ get-intrinsic@1.3.0:
+ resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
+ engines: {node: '>= 0.4'}
+
+ get-package-type@0.1.0:
+ resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==}
+ engines: {node: '>=8.0.0'}
+
+ get-proto@1.0.1:
+ resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
+ engines: {node: '>= 0.4'}
+
+ get-stream@6.0.1:
+ resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
+ engines: {node: '>=10'}
+
+ get-symbol-description@1.1.0:
+ resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==}
+ engines: {node: '>= 0.4'}
+
+ glob-parent@6.0.2:
+ resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
+ engines: {node: '>=10.13.0'}
+
+ glob@10.5.0:
+ resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==}
+ hasBin: true
+
+ glob@7.2.3:
+ resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ globals@14.0.0:
+ resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
+ engines: {node: '>=18'}
+
+ globals@16.5.0:
+ resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==}
+ engines: {node: '>=18'}
+
+ globalthis@1.0.4:
+ resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
+ engines: {node: '>= 0.4'}
+
+ gopd@1.2.0:
+ resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
+ engines: {node: '>= 0.4'}
+
+ graceful-fs@4.2.11:
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+
+ has-bigints@1.1.0:
+ resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==}
+ engines: {node: '>= 0.4'}
+
+ has-flag@3.0.0:
+ resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
+ engines: {node: '>=4'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ has-property-descriptors@1.0.2:
+ resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
+
+ has-proto@1.2.0:
+ resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==}
+ engines: {node: '>= 0.4'}
+
+ has-symbols@1.1.0:
+ resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
+ engines: {node: '>= 0.4'}
+
+ has-tostringtag@1.0.2:
+ resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
+ engines: {node: '>= 0.4'}
+
+ hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+ engines: {node: '>= 0.4'}
+
+ hosted-git-info@2.8.9:
+ resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==}
+
+ html-encoding-sniffer@4.0.0:
+ resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==}
+ engines: {node: '>=18'}
+
+ html-escaper@2.0.2:
+ resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
+
+ http-proxy-agent@7.0.2:
+ resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
+ engines: {node: '>= 14'}
+
+ https-proxy-agent@7.0.6:
+ resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==}
+ engines: {node: '>= 14'}
+
+ human-signals@2.1.0:
+ resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
+ engines: {node: '>=10.17.0'}
+
+ husky@8.0.3:
+ resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==}
+ engines: {node: '>=14'}
+ hasBin: true
+
+ iconv-lite@0.6.3:
+ resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
+ engines: {node: '>=0.10.0'}
+
+ ignore@5.3.2:
+ resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
+ engines: {node: '>= 4'}
+
+ ignore@7.0.5:
+ resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==}
+ engines: {node: '>= 4'}
+
+ import-fresh@3.3.1:
+ resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
+ engines: {node: '>=6'}
+
+ import-local@3.2.0:
+ resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ imurmurhash@0.1.4:
+ resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
+ engines: {node: '>=0.8.19'}
+
+ indent-string@4.0.0:
+ resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
+ engines: {node: '>=8'}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ internal-slot@1.1.0:
+ resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==}
+ engines: {node: '>= 0.4'}
+
+ is-array-buffer@3.0.5:
+ resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==}
+ engines: {node: '>= 0.4'}
+
+ is-arrayish@0.2.1:
+ resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
+
+ is-async-function@2.1.1:
+ resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==}
+ engines: {node: '>= 0.4'}
+
+ is-bigint@1.1.0:
+ resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==}
+ engines: {node: '>= 0.4'}
+
+ is-boolean-object@1.2.2:
+ resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==}
+ engines: {node: '>= 0.4'}
+
+ is-callable@1.2.7:
+ resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
+ engines: {node: '>= 0.4'}
+
+ is-core-module@2.16.1:
+ resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
+ engines: {node: '>= 0.4'}
+
+ is-data-view@1.0.2:
+ resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==}
+ engines: {node: '>= 0.4'}
+
+ is-date-object@1.1.0:
+ resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==}
+ engines: {node: '>= 0.4'}
+
+ is-docker@2.2.1:
+ resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-finalizationregistry@1.1.1:
+ resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==}
+ engines: {node: '>= 0.4'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-fullwidth-code-point@5.1.0:
+ resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==}
+ engines: {node: '>=18'}
+
+ is-generator-fn@2.1.0:
+ resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==}
+ engines: {node: '>=6'}
+
+ is-generator-function@1.1.2:
+ resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==}
+ engines: {node: '>= 0.4'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-map@2.0.3:
+ resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
+ engines: {node: '>= 0.4'}
+
+ is-negative-zero@2.0.3:
+ resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==}
+ engines: {node: '>= 0.4'}
+
+ is-number-object@1.1.1:
+ resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==}
+ engines: {node: '>= 0.4'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-potential-custom-element-name@1.0.1:
+ resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
+
+ is-regex@1.2.1:
+ resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
+ engines: {node: '>= 0.4'}
+
+ is-set@2.0.3:
+ resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==}
+ engines: {node: '>= 0.4'}
+
+ is-shared-array-buffer@1.0.4:
+ resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==}
+ engines: {node: '>= 0.4'}
+
+ is-stream@2.0.1:
+ resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
+ engines: {node: '>=8'}
+
+ is-string@1.1.1:
+ resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==}
+ engines: {node: '>= 0.4'}
+
+ is-symbol@1.1.1:
+ resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==}
+ engines: {node: '>= 0.4'}
+
+ is-typed-array@1.1.15:
+ resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==}
+ engines: {node: '>= 0.4'}
+
+ is-weakmap@2.0.2:
+ resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==}
+ engines: {node: '>= 0.4'}
+
+ is-weakref@1.1.1:
+ resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==}
+ engines: {node: '>= 0.4'}
+
+ is-weakset@2.0.4:
+ resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==}
+ engines: {node: '>= 0.4'}
+
+ is-wsl@2.2.0:
+ resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
+ engines: {node: '>=8'}
+
+ isarray@2.0.5:
+ resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ istanbul-lib-coverage@3.2.2:
+ resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==}
+ engines: {node: '>=8'}
+
+ istanbul-lib-instrument@6.0.3:
+ resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==}
+ engines: {node: '>=10'}
+
+ istanbul-lib-report@3.0.1:
+ resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==}
+ engines: {node: '>=10'}
+
+ istanbul-lib-source-maps@5.0.6:
+ resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==}
+ engines: {node: '>=10'}
+
+ istanbul-reports@3.2.0:
+ resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==}
+ engines: {node: '>=8'}
+
+ jackspeak@3.4.3:
+ resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
+
+ jest-changed-files@30.2.0:
+ resolution: {integrity: sha512-L8lR1ChrRnSdfeOvTrwZMlnWV8G/LLjQ0nG9MBclwWZidA2N5FviRki0Bvh20WRMOX31/JYvzdqTJrk5oBdydQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-circus@30.2.0:
+ resolution: {integrity: sha512-Fh0096NC3ZkFx05EP2OXCxJAREVxj1BcW/i6EWqqymcgYKWjyyDpral3fMxVcHXg6oZM7iULer9wGRFvfpl+Tg==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-cli@30.2.0:
+ resolution: {integrity: sha512-Os9ukIvADX/A9sLt6Zse3+nmHtHaE6hqOsjQtNiugFTbKRHYIYtZXNGNK9NChseXy7djFPjndX1tL0sCTlfpAA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ hasBin: true
+ peerDependencies:
+ node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
+ peerDependenciesMeta:
+ node-notifier:
+ optional: true
+
+ jest-config@30.2.0:
+ resolution: {integrity: sha512-g4WkyzFQVWHtu6uqGmQR4CQxz/CH3yDSlhzXMWzNjDx843gYjReZnMRanjRCq5XZFuQrGDxgUaiYWE8BRfVckA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ peerDependencies:
+ '@types/node': '*'
+ esbuild-register: '>=3.4.0'
+ ts-node: '>=9.0.0'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ esbuild-register:
+ optional: true
+ ts-node:
+ optional: true
+
+ jest-diff@29.7.0:
+ resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-diff@30.2.0:
+ resolution: {integrity: sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-docblock@30.2.0:
+ resolution: {integrity: sha512-tR/FFgZKS1CXluOQzZvNH3+0z9jXr3ldGSD8bhyuxvlVUwbeLOGynkunvlTMxchC5urrKndYiwCFC0DLVjpOCA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-each@30.2.0:
+ resolution: {integrity: sha512-lpWlJlM7bCUf1mfmuqTA8+j2lNURW9eNafOy99knBM01i5CQeY5UH1vZjgT9071nDJac1M4XsbyI44oNOdhlDQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-environment-jsdom@30.2.0:
+ resolution: {integrity: sha512-zbBTiqr2Vl78pKp/laGBREYzbZx9ZtqPjOK4++lL4BNDhxRnahg51HtoDrk9/VjIy9IthNEWdKVd7H5bqBhiWQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ peerDependencies:
+ canvas: ^3.0.0
+ peerDependenciesMeta:
+ canvas:
+ optional: true
+
+ jest-environment-node@30.2.0:
+ resolution: {integrity: sha512-ElU8v92QJ9UrYsKrxDIKCxu6PfNj4Hdcktcn0JX12zqNdqWHB0N+hwOnnBBXvjLd2vApZtuLUGs1QSY+MsXoNA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-extended@6.0.0:
+ resolution: {integrity: sha512-SM249N/q33YQ9XE8E06qZSnFuuV4GQFx7WrrmIj4wQUAP43jAo6budLT482jdBhf8ASwUiEEfJNjej0UusYs5A==}
+ engines: {node: ^18.12.0 || ^20.9.0 || ^22.11.0 || >=23.0.0}
+ peerDependencies:
+ jest: '>=27.2.5'
+ typescript: '>=5.0.0'
+ peerDependenciesMeta:
+ jest:
+ optional: true
+
+ jest-get-type@29.6.3:
+ resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-haste-map@30.2.0:
+ resolution: {integrity: sha512-sQA/jCb9kNt+neM0anSj6eZhLZUIhQgwDt7cPGjumgLM4rXsfb9kpnlacmvZz3Q5tb80nS+oG/if+NBKrHC+Xw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-leak-detector@30.2.0:
+ resolution: {integrity: sha512-M6jKAjyzjHG0SrQgwhgZGy9hFazcudwCNovY/9HPIicmNSBuockPSedAP9vlPK6ONFJ1zfyH/M2/YYJxOz5cdQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-matcher-utils@30.2.0:
+ resolution: {integrity: sha512-dQ94Nq4dbzmUWkQ0ANAWS9tBRfqCrn0bV9AMYdOi/MHW726xn7eQmMeRTpX2ViC00bpNaWXq+7o4lIQ3AX13Hg==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-message-util@30.2.0:
+ resolution: {integrity: sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-mock@30.2.0:
+ resolution: {integrity: sha512-JNNNl2rj4b5ICpmAcq+WbLH83XswjPbjH4T7yvGzfAGCPh1rw+xVNbtk+FnRslvt9lkCcdn9i1oAoKUuFsOxRw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-pnp-resolver@1.2.3:
+ resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==}
+ engines: {node: '>=6'}
+ peerDependencies:
+ jest-resolve: '*'
+ peerDependenciesMeta:
+ jest-resolve:
+ optional: true
+
+ jest-regex-util@30.0.1:
+ resolution: {integrity: sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-resolve-dependencies@30.2.0:
+ resolution: {integrity: sha512-xTOIGug/0RmIe3mmCqCT95yO0vj6JURrn1TKWlNbhiAefJRWINNPgwVkrVgt/YaerPzY3iItufd80v3lOrFJ2w==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-resolve@30.2.0:
+ resolution: {integrity: sha512-TCrHSxPlx3tBY3hWNtRQKbtgLhsXa1WmbJEqBlTBrGafd5fiQFByy2GNCEoGR+Tns8d15GaL9cxEzKOO3GEb2A==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-runner@30.2.0:
+ resolution: {integrity: sha512-PqvZ2B2XEyPEbclp+gV6KO/F1FIFSbIwewRgmROCMBo/aZ6J1w8Qypoj2pEOcg3G2HzLlaP6VUtvwCI8dM3oqQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-runtime@30.2.0:
+ resolution: {integrity: sha512-p1+GVX/PJqTucvsmERPMgCPvQJpFt4hFbM+VN3n8TMo47decMUcJbt+rgzwrEme0MQUA/R+1de2axftTHkKckg==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-snapshot@30.2.0:
+ resolution: {integrity: sha512-5WEtTy2jXPFypadKNpbNkZ72puZCa6UjSr/7djeecHWOu7iYhSXSnHScT8wBz3Rn8Ena5d5RYRcsyKIeqG1IyA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-util@30.2.0:
+ resolution: {integrity: sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-validate@30.2.0:
+ resolution: {integrity: sha512-FBGWi7dP2hpdi8nBoWxSsLvBFewKAg0+uSQwBaof4Y4DPgBabXgpSYC5/lR7VmnIlSpASmCi/ntRWPbv7089Pw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-watcher@30.2.0:
+ resolution: {integrity: sha512-PYxa28dxJ9g777pGm/7PrbnMeA0Jr7osHP9bS7eJy9DuAjMgdGtxgf0uKMyoIsTWAkIbUW5hSDdJ3urmgXBqxg==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-worker@30.2.0:
+ resolution: {integrity: sha512-0Q4Uk8WF7BUwqXHuAjc23vmopWJw5WH7w2tqBoUOZpOjW/ZnR44GXXd1r82RvnmI2GZge3ivrYXk/BE2+VtW2g==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest@30.2.0:
+ resolution: {integrity: sha512-F26gjC0yWN8uAA5m5Ss8ZQf5nDHWGlN/xWZIh8S5SRbsEKBovwZhxGd6LJlbZYxBgCYOtreSUyb8hpXyGC5O4A==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ hasBin: true
+ peerDependencies:
+ node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
+ peerDependenciesMeta:
+ node-notifier:
+ optional: true
+
+ js-tokens@4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+
+ js-tokens@9.0.1:
+ resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==}
+
+ js-yaml@3.14.2:
+ resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==}
+ hasBin: true
+
+ js-yaml@4.1.1:
+ resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==}
+ hasBin: true
+
+ jsdom@26.1.0:
+ resolution: {integrity: sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ canvas: ^3.0.0
+ peerDependenciesMeta:
+ canvas:
+ optional: true
+
+ jsesc@3.1.0:
+ resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ json-buffer@3.0.1:
+ resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+
+ json-parse-better-errors@1.0.2:
+ resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==}
+
+ json-parse-even-better-errors@2.3.1:
+ resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
+
+ json-schema-traverse@0.4.1:
+ resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+
+ json-stable-stringify-without-jsonify@1.0.1:
+ resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+
+ json5@2.2.3:
+ resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ jsonfile@6.2.0:
+ resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==}
+
+ keyv@4.5.4:
+ resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+
+ kleur@3.0.3:
+ resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
+ engines: {node: '>=6'}
+
+ leven@3.1.0:
+ resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==}
+ engines: {node: '>=6'}
+
+ levn@0.4.1:
+ resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
+ engines: {node: '>= 0.8.0'}
+
+ lines-and-columns@1.2.4:
+ resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
+
+ lint-staged@16.2.7:
+ resolution: {integrity: sha512-lDIj4RnYmK7/kXMya+qJsmkRFkGolciXjrsZ6PC25GdTfWOAWetR0ZbsNXRAj1EHHImRSalc+whZFg56F5DVow==}
+ engines: {node: '>=20.17'}
+ hasBin: true
+
+ listr2@9.0.5:
+ resolution: {integrity: sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==}
+ engines: {node: '>=20.0.0'}
+
+ load-json-file@4.0.0:
+ resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==}
+ engines: {node: '>=4'}
+
+ locate-path@5.0.0:
+ resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
+ engines: {node: '>=8'}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ locate-path@7.2.0:
+ resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ lodash.debounce@4.0.8:
+ resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
+
+ lodash.merge@4.6.2:
+ resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
+
+ lodash@4.17.21:
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+
+ log-update@6.1.0:
+ resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==}
+ engines: {node: '>=18'}
+
+ loupe@3.2.1:
+ resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==}
+
+ lower-case@2.0.2:
+ resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
+
+ lru-cache@10.4.3:
+ resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
+
+ lru-cache@5.1.1:
+ resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+
+ lz-string@1.5.0:
+ resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==}
+ hasBin: true
+
+ magic-string@0.30.21:
+ resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
+
+ magicast@0.3.5:
+ resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==}
+
+ make-dir@4.0.0:
+ resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
+ engines: {node: '>=10'}
+
+ makeerror@1.0.12:
+ resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==}
+
+ math-intrinsics@1.1.0:
+ resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
+ engines: {node: '>= 0.4'}
+
+ memorystream@0.3.1:
+ resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==}
+ engines: {node: '>= 0.10.0'}
+
+ merge-stream@2.0.0:
+ resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
+
+ micromatch@4.0.8:
+ resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
+ engines: {node: '>=8.6'}
+
+ mimic-fn@2.1.0:
+ resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
+ engines: {node: '>=6'}
+
+ mimic-function@5.0.1:
+ resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==}
+ engines: {node: '>=18'}
+
+ min-indent@1.0.1:
+ resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
+ engines: {node: '>=4'}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@9.0.5:
+ resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ minipass@7.1.2:
+ resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ mrmime@2.0.1:
+ resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==}
+ engines: {node: '>=10'}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nano-spawn@2.0.0:
+ resolution: {integrity: sha512-tacvGzUY5o2D8CBh2rrwxyNojUsZNU2zjNTzKQrkgGJQTbGAfArVWXSKMBokBeeg6C7OLRGUEyoFlYbfeWQIqw==}
+ engines: {node: '>=20.17'}
+
+ nanoid@3.3.11:
+ resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ napi-postinstall@0.3.4:
+ resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==}
+ engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
+ hasBin: true
+
+ natural-compare@1.4.0:
+ resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+
+ nice-try@1.0.5:
+ resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==}
+
+ no-case@3.0.4:
+ resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
+
+ node-int64@0.4.0:
+ resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==}
+
+ node-releases@2.0.27:
+ resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==}
+
+ normalize-package-data@2.5.0:
+ resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ npm-run-all@4.1.5:
+ resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==}
+ engines: {node: '>= 4'}
+ hasBin: true
+
+ npm-run-path@4.0.1:
+ resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
+ engines: {node: '>=8'}
+
+ nwsapi@2.2.23:
+ resolution: {integrity: sha512-7wfH4sLbt4M0gCDzGE6vzQBo0bfTKjU7Sfpqy/7gs1qBfYz2vEJH6vXcBKpO3+6Yu1telwd0t9HpyOoLEQQbIQ==}
+
+ object-inspect@1.13.4:
+ resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
+ engines: {node: '>= 0.4'}
+
+ object-keys@1.1.1:
+ resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
+ engines: {node: '>= 0.4'}
+
+ object.assign@4.1.7:
+ resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==}
+ engines: {node: '>= 0.4'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ onetime@5.1.2:
+ resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
+ engines: {node: '>=6'}
+
+ onetime@7.0.0:
+ resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==}
+ engines: {node: '>=18'}
+
+ open@8.4.2:
+ resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
+ engines: {node: '>=12'}
+
+ optionator@0.9.4:
+ resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
+ engines: {node: '>= 0.8.0'}
+
+ own-keys@1.0.1:
+ resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==}
+ engines: {node: '>= 0.4'}
+
+ p-limit@2.3.0:
+ resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
+ engines: {node: '>=6'}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-limit@4.0.0:
+ resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ p-locate@4.1.0:
+ resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
+ engines: {node: '>=8'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ p-locate@6.0.0:
+ resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ p-try@2.2.0:
+ resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
+ engines: {node: '>=6'}
+
+ package-json-from-dist@1.0.1:
+ resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
+
+ parent-module@1.0.1:
+ resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
+ engines: {node: '>=6'}
+
+ parse-json@4.0.0:
+ resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==}
+ engines: {node: '>=4'}
+
+ parse-json@5.2.0:
+ resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
+ engines: {node: '>=8'}
+
+ parse5@7.3.0:
+ resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-exists@5.0.0:
+ resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ path-key@2.0.1:
+ resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==}
+ engines: {node: '>=4'}
+
+ path-key@3.1.1:
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+ engines: {node: '>=8'}
+
+ path-parse@1.0.7:
+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+
+ path-scurry@1.11.1:
+ resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
+ engines: {node: '>=16 || 14 >=14.18'}
+
+ path-type@3.0.0:
+ resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==}
+ engines: {node: '>=4'}
+
+ path-type@4.0.0:
+ resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
+ engines: {node: '>=8'}
+
+ pathe@2.0.3:
+ resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
+
+ pathval@2.0.1:
+ resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==}
+ engines: {node: '>= 14.16'}
+
+ picocolors@1.1.1:
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ picomatch@4.0.3:
+ resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
+ engines: {node: '>=12'}
+
+ pidtree@0.3.1:
+ resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==}
+ engines: {node: '>=0.10'}
+ hasBin: true
+
+ pidtree@0.6.0:
+ resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==}
+ engines: {node: '>=0.10'}
+ hasBin: true
+
+ pify@3.0.0:
+ resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==}
+ engines: {node: '>=4'}
+
+ pirates@4.0.7:
+ resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==}
+ engines: {node: '>= 6'}
+
+ pkg-dir@4.2.0:
+ resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==}
+ engines: {node: '>=8'}
+
+ playwright-core@1.57.0:
+ resolution: {integrity: sha512-agTcKlMw/mjBWOnD6kFZttAAGHgi/Nw0CZ2o6JqWSbMlI219lAFLZZCyqByTsvVAJq5XA5H8cA6PrvBRpBWEuQ==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ playwright@1.57.0:
+ resolution: {integrity: sha512-ilYQj1s8sr2ppEJ2YVadYBN0Mb3mdo9J0wQ+UuDhzYqURwSoW4n1Xs5vs7ORwgDGmyEh33tRMeS8KhdkMoLXQw==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ possible-typed-array-names@1.1.0:
+ resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
+ engines: {node: '>= 0.4'}
+
+ postcss-value-parser@4.2.0:
+ resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
+
+ postcss@8.4.49:
+ resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==}
+ engines: {node: ^10 || ^12 || >=14}
+
+ postcss@8.5.6:
+ resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
+ engines: {node: ^10 || ^12 || >=14}
+
+ prelude-ls@1.2.1:
+ resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
+ engines: {node: '>= 0.8.0'}
+
+ prettier@2.8.8:
+ resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+
+ pretty-format@27.5.1:
+ resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==}
+ engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
+
+ pretty-format@29.7.0:
+ resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ pretty-format@30.2.0:
+ resolution: {integrity: sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ prompts@2.4.2:
+ resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
+ engines: {node: '>= 6'}
+
+ punycode@2.3.1:
+ resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
+ engines: {node: '>=6'}
+
+ pure-rand@7.0.1:
+ resolution: {integrity: sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==}
+
+ react-docgen-typescript@2.4.0:
+ resolution: {integrity: sha512-ZtAp5XTO5HRzQctjPU0ybY0RRCQO19X/8fxn3w7y2VVTUbGHDKULPTL4ky3vB05euSgG5NpALhEhDPvQ56wvXg==}
+ peerDependencies:
+ typescript: '>= 4.3.x'
+
+ react-docgen@8.0.2:
+ resolution: {integrity: sha512-+NRMYs2DyTP4/tqWz371Oo50JqmWltR1h2gcdgUMAWZJIAvrd0/SqlCfx7tpzpl/s36rzw6qH2MjoNrxtRNYhA==}
+ engines: {node: ^20.9.0 || >=22}
+
+ react-dom@19.2.3:
+ resolution: {integrity: sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==}
+ peerDependencies:
+ react: ^19.2.3
+
+ react-is@17.0.2:
+ resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==}
+
+ react-is@18.3.1:
+ resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
+
+ react-refresh@0.17.0:
+ resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==}
+ engines: {node: '>=0.10.0'}
+
+ react@19.2.3:
+ resolution: {integrity: sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==}
+ engines: {node: '>=0.10.0'}
+
+ read-pkg@3.0.0:
+ resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==}
+ engines: {node: '>=4'}
+
+ recast@0.23.11:
+ resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==}
+ engines: {node: '>= 4'}
+
+ redent@3.0.0:
+ resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==}
+ engines: {node: '>=8'}
+
+ reflect.getprototypeof@1.0.10:
+ resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==}
+ engines: {node: '>= 0.4'}
+
+ regenerate-unicode-properties@10.2.2:
+ resolution: {integrity: sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==}
+ engines: {node: '>=4'}
+
+ regenerate@1.4.2:
+ resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==}
+
+ regexp.prototype.flags@1.5.4:
+ resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==}
+ engines: {node: '>= 0.4'}
+
+ regexpu-core@6.4.0:
+ resolution: {integrity: sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==}
+ engines: {node: '>=4'}
+
+ regjsgen@0.8.0:
+ resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==}
+
+ regjsparser@0.13.0:
+ resolution: {integrity: sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==}
+ hasBin: true
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ resolve-cwd@3.0.0:
+ resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==}
+ engines: {node: '>=8'}
+
+ resolve-from@4.0.0:
+ resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
+ engines: {node: '>=4'}
+
+ resolve-from@5.0.0:
+ resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
+ engines: {node: '>=8'}
+
+ resolve@1.22.11:
+ resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==}
+ engines: {node: '>= 0.4'}
+ hasBin: true
+
+ restore-cursor@5.1.0:
+ resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==}
+ engines: {node: '>=18'}
+
+ rfdc@1.4.1:
+ resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
+
+ rimraf@5.0.10:
+ resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==}
+ hasBin: true
+
+ rollup@4.54.0:
+ resolution: {integrity: sha512-3nk8Y3a9Ea8szgKhinMlGMhGMw89mqule3KWczxhIzqudyHdCIOHw8WJlj/r329fACjKLEh13ZSk7oE22kyeIw==}
+ engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+ hasBin: true
+
+ rrweb-cssom@0.8.0:
+ resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==}
+
+ safe-array-concat@1.1.3:
+ resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==}
+ engines: {node: '>=0.4'}
+
+ safe-push-apply@1.0.0:
+ resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==}
+ engines: {node: '>= 0.4'}
+
+ safe-regex-test@1.1.0:
+ resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
+ engines: {node: '>= 0.4'}
+
+ safer-buffer@2.1.2:
+ resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+
+ saxes@6.0.0:
+ resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==}
+ engines: {node: '>=v12.22.7'}
+
+ scheduler@0.27.0:
+ resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==}
+
+ semver@5.7.2:
+ resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==}
+ hasBin: true
+
+ semver@6.3.1:
+ resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
+ hasBin: true
+
+ semver@7.7.3:
+ resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ set-function-length@1.2.2:
+ resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
+ engines: {node: '>= 0.4'}
+
+ set-function-name@2.0.2:
+ resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==}
+ engines: {node: '>= 0.4'}
+
+ set-proto@1.0.0:
+ resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==}
+ engines: {node: '>= 0.4'}
+
+ shallowequal@1.1.0:
+ resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==}
+
+ shebang-command@1.2.0:
+ resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==}
+ engines: {node: '>=0.10.0'}
+
+ shebang-command@2.0.0:
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+ engines: {node: '>=8'}
+
+ shebang-regex@1.0.0:
+ resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==}
+ engines: {node: '>=0.10.0'}
+
+ shebang-regex@3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+ engines: {node: '>=8'}
+
+ shell-quote@1.8.3:
+ resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==}
+ engines: {node: '>= 0.4'}
+
+ side-channel-list@1.0.0:
+ resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
+ engines: {node: '>= 0.4'}
+
+ side-channel-map@1.0.1:
+ resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==}
+ engines: {node: '>= 0.4'}
+
+ side-channel-weakmap@1.0.2:
+ resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==}
+ engines: {node: '>= 0.4'}
+
+ side-channel@1.1.0:
+ resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
+ engines: {node: '>= 0.4'}
+
+ siginfo@2.0.0:
+ resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
+
+ signal-exit@3.0.7:
+ resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
+
+ signal-exit@4.1.0:
+ resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
+ engines: {node: '>=14'}
+
+ sirv@3.0.2:
+ resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==}
+ engines: {node: '>=18'}
+
+ sisteransi@1.0.5:
+ resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
+
+ slash@3.0.0:
+ resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
+ engines: {node: '>=8'}
+
+ slice-ansi@7.1.2:
+ resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==}
+ engines: {node: '>=18'}
+
+ snake-case@3.0.4:
+ resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==}
+
+ source-map-js@1.2.1:
+ resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
+ engines: {node: '>=0.10.0'}
+
+ source-map-support@0.5.13:
+ resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ spdx-correct@3.2.0:
+ resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==}
+
+ spdx-exceptions@2.5.0:
+ resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==}
+
+ spdx-expression-parse@3.0.1:
+ resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==}
+
+ spdx-license-ids@3.0.22:
+ resolution: {integrity: sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==}
+
+ sprintf-js@1.0.3:
+ resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
+
+ stack-utils@2.0.6:
+ resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==}
+ engines: {node: '>=10'}
+
+ stackback@0.0.2:
+ resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
+
+ std-env@3.10.0:
+ resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==}
+
+ stop-iteration-iterator@1.1.0:
+ resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==}
+ engines: {node: '>= 0.4'}
+
+ storybook@9.1.17:
+ resolution: {integrity: sha512-kfr6kxQAjA96ADlH6FMALJwJ+eM80UqXy106yVHNgdsAP/CdzkkicglRAhZAvUycXK9AeadF6KZ00CWLtVMN4w==}
+ hasBin: true
+ peerDependencies:
+ prettier: ^2 || ^3
+ peerDependenciesMeta:
+ prettier:
+ optional: true
+
+ string-argv@0.3.2:
+ resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
+ engines: {node: '>=0.6.19'}
+
+ string-length@4.0.2:
+ resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==}
+ engines: {node: '>=10'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ string-width@5.1.2:
+ resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
+ engines: {node: '>=12'}
+
+ string-width@7.2.0:
+ resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
+ engines: {node: '>=18'}
+
+ string-width@8.1.0:
+ resolution: {integrity: sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==}
+ engines: {node: '>=20'}
+
+ string.prototype.padend@3.1.6:
+ resolution: {integrity: sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==}
+ engines: {node: '>= 0.4'}
+
+ string.prototype.trim@1.2.10:
+ resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==}
+ engines: {node: '>= 0.4'}
+
+ string.prototype.trimend@1.0.9:
+ resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==}
+ engines: {node: '>= 0.4'}
+
+ string.prototype.trimstart@1.0.8:
+ resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==}
+ engines: {node: '>= 0.4'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-ansi@7.1.2:
+ resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==}
+ engines: {node: '>=12'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-bom@4.0.0:
+ resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==}
+ engines: {node: '>=8'}
+
+ strip-final-newline@2.0.0:
+ resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
+ engines: {node: '>=6'}
+
+ strip-indent@3.0.0:
+ resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
+ engines: {node: '>=8'}
+
+ strip-indent@4.1.1:
+ resolution: {integrity: sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==}
+ engines: {node: '>=12'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ strip-literal@3.1.0:
+ resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==}
+
+ styled-components@6.1.19:
+ resolution: {integrity: sha512-1v/e3Dl1BknC37cXMhwGomhO8AkYmN41CqyX9xhUDxry1ns3BFQy2lLDRQXJRdVVWB9OHemv/53xaStimvWyuA==}
+ engines: {node: '>= 16'}
+ peerDependencies:
+ react: '>= 16.8.0'
+ react-dom: '>= 16.8.0'
+
+ stylis@4.3.2:
+ resolution: {integrity: sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==}
+
+ supports-color@5.5.0:
+ resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
+ engines: {node: '>=4'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ supports-preserve-symlinks-flag@1.0.0:
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+ engines: {node: '>= 0.4'}
+
+ svg-parser@2.0.4:
+ resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==}
+
+ symbol-tree@3.2.4:
+ resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
+
+ synckit@0.11.11:
+ resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+
+ test-exclude@6.0.0:
+ resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==}
+ engines: {node: '>=8'}
+
+ test-exclude@7.0.1:
+ resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==}
+ engines: {node: '>=18'}
+
+ tiny-invariant@1.3.3:
+ resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
+
+ tinybench@2.9.0:
+ resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
+
+ tinyexec@0.3.2:
+ resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
+
+ tinyglobby@0.2.15:
+ resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
+ engines: {node: '>=12.0.0'}
+
+ tinypool@1.1.1:
+ resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+
+ tinyrainbow@2.0.0:
+ resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==}
+ engines: {node: '>=14.0.0'}
+
+ tinyspy@4.0.4:
+ resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==}
+ engines: {node: '>=14.0.0'}
+
+ tldts-core@6.1.86:
+ resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==}
+
+ tldts@6.1.86:
+ resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==}
+ hasBin: true
+
+ tmpl@1.0.5:
+ resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ totalist@3.0.1:
+ resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
+ engines: {node: '>=6'}
+
+ tough-cookie@5.1.2:
+ resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==}
+ engines: {node: '>=16'}
+
+ tr46@5.1.1:
+ resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==}
+ engines: {node: '>=18'}
+
+ ts-api-utils@2.1.0:
+ resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==}
+ engines: {node: '>=18.12'}
+ peerDependencies:
+ typescript: '>=4.8.4'
+
+ ts-dedent@2.2.0:
+ resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==}
+ engines: {node: '>=6.10'}
+
+ tsconfig-paths@4.2.0:
+ resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==}
+ engines: {node: '>=6'}
+
+ tslib@2.6.2:
+ resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+ type-check@0.4.0:
+ resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
+ engines: {node: '>= 0.8.0'}
+
+ type-detect@4.0.8:
+ resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
+ engines: {node: '>=4'}
+
+ type-fest@0.21.3:
+ resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
+ engines: {node: '>=10'}
+
+ typed-array-buffer@1.0.3:
+ resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==}
+ engines: {node: '>= 0.4'}
+
+ typed-array-byte-length@1.0.3:
+ resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==}
+ engines: {node: '>= 0.4'}
+
+ typed-array-byte-offset@1.0.4:
+ resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==}
+ engines: {node: '>= 0.4'}
+
+ typed-array-length@1.0.7:
+ resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==}
+ engines: {node: '>= 0.4'}
+
+ typescript-eslint@8.50.0:
+ resolution: {integrity: sha512-Q1/6yNUmCpH94fbgMUMg2/BSAr/6U7GBk61kZTv1/asghQOWOjTlp9K8mixS5NcJmm2creY+UFfGeW/+OcA64A==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <6.0.0'
+
+ typescript@5.8.3:
+ resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ unbox-primitive@1.1.0:
+ resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==}
+ engines: {node: '>= 0.4'}
+
+ undici-types@7.16.0:
+ resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==}
+
+ unicode-canonical-property-names-ecmascript@2.0.1:
+ resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==}
+ engines: {node: '>=4'}
+
+ unicode-match-property-ecmascript@2.0.0:
+ resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==}
+ engines: {node: '>=4'}
+
+ unicode-match-property-value-ecmascript@2.2.1:
+ resolution: {integrity: sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==}
+ engines: {node: '>=4'}
+
+ unicode-property-aliases-ecmascript@2.2.0:
+ resolution: {integrity: sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==}
+ engines: {node: '>=4'}
+
+ unicorn-magic@0.1.0:
+ resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==}
+ engines: {node: '>=18'}
+
+ universalify@2.0.1:
+ resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
+ engines: {node: '>= 10.0.0'}
+
+ unplugin@1.16.1:
+ resolution: {integrity: sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==}
+ engines: {node: '>=14.0.0'}
+
+ unrs-resolver@1.11.1:
+ resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==}
+
+ update-browserslist-db@1.2.3:
+ resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+
+ uri-js@4.4.1:
+ resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+
+ v8-to-istanbul@9.3.0:
+ resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==}
+ engines: {node: '>=10.12.0'}
+
+ validate-npm-package-license@3.0.4:
+ resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
+
+ vite-node@3.2.4:
+ resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==}
+ engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
+ hasBin: true
+
+ vite-plugin-svgr@4.5.0:
+ resolution: {integrity: sha512-W+uoSpmVkSmNOGPSsDCWVW/DDAyv+9fap9AZXBvWiQqrboJ08j2vh0tFxTD/LjwqwAd3yYSVJgm54S/1GhbdnA==}
+ peerDependencies:
+ vite: '>=2.6.0'
+
+ vite@7.3.0:
+ resolution: {integrity: sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^20.19.0 || >=22.12.0
+ jiti: '>=1.21.0'
+ less: ^4.0.0
+ lightningcss: ^1.21.0
+ sass: ^1.70.0
+ sass-embedded: ^1.70.0
+ stylus: '>=0.54.8'
+ sugarss: ^5.0.0
+ terser: ^5.16.0
+ tsx: ^4.8.1
+ yaml: ^2.4.2
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ jiti:
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+ tsx:
+ optional: true
+ yaml:
+ optional: true
+
+ vitest@3.2.4:
+ resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==}
+ engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
+ hasBin: true
+ peerDependencies:
+ '@edge-runtime/vm': '*'
+ '@types/debug': ^4.1.12
+ '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
+ '@vitest/browser': 3.2.4
+ '@vitest/ui': 3.2.4
+ happy-dom: '*'
+ jsdom: '*'
+ peerDependenciesMeta:
+ '@edge-runtime/vm':
+ optional: true
+ '@types/debug':
+ optional: true
+ '@types/node':
+ optional: true
+ '@vitest/browser':
+ optional: true
+ '@vitest/ui':
+ optional: true
+ happy-dom:
+ optional: true
+ jsdom:
+ optional: true
+
+ w3c-xmlserializer@5.0.0:
+ resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==}
+ engines: {node: '>=18'}
+
+ walker@1.0.8:
+ resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==}
+
+ webidl-conversions@7.0.0:
+ resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
+ engines: {node: '>=12'}
+
+ webpack-virtual-modules@0.6.2:
+ resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
+
+ whatwg-encoding@3.1.1:
+ resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==}
+ engines: {node: '>=18'}
+
+ whatwg-mimetype@4.0.0:
+ resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==}
+ engines: {node: '>=18'}
+
+ whatwg-url@14.2.0:
+ resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==}
+ engines: {node: '>=18'}
+
+ which-boxed-primitive@1.1.1:
+ resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==}
+ engines: {node: '>= 0.4'}
+
+ which-builtin-type@1.2.1:
+ resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==}
+ engines: {node: '>= 0.4'}
+
+ which-collection@1.0.2:
+ resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==}
+ engines: {node: '>= 0.4'}
+
+ which-typed-array@1.1.19:
+ resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==}
+ engines: {node: '>= 0.4'}
+
+ which@1.3.1:
+ resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==}
+ hasBin: true
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ why-is-node-running@2.3.0:
+ resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ word-wrap@1.2.5:
+ resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
+ engines: {node: '>=0.10.0'}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrap-ansi@8.1.0:
+ resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
+ engines: {node: '>=12'}
+
+ wrap-ansi@9.0.2:
+ resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==}
+ engines: {node: '>=18'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ write-file-atomic@5.0.1:
+ resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ ws@8.18.3:
+ resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ xml-name-validator@5.0.0:
+ resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==}
+ engines: {node: '>=18'}
+
+ xmlchars@2.2.0:
+ resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==}
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yallist@3.1.1:
+ resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+
+ yaml@2.8.2:
+ resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==}
+ engines: {node: '>= 14.6'}
+ hasBin: true
+
+ yargs-parser@21.1.1:
+ resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
+ engines: {node: '>=12'}
+
+ yargs@17.7.2:
+ resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
+ engines: {node: '>=12'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+ yocto-queue@1.2.2:
+ resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==}
+ engines: {node: '>=12.20'}
+
+snapshots:
+
+ '@adobe/css-tools@4.4.4': {}
+
+ '@ampproject/remapping@2.3.0':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@asamuzakjp/css-color@3.2.0':
+ dependencies:
+ '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
+ '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
+ '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
+ '@csstools/css-tokenizer': 3.0.4
+ lru-cache: 10.4.3
+
+ '@babel/code-frame@7.27.1':
+ dependencies:
+ '@babel/helper-validator-identifier': 7.28.5
+ js-tokens: 4.0.0
+ picocolors: 1.1.1
+
+ '@babel/compat-data@7.28.5': {}
+
+ '@babel/core@7.28.5':
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ '@babel/generator': 7.28.5
+ '@babel/helper-compilation-targets': 7.27.2
+ '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5)
+ '@babel/helpers': 7.28.4
+ '@babel/parser': 7.28.5
+ '@babel/template': 7.27.2
+ '@babel/traverse': 7.28.5
+ '@babel/types': 7.28.5
+ '@jridgewell/remapping': 2.3.5
+ convert-source-map: 2.0.0
+ debug: 4.4.3
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/generator@7.28.5':
+ dependencies:
+ '@babel/parser': 7.28.5
+ '@babel/types': 7.28.5
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+ jsesc: 3.1.0
+
+ '@babel/helper-annotate-as-pure@7.27.3':
+ dependencies:
+ '@babel/types': 7.28.5
+
+ '@babel/helper-compilation-targets@7.27.2':
+ dependencies:
+ '@babel/compat-data': 7.28.5
+ '@babel/helper-validator-option': 7.27.1
+ browserslist: 4.28.1
+ lru-cache: 5.1.1
+ semver: 6.3.1
+
+ '@babel/helper-create-class-features-plugin@7.28.5(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-annotate-as-pure': 7.27.3
+ '@babel/helper-member-expression-to-functions': 7.28.5
+ '@babel/helper-optimise-call-expression': 7.27.1
+ '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.5)
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
+ '@babel/traverse': 7.28.5
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-annotate-as-pure': 7.27.3
+ regexpu-core: 6.4.0
+ semver: 6.3.1
+
+ '@babel/helper-define-polyfill-provider@0.6.5(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-compilation-targets': 7.27.2
+ '@babel/helper-plugin-utils': 7.27.1
+ debug: 4.4.3
+ lodash.debounce: 4.0.8
+ resolve: 1.22.11
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-globals@7.28.0': {}
+
+ '@babel/helper-member-expression-to-functions@7.28.5':
+ dependencies:
+ '@babel/traverse': 7.28.5
+ '@babel/types': 7.28.5
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-module-imports@7.27.1':
+ dependencies:
+ '@babel/traverse': 7.28.5
+ '@babel/types': 7.28.5
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-module-imports': 7.27.1
+ '@babel/helper-validator-identifier': 7.28.5
+ '@babel/traverse': 7.28.5
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-optimise-call-expression@7.27.1':
+ dependencies:
+ '@babel/types': 7.28.5
+
+ '@babel/helper-plugin-utils@7.27.1': {}
+
+ '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-annotate-as-pure': 7.27.3
+ '@babel/helper-wrap-function': 7.28.3
+ '@babel/traverse': 7.28.5
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-member-expression-to-functions': 7.28.5
+ '@babel/helper-optimise-call-expression': 7.27.1
+ '@babel/traverse': 7.28.5
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-skip-transparent-expression-wrappers@7.27.1':
+ dependencies:
+ '@babel/traverse': 7.28.5
+ '@babel/types': 7.28.5
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-string-parser@7.27.1': {}
+
+ '@babel/helper-validator-identifier@7.28.5': {}
+
+ '@babel/helper-validator-option@7.27.1': {}
+
+ '@babel/helper-wrap-function@7.28.3':
+ dependencies:
+ '@babel/template': 7.27.2
+ '@babel/traverse': 7.28.5
+ '@babel/types': 7.28.5
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helpers@7.28.4':
+ dependencies:
+ '@babel/template': 7.27.2
+ '@babel/types': 7.28.5
+
+ '@babel/parser@7.28.5':
+ dependencies:
+ '@babel/types': 7.28.5
+
+ '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/traverse': 7.28.5
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
+ '@babel/plugin-transform-optional-chaining': 7.28.5(@babel/core@7.28.5)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/traverse': 7.28.5
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+
+ '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5)
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-async-generator-functions@7.28.0(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.5)
+ '@babel/traverse': 7.28.5
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-module-imports': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.5)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-block-scoping@7.28.5(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5)
+ '@babel/helper-plugin-utils': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-class-static-block@7.28.3(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5)
+ '@babel/helper-plugin-utils': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-classes@7.28.4(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-annotate-as-pure': 7.27.3
+ '@babel/helper-compilation-targets': 7.27.2
+ '@babel/helper-globals': 7.28.0
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.5)
+ '@babel/traverse': 7.28.5
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/template': 7.27.2
+
+ '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/traverse': 7.28.5
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5)
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5)
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-explicit-resource-management@7.28.0(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.5)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-exponentiation-operator@7.28.5(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-compilation-targets': 7.27.2
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/traverse': 7.28.5
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-literals@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-logical-assignment-operators@7.28.5(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5)
+ '@babel/helper-plugin-utils': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5)
+ '@babel/helper-plugin-utils': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-modules-systemjs@7.28.5(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5)
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-validator-identifier': 7.28.5
+ '@babel/traverse': 7.28.5
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5)
+ '@babel/helper-plugin-utils': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5)
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-object-rest-spread@7.28.4(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-compilation-targets': 7.27.2
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.5)
+ '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.5)
+ '@babel/traverse': 7.28.5
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.5)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-optional-chaining@7.28.5(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5)
+ '@babel/helper-plugin-utils': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-annotate-as-pure': 7.27.3
+ '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5)
+ '@babel/helper-plugin-utils': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-react-display-name@7.28.0(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.5)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-annotate-as-pure': 7.27.3
+ '@babel/helper-module-imports': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5)
+ '@babel/types': 7.28.5
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-annotate-as-pure': 7.27.3
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-regenerator@7.28.4(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5)
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-spread@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-typescript@7.28.5(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-annotate-as-pure': 7.27.3
+ '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5)
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
+ '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.5)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5)
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5)
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5)
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/preset-env@7.28.5(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/compat-data': 7.28.5
+ '@babel/core': 7.28.5
+ '@babel/helper-compilation-targets': 7.27.2
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-validator-option': 7.27.1
+ '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.28.5(@babel/core@7.28.5)
+ '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.3(@babel/core@7.28.5)
+ '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.5)
+ '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.28.5)
+ '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-async-generator-functions': 7.28.0(@babel/core@7.28.5)
+ '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-block-scoping': 7.28.5(@babel/core@7.28.5)
+ '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-class-static-block': 7.28.3(@babel/core@7.28.5)
+ '@babel/plugin-transform-classes': 7.28.4(@babel/core@7.28.5)
+ '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.5)
+ '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-explicit-resource-management': 7.28.0(@babel/core@7.28.5)
+ '@babel/plugin-transform-exponentiation-operator': 7.28.5(@babel/core@7.28.5)
+ '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-logical-assignment-operators': 7.28.5(@babel/core@7.28.5)
+ '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-modules-systemjs': 7.28.5(@babel/core@7.28.5)
+ '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-object-rest-spread': 7.28.4(@babel/core@7.28.5)
+ '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-optional-chaining': 7.28.5(@babel/core@7.28.5)
+ '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.5)
+ '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-regenerator': 7.28.4(@babel/core@7.28.5)
+ '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.28.5)
+ '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.28.5)
+ babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.5)
+ babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.5)
+ babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.5)
+ core-js-compat: 3.47.0
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/types': 7.28.5
+ esutils: 2.0.3
+
+ '@babel/preset-react@7.28.5(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-validator-option': 7.27.1
+ '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.28.5)
+ '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.28.5)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/preset-typescript@7.28.5(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-validator-option': 7.27.1
+ '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-typescript': 7.28.5(@babel/core@7.28.5)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/runtime@7.28.4': {}
+
+ '@babel/template@7.27.2':
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ '@babel/parser': 7.28.5
+ '@babel/types': 7.28.5
+
+ '@babel/traverse@7.28.5':
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ '@babel/generator': 7.28.5
+ '@babel/helper-globals': 7.28.0
+ '@babel/parser': 7.28.5
+ '@babel/template': 7.27.2
+ '@babel/types': 7.28.5
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/types@7.28.5':
+ dependencies:
+ '@babel/helper-string-parser': 7.27.1
+ '@babel/helper-validator-identifier': 7.28.5
+
+ '@bcoe/v8-coverage@0.2.3': {}
+
+ '@bcoe/v8-coverage@1.0.2': {}
+
+ '@chromatic-com/storybook@4.1.3(storybook@9.1.17(@testing-library/dom@10.4.1)(prettier@2.8.8)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2)))':
+ dependencies:
+ '@neoconfetti/react': 1.0.0
+ chromatic: 13.3.4
+ filesize: 10.1.6
+ jsonfile: 6.2.0
+ storybook: 9.1.17(@testing-library/dom@10.4.1)(prettier@2.8.8)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2))
+ strip-ansi: 7.1.2
+ transitivePeerDependencies:
+ - '@chromatic-com/cypress'
+ - '@chromatic-com/playwright'
+
+ '@csstools/color-helpers@5.1.0': {}
+
+ '@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)':
+ dependencies:
+ '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
+ '@csstools/css-tokenizer': 3.0.4
+
+ '@csstools/css-color-parser@3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)':
+ dependencies:
+ '@csstools/color-helpers': 5.1.0
+ '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
+ '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
+ '@csstools/css-tokenizer': 3.0.4
+
+ '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)':
+ dependencies:
+ '@csstools/css-tokenizer': 3.0.4
+
+ '@csstools/css-tokenizer@3.0.4': {}
+
+ '@emnapi/core@1.7.1':
+ dependencies:
+ '@emnapi/wasi-threads': 1.1.0
+ tslib: 2.8.1
+ optional: true
+
+ '@emnapi/runtime@1.7.1':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@emnapi/wasi-threads@1.1.0':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@emotion/is-prop-valid@1.2.2':
+ dependencies:
+ '@emotion/memoize': 0.8.1
+
+ '@emotion/memoize@0.8.1': {}
+
+ '@emotion/unitless@0.8.1': {}
+
+ '@esbuild/aix-ppc64@0.25.12':
+ optional: true
+
+ '@esbuild/aix-ppc64@0.27.2':
+ optional: true
+
+ '@esbuild/android-arm64@0.25.12':
+ optional: true
+
+ '@esbuild/android-arm64@0.27.2':
+ optional: true
+
+ '@esbuild/android-arm@0.25.12':
+ optional: true
+
+ '@esbuild/android-arm@0.27.2':
+ optional: true
+
+ '@esbuild/android-x64@0.25.12':
+ optional: true
+
+ '@esbuild/android-x64@0.27.2':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.25.12':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.27.2':
+ optional: true
+
+ '@esbuild/darwin-x64@0.25.12':
+ optional: true
+
+ '@esbuild/darwin-x64@0.27.2':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.25.12':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.27.2':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.25.12':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.27.2':
+ optional: true
+
+ '@esbuild/linux-arm64@0.25.12':
+ optional: true
+
+ '@esbuild/linux-arm64@0.27.2':
+ optional: true
+
+ '@esbuild/linux-arm@0.25.12':
+ optional: true
+
+ '@esbuild/linux-arm@0.27.2':
+ optional: true
+
+ '@esbuild/linux-ia32@0.25.12':
+ optional: true
+
+ '@esbuild/linux-ia32@0.27.2':
+ optional: true
+
+ '@esbuild/linux-loong64@0.25.12':
+ optional: true
+
+ '@esbuild/linux-loong64@0.27.2':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.25.12':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.27.2':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.25.12':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.27.2':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.25.12':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.27.2':
+ optional: true
+
+ '@esbuild/linux-s390x@0.25.12':
+ optional: true
+
+ '@esbuild/linux-s390x@0.27.2':
+ optional: true
+
+ '@esbuild/linux-x64@0.25.12':
+ optional: true
+
+ '@esbuild/linux-x64@0.27.2':
+ optional: true
+
+ '@esbuild/netbsd-arm64@0.25.12':
+ optional: true
+
+ '@esbuild/netbsd-arm64@0.27.2':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.25.12':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.27.2':
+ optional: true
+
+ '@esbuild/openbsd-arm64@0.25.12':
+ optional: true
+
+ '@esbuild/openbsd-arm64@0.27.2':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.25.12':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.27.2':
+ optional: true
+
+ '@esbuild/openharmony-arm64@0.25.12':
+ optional: true
+
+ '@esbuild/openharmony-arm64@0.27.2':
+ optional: true
+
+ '@esbuild/sunos-x64@0.25.12':
+ optional: true
+
+ '@esbuild/sunos-x64@0.27.2':
+ optional: true
+
+ '@esbuild/win32-arm64@0.25.12':
+ optional: true
+
+ '@esbuild/win32-arm64@0.27.2':
+ optional: true
+
+ '@esbuild/win32-ia32@0.25.12':
+ optional: true
+
+ '@esbuild/win32-ia32@0.27.2':
+ optional: true
+
+ '@esbuild/win32-x64@0.25.12':
+ optional: true
+
+ '@esbuild/win32-x64@0.27.2':
+ optional: true
+
+ '@eslint-community/eslint-utils@4.9.0(eslint@9.39.2)':
+ dependencies:
+ eslint: 9.39.2
+ eslint-visitor-keys: 3.4.3
+
+ '@eslint-community/regexpp@4.12.2': {}
+
+ '@eslint/config-array@0.21.1':
+ dependencies:
+ '@eslint/object-schema': 2.1.7
+ debug: 4.4.3
+ minimatch: 3.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@eslint/config-helpers@0.4.2':
+ dependencies:
+ '@eslint/core': 0.17.0
+
+ '@eslint/core@0.17.0':
+ dependencies:
+ '@types/json-schema': 7.0.15
+
+ '@eslint/eslintrc@3.3.3':
+ dependencies:
+ ajv: 6.12.6
+ debug: 4.4.3
+ espree: 10.4.0
+ globals: 14.0.0
+ ignore: 5.3.2
+ import-fresh: 3.3.1
+ js-yaml: 4.1.1
+ minimatch: 3.1.2
+ strip-json-comments: 3.1.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@eslint/js@9.39.2': {}
+
+ '@eslint/object-schema@2.1.7': {}
+
+ '@eslint/plugin-kit@0.4.1':
+ dependencies:
+ '@eslint/core': 0.17.0
+ levn: 0.4.1
+
+ '@humanfs/core@0.19.1': {}
+
+ '@humanfs/node@0.16.7':
+ dependencies:
+ '@humanfs/core': 0.19.1
+ '@humanwhocodes/retry': 0.4.3
+
+ '@humanwhocodes/module-importer@1.0.1': {}
+
+ '@humanwhocodes/retry@0.4.3': {}
+
+ '@isaacs/cliui@8.0.2':
+ dependencies:
+ string-width: 5.1.2
+ string-width-cjs: string-width@4.2.3
+ strip-ansi: 7.1.2
+ strip-ansi-cjs: strip-ansi@6.0.1
+ wrap-ansi: 8.1.0
+ wrap-ansi-cjs: wrap-ansi@7.0.0
+
+ '@istanbuljs/load-nyc-config@1.1.0':
+ dependencies:
+ camelcase: 5.3.1
+ find-up: 4.1.0
+ get-package-type: 0.1.0
+ js-yaml: 3.14.2
+ resolve-from: 5.0.0
+
+ '@istanbuljs/schema@0.1.3': {}
+
+ '@jest/console@30.2.0':
+ dependencies:
+ '@jest/types': 30.2.0
+ '@types/node': 25.0.3
+ chalk: 4.1.2
+ jest-message-util: 30.2.0
+ jest-util: 30.2.0
+ slash: 3.0.0
+
+ '@jest/core@30.2.0(esbuild-register@3.6.0(esbuild@0.25.12))':
+ dependencies:
+ '@jest/console': 30.2.0
+ '@jest/pattern': 30.0.1
+ '@jest/reporters': 30.2.0
+ '@jest/test-result': 30.2.0
+ '@jest/transform': 30.2.0
+ '@jest/types': 30.2.0
+ '@types/node': 25.0.3
+ ansi-escapes: 4.3.2
+ chalk: 4.1.2
+ ci-info: 4.3.1
+ exit-x: 0.2.2
+ graceful-fs: 4.2.11
+ jest-changed-files: 30.2.0
+ jest-config: 30.2.0(@types/node@25.0.3)(esbuild-register@3.6.0(esbuild@0.25.12))
+ jest-haste-map: 30.2.0
+ jest-message-util: 30.2.0
+ jest-regex-util: 30.0.1
+ jest-resolve: 30.2.0
+ jest-resolve-dependencies: 30.2.0
+ jest-runner: 30.2.0
+ jest-runtime: 30.2.0
+ jest-snapshot: 30.2.0
+ jest-util: 30.2.0
+ jest-validate: 30.2.0
+ jest-watcher: 30.2.0
+ micromatch: 4.0.8
+ pretty-format: 30.2.0
+ slash: 3.0.0
+ transitivePeerDependencies:
+ - babel-plugin-macros
+ - esbuild-register
+ - supports-color
+ - ts-node
+
+ '@jest/diff-sequences@30.0.1': {}
+
+ '@jest/environment-jsdom-abstract@30.2.0(jsdom@26.1.0)':
+ dependencies:
+ '@jest/environment': 30.2.0
+ '@jest/fake-timers': 30.2.0
+ '@jest/types': 30.2.0
+ '@types/jsdom': 21.1.7
+ '@types/node': 25.0.3
+ jest-mock: 30.2.0
+ jest-util: 30.2.0
+ jsdom: 26.1.0
+
+ '@jest/environment@30.2.0':
+ dependencies:
+ '@jest/fake-timers': 30.2.0
+ '@jest/types': 30.2.0
+ '@types/node': 25.0.3
+ jest-mock: 30.2.0
+
+ '@jest/expect-utils@30.2.0':
+ dependencies:
+ '@jest/get-type': 30.1.0
+
+ '@jest/expect@30.2.0':
+ dependencies:
+ expect: 30.2.0
+ jest-snapshot: 30.2.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@jest/fake-timers@30.2.0':
+ dependencies:
+ '@jest/types': 30.2.0
+ '@sinonjs/fake-timers': 13.0.5
+ '@types/node': 25.0.3
+ jest-message-util: 30.2.0
+ jest-mock: 30.2.0
+ jest-util: 30.2.0
+
+ '@jest/get-type@30.1.0': {}
+
+ '@jest/globals@30.2.0':
+ dependencies:
+ '@jest/environment': 30.2.0
+ '@jest/expect': 30.2.0
+ '@jest/types': 30.2.0
+ jest-mock: 30.2.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@jest/pattern@30.0.1':
+ dependencies:
+ '@types/node': 25.0.3
+ jest-regex-util: 30.0.1
+
+ '@jest/reporters@30.2.0':
+ dependencies:
+ '@bcoe/v8-coverage': 0.2.3
+ '@jest/console': 30.2.0
+ '@jest/test-result': 30.2.0
+ '@jest/transform': 30.2.0
+ '@jest/types': 30.2.0
+ '@jridgewell/trace-mapping': 0.3.31
+ '@types/node': 25.0.3
+ chalk: 4.1.2
+ collect-v8-coverage: 1.0.3
+ exit-x: 0.2.2
+ glob: 10.5.0
+ graceful-fs: 4.2.11
+ istanbul-lib-coverage: 3.2.2
+ istanbul-lib-instrument: 6.0.3
+ istanbul-lib-report: 3.0.1
+ istanbul-lib-source-maps: 5.0.6
+ istanbul-reports: 3.2.0
+ jest-message-util: 30.2.0
+ jest-util: 30.2.0
+ jest-worker: 30.2.0
+ slash: 3.0.0
+ string-length: 4.0.2
+ v8-to-istanbul: 9.3.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@jest/schemas@29.6.3':
+ dependencies:
+ '@sinclair/typebox': 0.27.8
+
+ '@jest/schemas@30.0.5':
+ dependencies:
+ '@sinclair/typebox': 0.34.41
+
+ '@jest/snapshot-utils@30.2.0':
+ dependencies:
+ '@jest/types': 30.2.0
+ chalk: 4.1.2
+ graceful-fs: 4.2.11
+ natural-compare: 1.4.0
+
+ '@jest/source-map@30.0.1':
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.31
+ callsites: 3.1.0
+ graceful-fs: 4.2.11
+
+ '@jest/test-result@30.2.0':
+ dependencies:
+ '@jest/console': 30.2.0
+ '@jest/types': 30.2.0
+ '@types/istanbul-lib-coverage': 2.0.6
+ collect-v8-coverage: 1.0.3
+
+ '@jest/test-sequencer@30.2.0':
+ dependencies:
+ '@jest/test-result': 30.2.0
+ graceful-fs: 4.2.11
+ jest-haste-map: 30.2.0
+ slash: 3.0.0
+
+ '@jest/transform@30.2.0':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@jest/types': 30.2.0
+ '@jridgewell/trace-mapping': 0.3.31
+ babel-plugin-istanbul: 7.0.1
+ chalk: 4.1.2
+ convert-source-map: 2.0.0
+ fast-json-stable-stringify: 2.1.0
+ graceful-fs: 4.2.11
+ jest-haste-map: 30.2.0
+ jest-regex-util: 30.0.1
+ jest-util: 30.2.0
+ micromatch: 4.0.8
+ pirates: 4.0.7
+ slash: 3.0.0
+ write-file-atomic: 5.0.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@jest/types@30.2.0':
+ dependencies:
+ '@jest/pattern': 30.0.1
+ '@jest/schemas': 30.0.5
+ '@types/istanbul-lib-coverage': 2.0.6
+ '@types/istanbul-reports': 3.0.4
+ '@types/node': 25.0.3
+ '@types/yargs': 17.0.35
+ chalk: 4.1.2
+
+ '@joshwooding/vite-plugin-react-docgen-typescript@0.6.1(typescript@5.8.3)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2))':
+ dependencies:
+ glob: 10.5.0
+ magic-string: 0.30.21
+ react-docgen-typescript: 2.4.0(typescript@5.8.3)
+ vite: 7.3.0(@types/node@25.0.3)(yaml@2.8.2)
+ optionalDependencies:
+ typescript: 5.8.3
+
+ '@jridgewell/gen-mapping@0.3.13':
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/remapping@2.3.5':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/sourcemap-codec@1.5.5': {}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ '@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.3)':
+ dependencies:
+ '@types/mdx': 2.0.13
+ '@types/react': 19.2.7
+ react: 19.2.3
+
+ '@napi-rs/wasm-runtime@0.2.12':
+ dependencies:
+ '@emnapi/core': 1.7.1
+ '@emnapi/runtime': 1.7.1
+ '@tybys/wasm-util': 0.10.1
+ optional: true
+
+ '@neoconfetti/react@1.0.0': {}
+
+ '@pkgjs/parseargs@0.11.0':
+ optional: true
+
+ '@pkgr/core@0.2.9': {}
+
+ '@polka/url@1.0.0-next.29': {}
+
+ '@rolldown/pluginutils@1.0.0-beta.27': {}
+
+ '@rollup/pluginutils@5.3.0(rollup@4.54.0)':
+ dependencies:
+ '@types/estree': 1.0.8
+ estree-walker: 2.0.2
+ picomatch: 4.0.3
+ optionalDependencies:
+ rollup: 4.54.0
+
+ '@rollup/rollup-android-arm-eabi@4.54.0':
+ optional: true
+
+ '@rollup/rollup-android-arm64@4.54.0':
+ optional: true
+
+ '@rollup/rollup-darwin-arm64@4.54.0':
+ optional: true
+
+ '@rollup/rollup-darwin-x64@4.54.0':
+ optional: true
+
+ '@rollup/rollup-freebsd-arm64@4.54.0':
+ optional: true
+
+ '@rollup/rollup-freebsd-x64@4.54.0':
+ optional: true
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.54.0':
+ optional: true
+
+ '@rollup/rollup-linux-arm-musleabihf@4.54.0':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-gnu@4.54.0':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-musl@4.54.0':
+ optional: true
+
+ '@rollup/rollup-linux-loong64-gnu@4.54.0':
+ optional: true
+
+ '@rollup/rollup-linux-ppc64-gnu@4.54.0':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-gnu@4.54.0':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-musl@4.54.0':
+ optional: true
+
+ '@rollup/rollup-linux-s390x-gnu@4.54.0':
+ optional: true
+
+ '@rollup/rollup-linux-x64-gnu@4.54.0':
+ optional: true
+
+ '@rollup/rollup-linux-x64-musl@4.54.0':
+ optional: true
+
+ '@rollup/rollup-openharmony-arm64@4.54.0':
+ optional: true
+
+ '@rollup/rollup-win32-arm64-msvc@4.54.0':
+ optional: true
+
+ '@rollup/rollup-win32-ia32-msvc@4.54.0':
+ optional: true
+
+ '@rollup/rollup-win32-x64-gnu@4.54.0':
+ optional: true
+
+ '@rollup/rollup-win32-x64-msvc@4.54.0':
+ optional: true
+
+ '@sinclair/typebox@0.27.8': {}
+
+ '@sinclair/typebox@0.34.41': {}
+
+ '@sinonjs/commons@3.0.1':
+ dependencies:
+ type-detect: 4.0.8
+
+ '@sinonjs/fake-timers@13.0.5':
+ dependencies:
+ '@sinonjs/commons': 3.0.1
+
+ '@storybook/addon-a11y@9.1.17(storybook@9.1.17(@testing-library/dom@10.4.1)(prettier@2.8.8)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2)))':
+ dependencies:
+ '@storybook/global': 5.0.0
+ axe-core: 4.11.0
+ storybook: 9.1.17(@testing-library/dom@10.4.1)(prettier@2.8.8)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2))
+
+ '@storybook/addon-docs@9.1.17(@types/react@19.2.7)(storybook@9.1.17(@testing-library/dom@10.4.1)(prettier@2.8.8)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2)))':
+ dependencies:
+ '@mdx-js/react': 3.1.1(@types/react@19.2.7)(react@19.2.3)
+ '@storybook/csf-plugin': 9.1.17(storybook@9.1.17(@testing-library/dom@10.4.1)(prettier@2.8.8)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2)))
+ '@storybook/icons': 1.6.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@storybook/react-dom-shim': 9.1.17(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@9.1.17(@testing-library/dom@10.4.1)(prettier@2.8.8)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2)))
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ storybook: 9.1.17(@testing-library/dom@10.4.1)(prettier@2.8.8)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2))
+ ts-dedent: 2.2.0
+ transitivePeerDependencies:
+ - '@types/react'
+
+ '@storybook/addon-onboarding@9.1.17(storybook@9.1.17(@testing-library/dom@10.4.1)(prettier@2.8.8)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2)))':
+ dependencies:
+ storybook: 9.1.17(@testing-library/dom@10.4.1)(prettier@2.8.8)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2))
+
+ '@storybook/addon-themes@9.1.17(storybook@9.1.17(@testing-library/dom@10.4.1)(prettier@2.8.8)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2)))':
+ dependencies:
+ storybook: 9.1.17(@testing-library/dom@10.4.1)(prettier@2.8.8)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2))
+ ts-dedent: 2.2.0
+
+ '@storybook/addon-vitest@9.1.17(@vitest/browser@3.2.4)(@vitest/runner@3.2.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@9.1.17(@testing-library/dom@10.4.1)(prettier@2.8.8)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2)))(vitest@3.2.4)':
+ dependencies:
+ '@storybook/global': 5.0.0
+ '@storybook/icons': 1.6.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ prompts: 2.4.2
+ storybook: 9.1.17(@testing-library/dom@10.4.1)(prettier@2.8.8)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2))
+ ts-dedent: 2.2.0
+ optionalDependencies:
+ '@vitest/browser': 3.2.4(playwright@1.57.0)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2))(vitest@3.2.4)
+ '@vitest/runner': 3.2.4
+ vitest: 3.2.4(@types/node@25.0.3)(@vitest/browser@3.2.4)(jsdom@26.1.0)(yaml@2.8.2)
+ transitivePeerDependencies:
+ - react
+ - react-dom
+
+ '@storybook/builder-vite@9.1.17(storybook@9.1.17(@testing-library/dom@10.4.1)(prettier@2.8.8)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2)))(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2))':
+ dependencies:
+ '@storybook/csf-plugin': 9.1.17(storybook@9.1.17(@testing-library/dom@10.4.1)(prettier@2.8.8)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2)))
+ storybook: 9.1.17(@testing-library/dom@10.4.1)(prettier@2.8.8)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2))
+ ts-dedent: 2.2.0
+ vite: 7.3.0(@types/node@25.0.3)(yaml@2.8.2)
+
+ '@storybook/csf-plugin@9.1.17(storybook@9.1.17(@testing-library/dom@10.4.1)(prettier@2.8.8)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2)))':
+ dependencies:
+ storybook: 9.1.17(@testing-library/dom@10.4.1)(prettier@2.8.8)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2))
+ unplugin: 1.16.1
+
+ '@storybook/global@5.0.0': {}
+
+ '@storybook/icons@1.6.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@storybook/react-dom-shim@9.1.17(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@9.1.17(@testing-library/dom@10.4.1)(prettier@2.8.8)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2)))':
+ dependencies:
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ storybook: 9.1.17(@testing-library/dom@10.4.1)(prettier@2.8.8)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2))
+
+ '@storybook/react-vite@9.1.17(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(rollup@4.54.0)(storybook@9.1.17(@testing-library/dom@10.4.1)(prettier@2.8.8)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2)))(typescript@5.8.3)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2))':
+ dependencies:
+ '@joshwooding/vite-plugin-react-docgen-typescript': 0.6.1(typescript@5.8.3)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2))
+ '@rollup/pluginutils': 5.3.0(rollup@4.54.0)
+ '@storybook/builder-vite': 9.1.17(storybook@9.1.17(@testing-library/dom@10.4.1)(prettier@2.8.8)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2)))(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2))
+ '@storybook/react': 9.1.17(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@9.1.17(@testing-library/dom@10.4.1)(prettier@2.8.8)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2)))(typescript@5.8.3)
+ find-up: 7.0.0
+ magic-string: 0.30.21
+ react: 19.2.3
+ react-docgen: 8.0.2
+ react-dom: 19.2.3(react@19.2.3)
+ resolve: 1.22.11
+ storybook: 9.1.17(@testing-library/dom@10.4.1)(prettier@2.8.8)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2))
+ tsconfig-paths: 4.2.0
+ vite: 7.3.0(@types/node@25.0.3)(yaml@2.8.2)
+ transitivePeerDependencies:
+ - rollup
+ - supports-color
+ - typescript
+
+ '@storybook/react@9.1.17(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@9.1.17(@testing-library/dom@10.4.1)(prettier@2.8.8)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2)))(typescript@5.8.3)':
+ dependencies:
+ '@storybook/global': 5.0.0
+ '@storybook/react-dom-shim': 9.1.17(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@9.1.17(@testing-library/dom@10.4.1)(prettier@2.8.8)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2)))
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ storybook: 9.1.17(@testing-library/dom@10.4.1)(prettier@2.8.8)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2))
+ optionalDependencies:
+ typescript: 5.8.3
+
+ '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+
+ '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+
+ '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+
+ '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+
+ '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+
+ '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+
+ '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+
+ '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+
+ '@svgr/babel-preset@8.1.0(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.28.5)
+ '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.28.5)
+ '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.28.5)
+ '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.28.5)
+ '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.28.5)
+ '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.28.5)
+ '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.28.5)
+ '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.28.5)
+
+ '@svgr/core@8.1.0(typescript@5.8.3)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@svgr/babel-preset': 8.1.0(@babel/core@7.28.5)
+ camelcase: 6.3.0
+ cosmiconfig: 8.3.6(typescript@5.8.3)
+ snake-case: 3.0.4
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+
+ '@svgr/hast-util-to-babel-ast@8.0.0':
+ dependencies:
+ '@babel/types': 7.28.5
+ entities: 4.5.0
+
+ '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.8.3))':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@svgr/babel-preset': 8.1.0(@babel/core@7.28.5)
+ '@svgr/core': 8.1.0(typescript@5.8.3)
+ '@svgr/hast-util-to-babel-ast': 8.0.0
+ svg-parser: 2.0.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@testing-library/dom@10.4.1':
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ '@babel/runtime': 7.28.4
+ '@types/aria-query': 5.0.4
+ aria-query: 5.3.0
+ dom-accessibility-api: 0.5.16
+ lz-string: 1.5.0
+ picocolors: 1.1.1
+ pretty-format: 27.5.1
+
+ '@testing-library/jest-dom@6.9.1':
+ dependencies:
+ '@adobe/css-tools': 4.4.4
+ aria-query: 5.3.2
+ css.escape: 1.5.1
+ dom-accessibility-api: 0.6.3
+ picocolors: 1.1.1
+ redent: 3.0.0
+
+ '@testing-library/react@16.3.1(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@babel/runtime': 7.28.4
+ '@testing-library/dom': 10.4.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ optionalDependencies:
+ '@types/react': 19.2.7
+ '@types/react-dom': 19.2.3(@types/react@19.2.7)
+
+ '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.1)':
+ dependencies:
+ '@testing-library/dom': 10.4.1
+
+ '@tybys/wasm-util@0.10.1':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@types/aria-query@5.0.4': {}
+
+ '@types/babel__core@7.20.5':
+ dependencies:
+ '@babel/parser': 7.28.5
+ '@babel/types': 7.28.5
+ '@types/babel__generator': 7.27.0
+ '@types/babel__template': 7.4.4
+ '@types/babel__traverse': 7.28.0
+
+ '@types/babel__generator@7.27.0':
+ dependencies:
+ '@babel/types': 7.28.5
+
+ '@types/babel__template@7.4.4':
+ dependencies:
+ '@babel/parser': 7.28.5
+ '@babel/types': 7.28.5
+
+ '@types/babel__traverse@7.28.0':
+ dependencies:
+ '@babel/types': 7.28.5
+
+ '@types/chai@5.2.3':
+ dependencies:
+ '@types/deep-eql': 4.0.2
+ assertion-error: 2.0.1
+
+ '@types/deep-eql@4.0.2': {}
+
+ '@types/doctrine@0.0.9': {}
+
+ '@types/estree@1.0.8': {}
+
+ '@types/istanbul-lib-coverage@2.0.6': {}
+
+ '@types/istanbul-lib-report@3.0.3':
+ dependencies:
+ '@types/istanbul-lib-coverage': 2.0.6
+
+ '@types/istanbul-reports@3.0.4':
+ dependencies:
+ '@types/istanbul-lib-report': 3.0.3
+
+ '@types/jest@30.0.0':
+ dependencies:
+ expect: 30.2.0
+ pretty-format: 30.2.0
+
+ '@types/jsdom@21.1.7':
+ dependencies:
+ '@types/node': 25.0.3
+ '@types/tough-cookie': 4.0.5
+ parse5: 7.3.0
+
+ '@types/json-schema@7.0.15': {}
+
+ '@types/mdx@2.0.13': {}
+
+ '@types/node@25.0.3':
+ dependencies:
+ undici-types: 7.16.0
+
+ '@types/react-dom@19.2.3(@types/react@19.2.7)':
+ dependencies:
+ '@types/react': 19.2.7
+
+ '@types/react@19.2.7':
+ dependencies:
+ csstype: 3.2.3
+
+ '@types/resolve@1.20.6': {}
+
+ '@types/stack-utils@2.0.3': {}
+
+ '@types/stylis@4.2.5': {}
+
+ '@types/tough-cookie@4.0.5': {}
+
+ '@types/yargs-parser@21.0.3': {}
+
+ '@types/yargs@17.0.35':
+ dependencies:
+ '@types/yargs-parser': 21.0.3
+
+ '@typescript-eslint/eslint-plugin@8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.2)(typescript@5.8.3))(eslint@9.39.2)(typescript@5.8.3)':
+ dependencies:
+ '@eslint-community/regexpp': 4.12.2
+ '@typescript-eslint/parser': 8.50.0(eslint@9.39.2)(typescript@5.8.3)
+ '@typescript-eslint/scope-manager': 8.50.0
+ '@typescript-eslint/type-utils': 8.50.0(eslint@9.39.2)(typescript@5.8.3)
+ '@typescript-eslint/utils': 8.50.0(eslint@9.39.2)(typescript@5.8.3)
+ '@typescript-eslint/visitor-keys': 8.50.0
+ eslint: 9.39.2
+ ignore: 7.0.5
+ natural-compare: 1.4.0
+ ts-api-utils: 2.1.0(typescript@5.8.3)
+ typescript: 5.8.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/parser@8.50.0(eslint@9.39.2)(typescript@5.8.3)':
+ dependencies:
+ '@typescript-eslint/scope-manager': 8.50.0
+ '@typescript-eslint/types': 8.50.0
+ '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.8.3)
+ '@typescript-eslint/visitor-keys': 8.50.0
+ debug: 4.4.3
+ eslint: 9.39.2
+ typescript: 5.8.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/project-service@8.50.0(typescript@5.8.3)':
+ dependencies:
+ '@typescript-eslint/tsconfig-utils': 8.50.0(typescript@5.8.3)
+ '@typescript-eslint/types': 8.50.0
+ debug: 4.4.3
+ typescript: 5.8.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/scope-manager@8.50.0':
+ dependencies:
+ '@typescript-eslint/types': 8.50.0
+ '@typescript-eslint/visitor-keys': 8.50.0
+
+ '@typescript-eslint/tsconfig-utils@8.50.0(typescript@5.8.3)':
+ dependencies:
+ typescript: 5.8.3
+
+ '@typescript-eslint/type-utils@8.50.0(eslint@9.39.2)(typescript@5.8.3)':
+ dependencies:
+ '@typescript-eslint/types': 8.50.0
+ '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.8.3)
+ '@typescript-eslint/utils': 8.50.0(eslint@9.39.2)(typescript@5.8.3)
+ debug: 4.4.3
+ eslint: 9.39.2
+ ts-api-utils: 2.1.0(typescript@5.8.3)
+ typescript: 5.8.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/types@8.50.0': {}
+
+ '@typescript-eslint/typescript-estree@8.50.0(typescript@5.8.3)':
+ dependencies:
+ '@typescript-eslint/project-service': 8.50.0(typescript@5.8.3)
+ '@typescript-eslint/tsconfig-utils': 8.50.0(typescript@5.8.3)
+ '@typescript-eslint/types': 8.50.0
+ '@typescript-eslint/visitor-keys': 8.50.0
+ debug: 4.4.3
+ minimatch: 9.0.5
+ semver: 7.7.3
+ tinyglobby: 0.2.15
+ ts-api-utils: 2.1.0(typescript@5.8.3)
+ typescript: 5.8.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/utils@8.50.0(eslint@9.39.2)(typescript@5.8.3)':
+ dependencies:
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2)
+ '@typescript-eslint/scope-manager': 8.50.0
+ '@typescript-eslint/types': 8.50.0
+ '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.8.3)
+ eslint: 9.39.2
+ typescript: 5.8.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/visitor-keys@8.50.0':
+ dependencies:
+ '@typescript-eslint/types': 8.50.0
+ eslint-visitor-keys: 4.2.1
+
+ '@ungap/structured-clone@1.3.0': {}
+
+ '@unrs/resolver-binding-android-arm-eabi@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-android-arm64@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-darwin-arm64@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-darwin-x64@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-freebsd-x64@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-linux-arm64-gnu@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-linux-arm64-musl@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-linux-riscv64-musl@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-linux-s390x-gnu@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-linux-x64-gnu@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-linux-x64-musl@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-wasm32-wasi@1.11.1':
+ dependencies:
+ '@napi-rs/wasm-runtime': 0.2.12
+ optional: true
+
+ '@unrs/resolver-binding-win32-arm64-msvc@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-win32-ia32-msvc@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-win32-x64-msvc@1.11.1':
+ optional: true
+
+ '@vitejs/plugin-react@4.7.0(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2))':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.5)
+ '@rolldown/pluginutils': 1.0.0-beta.27
+ '@types/babel__core': 7.20.5
+ react-refresh: 0.17.0
+ vite: 7.3.0(@types/node@25.0.3)(yaml@2.8.2)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@vitest/browser@3.2.4(playwright@1.57.0)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2))(vitest@3.2.4)':
+ dependencies:
+ '@testing-library/dom': 10.4.1
+ '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1)
+ '@vitest/mocker': 3.2.4(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2))
+ '@vitest/utils': 3.2.4
+ magic-string: 0.30.21
+ sirv: 3.0.2
+ tinyrainbow: 2.0.0
+ vitest: 3.2.4(@types/node@25.0.3)(@vitest/browser@3.2.4)(jsdom@26.1.0)(yaml@2.8.2)
+ ws: 8.18.3
+ optionalDependencies:
+ playwright: 1.57.0
+ transitivePeerDependencies:
+ - bufferutil
+ - msw
+ - utf-8-validate
+ - vite
+
+ '@vitest/coverage-v8@3.2.4(@vitest/browser@3.2.4)(vitest@3.2.4)':
+ dependencies:
+ '@ampproject/remapping': 2.3.0
+ '@bcoe/v8-coverage': 1.0.2
+ ast-v8-to-istanbul: 0.3.9
+ debug: 4.4.3
+ istanbul-lib-coverage: 3.2.2
+ istanbul-lib-report: 3.0.1
+ istanbul-lib-source-maps: 5.0.6
+ istanbul-reports: 3.2.0
+ magic-string: 0.30.21
+ magicast: 0.3.5
+ std-env: 3.10.0
+ test-exclude: 7.0.1
+ tinyrainbow: 2.0.0
+ vitest: 3.2.4(@types/node@25.0.3)(@vitest/browser@3.2.4)(jsdom@26.1.0)(yaml@2.8.2)
+ optionalDependencies:
+ '@vitest/browser': 3.2.4(playwright@1.57.0)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2))(vitest@3.2.4)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@vitest/expect@3.2.4':
+ dependencies:
+ '@types/chai': 5.2.3
+ '@vitest/spy': 3.2.4
+ '@vitest/utils': 3.2.4
+ chai: 5.3.3
+ tinyrainbow: 2.0.0
+
+ '@vitest/mocker@3.2.4(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2))':
+ dependencies:
+ '@vitest/spy': 3.2.4
+ estree-walker: 3.0.3
+ magic-string: 0.30.21
+ optionalDependencies:
+ vite: 7.3.0(@types/node@25.0.3)(yaml@2.8.2)
+
+ '@vitest/pretty-format@3.2.4':
+ dependencies:
+ tinyrainbow: 2.0.0
+
+ '@vitest/runner@3.2.4':
+ dependencies:
+ '@vitest/utils': 3.2.4
+ pathe: 2.0.3
+ strip-literal: 3.1.0
+
+ '@vitest/snapshot@3.2.4':
+ dependencies:
+ '@vitest/pretty-format': 3.2.4
+ magic-string: 0.30.21
+ pathe: 2.0.3
+
+ '@vitest/spy@3.2.4':
+ dependencies:
+ tinyspy: 4.0.4
+
+ '@vitest/utils@3.2.4':
+ dependencies:
+ '@vitest/pretty-format': 3.2.4
+ loupe: 3.2.1
+ tinyrainbow: 2.0.0
+
+ acorn-jsx@5.3.2(acorn@8.15.0):
+ dependencies:
+ acorn: 8.15.0
+
+ acorn@8.15.0: {}
+
+ agent-base@7.1.4: {}
+
+ ajv@6.12.6:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-json-stable-stringify: 2.1.0
+ json-schema-traverse: 0.4.1
+ uri-js: 4.4.1
+
+ ansi-escapes@4.3.2:
+ dependencies:
+ type-fest: 0.21.3
+
+ ansi-escapes@7.2.0:
+ dependencies:
+ environment: 1.1.0
+
+ ansi-regex@5.0.1: {}
+
+ ansi-regex@6.2.2: {}
+
+ ansi-styles@3.2.1:
+ dependencies:
+ color-convert: 1.9.3
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ ansi-styles@5.2.0: {}
+
+ ansi-styles@6.2.3: {}
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@1.0.10:
+ dependencies:
+ sprintf-js: 1.0.3
+
+ argparse@2.0.1: {}
+
+ aria-query@5.3.0:
+ dependencies:
+ dequal: 2.0.3
+
+ aria-query@5.3.2: {}
+
+ array-buffer-byte-length@1.0.2:
+ dependencies:
+ call-bound: 1.0.4
+ is-array-buffer: 3.0.5
+
+ arraybuffer.prototype.slice@1.0.4:
+ dependencies:
+ array-buffer-byte-length: 1.0.2
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-abstract: 1.24.1
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ is-array-buffer: 3.0.5
+
+ assertion-error@2.0.1: {}
+
+ ast-types@0.16.1:
+ dependencies:
+ tslib: 2.8.1
+
+ ast-v8-to-istanbul@0.3.9:
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.31
+ estree-walker: 3.0.3
+ js-tokens: 9.0.1
+
+ async-function@1.0.0: {}
+
+ available-typed-arrays@1.0.7:
+ dependencies:
+ possible-typed-array-names: 1.1.0
+
+ axe-core@4.11.0: {}
+
+ babel-jest@30.2.0(@babel/core@7.28.5):
+ dependencies:
+ '@babel/core': 7.28.5
+ '@jest/transform': 30.2.0
+ '@types/babel__core': 7.20.5
+ babel-plugin-istanbul: 7.0.1
+ babel-preset-jest: 30.2.0(@babel/core@7.28.5)
+ chalk: 4.1.2
+ graceful-fs: 4.2.11
+ slash: 3.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-plugin-istanbul@7.0.1:
+ dependencies:
+ '@babel/helper-plugin-utils': 7.27.1
+ '@istanbuljs/load-nyc-config': 1.1.0
+ '@istanbuljs/schema': 0.1.3
+ istanbul-lib-instrument: 6.0.3
+ test-exclude: 6.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-plugin-jest-hoist@30.2.0:
+ dependencies:
+ '@types/babel__core': 7.20.5
+
+ babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.28.5):
+ dependencies:
+ '@babel/compat-data': 7.28.5
+ '@babel/core': 7.28.5
+ '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.5)
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.28.5):
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.5)
+ core-js-compat: 3.47.0
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-plugin-polyfill-regenerator@0.6.5(@babel/core@7.28.5):
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.5)
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-plugin-styled-components@2.1.4(@babel/core@7.28.5)(styled-components@6.1.19(react-dom@19.2.3(react@19.2.3))(react@19.2.3)):
+ dependencies:
+ '@babel/helper-annotate-as-pure': 7.27.3
+ '@babel/helper-module-imports': 7.27.1
+ '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5)
+ lodash: 4.17.21
+ picomatch: 2.3.1
+ styled-components: 6.1.19(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ transitivePeerDependencies:
+ - '@babel/core'
+ - supports-color
+
+ babel-preset-current-node-syntax@1.2.0(@babel/core@7.28.5):
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.28.5)
+ '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.28.5)
+ '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.28.5)
+ '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.28.5)
+ '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.5)
+ '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.28.5)
+ '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.28.5)
+ '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.5)
+ '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.28.5)
+ '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.28.5)
+ '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.28.5)
+ '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.5)
+ '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.5)
+ '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.28.5)
+
+ babel-preset-jest@30.2.0(@babel/core@7.28.5):
+ dependencies:
+ '@babel/core': 7.28.5
+ babel-plugin-jest-hoist: 30.2.0
+ babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.5)
+
+ balanced-match@1.0.2: {}
+
+ baseline-browser-mapping@2.9.11: {}
+
+ better-opn@3.0.2:
+ dependencies:
+ open: 8.4.2
+
+ brace-expansion@1.1.12:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ brace-expansion@2.0.2:
+ dependencies:
+ balanced-match: 1.0.2
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browserslist@4.28.1:
+ dependencies:
+ baseline-browser-mapping: 2.9.11
+ caniuse-lite: 1.0.30001761
+ electron-to-chromium: 1.5.267
+ node-releases: 2.0.27
+ update-browserslist-db: 1.2.3(browserslist@4.28.1)
+
+ bser@2.1.1:
+ dependencies:
+ node-int64: 0.4.0
+
+ buffer-from@1.1.2: {}
+
+ cac@6.7.14: {}
+
+ call-bind-apply-helpers@1.0.2:
+ dependencies:
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+
+ call-bind@1.0.8:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-define-property: 1.0.1
+ get-intrinsic: 1.3.0
+ set-function-length: 1.2.2
+
+ call-bound@1.0.4:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ get-intrinsic: 1.3.0
+
+ callsites@3.1.0: {}
+
+ camelcase@5.3.1: {}
+
+ camelcase@6.3.0: {}
+
+ camelize@1.0.1: {}
+
+ caniuse-lite@1.0.30001761: {}
+
+ chai@5.3.3:
+ dependencies:
+ assertion-error: 2.0.1
+ check-error: 2.1.1
+ deep-eql: 5.0.2
+ loupe: 3.2.1
+ pathval: 2.0.1
+
+ chalk@2.4.2:
+ dependencies:
+ ansi-styles: 3.2.1
+ escape-string-regexp: 1.0.5
+ supports-color: 5.5.0
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ char-regex@1.0.2: {}
+
+ check-error@2.1.1: {}
+
+ chromatic@13.3.4: {}
+
+ ci-info@4.3.1: {}
+
+ cjs-module-lexer@2.1.1: {}
+
+ cli-cursor@5.0.0:
+ dependencies:
+ restore-cursor: 5.1.0
+
+ cli-truncate@5.1.1:
+ dependencies:
+ slice-ansi: 7.1.2
+ string-width: 8.1.0
+
+ cliui@8.0.1:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ co@4.6.0: {}
+
+ collect-v8-coverage@1.0.3: {}
+
+ color-convert@1.9.3:
+ dependencies:
+ color-name: 1.1.3
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.3: {}
+
+ color-name@1.1.4: {}
+
+ colorette@2.0.20: {}
+
+ commander@14.0.2: {}
+
+ concat-map@0.0.1: {}
+
+ convert-source-map@2.0.0: {}
+
+ core-js-compat@3.47.0:
+ dependencies:
+ browserslist: 4.28.1
+
+ cosmiconfig@8.3.6(typescript@5.8.3):
+ dependencies:
+ import-fresh: 3.3.1
+ js-yaml: 4.1.1
+ parse-json: 5.2.0
+ path-type: 4.0.0
+ optionalDependencies:
+ typescript: 5.8.3
+
+ cross-spawn@6.0.6:
+ dependencies:
+ nice-try: 1.0.5
+ path-key: 2.0.1
+ semver: 5.7.2
+ shebang-command: 1.2.0
+ which: 1.3.1
+
+ cross-spawn@7.0.6:
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+
+ css-color-keywords@1.0.0: {}
+
+ css-to-react-native@3.2.0:
+ dependencies:
+ camelize: 1.0.1
+ css-color-keywords: 1.0.0
+ postcss-value-parser: 4.2.0
+
+ css.escape@1.5.1: {}
+
+ cssstyle@4.6.0:
+ dependencies:
+ '@asamuzakjp/css-color': 3.2.0
+ rrweb-cssom: 0.8.0
+
+ csstype@3.1.3: {}
+
+ csstype@3.2.3: {}
+
+ data-urls@5.0.0:
+ dependencies:
+ whatwg-mimetype: 4.0.0
+ whatwg-url: 14.2.0
+
+ data-view-buffer@1.0.2:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-data-view: 1.0.2
+
+ data-view-byte-length@1.0.2:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-data-view: 1.0.2
+
+ data-view-byte-offset@1.0.1:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-data-view: 1.0.2
+
+ debug@4.4.3:
+ dependencies:
+ ms: 2.1.3
+
+ decimal.js@10.6.0: {}
+
+ dedent@1.7.1: {}
+
+ deep-eql@5.0.2: {}
+
+ deep-is@0.1.4: {}
+
+ deepmerge@4.3.1: {}
+
+ define-data-property@1.1.4:
+ dependencies:
+ es-define-property: 1.0.1
+ es-errors: 1.3.0
+ gopd: 1.2.0
+
+ define-lazy-prop@2.0.0: {}
+
+ define-properties@1.2.1:
+ dependencies:
+ define-data-property: 1.1.4
+ has-property-descriptors: 1.0.2
+ object-keys: 1.1.1
+
+ dequal@2.0.3: {}
+
+ detect-newline@3.1.0: {}
+
+ diff-sequences@29.6.3: {}
+
+ doctrine@3.0.0:
+ dependencies:
+ esutils: 2.0.3
+
+ dom-accessibility-api@0.5.16: {}
+
+ dom-accessibility-api@0.6.3: {}
+
+ dot-case@3.0.4:
+ dependencies:
+ no-case: 3.0.4
+ tslib: 2.8.1
+
+ dunder-proto@1.0.1:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-errors: 1.3.0
+ gopd: 1.2.0
+
+ eastasianwidth@0.2.0: {}
+
+ electron-to-chromium@1.5.267: {}
+
+ emittery@0.13.1: {}
+
+ emoji-regex@10.6.0: {}
+
+ emoji-regex@8.0.0: {}
+
+ emoji-regex@9.2.2: {}
+
+ entities@4.5.0: {}
+
+ entities@6.0.1: {}
+
+ environment@1.1.0: {}
+
+ error-ex@1.3.4:
+ dependencies:
+ is-arrayish: 0.2.1
+
+ es-abstract@1.24.1:
+ dependencies:
+ array-buffer-byte-length: 1.0.2
+ arraybuffer.prototype.slice: 1.0.4
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ data-view-buffer: 1.0.2
+ data-view-byte-length: 1.0.2
+ data-view-byte-offset: 1.0.1
+ es-define-property: 1.0.1
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.1
+ es-set-tostringtag: 2.1.0
+ es-to-primitive: 1.3.0
+ function.prototype.name: 1.1.8
+ get-intrinsic: 1.3.0
+ get-proto: 1.0.1
+ get-symbol-description: 1.1.0
+ globalthis: 1.0.4
+ gopd: 1.2.0
+ has-property-descriptors: 1.0.2
+ has-proto: 1.2.0
+ has-symbols: 1.1.0
+ hasown: 2.0.2
+ internal-slot: 1.1.0
+ is-array-buffer: 3.0.5
+ is-callable: 1.2.7
+ is-data-view: 1.0.2
+ is-negative-zero: 2.0.3
+ is-regex: 1.2.1
+ is-set: 2.0.3
+ is-shared-array-buffer: 1.0.4
+ is-string: 1.1.1
+ is-typed-array: 1.1.15
+ is-weakref: 1.1.1
+ math-intrinsics: 1.1.0
+ object-inspect: 1.13.4
+ object-keys: 1.1.1
+ object.assign: 4.1.7
+ own-keys: 1.0.1
+ regexp.prototype.flags: 1.5.4
+ safe-array-concat: 1.1.3
+ safe-push-apply: 1.0.0
+ safe-regex-test: 1.1.0
+ set-proto: 1.0.0
+ stop-iteration-iterator: 1.1.0
+ string.prototype.trim: 1.2.10
+ string.prototype.trimend: 1.0.9
+ string.prototype.trimstart: 1.0.8
+ typed-array-buffer: 1.0.3
+ typed-array-byte-length: 1.0.3
+ typed-array-byte-offset: 1.0.4
+ typed-array-length: 1.0.7
+ unbox-primitive: 1.1.0
+ which-typed-array: 1.1.19
+
+ es-define-property@1.0.1: {}
+
+ es-errors@1.3.0: {}
+
+ es-module-lexer@1.7.0: {}
+
+ es-object-atoms@1.1.1:
+ dependencies:
+ es-errors: 1.3.0
+
+ es-set-tostringtag@2.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ has-tostringtag: 1.0.2
+ hasown: 2.0.2
+
+ es-to-primitive@1.3.0:
+ dependencies:
+ is-callable: 1.2.7
+ is-date-object: 1.1.0
+ is-symbol: 1.1.1
+
+ esbuild-register@3.6.0(esbuild@0.25.12):
+ dependencies:
+ debug: 4.4.3
+ esbuild: 0.25.12
+ transitivePeerDependencies:
+ - supports-color
+
+ esbuild@0.25.12:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.25.12
+ '@esbuild/android-arm': 0.25.12
+ '@esbuild/android-arm64': 0.25.12
+ '@esbuild/android-x64': 0.25.12
+ '@esbuild/darwin-arm64': 0.25.12
+ '@esbuild/darwin-x64': 0.25.12
+ '@esbuild/freebsd-arm64': 0.25.12
+ '@esbuild/freebsd-x64': 0.25.12
+ '@esbuild/linux-arm': 0.25.12
+ '@esbuild/linux-arm64': 0.25.12
+ '@esbuild/linux-ia32': 0.25.12
+ '@esbuild/linux-loong64': 0.25.12
+ '@esbuild/linux-mips64el': 0.25.12
+ '@esbuild/linux-ppc64': 0.25.12
+ '@esbuild/linux-riscv64': 0.25.12
+ '@esbuild/linux-s390x': 0.25.12
+ '@esbuild/linux-x64': 0.25.12
+ '@esbuild/netbsd-arm64': 0.25.12
+ '@esbuild/netbsd-x64': 0.25.12
+ '@esbuild/openbsd-arm64': 0.25.12
+ '@esbuild/openbsd-x64': 0.25.12
+ '@esbuild/openharmony-arm64': 0.25.12
+ '@esbuild/sunos-x64': 0.25.12
+ '@esbuild/win32-arm64': 0.25.12
+ '@esbuild/win32-ia32': 0.25.12
+ '@esbuild/win32-x64': 0.25.12
+
+ esbuild@0.27.2:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.27.2
+ '@esbuild/android-arm': 0.27.2
+ '@esbuild/android-arm64': 0.27.2
+ '@esbuild/android-x64': 0.27.2
+ '@esbuild/darwin-arm64': 0.27.2
+ '@esbuild/darwin-x64': 0.27.2
+ '@esbuild/freebsd-arm64': 0.27.2
+ '@esbuild/freebsd-x64': 0.27.2
+ '@esbuild/linux-arm': 0.27.2
+ '@esbuild/linux-arm64': 0.27.2
+ '@esbuild/linux-ia32': 0.27.2
+ '@esbuild/linux-loong64': 0.27.2
+ '@esbuild/linux-mips64el': 0.27.2
+ '@esbuild/linux-ppc64': 0.27.2
+ '@esbuild/linux-riscv64': 0.27.2
+ '@esbuild/linux-s390x': 0.27.2
+ '@esbuild/linux-x64': 0.27.2
+ '@esbuild/netbsd-arm64': 0.27.2
+ '@esbuild/netbsd-x64': 0.27.2
+ '@esbuild/openbsd-arm64': 0.27.2
+ '@esbuild/openbsd-x64': 0.27.2
+ '@esbuild/openharmony-arm64': 0.27.2
+ '@esbuild/sunos-x64': 0.27.2
+ '@esbuild/win32-arm64': 0.27.2
+ '@esbuild/win32-ia32': 0.27.2
+ '@esbuild/win32-x64': 0.27.2
+
+ escalade@3.2.0: {}
+
+ escape-string-regexp@1.0.5: {}
+
+ escape-string-regexp@2.0.0: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eslint-plugin-jest@29.5.0(@typescript-eslint/eslint-plugin@8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.2)(typescript@5.8.3))(eslint@9.39.2)(typescript@5.8.3))(eslint@9.39.2)(jest@30.2.0(@types/node@25.0.3)(esbuild-register@3.6.0(esbuild@0.25.12)))(typescript@5.8.3):
+ dependencies:
+ '@typescript-eslint/utils': 8.50.0(eslint@9.39.2)(typescript@5.8.3)
+ eslint: 9.39.2
+ optionalDependencies:
+ '@typescript-eslint/eslint-plugin': 8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.2)(typescript@5.8.3))(eslint@9.39.2)(typescript@5.8.3)
+ jest: 30.2.0(@types/node@25.0.3)(esbuild-register@3.6.0(esbuild@0.25.12))
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+
+ eslint-plugin-react-hooks@5.2.0(eslint@9.39.2):
+ dependencies:
+ eslint: 9.39.2
+
+ eslint-plugin-react-refresh@0.4.26(eslint@9.39.2):
+ dependencies:
+ eslint: 9.39.2
+
+ eslint-plugin-storybook@9.1.17(eslint@9.39.2)(storybook@9.1.17(@testing-library/dom@10.4.1)(prettier@2.8.8)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2)))(typescript@5.8.3):
+ dependencies:
+ '@typescript-eslint/utils': 8.50.0(eslint@9.39.2)(typescript@5.8.3)
+ eslint: 9.39.2
+ storybook: 9.1.17(@testing-library/dom@10.4.1)(prettier@2.8.8)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2))
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+
+ eslint-scope@8.4.0:
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 5.3.0
+
+ eslint-visitor-keys@3.4.3: {}
+
+ eslint-visitor-keys@4.2.1: {}
+
+ eslint@9.39.2:
+ dependencies:
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2)
+ '@eslint-community/regexpp': 4.12.2
+ '@eslint/config-array': 0.21.1
+ '@eslint/config-helpers': 0.4.2
+ '@eslint/core': 0.17.0
+ '@eslint/eslintrc': 3.3.3
+ '@eslint/js': 9.39.2
+ '@eslint/plugin-kit': 0.4.1
+ '@humanfs/node': 0.16.7
+ '@humanwhocodes/module-importer': 1.0.1
+ '@humanwhocodes/retry': 0.4.3
+ '@types/estree': 1.0.8
+ ajv: 6.12.6
+ chalk: 4.1.2
+ cross-spawn: 7.0.6
+ debug: 4.4.3
+ escape-string-regexp: 4.0.0
+ eslint-scope: 8.4.0
+ eslint-visitor-keys: 4.2.1
+ espree: 10.4.0
+ esquery: 1.6.0
+ esutils: 2.0.3
+ fast-deep-equal: 3.1.3
+ file-entry-cache: 8.0.0
+ find-up: 5.0.0
+ glob-parent: 6.0.2
+ ignore: 5.3.2
+ imurmurhash: 0.1.4
+ is-glob: 4.0.3
+ json-stable-stringify-without-jsonify: 1.0.1
+ lodash.merge: 4.6.2
+ minimatch: 3.1.2
+ natural-compare: 1.4.0
+ optionator: 0.9.4
+ transitivePeerDependencies:
+ - supports-color
+
+ espree@10.4.0:
+ dependencies:
+ acorn: 8.15.0
+ acorn-jsx: 5.3.2(acorn@8.15.0)
+ eslint-visitor-keys: 4.2.1
+
+ esprima@4.0.1: {}
+
+ esquery@1.6.0:
+ dependencies:
+ estraverse: 5.3.0
+
+ esrecurse@4.3.0:
+ dependencies:
+ estraverse: 5.3.0
+
+ estraverse@5.3.0: {}
+
+ estree-walker@2.0.2: {}
+
+ estree-walker@3.0.3:
+ dependencies:
+ '@types/estree': 1.0.8
+
+ esutils@2.0.3: {}
+
+ eventemitter3@5.0.1: {}
+
+ execa@5.1.1:
+ dependencies:
+ cross-spawn: 7.0.6
+ get-stream: 6.0.1
+ human-signals: 2.1.0
+ is-stream: 2.0.1
+ merge-stream: 2.0.0
+ npm-run-path: 4.0.1
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+ strip-final-newline: 2.0.0
+
+ exit-x@0.2.2: {}
+
+ expect-type@1.3.0: {}
+
+ expect@30.2.0:
+ dependencies:
+ '@jest/expect-utils': 30.2.0
+ '@jest/get-type': 30.1.0
+ jest-matcher-utils: 30.2.0
+ jest-message-util: 30.2.0
+ jest-mock: 30.2.0
+ jest-util: 30.2.0
+
+ fast-deep-equal@3.1.3: {}
+
+ fast-json-stable-stringify@2.1.0: {}
+
+ fast-levenshtein@2.0.6: {}
+
+ fb-watchman@2.0.2:
+ dependencies:
+ bser: 2.1.1
+
+ fdir@6.5.0(picomatch@4.0.3):
+ optionalDependencies:
+ picomatch: 4.0.3
+
+ file-entry-cache@8.0.0:
+ dependencies:
+ flat-cache: 4.0.1
+
+ filesize@10.1.6: {}
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@4.1.0:
+ dependencies:
+ locate-path: 5.0.0
+ path-exists: 4.0.0
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ find-up@7.0.0:
+ dependencies:
+ locate-path: 7.2.0
+ path-exists: 5.0.0
+ unicorn-magic: 0.1.0
+
+ flat-cache@4.0.1:
+ dependencies:
+ flatted: 3.3.3
+ keyv: 4.5.4
+
+ flatted@3.3.3: {}
+
+ for-each@0.3.5:
+ dependencies:
+ is-callable: 1.2.7
+
+ foreground-child@3.3.1:
+ dependencies:
+ cross-spawn: 7.0.6
+ signal-exit: 4.1.0
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.2:
+ optional: true
+
+ fsevents@2.3.3:
+ optional: true
+
+ function-bind@1.1.2: {}
+
+ function.prototype.name@1.1.8:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-properties: 1.2.1
+ functions-have-names: 1.2.3
+ hasown: 2.0.2
+ is-callable: 1.2.7
+
+ functions-have-names@1.2.3: {}
+
+ generator-function@2.0.1: {}
+
+ gensync@1.0.0-beta.2: {}
+
+ get-caller-file@2.0.5: {}
+
+ get-east-asian-width@1.4.0: {}
+
+ get-intrinsic@1.3.0:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-define-property: 1.0.1
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.1
+ function-bind: 1.1.2
+ get-proto: 1.0.1
+ gopd: 1.2.0
+ has-symbols: 1.1.0
+ hasown: 2.0.2
+ math-intrinsics: 1.1.0
+
+ get-package-type@0.1.0: {}
+
+ get-proto@1.0.1:
+ dependencies:
+ dunder-proto: 1.0.1
+ es-object-atoms: 1.1.1
+
+ get-stream@6.0.1: {}
+
+ get-symbol-description@1.1.0:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+
+ glob-parent@6.0.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@10.5.0:
+ dependencies:
+ foreground-child: 3.3.1
+ jackspeak: 3.4.3
+ minimatch: 9.0.5
+ minipass: 7.1.2
+ package-json-from-dist: 1.0.1
+ path-scurry: 1.11.1
+
+ glob@7.2.3:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ globals@14.0.0: {}
+
+ globals@16.5.0: {}
+
+ globalthis@1.0.4:
+ dependencies:
+ define-properties: 1.2.1
+ gopd: 1.2.0
+
+ gopd@1.2.0: {}
+
+ graceful-fs@4.2.11: {}
+
+ has-bigints@1.1.0: {}
+
+ has-flag@3.0.0: {}
+
+ has-flag@4.0.0: {}
+
+ has-property-descriptors@1.0.2:
+ dependencies:
+ es-define-property: 1.0.1
+
+ has-proto@1.2.0:
+ dependencies:
+ dunder-proto: 1.0.1
+
+ has-symbols@1.1.0: {}
+
+ has-tostringtag@1.0.2:
+ dependencies:
+ has-symbols: 1.1.0
+
+ hasown@2.0.2:
+ dependencies:
+ function-bind: 1.1.2
+
+ hosted-git-info@2.8.9: {}
+
+ html-encoding-sniffer@4.0.0:
+ dependencies:
+ whatwg-encoding: 3.1.1
+
+ html-escaper@2.0.2: {}
+
+ http-proxy-agent@7.0.2:
+ dependencies:
+ agent-base: 7.1.4
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
+ https-proxy-agent@7.0.6:
+ dependencies:
+ agent-base: 7.1.4
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
+ human-signals@2.1.0: {}
+
+ husky@8.0.3: {}
+
+ iconv-lite@0.6.3:
+ dependencies:
+ safer-buffer: 2.1.2
+
+ ignore@5.3.2: {}
+
+ ignore@7.0.5: {}
+
+ import-fresh@3.3.1:
+ dependencies:
+ parent-module: 1.0.1
+ resolve-from: 4.0.0
+
+ import-local@3.2.0:
+ dependencies:
+ pkg-dir: 4.2.0
+ resolve-cwd: 3.0.0
+
+ imurmurhash@0.1.4: {}
+
+ indent-string@4.0.0: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ internal-slot@1.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ hasown: 2.0.2
+ side-channel: 1.1.0
+
+ is-array-buffer@3.0.5:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ get-intrinsic: 1.3.0
+
+ is-arrayish@0.2.1: {}
+
+ is-async-function@2.1.1:
+ dependencies:
+ async-function: 1.0.0
+ call-bound: 1.0.4
+ get-proto: 1.0.1
+ has-tostringtag: 1.0.2
+ safe-regex-test: 1.1.0
+
+ is-bigint@1.1.0:
+ dependencies:
+ has-bigints: 1.1.0
+
+ is-boolean-object@1.2.2:
+ dependencies:
+ call-bound: 1.0.4
+ has-tostringtag: 1.0.2
+
+ is-callable@1.2.7: {}
+
+ is-core-module@2.16.1:
+ dependencies:
+ hasown: 2.0.2
+
+ is-data-view@1.0.2:
+ dependencies:
+ call-bound: 1.0.4
+ get-intrinsic: 1.3.0
+ is-typed-array: 1.1.15
+
+ is-date-object@1.1.0:
+ dependencies:
+ call-bound: 1.0.4
+ has-tostringtag: 1.0.2
+
+ is-docker@2.2.1: {}
+
+ is-extglob@2.1.1: {}
+
+ is-finalizationregistry@1.1.1:
+ dependencies:
+ call-bound: 1.0.4
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-fullwidth-code-point@5.1.0:
+ dependencies:
+ get-east-asian-width: 1.4.0
+
+ is-generator-fn@2.1.0: {}
+
+ is-generator-function@1.1.2:
+ dependencies:
+ call-bound: 1.0.4
+ generator-function: 2.0.1
+ get-proto: 1.0.1
+ has-tostringtag: 1.0.2
+ safe-regex-test: 1.1.0
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-map@2.0.3: {}
+
+ is-negative-zero@2.0.3: {}
+
+ is-number-object@1.1.1:
+ dependencies:
+ call-bound: 1.0.4
+ has-tostringtag: 1.0.2
+
+ is-number@7.0.0: {}
+
+ is-potential-custom-element-name@1.0.1: {}
+
+ is-regex@1.2.1:
+ dependencies:
+ call-bound: 1.0.4
+ gopd: 1.2.0
+ has-tostringtag: 1.0.2
+ hasown: 2.0.2
+
+ is-set@2.0.3: {}
+
+ is-shared-array-buffer@1.0.4:
+ dependencies:
+ call-bound: 1.0.4
+
+ is-stream@2.0.1: {}
+
+ is-string@1.1.1:
+ dependencies:
+ call-bound: 1.0.4
+ has-tostringtag: 1.0.2
+
+ is-symbol@1.1.1:
+ dependencies:
+ call-bound: 1.0.4
+ has-symbols: 1.1.0
+ safe-regex-test: 1.1.0
+
+ is-typed-array@1.1.15:
+ dependencies:
+ which-typed-array: 1.1.19
+
+ is-weakmap@2.0.2: {}
+
+ is-weakref@1.1.1:
+ dependencies:
+ call-bound: 1.0.4
+
+ is-weakset@2.0.4:
+ dependencies:
+ call-bound: 1.0.4
+ get-intrinsic: 1.3.0
+
+ is-wsl@2.2.0:
+ dependencies:
+ is-docker: 2.2.1
+
+ isarray@2.0.5: {}
+
+ isexe@2.0.0: {}
+
+ istanbul-lib-coverage@3.2.2: {}
+
+ istanbul-lib-instrument@6.0.3:
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/parser': 7.28.5
+ '@istanbuljs/schema': 0.1.3
+ istanbul-lib-coverage: 3.2.2
+ semver: 7.7.3
+ transitivePeerDependencies:
+ - supports-color
+
+ istanbul-lib-report@3.0.1:
+ dependencies:
+ istanbul-lib-coverage: 3.2.2
+ make-dir: 4.0.0
+ supports-color: 7.2.0
+
+ istanbul-lib-source-maps@5.0.6:
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.31
+ debug: 4.4.3
+ istanbul-lib-coverage: 3.2.2
+ transitivePeerDependencies:
+ - supports-color
+
+ istanbul-reports@3.2.0:
+ dependencies:
+ html-escaper: 2.0.2
+ istanbul-lib-report: 3.0.1
+
+ jackspeak@3.4.3:
+ dependencies:
+ '@isaacs/cliui': 8.0.2
+ optionalDependencies:
+ '@pkgjs/parseargs': 0.11.0
+
+ jest-changed-files@30.2.0:
+ dependencies:
+ execa: 5.1.1
+ jest-util: 30.2.0
+ p-limit: 3.1.0
+
+ jest-circus@30.2.0:
+ dependencies:
+ '@jest/environment': 30.2.0
+ '@jest/expect': 30.2.0
+ '@jest/test-result': 30.2.0
+ '@jest/types': 30.2.0
+ '@types/node': 25.0.3
+ chalk: 4.1.2
+ co: 4.6.0
+ dedent: 1.7.1
+ is-generator-fn: 2.1.0
+ jest-each: 30.2.0
+ jest-matcher-utils: 30.2.0
+ jest-message-util: 30.2.0
+ jest-runtime: 30.2.0
+ jest-snapshot: 30.2.0
+ jest-util: 30.2.0
+ p-limit: 3.1.0
+ pretty-format: 30.2.0
+ pure-rand: 7.0.1
+ slash: 3.0.0
+ stack-utils: 2.0.6
+ transitivePeerDependencies:
+ - babel-plugin-macros
+ - supports-color
+
+ jest-cli@30.2.0(@types/node@25.0.3)(esbuild-register@3.6.0(esbuild@0.25.12)):
+ dependencies:
+ '@jest/core': 30.2.0(esbuild-register@3.6.0(esbuild@0.25.12))
+ '@jest/test-result': 30.2.0
+ '@jest/types': 30.2.0
+ chalk: 4.1.2
+ exit-x: 0.2.2
+ import-local: 3.2.0
+ jest-config: 30.2.0(@types/node@25.0.3)(esbuild-register@3.6.0(esbuild@0.25.12))
+ jest-util: 30.2.0
+ jest-validate: 30.2.0
+ yargs: 17.7.2
+ transitivePeerDependencies:
+ - '@types/node'
+ - babel-plugin-macros
+ - esbuild-register
+ - supports-color
+ - ts-node
+
+ jest-config@30.2.0(@types/node@25.0.3)(esbuild-register@3.6.0(esbuild@0.25.12)):
+ dependencies:
+ '@babel/core': 7.28.5
+ '@jest/get-type': 30.1.0
+ '@jest/pattern': 30.0.1
+ '@jest/test-sequencer': 30.2.0
+ '@jest/types': 30.2.0
+ babel-jest: 30.2.0(@babel/core@7.28.5)
+ chalk: 4.1.2
+ ci-info: 4.3.1
+ deepmerge: 4.3.1
+ glob: 10.5.0
+ graceful-fs: 4.2.11
+ jest-circus: 30.2.0
+ jest-docblock: 30.2.0
+ jest-environment-node: 30.2.0
+ jest-regex-util: 30.0.1
+ jest-resolve: 30.2.0
+ jest-runner: 30.2.0
+ jest-util: 30.2.0
+ jest-validate: 30.2.0
+ micromatch: 4.0.8
+ parse-json: 5.2.0
+ pretty-format: 30.2.0
+ slash: 3.0.0
+ strip-json-comments: 3.1.1
+ optionalDependencies:
+ '@types/node': 25.0.3
+ esbuild-register: 3.6.0(esbuild@0.25.12)
+ transitivePeerDependencies:
+ - babel-plugin-macros
+ - supports-color
+
+ jest-diff@29.7.0:
+ dependencies:
+ chalk: 4.1.2
+ diff-sequences: 29.6.3
+ jest-get-type: 29.6.3
+ pretty-format: 29.7.0
+
+ jest-diff@30.2.0:
+ dependencies:
+ '@jest/diff-sequences': 30.0.1
+ '@jest/get-type': 30.1.0
+ chalk: 4.1.2
+ pretty-format: 30.2.0
+
+ jest-docblock@30.2.0:
+ dependencies:
+ detect-newline: 3.1.0
+
+ jest-each@30.2.0:
+ dependencies:
+ '@jest/get-type': 30.1.0
+ '@jest/types': 30.2.0
+ chalk: 4.1.2
+ jest-util: 30.2.0
+ pretty-format: 30.2.0
+
+ jest-environment-jsdom@30.2.0:
+ dependencies:
+ '@jest/environment': 30.2.0
+ '@jest/environment-jsdom-abstract': 30.2.0(jsdom@26.1.0)
+ '@types/jsdom': 21.1.7
+ '@types/node': 25.0.3
+ jsdom: 26.1.0
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ jest-environment-node@30.2.0:
+ dependencies:
+ '@jest/environment': 30.2.0
+ '@jest/fake-timers': 30.2.0
+ '@jest/types': 30.2.0
+ '@types/node': 25.0.3
+ jest-mock: 30.2.0
+ jest-util: 30.2.0
+ jest-validate: 30.2.0
+
+ jest-extended@6.0.0(jest@30.2.0(@types/node@25.0.3)(esbuild-register@3.6.0(esbuild@0.25.12)))(typescript@5.8.3):
+ dependencies:
+ jest-diff: 29.7.0
+ typescript: 5.8.3
+ optionalDependencies:
+ jest: 30.2.0(@types/node@25.0.3)(esbuild-register@3.6.0(esbuild@0.25.12))
+
+ jest-get-type@29.6.3: {}
+
+ jest-haste-map@30.2.0:
+ dependencies:
+ '@jest/types': 30.2.0
+ '@types/node': 25.0.3
+ anymatch: 3.1.3
+ fb-watchman: 2.0.2
+ graceful-fs: 4.2.11
+ jest-regex-util: 30.0.1
+ jest-util: 30.2.0
+ jest-worker: 30.2.0
+ micromatch: 4.0.8
+ walker: 1.0.8
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ jest-leak-detector@30.2.0:
+ dependencies:
+ '@jest/get-type': 30.1.0
+ pretty-format: 30.2.0
+
+ jest-matcher-utils@30.2.0:
+ dependencies:
+ '@jest/get-type': 30.1.0
+ chalk: 4.1.2
+ jest-diff: 30.2.0
+ pretty-format: 30.2.0
+
+ jest-message-util@30.2.0:
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ '@jest/types': 30.2.0
+ '@types/stack-utils': 2.0.3
+ chalk: 4.1.2
+ graceful-fs: 4.2.11
+ micromatch: 4.0.8
+ pretty-format: 30.2.0
+ slash: 3.0.0
+ stack-utils: 2.0.6
+
+ jest-mock@30.2.0:
+ dependencies:
+ '@jest/types': 30.2.0
+ '@types/node': 25.0.3
+ jest-util: 30.2.0
+
+ jest-pnp-resolver@1.2.3(jest-resolve@30.2.0):
+ optionalDependencies:
+ jest-resolve: 30.2.0
+
+ jest-regex-util@30.0.1: {}
+
+ jest-resolve-dependencies@30.2.0:
+ dependencies:
+ jest-regex-util: 30.0.1
+ jest-snapshot: 30.2.0
+ transitivePeerDependencies:
+ - supports-color
+
+ jest-resolve@30.2.0:
+ dependencies:
+ chalk: 4.1.2
+ graceful-fs: 4.2.11
+ jest-haste-map: 30.2.0
+ jest-pnp-resolver: 1.2.3(jest-resolve@30.2.0)
+ jest-util: 30.2.0
+ jest-validate: 30.2.0
+ slash: 3.0.0
+ unrs-resolver: 1.11.1
+
+ jest-runner@30.2.0:
+ dependencies:
+ '@jest/console': 30.2.0
+ '@jest/environment': 30.2.0
+ '@jest/test-result': 30.2.0
+ '@jest/transform': 30.2.0
+ '@jest/types': 30.2.0
+ '@types/node': 25.0.3
+ chalk: 4.1.2
+ emittery: 0.13.1
+ exit-x: 0.2.2
+ graceful-fs: 4.2.11
+ jest-docblock: 30.2.0
+ jest-environment-node: 30.2.0
+ jest-haste-map: 30.2.0
+ jest-leak-detector: 30.2.0
+ jest-message-util: 30.2.0
+ jest-resolve: 30.2.0
+ jest-runtime: 30.2.0
+ jest-util: 30.2.0
+ jest-watcher: 30.2.0
+ jest-worker: 30.2.0
+ p-limit: 3.1.0
+ source-map-support: 0.5.13
+ transitivePeerDependencies:
+ - supports-color
+
+ jest-runtime@30.2.0:
+ dependencies:
+ '@jest/environment': 30.2.0
+ '@jest/fake-timers': 30.2.0
+ '@jest/globals': 30.2.0
+ '@jest/source-map': 30.0.1
+ '@jest/test-result': 30.2.0
+ '@jest/transform': 30.2.0
+ '@jest/types': 30.2.0
+ '@types/node': 25.0.3
+ chalk: 4.1.2
+ cjs-module-lexer: 2.1.1
+ collect-v8-coverage: 1.0.3
+ glob: 10.5.0
+ graceful-fs: 4.2.11
+ jest-haste-map: 30.2.0
+ jest-message-util: 30.2.0
+ jest-mock: 30.2.0
+ jest-regex-util: 30.0.1
+ jest-resolve: 30.2.0
+ jest-snapshot: 30.2.0
+ jest-util: 30.2.0
+ slash: 3.0.0
+ strip-bom: 4.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ jest-snapshot@30.2.0:
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/generator': 7.28.5
+ '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.5)
+ '@babel/types': 7.28.5
+ '@jest/expect-utils': 30.2.0
+ '@jest/get-type': 30.1.0
+ '@jest/snapshot-utils': 30.2.0
+ '@jest/transform': 30.2.0
+ '@jest/types': 30.2.0
+ babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.5)
+ chalk: 4.1.2
+ expect: 30.2.0
+ graceful-fs: 4.2.11
+ jest-diff: 30.2.0
+ jest-matcher-utils: 30.2.0
+ jest-message-util: 30.2.0
+ jest-util: 30.2.0
+ pretty-format: 30.2.0
+ semver: 7.7.3
+ synckit: 0.11.11
+ transitivePeerDependencies:
+ - supports-color
+
+ jest-util@30.2.0:
+ dependencies:
+ '@jest/types': 30.2.0
+ '@types/node': 25.0.3
+ chalk: 4.1.2
+ ci-info: 4.3.1
+ graceful-fs: 4.2.11
+ picomatch: 4.0.3
+
+ jest-validate@30.2.0:
+ dependencies:
+ '@jest/get-type': 30.1.0
+ '@jest/types': 30.2.0
+ camelcase: 6.3.0
+ chalk: 4.1.2
+ leven: 3.1.0
+ pretty-format: 30.2.0
+
+ jest-watcher@30.2.0:
+ dependencies:
+ '@jest/test-result': 30.2.0
+ '@jest/types': 30.2.0
+ '@types/node': 25.0.3
+ ansi-escapes: 4.3.2
+ chalk: 4.1.2
+ emittery: 0.13.1
+ jest-util: 30.2.0
+ string-length: 4.0.2
+
+ jest-worker@30.2.0:
+ dependencies:
+ '@types/node': 25.0.3
+ '@ungap/structured-clone': 1.3.0
+ jest-util: 30.2.0
+ merge-stream: 2.0.0
+ supports-color: 8.1.1
+
+ jest@30.2.0(@types/node@25.0.3)(esbuild-register@3.6.0(esbuild@0.25.12)):
+ dependencies:
+ '@jest/core': 30.2.0(esbuild-register@3.6.0(esbuild@0.25.12))
+ '@jest/types': 30.2.0
+ import-local: 3.2.0
+ jest-cli: 30.2.0(@types/node@25.0.3)(esbuild-register@3.6.0(esbuild@0.25.12))
+ transitivePeerDependencies:
+ - '@types/node'
+ - babel-plugin-macros
+ - esbuild-register
+ - supports-color
+ - ts-node
+
+ js-tokens@4.0.0: {}
+
+ js-tokens@9.0.1: {}
+
+ js-yaml@3.14.2:
+ dependencies:
+ argparse: 1.0.10
+ esprima: 4.0.1
+
+ js-yaml@4.1.1:
+ dependencies:
+ argparse: 2.0.1
+
+ jsdom@26.1.0:
+ dependencies:
+ cssstyle: 4.6.0
+ data-urls: 5.0.0
+ decimal.js: 10.6.0
+ html-encoding-sniffer: 4.0.0
+ http-proxy-agent: 7.0.2
+ https-proxy-agent: 7.0.6
+ is-potential-custom-element-name: 1.0.1
+ nwsapi: 2.2.23
+ parse5: 7.3.0
+ rrweb-cssom: 0.8.0
+ saxes: 6.0.0
+ symbol-tree: 3.2.4
+ tough-cookie: 5.1.2
+ w3c-xmlserializer: 5.0.0
+ webidl-conversions: 7.0.0
+ whatwg-encoding: 3.1.1
+ whatwg-mimetype: 4.0.0
+ whatwg-url: 14.2.0
+ ws: 8.18.3
+ xml-name-validator: 5.0.0
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ jsesc@3.1.0: {}
+
+ json-buffer@3.0.1: {}
+
+ json-parse-better-errors@1.0.2: {}
+
+ json-parse-even-better-errors@2.3.1: {}
+
+ json-schema-traverse@0.4.1: {}
+
+ json-stable-stringify-without-jsonify@1.0.1: {}
+
+ json5@2.2.3: {}
+
+ jsonfile@6.2.0:
+ dependencies:
+ universalify: 2.0.1
+ optionalDependencies:
+ graceful-fs: 4.2.11
+
+ keyv@4.5.4:
+ dependencies:
+ json-buffer: 3.0.1
+
+ kleur@3.0.3: {}
+
+ leven@3.1.0: {}
+
+ levn@0.4.1:
+ dependencies:
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+
+ lines-and-columns@1.2.4: {}
+
+ lint-staged@16.2.7:
+ dependencies:
+ commander: 14.0.2
+ listr2: 9.0.5
+ micromatch: 4.0.8
+ nano-spawn: 2.0.0
+ pidtree: 0.6.0
+ string-argv: 0.3.2
+ yaml: 2.8.2
+
+ listr2@9.0.5:
+ dependencies:
+ cli-truncate: 5.1.1
+ colorette: 2.0.20
+ eventemitter3: 5.0.1
+ log-update: 6.1.0
+ rfdc: 1.4.1
+ wrap-ansi: 9.0.2
+
+ load-json-file@4.0.0:
+ dependencies:
+ graceful-fs: 4.2.11
+ parse-json: 4.0.0
+ pify: 3.0.0
+ strip-bom: 3.0.0
+
+ locate-path@5.0.0:
+ dependencies:
+ p-locate: 4.1.0
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ locate-path@7.2.0:
+ dependencies:
+ p-locate: 6.0.0
+
+ lodash.debounce@4.0.8: {}
+
+ lodash.merge@4.6.2: {}
+
+ lodash@4.17.21: {}
+
+ log-update@6.1.0:
+ dependencies:
+ ansi-escapes: 7.2.0
+ cli-cursor: 5.0.0
+ slice-ansi: 7.1.2
+ strip-ansi: 7.1.2
+ wrap-ansi: 9.0.2
+
+ loupe@3.2.1: {}
+
+ lower-case@2.0.2:
+ dependencies:
+ tslib: 2.8.1
+
+ lru-cache@10.4.3: {}
+
+ lru-cache@5.1.1:
+ dependencies:
+ yallist: 3.1.1
+
+ lz-string@1.5.0: {}
+
+ magic-string@0.30.21:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ magicast@0.3.5:
+ dependencies:
+ '@babel/parser': 7.28.5
+ '@babel/types': 7.28.5
+ source-map-js: 1.2.1
+
+ make-dir@4.0.0:
+ dependencies:
+ semver: 7.7.3
+
+ makeerror@1.0.12:
+ dependencies:
+ tmpl: 1.0.5
+
+ math-intrinsics@1.1.0: {}
+
+ memorystream@0.3.1: {}
+
+ merge-stream@2.0.0: {}
+
+ micromatch@4.0.8:
+ dependencies:
+ braces: 3.0.3
+ picomatch: 2.3.1
+
+ mimic-fn@2.1.0: {}
+
+ mimic-function@5.0.1: {}
+
+ min-indent@1.0.1: {}
+
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.12
+
+ minimatch@9.0.5:
+ dependencies:
+ brace-expansion: 2.0.2
+
+ minimist@1.2.8: {}
+
+ minipass@7.1.2: {}
+
+ mrmime@2.0.1: {}
+
+ ms@2.1.3: {}
+
+ nano-spawn@2.0.0: {}
+
+ nanoid@3.3.11: {}
+
+ napi-postinstall@0.3.4: {}
+
+ natural-compare@1.4.0: {}
+
+ nice-try@1.0.5: {}
+
+ no-case@3.0.4:
+ dependencies:
+ lower-case: 2.0.2
+ tslib: 2.8.1
+
+ node-int64@0.4.0: {}
+
+ node-releases@2.0.27: {}
+
+ normalize-package-data@2.5.0:
+ dependencies:
+ hosted-git-info: 2.8.9
+ resolve: 1.22.11
+ semver: 5.7.2
+ validate-npm-package-license: 3.0.4
+
+ normalize-path@3.0.0: {}
+
+ npm-run-all@4.1.5:
+ dependencies:
+ ansi-styles: 3.2.1
+ chalk: 2.4.2
+ cross-spawn: 6.0.6
+ memorystream: 0.3.1
+ minimatch: 3.1.2
+ pidtree: 0.3.1
+ read-pkg: 3.0.0
+ shell-quote: 1.8.3
+ string.prototype.padend: 3.1.6
+
+ npm-run-path@4.0.1:
+ dependencies:
+ path-key: 3.1.1
+
+ nwsapi@2.2.23: {}
+
+ object-inspect@1.13.4: {}
+
+ object-keys@1.1.1: {}
+
+ object.assign@4.1.7:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-properties: 1.2.1
+ es-object-atoms: 1.1.1
+ has-symbols: 1.1.0
+ object-keys: 1.1.1
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ onetime@5.1.2:
+ dependencies:
+ mimic-fn: 2.1.0
+
+ onetime@7.0.0:
+ dependencies:
+ mimic-function: 5.0.1
+
+ open@8.4.2:
+ dependencies:
+ define-lazy-prop: 2.0.0
+ is-docker: 2.2.1
+ is-wsl: 2.2.0
+
+ optionator@0.9.4:
+ dependencies:
+ deep-is: 0.1.4
+ fast-levenshtein: 2.0.6
+ levn: 0.4.1
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+ word-wrap: 1.2.5
+
+ own-keys@1.0.1:
+ dependencies:
+ get-intrinsic: 1.3.0
+ object-keys: 1.1.1
+ safe-push-apply: 1.0.0
+
+ p-limit@2.3.0:
+ dependencies:
+ p-try: 2.2.0
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-limit@4.0.0:
+ dependencies:
+ yocto-queue: 1.2.2
+
+ p-locate@4.1.0:
+ dependencies:
+ p-limit: 2.3.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ p-locate@6.0.0:
+ dependencies:
+ p-limit: 4.0.0
+
+ p-try@2.2.0: {}
+
+ package-json-from-dist@1.0.1: {}
+
+ parent-module@1.0.1:
+ dependencies:
+ callsites: 3.1.0
+
+ parse-json@4.0.0:
+ dependencies:
+ error-ex: 1.3.4
+ json-parse-better-errors: 1.0.2
+
+ parse-json@5.2.0:
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ error-ex: 1.3.4
+ json-parse-even-better-errors: 2.3.1
+ lines-and-columns: 1.2.4
+
+ parse5@7.3.0:
+ dependencies:
+ entities: 6.0.1
+
+ path-exists@4.0.0: {}
+
+ path-exists@5.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ path-key@2.0.1: {}
+
+ path-key@3.1.1: {}
+
+ path-parse@1.0.7: {}
+
+ path-scurry@1.11.1:
+ dependencies:
+ lru-cache: 10.4.3
+ minipass: 7.1.2
+
+ path-type@3.0.0:
+ dependencies:
+ pify: 3.0.0
+
+ path-type@4.0.0: {}
+
+ pathe@2.0.3: {}
+
+ pathval@2.0.1: {}
+
+ picocolors@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ picomatch@4.0.3: {}
+
+ pidtree@0.3.1: {}
+
+ pidtree@0.6.0: {}
+
+ pify@3.0.0: {}
+
+ pirates@4.0.7: {}
+
+ pkg-dir@4.2.0:
+ dependencies:
+ find-up: 4.1.0
+
+ playwright-core@1.57.0: {}
+
+ playwright@1.57.0:
+ dependencies:
+ playwright-core: 1.57.0
+ optionalDependencies:
+ fsevents: 2.3.2
+
+ possible-typed-array-names@1.1.0: {}
+
+ postcss-value-parser@4.2.0: {}
+
+ postcss@8.4.49:
+ dependencies:
+ nanoid: 3.3.11
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+
+ postcss@8.5.6:
+ dependencies:
+ nanoid: 3.3.11
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+
+ prelude-ls@1.2.1: {}
+
+ prettier@2.8.8: {}
+
+ pretty-format@27.5.1:
+ dependencies:
+ ansi-regex: 5.0.1
+ ansi-styles: 5.2.0
+ react-is: 17.0.2
+
+ pretty-format@29.7.0:
+ dependencies:
+ '@jest/schemas': 29.6.3
+ ansi-styles: 5.2.0
+ react-is: 18.3.1
+
+ pretty-format@30.2.0:
+ dependencies:
+ '@jest/schemas': 30.0.5
+ ansi-styles: 5.2.0
+ react-is: 18.3.1
+
+ prompts@2.4.2:
+ dependencies:
+ kleur: 3.0.3
+ sisteransi: 1.0.5
+
+ punycode@2.3.1: {}
+
+ pure-rand@7.0.1: {}
+
+ react-docgen-typescript@2.4.0(typescript@5.8.3):
+ dependencies:
+ typescript: 5.8.3
+
+ react-docgen@8.0.2:
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/traverse': 7.28.5
+ '@babel/types': 7.28.5
+ '@types/babel__core': 7.20.5
+ '@types/babel__traverse': 7.28.0
+ '@types/doctrine': 0.0.9
+ '@types/resolve': 1.20.6
+ doctrine: 3.0.0
+ resolve: 1.22.11
+ strip-indent: 4.1.1
+ transitivePeerDependencies:
+ - supports-color
+
+ react-dom@19.2.3(react@19.2.3):
+ dependencies:
+ react: 19.2.3
+ scheduler: 0.27.0
+
+ react-is@17.0.2: {}
+
+ react-is@18.3.1: {}
+
+ react-refresh@0.17.0: {}
+
+ react@19.2.3: {}
+
+ read-pkg@3.0.0:
+ dependencies:
+ load-json-file: 4.0.0
+ normalize-package-data: 2.5.0
+ path-type: 3.0.0
+
+ recast@0.23.11:
+ dependencies:
+ ast-types: 0.16.1
+ esprima: 4.0.1
+ source-map: 0.6.1
+ tiny-invariant: 1.3.3
+ tslib: 2.8.1
+
+ redent@3.0.0:
+ dependencies:
+ indent-string: 4.0.0
+ strip-indent: 3.0.0
+
+ reflect.getprototypeof@1.0.10:
+ dependencies:
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-abstract: 1.24.1
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.1
+ get-intrinsic: 1.3.0
+ get-proto: 1.0.1
+ which-builtin-type: 1.2.1
+
+ regenerate-unicode-properties@10.2.2:
+ dependencies:
+ regenerate: 1.4.2
+
+ regenerate@1.4.2: {}
+
+ regexp.prototype.flags@1.5.4:
+ dependencies:
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-errors: 1.3.0
+ get-proto: 1.0.1
+ gopd: 1.2.0
+ set-function-name: 2.0.2
+
+ regexpu-core@6.4.0:
+ dependencies:
+ regenerate: 1.4.2
+ regenerate-unicode-properties: 10.2.2
+ regjsgen: 0.8.0
+ regjsparser: 0.13.0
+ unicode-match-property-ecmascript: 2.0.0
+ unicode-match-property-value-ecmascript: 2.2.1
+
+ regjsgen@0.8.0: {}
+
+ regjsparser@0.13.0:
+ dependencies:
+ jsesc: 3.1.0
+
+ require-directory@2.1.1: {}
+
+ resolve-cwd@3.0.0:
+ dependencies:
+ resolve-from: 5.0.0
+
+ resolve-from@4.0.0: {}
+
+ resolve-from@5.0.0: {}
+
+ resolve@1.22.11:
+ dependencies:
+ is-core-module: 2.16.1
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+
+ restore-cursor@5.1.0:
+ dependencies:
+ onetime: 7.0.0
+ signal-exit: 4.1.0
+
+ rfdc@1.4.1: {}
+
+ rimraf@5.0.10:
+ dependencies:
+ glob: 10.5.0
+
+ rollup@4.54.0:
+ dependencies:
+ '@types/estree': 1.0.8
+ optionalDependencies:
+ '@rollup/rollup-android-arm-eabi': 4.54.0
+ '@rollup/rollup-android-arm64': 4.54.0
+ '@rollup/rollup-darwin-arm64': 4.54.0
+ '@rollup/rollup-darwin-x64': 4.54.0
+ '@rollup/rollup-freebsd-arm64': 4.54.0
+ '@rollup/rollup-freebsd-x64': 4.54.0
+ '@rollup/rollup-linux-arm-gnueabihf': 4.54.0
+ '@rollup/rollup-linux-arm-musleabihf': 4.54.0
+ '@rollup/rollup-linux-arm64-gnu': 4.54.0
+ '@rollup/rollup-linux-arm64-musl': 4.54.0
+ '@rollup/rollup-linux-loong64-gnu': 4.54.0
+ '@rollup/rollup-linux-ppc64-gnu': 4.54.0
+ '@rollup/rollup-linux-riscv64-gnu': 4.54.0
+ '@rollup/rollup-linux-riscv64-musl': 4.54.0
+ '@rollup/rollup-linux-s390x-gnu': 4.54.0
+ '@rollup/rollup-linux-x64-gnu': 4.54.0
+ '@rollup/rollup-linux-x64-musl': 4.54.0
+ '@rollup/rollup-openharmony-arm64': 4.54.0
+ '@rollup/rollup-win32-arm64-msvc': 4.54.0
+ '@rollup/rollup-win32-ia32-msvc': 4.54.0
+ '@rollup/rollup-win32-x64-gnu': 4.54.0
+ '@rollup/rollup-win32-x64-msvc': 4.54.0
+ fsevents: 2.3.3
+
+ rrweb-cssom@0.8.0: {}
+
+ safe-array-concat@1.1.3:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ get-intrinsic: 1.3.0
+ has-symbols: 1.1.0
+ isarray: 2.0.5
+
+ safe-push-apply@1.0.0:
+ dependencies:
+ es-errors: 1.3.0
+ isarray: 2.0.5
+
+ safe-regex-test@1.1.0:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-regex: 1.2.1
+
+ safer-buffer@2.1.2: {}
+
+ saxes@6.0.0:
+ dependencies:
+ xmlchars: 2.2.0
+
+ scheduler@0.27.0: {}
+
+ semver@5.7.2: {}
+
+ semver@6.3.1: {}
+
+ semver@7.7.3: {}
+
+ set-function-length@1.2.2:
+ dependencies:
+ define-data-property: 1.1.4
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.3.0
+ gopd: 1.2.0
+ has-property-descriptors: 1.0.2
+
+ set-function-name@2.0.2:
+ dependencies:
+ define-data-property: 1.1.4
+ es-errors: 1.3.0
+ functions-have-names: 1.2.3
+ has-property-descriptors: 1.0.2
+
+ set-proto@1.0.0:
+ dependencies:
+ dunder-proto: 1.0.1
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.1
+
+ shallowequal@1.1.0: {}
+
+ shebang-command@1.2.0:
+ dependencies:
+ shebang-regex: 1.0.0
+
+ shebang-command@2.0.0:
+ dependencies:
+ shebang-regex: 3.0.0
+
+ shebang-regex@1.0.0: {}
+
+ shebang-regex@3.0.0: {}
+
+ shell-quote@1.8.3: {}
+
+ side-channel-list@1.0.0:
+ dependencies:
+ es-errors: 1.3.0
+ object-inspect: 1.13.4
+
+ side-channel-map@1.0.1:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ object-inspect: 1.13.4
+
+ side-channel-weakmap@1.0.2:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ object-inspect: 1.13.4
+ side-channel-map: 1.0.1
+
+ side-channel@1.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ object-inspect: 1.13.4
+ side-channel-list: 1.0.0
+ side-channel-map: 1.0.1
+ side-channel-weakmap: 1.0.2
+
+ siginfo@2.0.0: {}
+
+ signal-exit@3.0.7: {}
+
+ signal-exit@4.1.0: {}
+
+ sirv@3.0.2:
+ dependencies:
+ '@polka/url': 1.0.0-next.29
+ mrmime: 2.0.1
+ totalist: 3.0.1
+
+ sisteransi@1.0.5: {}
+
+ slash@3.0.0: {}
+
+ slice-ansi@7.1.2:
+ dependencies:
+ ansi-styles: 6.2.3
+ is-fullwidth-code-point: 5.1.0
+
+ snake-case@3.0.4:
+ dependencies:
+ dot-case: 3.0.4
+ tslib: 2.8.1
+
+ source-map-js@1.2.1: {}
+
+ source-map-support@0.5.13:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ spdx-correct@3.2.0:
+ dependencies:
+ spdx-expression-parse: 3.0.1
+ spdx-license-ids: 3.0.22
+
+ spdx-exceptions@2.5.0: {}
+
+ spdx-expression-parse@3.0.1:
+ dependencies:
+ spdx-exceptions: 2.5.0
+ spdx-license-ids: 3.0.22
+
+ spdx-license-ids@3.0.22: {}
+
+ sprintf-js@1.0.3: {}
+
+ stack-utils@2.0.6:
+ dependencies:
+ escape-string-regexp: 2.0.0
+
+ stackback@0.0.2: {}
+
+ std-env@3.10.0: {}
+
+ stop-iteration-iterator@1.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ internal-slot: 1.1.0
+
+ storybook@9.1.17(@testing-library/dom@10.4.1)(prettier@2.8.8)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2)):
+ dependencies:
+ '@storybook/global': 5.0.0
+ '@testing-library/jest-dom': 6.9.1
+ '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1)
+ '@vitest/expect': 3.2.4
+ '@vitest/mocker': 3.2.4(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2))
+ '@vitest/spy': 3.2.4
+ better-opn: 3.0.2
+ esbuild: 0.25.12
+ esbuild-register: 3.6.0(esbuild@0.25.12)
+ recast: 0.23.11
+ semver: 7.7.3
+ ws: 8.18.3
+ optionalDependencies:
+ prettier: 2.8.8
+ transitivePeerDependencies:
+ - '@testing-library/dom'
+ - bufferutil
+ - msw
+ - supports-color
+ - utf-8-validate
+ - vite
+
+ string-argv@0.3.2: {}
+
+ string-length@4.0.2:
+ dependencies:
+ char-regex: 1.0.2
+ strip-ansi: 6.0.1
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ string-width@5.1.2:
+ dependencies:
+ eastasianwidth: 0.2.0
+ emoji-regex: 9.2.2
+ strip-ansi: 7.1.2
+
+ string-width@7.2.0:
+ dependencies:
+ emoji-regex: 10.6.0
+ get-east-asian-width: 1.4.0
+ strip-ansi: 7.1.2
+
+ string-width@8.1.0:
+ dependencies:
+ get-east-asian-width: 1.4.0
+ strip-ansi: 7.1.2
+
+ string.prototype.padend@3.1.6:
+ dependencies:
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-abstract: 1.24.1
+ es-object-atoms: 1.1.1
+
+ string.prototype.trim@1.2.10:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-data-property: 1.1.4
+ define-properties: 1.2.1
+ es-abstract: 1.24.1
+ es-object-atoms: 1.1.1
+ has-property-descriptors: 1.0.2
+
+ string.prototype.trimend@1.0.9:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-properties: 1.2.1
+ es-object-atoms: 1.1.1
+
+ string.prototype.trimstart@1.0.8:
+ dependencies:
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-object-atoms: 1.1.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-ansi@7.1.2:
+ dependencies:
+ ansi-regex: 6.2.2
+
+ strip-bom@3.0.0: {}
+
+ strip-bom@4.0.0: {}
+
+ strip-final-newline@2.0.0: {}
+
+ strip-indent@3.0.0:
+ dependencies:
+ min-indent: 1.0.1
+
+ strip-indent@4.1.1: {}
+
+ strip-json-comments@3.1.1: {}
+
+ strip-literal@3.1.0:
+ dependencies:
+ js-tokens: 9.0.1
+
+ styled-components@6.1.19(react-dom@19.2.3(react@19.2.3))(react@19.2.3):
+ dependencies:
+ '@emotion/is-prop-valid': 1.2.2
+ '@emotion/unitless': 0.8.1
+ '@types/stylis': 4.2.5
+ css-to-react-native: 3.2.0
+ csstype: 3.1.3
+ postcss: 8.4.49
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ shallowequal: 1.1.0
+ stylis: 4.3.2
+ tslib: 2.6.2
+
+ stylis@4.3.2: {}
+
+ supports-color@5.5.0:
+ dependencies:
+ has-flag: 3.0.0
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-preserve-symlinks-flag@1.0.0: {}
+
+ svg-parser@2.0.4: {}
+
+ symbol-tree@3.2.4: {}
+
+ synckit@0.11.11:
+ dependencies:
+ '@pkgr/core': 0.2.9
+
+ test-exclude@6.0.0:
+ dependencies:
+ '@istanbuljs/schema': 0.1.3
+ glob: 7.2.3
+ minimatch: 3.1.2
+
+ test-exclude@7.0.1:
+ dependencies:
+ '@istanbuljs/schema': 0.1.3
+ glob: 10.5.0
+ minimatch: 9.0.5
+
+ tiny-invariant@1.3.3: {}
+
+ tinybench@2.9.0: {}
+
+ tinyexec@0.3.2: {}
+
+ tinyglobby@0.2.15:
+ dependencies:
+ fdir: 6.5.0(picomatch@4.0.3)
+ picomatch: 4.0.3
+
+ tinypool@1.1.1: {}
+
+ tinyrainbow@2.0.0: {}
+
+ tinyspy@4.0.4: {}
+
+ tldts-core@6.1.86: {}
+
+ tldts@6.1.86:
+ dependencies:
+ tldts-core: 6.1.86
+
+ tmpl@1.0.5: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ totalist@3.0.1: {}
+
+ tough-cookie@5.1.2:
+ dependencies:
+ tldts: 6.1.86
+
+ tr46@5.1.1:
+ dependencies:
+ punycode: 2.3.1
+
+ ts-api-utils@2.1.0(typescript@5.8.3):
+ dependencies:
+ typescript: 5.8.3
+
+ ts-dedent@2.2.0: {}
+
+ tsconfig-paths@4.2.0:
+ dependencies:
+ json5: 2.2.3
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+
+ tslib@2.6.2: {}
+
+ tslib@2.8.1: {}
+
+ type-check@0.4.0:
+ dependencies:
+ prelude-ls: 1.2.1
+
+ type-detect@4.0.8: {}
+
+ type-fest@0.21.3: {}
+
+ typed-array-buffer@1.0.3:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-typed-array: 1.1.15
+
+ typed-array-byte-length@1.0.3:
+ dependencies:
+ call-bind: 1.0.8
+ for-each: 0.3.5
+ gopd: 1.2.0
+ has-proto: 1.2.0
+ is-typed-array: 1.1.15
+
+ typed-array-byte-offset@1.0.4:
+ dependencies:
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.8
+ for-each: 0.3.5
+ gopd: 1.2.0
+ has-proto: 1.2.0
+ is-typed-array: 1.1.15
+ reflect.getprototypeof: 1.0.10
+
+ typed-array-length@1.0.7:
+ dependencies:
+ call-bind: 1.0.8
+ for-each: 0.3.5
+ gopd: 1.2.0
+ is-typed-array: 1.1.15
+ possible-typed-array-names: 1.1.0
+ reflect.getprototypeof: 1.0.10
+
+ typescript-eslint@8.50.0(eslint@9.39.2)(typescript@5.8.3):
+ dependencies:
+ '@typescript-eslint/eslint-plugin': 8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.2)(typescript@5.8.3))(eslint@9.39.2)(typescript@5.8.3)
+ '@typescript-eslint/parser': 8.50.0(eslint@9.39.2)(typescript@5.8.3)
+ '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.8.3)
+ '@typescript-eslint/utils': 8.50.0(eslint@9.39.2)(typescript@5.8.3)
+ eslint: 9.39.2
+ typescript: 5.8.3
+ transitivePeerDependencies:
+ - supports-color
+
+ typescript@5.8.3: {}
+
+ unbox-primitive@1.1.0:
+ dependencies:
+ call-bound: 1.0.4
+ has-bigints: 1.1.0
+ has-symbols: 1.1.0
+ which-boxed-primitive: 1.1.1
+
+ undici-types@7.16.0: {}
+
+ unicode-canonical-property-names-ecmascript@2.0.1: {}
+
+ unicode-match-property-ecmascript@2.0.0:
+ dependencies:
+ unicode-canonical-property-names-ecmascript: 2.0.1
+ unicode-property-aliases-ecmascript: 2.2.0
+
+ unicode-match-property-value-ecmascript@2.2.1: {}
+
+ unicode-property-aliases-ecmascript@2.2.0: {}
+
+ unicorn-magic@0.1.0: {}
+
+ universalify@2.0.1: {}
+
+ unplugin@1.16.1:
+ dependencies:
+ acorn: 8.15.0
+ webpack-virtual-modules: 0.6.2
+
+ unrs-resolver@1.11.1:
+ dependencies:
+ napi-postinstall: 0.3.4
+ optionalDependencies:
+ '@unrs/resolver-binding-android-arm-eabi': 1.11.1
+ '@unrs/resolver-binding-android-arm64': 1.11.1
+ '@unrs/resolver-binding-darwin-arm64': 1.11.1
+ '@unrs/resolver-binding-darwin-x64': 1.11.1
+ '@unrs/resolver-binding-freebsd-x64': 1.11.1
+ '@unrs/resolver-binding-linux-arm-gnueabihf': 1.11.1
+ '@unrs/resolver-binding-linux-arm-musleabihf': 1.11.1
+ '@unrs/resolver-binding-linux-arm64-gnu': 1.11.1
+ '@unrs/resolver-binding-linux-arm64-musl': 1.11.1
+ '@unrs/resolver-binding-linux-ppc64-gnu': 1.11.1
+ '@unrs/resolver-binding-linux-riscv64-gnu': 1.11.1
+ '@unrs/resolver-binding-linux-riscv64-musl': 1.11.1
+ '@unrs/resolver-binding-linux-s390x-gnu': 1.11.1
+ '@unrs/resolver-binding-linux-x64-gnu': 1.11.1
+ '@unrs/resolver-binding-linux-x64-musl': 1.11.1
+ '@unrs/resolver-binding-wasm32-wasi': 1.11.1
+ '@unrs/resolver-binding-win32-arm64-msvc': 1.11.1
+ '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1
+ '@unrs/resolver-binding-win32-x64-msvc': 1.11.1
+
+ update-browserslist-db@1.2.3(browserslist@4.28.1):
+ dependencies:
+ browserslist: 4.28.1
+ escalade: 3.2.0
+ picocolors: 1.1.1
+
+ uri-js@4.4.1:
+ dependencies:
+ punycode: 2.3.1
+
+ v8-to-istanbul@9.3.0:
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.31
+ '@types/istanbul-lib-coverage': 2.0.6
+ convert-source-map: 2.0.0
+
+ validate-npm-package-license@3.0.4:
+ dependencies:
+ spdx-correct: 3.2.0
+ spdx-expression-parse: 3.0.1
+
+ vite-node@3.2.4(@types/node@25.0.3)(yaml@2.8.2):
+ dependencies:
+ cac: 6.7.14
+ debug: 4.4.3
+ es-module-lexer: 1.7.0
+ pathe: 2.0.3
+ vite: 7.3.0(@types/node@25.0.3)(yaml@2.8.2)
+ transitivePeerDependencies:
+ - '@types/node'
+ - jiti
+ - less
+ - lightningcss
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ - tsx
+ - yaml
+
+ vite-plugin-svgr@4.5.0(rollup@4.54.0)(typescript@5.8.3)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2)):
+ dependencies:
+ '@rollup/pluginutils': 5.3.0(rollup@4.54.0)
+ '@svgr/core': 8.1.0(typescript@5.8.3)
+ '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.8.3))
+ vite: 7.3.0(@types/node@25.0.3)(yaml@2.8.2)
+ transitivePeerDependencies:
+ - rollup
+ - supports-color
+ - typescript
+
+ vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2):
+ dependencies:
+ esbuild: 0.27.2
+ fdir: 6.5.0(picomatch@4.0.3)
+ picomatch: 4.0.3
+ postcss: 8.5.6
+ rollup: 4.54.0
+ tinyglobby: 0.2.15
+ optionalDependencies:
+ '@types/node': 25.0.3
+ fsevents: 2.3.3
+ yaml: 2.8.2
+
+ vitest@3.2.4(@types/node@25.0.3)(@vitest/browser@3.2.4)(jsdom@26.1.0)(yaml@2.8.2):
+ dependencies:
+ '@types/chai': 5.2.3
+ '@vitest/expect': 3.2.4
+ '@vitest/mocker': 3.2.4(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2))
+ '@vitest/pretty-format': 3.2.4
+ '@vitest/runner': 3.2.4
+ '@vitest/snapshot': 3.2.4
+ '@vitest/spy': 3.2.4
+ '@vitest/utils': 3.2.4
+ chai: 5.3.3
+ debug: 4.4.3
+ expect-type: 1.3.0
+ magic-string: 0.30.21
+ pathe: 2.0.3
+ picomatch: 4.0.3
+ std-env: 3.10.0
+ tinybench: 2.9.0
+ tinyexec: 0.3.2
+ tinyglobby: 0.2.15
+ tinypool: 1.1.1
+ tinyrainbow: 2.0.0
+ vite: 7.3.0(@types/node@25.0.3)(yaml@2.8.2)
+ vite-node: 3.2.4(@types/node@25.0.3)(yaml@2.8.2)
+ why-is-node-running: 2.3.0
+ optionalDependencies:
+ '@types/node': 25.0.3
+ '@vitest/browser': 3.2.4(playwright@1.57.0)(vite@7.3.0(@types/node@25.0.3)(yaml@2.8.2))(vitest@3.2.4)
+ jsdom: 26.1.0
+ transitivePeerDependencies:
+ - jiti
+ - less
+ - lightningcss
+ - msw
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ - tsx
+ - yaml
+
+ w3c-xmlserializer@5.0.0:
+ dependencies:
+ xml-name-validator: 5.0.0
+
+ walker@1.0.8:
+ dependencies:
+ makeerror: 1.0.12
+
+ webidl-conversions@7.0.0: {}
+
+ webpack-virtual-modules@0.6.2: {}
+
+ whatwg-encoding@3.1.1:
+ dependencies:
+ iconv-lite: 0.6.3
+
+ whatwg-mimetype@4.0.0: {}
+
+ whatwg-url@14.2.0:
+ dependencies:
+ tr46: 5.1.1
+ webidl-conversions: 7.0.0
+
+ which-boxed-primitive@1.1.1:
+ dependencies:
+ is-bigint: 1.1.0
+ is-boolean-object: 1.2.2
+ is-number-object: 1.1.1
+ is-string: 1.1.1
+ is-symbol: 1.1.1
+
+ which-builtin-type@1.2.1:
+ dependencies:
+ call-bound: 1.0.4
+ function.prototype.name: 1.1.8
+ has-tostringtag: 1.0.2
+ is-async-function: 2.1.1
+ is-date-object: 1.1.0
+ is-finalizationregistry: 1.1.1
+ is-generator-function: 1.1.2
+ is-regex: 1.2.1
+ is-weakref: 1.1.1
+ isarray: 2.0.5
+ which-boxed-primitive: 1.1.1
+ which-collection: 1.0.2
+ which-typed-array: 1.1.19
+
+ which-collection@1.0.2:
+ dependencies:
+ is-map: 2.0.3
+ is-set: 2.0.3
+ is-weakmap: 2.0.2
+ is-weakset: 2.0.4
+
+ which-typed-array@1.1.19:
+ dependencies:
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ for-each: 0.3.5
+ get-proto: 1.0.1
+ gopd: 1.2.0
+ has-tostringtag: 1.0.2
+
+ which@1.3.1:
+ dependencies:
+ isexe: 2.0.0
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ why-is-node-running@2.3.0:
+ dependencies:
+ siginfo: 2.0.0
+ stackback: 0.0.2
+
+ word-wrap@1.2.5: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrap-ansi@8.1.0:
+ dependencies:
+ ansi-styles: 6.2.3
+ string-width: 5.1.2
+ strip-ansi: 7.1.2
+
+ wrap-ansi@9.0.2:
+ dependencies:
+ ansi-styles: 6.2.3
+ string-width: 7.2.0
+ strip-ansi: 7.1.2
+
+ wrappy@1.0.2: {}
+
+ write-file-atomic@5.0.1:
+ dependencies:
+ imurmurhash: 0.1.4
+ signal-exit: 4.1.0
+
+ ws@8.18.3: {}
+
+ xml-name-validator@5.0.0: {}
+
+ xmlchars@2.2.0: {}
+
+ y18n@5.0.8: {}
+
+ yallist@3.1.1: {}
+
+ yaml@2.8.2: {}
+
+ yargs-parser@21.1.1: {}
+
+ yargs@17.7.2:
+ dependencies:
+ cliui: 8.0.1
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 21.1.1
+
+ yocto-queue@0.1.0: {}
+
+ yocto-queue@1.2.2: {}
diff --git a/preview-styles.css b/preview-styles.css
index 1cc27fc5..0b319f0c 100644
--- a/preview-styles.css
+++ b/preview-styles.css
@@ -11,7 +11,7 @@
font-size: 36px;
}
- #storybook-docs .sbdocs-content p {
+ #storybook-docs .sbdocs-content > div > p {
font-size: 16px;
}