Upgrade to React 19

This commit is contained in:
Evan Simkowitz 2024-12-29 14:27:47 -05:00
parent cb2cd72cd4
commit 8916d7d3cc
No known key found for this signature in database
25 changed files with 1277 additions and 1001 deletions

View File

@ -26,8 +26,8 @@
"@waveterm/docusaurus-og": "https://github.com/wavetermdev/docusaurus-og", "@waveterm/docusaurus-og": "https://github.com/wavetermdev/docusaurus-og",
"clsx": "^2.1.1", "clsx": "^2.1.1",
"prism-react-renderer": "^2.3.0", "prism-react-renderer": "^2.3.0",
"react": "^18.0.0", "react": "^19.0.0",
"react-dom": "^18.0.0", "react-dom": "^19.0.0",
"remark-gfm": "^4.0.0", "remark-gfm": "^4.0.0",
"remark-typescript-code-import": "^1.0.1", "remark-typescript-code-import": "^1.0.1",
"ua-parser-js": "^2.0.0" "ua-parser-js": "^2.0.0"
@ -53,7 +53,7 @@
"remark-preset-lint-consistent": "^6.0.0", "remark-preset-lint-consistent": "^6.0.0",
"remark-preset-lint-recommended": "^7.0.0", "remark-preset-lint-recommended": "^7.0.0",
"typescript": "^5.7.2", "typescript": "^5.7.2",
"typescript-eslint": "^8.18.0" "typescript-eslint": "^8.18.2"
}, },
"resolutions": { "resolutions": {
"path-to-regexp@npm:2.2.1": "^3", "path-to-regexp@npm:2.2.1": "^3",

View File

@ -39,6 +39,7 @@ import * as util from "@/util/util";
import clsx from "clsx"; import clsx from "clsx";
import * as jotai from "jotai"; import * as jotai from "jotai";
import * as React from "react"; import * as React from "react";
import { JSX } from "react";
import { BlockFrameProps } from "./blocktypes"; import { BlockFrameProps } from "./blocktypes";
const NumActiveConnColors = 8; const NumActiveConnColors = 8;
@ -513,7 +514,7 @@ const BlockFrame_Default_Component = (props: BlockFrameProps) => {
const magnifiedBlockBlur = jotai.useAtomValue(magnifiedBlockBlurAtom); const magnifiedBlockBlur = jotai.useAtomValue(magnifiedBlockBlurAtom);
const [magnifiedBlockOpacityAtom] = React.useState(() => getSettingsKeyAtom("window:magnifiedblockopacity")); const [magnifiedBlockOpacityAtom] = React.useState(() => getSettingsKeyAtom("window:magnifiedblockopacity"));
const magnifiedBlockOpacity = jotai.useAtomValue(magnifiedBlockOpacityAtom); const magnifiedBlockOpacity = jotai.useAtomValue(magnifiedBlockOpacityAtom);
const connBtnRef = React.useRef<HTMLDivElement>(); const connBtnRef = React.useRef<HTMLDivElement>(null);
React.useEffect(() => { React.useEffect(() => {
if (!manageConnection) { if (!manageConnection) {
return; return;

View File

@ -145,6 +145,7 @@ export function getBlockHeaderIcon(blockIcon: string, blockData: Block): React.R
interface ConnectionButtonProps { interface ConnectionButtonProps {
connection: string; connection: string;
changeConnModalAtom: jotai.PrimitiveAtom<boolean>; changeConnModalAtom: jotai.PrimitiveAtom<boolean>;
ref?: React.RefObject<HTMLDivElement>;
} }
export function computeConnColorNum(connStatus: ConnStatus): number { export function computeConnColorNum(connStatus: ConnStatus): number {
@ -156,10 +157,8 @@ export function computeConnColorNum(connStatus: ConnStatus): number {
return connColorNum; return connColorNum;
} }
export const ConnectionButton = React.memo( export const ConnectionButton = React.memo(({ connection, changeConnModalAtom, ref }: ConnectionButtonProps) => {
React.forwardRef<HTMLDivElement, ConnectionButtonProps>( const setConnModalOpen = jotai.useSetAtom(changeConnModalAtom);
({ connection, changeConnModalAtom }: ConnectionButtonProps, ref) => {
const [connModalOpen, setConnModalOpen] = jotai.useAtom(changeConnModalAtom);
const isLocal = util.isBlank(connection); const isLocal = util.isBlank(connection);
const connStatusAtom = getConnStatusAtom(connection); const connStatusAtom = getConnStatusAtom(connection);
const connStatus = jotai.useAtomValue(connStatusAtom); const connStatus = jotai.useAtomValue(connStatusAtom);
@ -235,9 +234,7 @@ export const ConnectionButton = React.memo(
{isLocal ? null : <div className="connection-name">{connection}</div>} {isLocal ? null : <div className="connection-name">{connection}</div>}
</div> </div>
); );
} });
)
);
export const Input = React.memo( export const Input = React.memo(
({ decl, className, preview }: { decl: HeaderInput; className: string; preview: boolean }) => { ({ decl, className, preview }: { decl: HeaderInput; className: string; preview: boolean }) => {

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
import clsx from "clsx"; import clsx from "clsx";
import { forwardRef, memo, ReactNode, useImperativeHandle, useRef } from "react"; import { JSX, memo, ReactNode, useImperativeHandle, useRef } from "react";
import "./button.scss"; import "./button.scss";
@ -10,11 +10,10 @@ interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
className?: string; className?: string;
children?: ReactNode; children?: ReactNode;
as?: keyof JSX.IntrinsicElements | React.ComponentType<any>; as?: keyof JSX.IntrinsicElements | React.ComponentType<any>;
ref?: React.RefObject<HTMLButtonElement>;
} }
const Button = memo( const Button = memo(({ children, disabled, className = "", as: Component = "button", ref, ...props }: ButtonProps) => {
forwardRef<HTMLButtonElement, ButtonProps>(
({ children, disabled, className = "", as: Component = "button", ...props }: ButtonProps, ref) => {
const btnRef = useRef<HTMLButtonElement>(null); const btnRef = useRef<HTMLButtonElement>(null);
useImperativeHandle(ref, () => btnRef.current as HTMLButtonElement); useImperativeHandle(ref, () => btnRef.current as HTMLButtonElement);
@ -39,9 +38,7 @@ const Button = memo(
{children} {children}
</Component> </Component>
); );
} });
)
);
Button.displayName = "Button"; Button.displayName = "Button";

View File

@ -3,7 +3,7 @@
import { clsx } from "clsx"; import { clsx } from "clsx";
import { atom, useAtom } from "jotai"; import { atom, useAtom } from "jotai";
import { Children, ReactElement, ReactNode, cloneElement, isValidElement, useRef } from "react"; import { Children, ReactNode, cloneElement, isValidElement, useRef } from "react";
import "./expandablemenu.scss"; import "./expandablemenu.scss";
@ -109,7 +109,7 @@ const ExpandableMenuItemGroup = ({
const [openGroups, setOpenGroups] = useAtom(openGroupsAtom); const [openGroups, setOpenGroups] = useAtom(openGroupsAtom);
// Generate a unique ID for this group using useRef // Generate a unique ID for this group using useRef
const idRef = useRef<string>(); const idRef = useRef<string>(null);
if (!idRef.current) { if (!idRef.current) {
// Generate a unique ID when the component is first rendered // Generate a unique ID when the component is first rendered
@ -144,7 +144,8 @@ const ExpandableMenuItemGroup = ({
} }
}; };
const renderChildren = Children.map(children, (child: ReactElement) => { // TODO: As of React 19, this is bad practice and considered unsound. See https://react.dev/blog/2024/04/25/react-19-upgrade-guide#changes-to-the-reactelement-typescript-type
const renderChildren = Children.map(children, (child: any) => {
if (child && child.type === ExpandableMenuItemGroupTitle) { if (child && child.type === ExpandableMenuItemGroupTitle) {
return cloneElement(child, { return cloneElement(child, {
...child.props, ...child.props,

View File

@ -3,7 +3,7 @@
import { FloatingPortal, type Placement, useDismiss, useFloating, useInteractions } from "@floating-ui/react"; import { FloatingPortal, type Placement, useDismiss, useFloating, useInteractions } from "@floating-ui/react";
import clsx from "clsx"; import clsx from "clsx";
import { createRef, Fragment, memo, ReactNode, useRef, useState } from "react"; import { createRef, Fragment, JSX, memo, ReactNode, useRef, useState } from "react";
import ReactDOM from "react-dom"; import ReactDOM from "react-dom";
import "./flyoutmenu.scss"; import "./flyoutmenu.scss";

View File

@ -4,12 +4,11 @@
import { useLongClick } from "@/app/hook/useLongClick"; import { useLongClick } from "@/app/hook/useLongClick";
import { makeIconClass } from "@/util/util"; import { makeIconClass } from "@/util/util";
import clsx from "clsx"; import clsx from "clsx";
import { forwardRef, memo, useRef } from "react"; import { memo, useRef } from "react";
import "./iconbutton.scss"; import "./iconbutton.scss";
type IconButtonProps = { decl: IconButtonDecl; className?: string }; type IconButtonProps = { decl: IconButtonDecl; className?: string; ref?: React.RefObject<HTMLButtonElement> };
export const IconButton = memo( export const IconButton = memo(({ decl, className, ref }: IconButtonProps) => {
forwardRef<HTMLButtonElement, IconButtonProps>(({ decl, className }, ref) => {
ref = ref ?? useRef<HTMLButtonElement>(null); ref = ref ?? useRef<HTMLButtonElement>(null);
const spin = decl.iconSpin ?? false; const spin = decl.iconSpin ?? false;
useLongClick(ref, decl.click, decl.longClick, decl.disabled); useLongClick(ref, decl.click, decl.longClick, decl.disabled);
@ -26,5 +25,4 @@ export const IconButton = memo(
{typeof decl.icon === "string" ? <i className={makeIconClass(decl.icon, true, { spin })} /> : decl.icon} {typeof decl.icon === "string" ? <i className={makeIconClass(decl.icon, true, { spin })} /> : decl.icon}
</button> </button>
); );
}) });
);

View File

@ -2,17 +2,17 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
import clsx from "clsx"; import clsx from "clsx";
import React, { forwardRef, memo, useImperativeHandle, useRef, useState } from "react"; import React, { memo, useImperativeHandle, useRef, useState } from "react";
import "./input.scss"; import "./input.scss";
interface InputGroupProps { interface InputGroupProps {
children: React.ReactNode; children: React.ReactNode;
className?: string; className?: string;
ref: React.RefObject<HTMLDivElement>;
} }
const InputGroup = memo( const InputGroup = memo(({ children, className, ref }: InputGroupProps) => {
forwardRef<HTMLDivElement, InputGroupProps>(({ children, className }: InputGroupProps, ref) => {
const [isFocused, setIsFocused] = useState(false); const [isFocused, setIsFocused] = useState(false);
const manageFocus = (focused: boolean) => { const manageFocus = (focused: boolean) => {
@ -34,8 +34,7 @@ const InputGroup = memo(
})} })}
</div> </div>
); );
}) });
);
interface InputLeftElementProps { interface InputLeftElementProps {
children: React.ReactNode; children: React.ReactNode;
@ -70,14 +69,12 @@ interface InputProps {
autoSelect?: boolean; autoSelect?: boolean;
disabled?: boolean; disabled?: boolean;
isNumber?: boolean; isNumber?: boolean;
inputRef?: React.MutableRefObject<any>;
manageFocus?: (isFocused: boolean) => void; manageFocus?: (isFocused: boolean) => void;
ref?: React.RefObject<HTMLInputElement>;
} }
const Input = memo( const Input = memo(
forwardRef<HTMLInputElement, InputProps>( ({
(
{
value, value,
className, className,
onChange, onChange,
@ -93,9 +90,8 @@ const Input = memo(
disabled, disabled,
isNumber, isNumber,
manageFocus, manageFocus,
}: InputProps, ref,
ref }: InputProps) => {
) => {
const [internalValue, setInternalValue] = useState(defaultValue); const [internalValue, setInternalValue] = useState(defaultValue);
const inputRef = useRef<HTMLInputElement>(null); const inputRef = useRef<HTMLInputElement>(null);
@ -148,7 +144,6 @@ const Input = memo(
/> />
); );
} }
)
); );
export { Input, InputGroup, InputLeftElement, InputRightElement }; export { Input, InputGroup, InputLeftElement, InputRightElement };

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
import clsx from "clsx"; import clsx from "clsx";
import React, { forwardRef, memo, useEffect, useImperativeHandle, useRef, useState } from "react"; import React, { memo, useEffect, useImperativeHandle, useRef, useState } from "react";
import "./multilineinput.scss"; import "./multilineinput.scss";
@ -21,12 +21,11 @@ interface MultiLineInputProps {
rows?: number; rows?: number;
maxRows?: number; maxRows?: number;
manageFocus?: (isFocused: boolean) => void; manageFocus?: (isFocused: boolean) => void;
ref?: React.RefObject<HTMLTextAreaElement>;
} }
const MultiLineInput = memo( const MultiLineInput = memo(
forwardRef<HTMLTextAreaElement, MultiLineInputProps>( ({
(
{
value, value,
className, className,
onChange, onChange,
@ -41,9 +40,8 @@ const MultiLineInput = memo(
rows = 1, rows = 1,
maxRows = 5, maxRows = 5,
manageFocus, manageFocus,
}: MultiLineInputProps, ref,
ref }: MultiLineInputProps) => {
) => {
const textareaRef = useRef<HTMLTextAreaElement>(null); const textareaRef = useRef<HTMLTextAreaElement>(null);
const [internalValue, setInternalValue] = useState(defaultValue); const [internalValue, setInternalValue] = useState(defaultValue);
const [lineHeight, setLineHeight] = useState(24); // Default line height fallback of 24px const [lineHeight, setLineHeight] = useState(24); // Default line height fallback of 24px
@ -136,7 +134,6 @@ const MultiLineInput = memo(
/> />
); );
} }
)
); );
export { MultiLineInput }; export { MultiLineInput };

View File

@ -18,8 +18,8 @@ import clsx from "clsx";
import { import {
Children, Children,
cloneElement, cloneElement,
forwardRef,
isValidElement, isValidElement,
JSX,
JSXElementConstructor, JSXElementConstructor,
memo, memo,
ReactElement, ReactElement,
@ -36,6 +36,7 @@ interface PopoverProps {
offset?: OffsetOptions; offset?: OffsetOptions;
onDismiss?: () => void; onDismiss?: () => void;
middleware?: Middleware[]; middleware?: Middleware[];
ref?: React.RefObject<HTMLDivElement>;
} }
const isPopoverButton = ( const isPopoverButton = (
@ -51,8 +52,7 @@ const isPopoverContent = (
}; };
const Popover = memo( const Popover = memo(
forwardRef<HTMLDivElement, PopoverProps>( ({ children, className, placement = "bottom-start", offset = 3, onDismiss, middleware, ref }: PopoverProps) => {
({ children, className, placement = "bottom-start", offset = 3, onDismiss, middleware }, ref) => {
const [isOpen, setIsOpen] = useState(false); const [isOpen, setIsOpen] = useState(false);
const handleOpenChange = (open: boolean) => { const handleOpenChange = (open: boolean) => {
@ -111,7 +111,6 @@ const Popover = memo(
</div> </div>
); );
} }
)
); );
Popover.displayName = "Popover"; Popover.displayName = "Popover";
@ -121,21 +120,19 @@ interface PopoverButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElemen
children: React.ReactNode; children: React.ReactNode;
getReferenceProps?: () => any; getReferenceProps?: () => any;
as?: keyof JSX.IntrinsicElements | React.ComponentType<any>; as?: keyof JSX.IntrinsicElements | React.ComponentType<any>;
ref?: React.RefObject<HTMLButtonElement | HTMLInputElement>;
} }
const PopoverButton = forwardRef<HTMLButtonElement | HTMLDivElement, PopoverButtonProps>( const PopoverButton = ({
(
{
isActive, isActive,
children, children,
onClick: userOnClick, // Destructured from props onClick: userOnClick, // Destructured from props
getReferenceProps, getReferenceProps,
className, className,
as: Component = "button", as: Component = "button",
ref,
...props // The rest of the props, without onClick ...props // The rest of the props, without onClick
}, }: PopoverButtonProps) => {
ref
) => {
const referenceProps = getReferenceProps?.() || {}; const referenceProps = getReferenceProps?.() || {};
const popoverOnClick = referenceProps.onClick; const popoverOnClick = referenceProps.onClick;
@ -162,16 +159,15 @@ const PopoverButton = forwardRef<HTMLButtonElement | HTMLDivElement, PopoverButt
{children} {children}
</Button> </Button>
); );
} };
);
interface PopoverContentProps extends React.HTMLAttributes<HTMLDivElement> { interface PopoverContentProps extends React.HTMLAttributes<HTMLDivElement> {
children: React.ReactNode; children: React.ReactNode;
getFloatingProps?: () => any; getFloatingProps?: () => any;
ref?: React.RefObject<HTMLDivElement>;
} }
const PopoverContent = forwardRef<HTMLDivElement, PopoverContentProps>( const PopoverContent = ({ children, className, getFloatingProps, style, ref, ...props }: PopoverContentProps) => {
({ children, className, getFloatingProps, style, ...props }, ref) => {
return ( return (
<FloatingPortal> <FloatingPortal>
<div <div
@ -185,8 +181,7 @@ const PopoverContent = forwardRef<HTMLDivElement, PopoverContentProps>(
</div> </div>
</FloatingPortal> </FloatingPortal>
); );
} };
);
Popover.displayName = "Popover"; Popover.displayName = "Popover";
PopoverButton.displayName = "PopoverButton"; PopoverButton.displayName = "PopoverButton";

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
import { clsx } from "clsx"; import { clsx } from "clsx";
import React, { forwardRef } from "react"; import React from "react";
import "./windowdrag.scss"; import "./windowdrag.scss";
@ -10,14 +10,15 @@ interface WindowDragProps {
className?: string; className?: string;
style?: React.CSSProperties; style?: React.CSSProperties;
children?: React.ReactNode; children?: React.ReactNode;
ref: React.RefObject<HTMLDivElement>;
} }
const WindowDrag = forwardRef<HTMLDivElement, WindowDragProps>(({ children, className, style }, ref) => { const WindowDrag = ({ children, className, style, ref }: WindowDragProps) => {
return ( return (
<div ref={ref} className={clsx(`window-drag`, className)} style={style}> <div ref={ref} className={clsx(`window-drag`, className)} style={style}>
{children} {children}
</div> </div>
); );
}); };
export { WindowDrag }; export { WindowDrag };

View File

@ -3,7 +3,6 @@
import { Button } from "@/app/element/button"; import { Button } from "@/app/element/button";
import clsx from "clsx"; import clsx from "clsx";
import { forwardRef } from "react";
import ReactDOM from "react-dom"; import ReactDOM from "react-dom";
import "./modal.scss"; import "./modal.scss";
@ -17,10 +16,20 @@ interface ModalProps {
onOk?: () => void; onOk?: () => void;
onCancel?: () => void; onCancel?: () => void;
onClose?: () => void; onClose?: () => void;
ref?: React.RefObject<HTMLDivElement>;
} }
const Modal = forwardRef<HTMLDivElement, ModalProps>( const Modal = ({
({ children, className, cancelLabel, okLabel, onCancel, onOk, onClose, onClickBackdrop }: ModalProps, ref) => { children,
className,
cancelLabel,
okLabel,
onCancel,
onOk,
onClose,
onClickBackdrop,
ref,
}: ModalProps) => {
const renderBackdrop = (onClick) => <div className="modal-backdrop" onClick={onClick}></div>; const renderBackdrop = (onClick) => <div className="modal-backdrop" onClick={onClick}></div>;
const renderFooter = () => { const renderFooter = () => {
@ -45,8 +54,7 @@ const Modal = forwardRef<HTMLDivElement, ModalProps>(
); );
return ReactDOM.createPortal(renderModal(), document.getElementById("main")); return ReactDOM.createPortal(renderModal(), document.getElementById("main"));
} };
);
interface ModalContentProps { interface ModalContentProps {
children: React.ReactNode; children: React.ReactNode;
@ -80,16 +88,15 @@ interface FlexiModalProps {
children?: React.ReactNode; children?: React.ReactNode;
className?: string; className?: string;
onClickBackdrop?: () => void; onClickBackdrop?: () => void;
ref: React.RefObject<HTMLDivElement>;
} }
interface FlexiModalComponent interface FlexiModalComponent extends React.FC<FlexiModalProps> {
extends React.ForwardRefExoticComponent<FlexiModalProps & React.RefAttributes<HTMLDivElement>> {
Content: typeof ModalContent; Content: typeof ModalContent;
Footer: typeof ModalFooter; Footer: typeof ModalFooter;
} }
const FlexiModal = forwardRef<HTMLDivElement, FlexiModalProps>( const FlexiModal = ({ children, className, onClickBackdrop, ref }: FlexiModalProps) => {
({ children, className, onClickBackdrop }: FlexiModalProps, ref) => {
const renderBackdrop = (onClick: () => void) => <div className="modal-backdrop" onClick={onClick}></div>; const renderBackdrop = (onClick: () => void) => <div className="modal-backdrop" onClick={onClick}></div>;
const renderModal = () => ( const renderModal = () => (
@ -102,8 +109,7 @@ const FlexiModal = forwardRef<HTMLDivElement, FlexiModalProps>(
); );
return ReactDOM.createPortal(renderModal(), document.getElementById("main")!); return ReactDOM.createPortal(renderModal(), document.getElementById("main")!);
} };
);
(FlexiModal as FlexiModalComponent).Content = ModalContent; (FlexiModal as FlexiModalComponent).Content = ModalContent;
(FlexiModal as FlexiModalComponent).Footer = ModalFooter; (FlexiModal as FlexiModalComponent).Footer = ModalFooter;

View File

@ -5,7 +5,7 @@ import { Input, InputGroup, InputRightElement } from "@/app/element/input";
import { useDimensionsWithExistingRef } from "@/app/hook/useDimensions"; import { useDimensionsWithExistingRef } from "@/app/hook/useDimensions";
import { makeIconClass } from "@/util/util"; import { makeIconClass } from "@/util/util";
import clsx from "clsx"; import clsx from "clsx";
import React, { forwardRef, useLayoutEffect, useRef } from "react"; import React, { useLayoutEffect, useRef } from "react";
import ReactDOM from "react-dom"; import ReactDOM from "react-dom";
import "./typeaheadmodal.scss"; import "./typeaheadmodal.scss";
@ -14,10 +14,10 @@ interface SuggestionsProps {
suggestions?: SuggestionsType[]; suggestions?: SuggestionsType[];
onSelect?: (_: string) => void; onSelect?: (_: string) => void;
selectIndex: number; selectIndex: number;
ref: React.RefObject<HTMLDivElement>;
} }
const Suggestions = forwardRef<HTMLDivElement, SuggestionsProps>( const Suggestions = ({ suggestions, onSelect, selectIndex, ref }: SuggestionsProps) => {
({ suggestions, onSelect, selectIndex }: SuggestionsProps, ref) => {
const renderIcon = (icon: string | React.ReactNode, color: string) => { const renderIcon = (icon: string | React.ReactNode, color: string) => {
if (typeof icon === "string") { if (typeof icon === "string") {
return <i className={makeIconClass(icon, false)} style={{ color: color }}></i>; return <i className={makeIconClass(icon, false)} style={{ color: color }}></i>;
@ -38,8 +38,7 @@ const Suggestions = forwardRef<HTMLDivElement, SuggestionsProps>(
className={clsx("suggestion-item", { selected: selectIndex === index })} className={clsx("suggestion-item", { selected: selectIndex === index })}
> >
<div className="typeahead-item-name"> <div className="typeahead-item-name">
{item.icon && {item.icon && renderIcon(item.icon, "iconColor" in item && item.iconColor ? item.iconColor : "inherit")}
renderIcon(item.icon, "iconColor" in item && item.iconColor ? item.iconColor : "inherit")}
{item.label} {item.label}
</div> </div>
{"current" in item && item.current && ( {"current" in item && item.current && (
@ -68,8 +67,7 @@ const Suggestions = forwardRef<HTMLDivElement, SuggestionsProps>(
})} })}
</div> </div>
); );
} };
);
interface TypeAheadModalProps { interface TypeAheadModalProps {
anchorRef: React.RefObject<HTMLElement>; anchorRef: React.RefObject<HTMLElement>;

View File

@ -13,7 +13,7 @@ import "./userinputmodal.scss";
const UserInputModal = (userInputRequest: UserInputRequest) => { const UserInputModal = (userInputRequest: UserInputRequest) => {
const [responseText, setResponseText] = useState(""); const [responseText, setResponseText] = useState("");
const [countdown, setCountdown] = useState(Math.floor(userInputRequest.timeoutms / 1000)); const [countdown, setCountdown] = useState(Math.floor(userInputRequest.timeoutms / 1000));
const checkboxRef = useRef<HTMLInputElement>(); const checkboxRef = useRef<HTMLInputElement>(null);
const handleSendErrResponse = useCallback(() => { const handleSendErrResponse = useCallback(() => {
fireAndForget(() => fireAndForget(() =>

View File

@ -8,7 +8,7 @@ import { Button } from "@/element/button";
import { ContextMenuModel } from "@/store/contextmenu"; import { ContextMenuModel } from "@/store/contextmenu";
import { fireAndForget } from "@/util/util"; import { fireAndForget } from "@/util/util";
import { clsx } from "clsx"; import { clsx } from "clsx";
import { forwardRef, memo, useCallback, useEffect, useImperativeHandle, useRef, useState } from "react"; import { memo, useCallback, useEffect, useImperativeHandle, useRef, useState } from "react";
import { ObjectService } from "../store/services"; import { ObjectService } from "../store/services";
import { makeORef, useWaveObjectValue } from "../store/wos"; import { makeORef, useWaveObjectValue } from "../store/wos";
import "./tab.scss"; import "./tab.scss";
@ -27,12 +27,11 @@ interface TabProps {
onDragStart: (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => void; onDragStart: (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => void;
onLoaded: () => void; onLoaded: () => void;
onPinChange: () => void; onPinChange: () => void;
ref: React.RefObject<HTMLDivElement>;
} }
const Tab = memo( const Tab = memo(
forwardRef<HTMLDivElement, TabProps>( ({
(
{
id, id,
active, active,
isPinned, isPinned,
@ -45,15 +44,14 @@ const Tab = memo(
onClose, onClose,
onDragStart, onDragStart,
onPinChange, onPinChange,
}, ref,
ref }: TabProps) => {
) => {
const [tabData, _] = useWaveObjectValue<Tab>(makeORef("tab", id)); const [tabData, _] = useWaveObjectValue<Tab>(makeORef("tab", id));
const [originalName, setOriginalName] = useState(""); const [originalName, setOriginalName] = useState("");
const [isEditable, setIsEditable] = useState(false); const [isEditable, setIsEditable] = useState(false);
const editableRef = useRef<HTMLDivElement>(null); const editableRef = useRef<HTMLDivElement>(null);
const editableTimeoutRef = useRef<NodeJS.Timeout>(); const editableTimeoutRef = useRef<NodeJS.Timeout>(null);
const loadedRef = useRef(false); const loadedRef = useRef(false);
const tabRef = useRef<HTMLDivElement>(null); const tabRef = useRef<HTMLDivElement>(null);
@ -246,7 +244,6 @@ const Tab = memo(
</div> </div>
); );
} }
)
); );
export { Tab }; export { Tab };

View File

@ -1,10 +1,10 @@
import { Button } from "@/element/button"; import { Button } from "@/element/button";
import { atoms, getApi } from "@/store/global"; import { atoms, getApi } from "@/store/global";
import { useAtomValue } from "jotai"; import { useAtomValue } from "jotai";
import { forwardRef, memo, useEffect, useState } from "react"; import { memo, useEffect, useState } from "react";
import "./updatebanner.scss"; import "./updatebanner.scss";
const UpdateStatusBannerComponent = forwardRef<HTMLButtonElement>((_, ref) => { const UpdateStatusBannerComponent = (ref: React.RefObject<HTMLButtonElement>) => {
const appUpdateStatus = useAtomValue(atoms.updaterStatusAtom); const appUpdateStatus = useAtomValue(atoms.updaterStatusAtom);
let [updateStatusMessage, setUpdateStatusMessage] = useState<string>(); let [updateStatusMessage, setUpdateStatusMessage] = useState<string>();
const [dismissBannerTimeout, setDismissBannerTimeout] = useState<NodeJS.Timeout>(); const [dismissBannerTimeout, setDismissBannerTimeout] = useState<NodeJS.Timeout>();
@ -65,6 +65,6 @@ const UpdateStatusBannerComponent = forwardRef<HTMLButtonElement>((_, ref) => {
</Button> </Button>
); );
} }
}); };
export const UpdateStatusBanner = memo(UpdateStatusBannerComponent) as typeof UpdateStatusBannerComponent; export const UpdateStatusBanner = memo(UpdateStatusBannerComponent) as typeof UpdateStatusBannerComponent;

View File

@ -15,7 +15,7 @@ import clsx from "clsx";
import { atom, PrimitiveAtom, useAtom, useAtomValue, useSetAtom } from "jotai"; import { atom, PrimitiveAtom, useAtom, useAtomValue, useSetAtom } from "jotai";
import { splitAtom } from "jotai/utils"; import { splitAtom } from "jotai/utils";
import { OverlayScrollbarsComponent } from "overlayscrollbars-react"; import { OverlayScrollbarsComponent } from "overlayscrollbars-react";
import { CSSProperties, forwardRef, useCallback, useEffect } from "react"; import { CSSProperties, useCallback, useEffect } from "react";
import WorkspaceSVG from "../asset/workspace.svg"; import WorkspaceSVG from "../asset/workspace.svg";
import { IconButton } from "../element/iconbutton"; import { IconButton } from "../element/iconbutton";
import { atoms, getApi } from "../store/global"; import { atoms, getApi } from "../store/global";
@ -34,7 +34,7 @@ type WorkspaceList = WorkspaceListEntry[];
const workspaceMapAtom = atom<WorkspaceList>([]); const workspaceMapAtom = atom<WorkspaceList>([]);
const workspaceSplitAtom = splitAtom(workspaceMapAtom); const workspaceSplitAtom = splitAtom(workspaceMapAtom);
const editingWorkspaceAtom = atom<string>(); const editingWorkspaceAtom = atom<string>();
const WorkspaceSwitcher = forwardRef<HTMLDivElement>((_, ref) => { const WorkspaceSwitcher = (ref: React.RefObject<HTMLDivElement>) => {
const setWorkspaceList = useSetAtom(workspaceMapAtom); const setWorkspaceList = useSetAtom(workspaceMapAtom);
const activeWorkspace = useAtomValueSafe(atoms.workspace); const activeWorkspace = useAtomValueSafe(atoms.workspace);
const workspaceList = useAtomValue(workspaceSplitAtom); const workspaceList = useAtomValue(workspaceSplitAtom);
@ -136,7 +136,7 @@ const WorkspaceSwitcher = forwardRef<HTMLDivElement>((_, ref) => {
</PopoverContent> </PopoverContent>
</Popover> </Popover>
); );
}); };
const WorkspaceSwitcherItem = ({ const WorkspaceSwitcherItem = ({
entryAtom, entryAtom,

View File

@ -32,7 +32,7 @@ function evalAsync(Plot: any, d3: any, funcText: string): Promise<unknown> {
} }
function PlotView() { function PlotView() {
const containerRef = React.useRef<HTMLInputElement>(); const containerRef = React.useRef<HTMLInputElement>(null);
const [plotDef, setPlotDef] = React.useState<string>(); const [plotDef, setPlotDef] = React.useState<string>();
const [savedDef, setSavedDef] = React.useState<string>(); const [savedDef, setSavedDef] = React.useState<string>();
const [modalUp, setModalUp] = React.useState(false); const [modalUp, setModalUp] = React.useState(false);

View File

@ -193,7 +193,14 @@ const CSVView = ({ parentRef, filename, content }: CSVViewProps) => {
</thead> </thead>
<tbody style={{ height: `${state.tbodyHeight}px` }} ref={tbodyRef}> <tbody style={{ height: `${state.tbodyHeight}px` }} ref={tbodyRef}>
{table.getRowModel().rows.map((row, index) => ( {table.getRowModel().rows.map((row, index) => (
<tr key={row.id} ref={(el) => (rowRef.current[index] = el)} id={row.id} tabIndex={index}> <tr
key={row.id}
ref={(el) => {
rowRef.current[index] = el;
}}
id={row.id}
tabIndex={index}
>
{row.getVisibleCells().map((cell) => ( {row.getVisibleCells().map((cell) => (
<td key={cell.id} id={cell.id} tabIndex={index}> <td key={cell.id} id={cell.id} tabIndex={index}>
{flexRender(cell.column.columnDef.cell, cell.getContext())} {flexRender(cell.column.columnDef.cell, cell.getContext())}

View File

@ -143,7 +143,7 @@ enum EntryManagerType {
} }
type EntryManagerOverlayProps = { type EntryManagerOverlayProps = {
forwardRef?: React.Ref<HTMLDivElement>; ref?: React.Ref<HTMLDivElement>;
entryManagerType: EntryManagerType; entryManagerType: EntryManagerType;
startingValue?: string; startingValue?: string;
onSave: (newValue: string) => void; onSave: (newValue: string) => void;
@ -158,13 +158,13 @@ const EntryManagerOverlay = memo(
startingValue, startingValue,
onSave, onSave,
onCancel, onCancel,
forwardRef, ref,
style, style,
getReferenceProps, getReferenceProps,
}: EntryManagerOverlayProps) => { }: EntryManagerOverlayProps) => {
const [value, setValue] = useState(startingValue); const [value, setValue] = useState(startingValue);
return ( return (
<div className="entry-manager-overlay" ref={forwardRef} style={style} {...getReferenceProps()}> <div className="entry-manager-overlay" ref={ref} style={style} {...getReferenceProps()}>
<div className="entry-manager-type">{entryManagerType}</div> <div className="entry-manager-type">{entryManagerType}</div>
<div className="entry-manager-input"> <div className="entry-manager-input">
<Input <Input
@ -358,8 +358,8 @@ function DirectoryTable({
return colSizes; return colSizes;
}, [table.getState().columnSizingInfo]); }, [table.getState().columnSizingInfo]);
const osRef = useRef<OverlayScrollbarsComponentRef>(); const osRef = useRef<OverlayScrollbarsComponentRef>(null);
const bodyRef = useRef<HTMLDivElement>(); const bodyRef = useRef<HTMLDivElement>(null);
const [scrollHeight, setScrollHeight] = useState(0); const [scrollHeight, setScrollHeight] = useState(0);
const onScroll = useCallback( const onScroll = useCallback(
@ -472,8 +472,8 @@ function TableBody({
setRefreshVersion, setRefreshVersion,
osRef, osRef,
}: TableBodyProps) { }: TableBodyProps) {
const dummyLineRef = useRef<HTMLDivElement>(); const dummyLineRef = useRef<HTMLDivElement>(null);
const warningBoxRef = useRef<HTMLDivElement>(); const warningBoxRef = useRef<HTMLDivElement>(null);
const rowRefs = useRef<HTMLDivElement[]>([]); const rowRefs = useRef<HTMLDivElement[]>([]);
const conn = useAtomValue(model.connection); const conn = useAtomValue(model.connection);
@ -632,7 +632,9 @@ function TableBody({
const displayRow = useCallback( const displayRow = useCallback(
(row: Row<FileInfo>, idx: number) => ( (row: Row<FileInfo>, idx: number) => (
<div <div
ref={(el) => (rowRefs.current[idx] = el)} ref={(el) => {
rowRefs.current[idx] = el;
}}
className={clsx("dir-table-body-row", { focused: focusIndex === idx })} className={clsx("dir-table-body-row", { focused: focusIndex === idx })}
key={row.id} key={row.id}
onDoubleClick={() => { onDoubleClick={() => {
@ -914,7 +916,7 @@ function DirectoryPreview({ model }: DirectoryPreviewProps) {
{entryManagerProps && ( {entryManagerProps && (
<EntryManagerOverlay <EntryManagerOverlay
{...entryManagerProps} {...entryManagerProps}
forwardRef={refs.setFloating} ref={refs.setFloating}
style={floatingStyles} style={floatingStyles}
getReferenceProps={getFloatingProps} getReferenceProps={getFloatingProps}
onCancel={() => setEntryManagerProps(undefined)} onCancel={() => setEntryManagerProps(undefined)}

View File

@ -409,7 +409,7 @@ function SingleLinePlot({
sparkline = false, sparkline = false,
targetLen, targetLen,
}: SingleLinePlotProps) { }: SingleLinePlotProps) {
const containerRef = React.useRef<HTMLInputElement>(); const containerRef = React.useRef<HTMLInputElement>(null);
const domRect = useDimensionsWithExistingRef(containerRef, 300); const domRect = useDimensionsWithExistingRef(containerRef, 300);
const plotHeight = domRect?.height ?? 0; const plotHeight = domRect?.height ?? 0;
const plotWidth = domRect?.width ?? 0; const plotWidth = domRect?.width ?? 0;
@ -521,7 +521,7 @@ const SysinfoViewInner = React.memo(({ model }: SysinfoViewProps) => {
const plotData = jotai.useAtomValue(model.dataAtom); const plotData = jotai.useAtomValue(model.dataAtom);
const yvals = jotai.useAtomValue(model.metrics); const yvals = jotai.useAtomValue(model.metrics);
const plotMeta = jotai.useAtomValue(model.plotMetaAtom); const plotMeta = jotai.useAtomValue(model.plotMetaAtom);
const osRef = React.useRef<OverlayScrollbarsComponentRef>(); const osRef = React.useRef<OverlayScrollbarsComponentRef>(null);
const targetLen = jotai.useAtomValue(model.numPoints) + 1; const targetLen = jotai.useAtomValue(model.numPoints) + 1;
let title = false; let title = false;
let cols2 = false; let cols2 = false;

View File

@ -16,6 +16,7 @@ import {
validateAndWrapCss, validateAndWrapCss,
validateAndWrapReactStyle, validateAndWrapReactStyle,
} from "@/app/view/vdom/vdom-utils"; } from "@/app/view/vdom/vdom-utils";
import { JSX } from "react";
import "./vdom.scss"; import "./vdom.scss";
const TextTag = "#text"; const TextTag = "#text";

View File

@ -16,7 +16,7 @@ import { atom, Atom, PrimitiveAtom, useAtomValue, WritableAtom } from "jotai";
import { splitAtom } from "jotai/utils"; import { splitAtom } from "jotai/utils";
import type { OverlayScrollbars } from "overlayscrollbars"; import type { OverlayScrollbars } from "overlayscrollbars";
import { OverlayScrollbarsComponent, OverlayScrollbarsComponentRef } from "overlayscrollbars-react"; import { OverlayScrollbarsComponent, OverlayScrollbarsComponentRef } from "overlayscrollbars-react";
import { forwardRef, memo, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from "react"; import { memo, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from "react";
import { debounce, throttle } from "throttle-debounce"; import { debounce, throttle } from "throttle-debounce";
import "./waveai.scss"; import "./waveai.scss";
@ -508,10 +508,10 @@ interface ChatWindowProps {
chatWindowRef: React.RefObject<HTMLDivElement>; chatWindowRef: React.RefObject<HTMLDivElement>;
msgWidths: Object; msgWidths: Object;
model: WaveAiModel; model: WaveAiModel;
ref: React.RefObject<OverlayScrollbarsComponentRef>;
} }
const ChatWindow = memo( const ChatWindow = memo(({ chatWindowRef, msgWidths, model, ref }: ChatWindowProps) => {
forwardRef<OverlayScrollbarsComponentRef, ChatWindowProps>(({ chatWindowRef, msgWidths, model }, ref) => {
const isUserScrolling = useRef(false); const isUserScrolling = useRef(false);
const osRef = useRef<OverlayScrollbarsComponentRef>(null); const osRef = useRef<OverlayScrollbarsComponentRef>(null);
const splitMessages = useAtomValue(model.messagesSplitAtom) as Atom<ChatMessageType>[]; const splitMessages = useAtomValue(model.messagesSplitAtom) as Atom<ChatMessageType>[];
@ -608,8 +608,7 @@ const ChatWindow = memo(
</div> </div>
</OverlayScrollbarsComponent> </OverlayScrollbarsComponent>
); );
}) });
);
interface ChatInputProps { interface ChatInputProps {
value: string; value: string;
@ -618,10 +617,10 @@ interface ChatInputProps {
onKeyDown: (e: React.KeyboardEvent<HTMLTextAreaElement>) => void; onKeyDown: (e: React.KeyboardEvent<HTMLTextAreaElement>) => void;
onMouseDown: (e: React.MouseEvent<HTMLTextAreaElement>) => void; onMouseDown: (e: React.MouseEvent<HTMLTextAreaElement>) => void;
model: WaveAiModel; model: WaveAiModel;
ref: React.RefObject<HTMLTextAreaElement>;
} }
const ChatInput = forwardRef<HTMLTextAreaElement, ChatInputProps>( const ChatInput = ({ value, onChange, onKeyDown, onMouseDown, baseFontSize, model, ref }: ChatInputProps) => {
({ value, onChange, onKeyDown, onMouseDown, baseFontSize, model }, ref) => {
const textAreaRef = useRef<HTMLTextAreaElement>(null); const textAreaRef = useRef<HTMLTextAreaElement>(null);
useImperativeHandle(ref, () => textAreaRef.current as HTMLTextAreaElement); useImperativeHandle(ref, () => textAreaRef.current as HTMLTextAreaElement);
@ -673,8 +672,7 @@ const ChatInput = forwardRef<HTMLTextAreaElement, ChatInputProps>(
value={value} value={value}
></textarea> ></textarea>
); );
} };
);
const WaveAi = ({ model }: { model: WaveAiModel; blockId: string }) => { const WaveAi = ({ model }: { model: WaveAiModel; blockId: string }) => {
const { sendMessage } = model.useWaveAi(); const { sendMessage } = model.useWaveAi();

View File

@ -29,7 +29,7 @@
"devDependencies": { "devDependencies": {
"@chromatic-com/storybook": "^3.2.2", "@chromatic-com/storybook": "^3.2.2",
"@eslint/js": "^9.16.0", "@eslint/js": "^9.16.0",
"@rollup/plugin-node-resolve": "^15.3.0", "@rollup/plugin-node-resolve": "^16.0.0",
"@storybook/addon-essentials": "^8.4.7", "@storybook/addon-essentials": "^8.4.7",
"@storybook/addon-interactions": "^8.4.7", "@storybook/addon-interactions": "^8.4.7",
"@storybook/addon-links": "^8.4.7", "@storybook/addon-links": "^8.4.7",
@ -47,8 +47,8 @@
"@types/papaparse": "^5", "@types/papaparse": "^5",
"@types/pngjs": "^6.0.5", "@types/pngjs": "^6.0.5",
"@types/prop-types": "^15", "@types/prop-types": "^15",
"@types/react": "^18.3.13", "@types/react": "^19.0.2",
"@types/react-dom": "^18.3.1", "@types/react-dom": "^19.0.2",
"@types/semver": "^7", "@types/semver": "^7",
"@types/shell-quote": "^1", "@types/shell-quote": "^1",
"@types/sprintf-js": "^1", "@types/sprintf-js": "^1",
@ -75,8 +75,8 @@
"tslib": "^2.8.1", "tslib": "^2.8.1",
"tsx": "^4.19.2", "tsx": "^4.19.2",
"typescript": "^5.7.2", "typescript": "^5.7.2",
"typescript-eslint": "^8.18.0", "typescript-eslint": "^8.18.2",
"vite": "^6.0.3", "vite": "^6.0.6",
"vite-plugin-image-optimizer": "^1.1.8", "vite-plugin-image-optimizer": "^1.1.8",
"vite-plugin-static-copy": "^2.2.0", "vite-plugin-static-copy": "^2.2.0",
"vite-plugin-svgr": "^4.3.0", "vite-plugin-svgr": "^4.3.0",
@ -84,7 +84,7 @@
"vitest": "^2.1.8" "vitest": "^2.1.8"
}, },
"dependencies": { "dependencies": {
"@floating-ui/react": "^0.26.28", "@floating-ui/react": "^0.27.2",
"@monaco-editor/loader": "^1.4.0", "@monaco-editor/loader": "^1.4.0",
"@monaco-editor/react": "^4.6.0", "@monaco-editor/react": "^4.6.0",
"@observablehq/plot": "^0.6.16", "@observablehq/plot": "^0.6.16",
@ -119,10 +119,10 @@
"parse-srcset": "^1.0.2", "parse-srcset": "^1.0.2",
"pngjs": "^7.0.0", "pngjs": "^7.0.0",
"prop-types": "^15.8.1", "prop-types": "^15.8.1",
"react": "^18.3.1", "react": "^19.0.0",
"react-dnd": "^16.0.1", "react-dnd": "^16.0.1",
"react-dnd-html5-backend": "^16.0.1", "react-dnd-html5-backend": "^16.0.1",
"react-dom": "^18.3.1", "react-dom": "^19.0.0",
"react-frame-component": "^5.2.7", "react-frame-component": "^5.2.7",
"react-gauge-chart": "^0.5.1", "react-gauge-chart": "^0.5.1",
"react-markdown": "^9.0.1", "react-markdown": "^9.0.1",

479
yarn.lock
View File

@ -3181,6 +3181,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/aix-ppc64@npm:0.24.2":
version: 0.24.2
resolution: "@esbuild/aix-ppc64@npm:0.24.2"
conditions: os=aix & cpu=ppc64
languageName: node
linkType: hard
"@esbuild/android-arm64@npm:0.21.5": "@esbuild/android-arm64@npm:0.21.5":
version: 0.21.5 version: 0.21.5
resolution: "@esbuild/android-arm64@npm:0.21.5" resolution: "@esbuild/android-arm64@npm:0.21.5"
@ -3202,6 +3209,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/android-arm64@npm:0.24.2":
version: 0.24.2
resolution: "@esbuild/android-arm64@npm:0.24.2"
conditions: os=android & cpu=arm64
languageName: node
linkType: hard
"@esbuild/android-arm@npm:0.21.5": "@esbuild/android-arm@npm:0.21.5":
version: 0.21.5 version: 0.21.5
resolution: "@esbuild/android-arm@npm:0.21.5" resolution: "@esbuild/android-arm@npm:0.21.5"
@ -3223,6 +3237,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/android-arm@npm:0.24.2":
version: 0.24.2
resolution: "@esbuild/android-arm@npm:0.24.2"
conditions: os=android & cpu=arm
languageName: node
linkType: hard
"@esbuild/android-x64@npm:0.21.5": "@esbuild/android-x64@npm:0.21.5":
version: 0.21.5 version: 0.21.5
resolution: "@esbuild/android-x64@npm:0.21.5" resolution: "@esbuild/android-x64@npm:0.21.5"
@ -3244,6 +3265,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/android-x64@npm:0.24.2":
version: 0.24.2
resolution: "@esbuild/android-x64@npm:0.24.2"
conditions: os=android & cpu=x64
languageName: node
linkType: hard
"@esbuild/darwin-arm64@npm:0.21.5": "@esbuild/darwin-arm64@npm:0.21.5":
version: 0.21.5 version: 0.21.5
resolution: "@esbuild/darwin-arm64@npm:0.21.5" resolution: "@esbuild/darwin-arm64@npm:0.21.5"
@ -3265,6 +3293,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/darwin-arm64@npm:0.24.2":
version: 0.24.2
resolution: "@esbuild/darwin-arm64@npm:0.24.2"
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
"@esbuild/darwin-x64@npm:0.21.5": "@esbuild/darwin-x64@npm:0.21.5":
version: 0.21.5 version: 0.21.5
resolution: "@esbuild/darwin-x64@npm:0.21.5" resolution: "@esbuild/darwin-x64@npm:0.21.5"
@ -3286,6 +3321,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/darwin-x64@npm:0.24.2":
version: 0.24.2
resolution: "@esbuild/darwin-x64@npm:0.24.2"
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
"@esbuild/freebsd-arm64@npm:0.21.5": "@esbuild/freebsd-arm64@npm:0.21.5":
version: 0.21.5 version: 0.21.5
resolution: "@esbuild/freebsd-arm64@npm:0.21.5" resolution: "@esbuild/freebsd-arm64@npm:0.21.5"
@ -3307,6 +3349,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/freebsd-arm64@npm:0.24.2":
version: 0.24.2
resolution: "@esbuild/freebsd-arm64@npm:0.24.2"
conditions: os=freebsd & cpu=arm64
languageName: node
linkType: hard
"@esbuild/freebsd-x64@npm:0.21.5": "@esbuild/freebsd-x64@npm:0.21.5":
version: 0.21.5 version: 0.21.5
resolution: "@esbuild/freebsd-x64@npm:0.21.5" resolution: "@esbuild/freebsd-x64@npm:0.21.5"
@ -3328,6 +3377,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/freebsd-x64@npm:0.24.2":
version: 0.24.2
resolution: "@esbuild/freebsd-x64@npm:0.24.2"
conditions: os=freebsd & cpu=x64
languageName: node
linkType: hard
"@esbuild/linux-arm64@npm:0.21.5": "@esbuild/linux-arm64@npm:0.21.5":
version: 0.21.5 version: 0.21.5
resolution: "@esbuild/linux-arm64@npm:0.21.5" resolution: "@esbuild/linux-arm64@npm:0.21.5"
@ -3349,6 +3405,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/linux-arm64@npm:0.24.2":
version: 0.24.2
resolution: "@esbuild/linux-arm64@npm:0.24.2"
conditions: os=linux & cpu=arm64
languageName: node
linkType: hard
"@esbuild/linux-arm@npm:0.21.5": "@esbuild/linux-arm@npm:0.21.5":
version: 0.21.5 version: 0.21.5
resolution: "@esbuild/linux-arm@npm:0.21.5" resolution: "@esbuild/linux-arm@npm:0.21.5"
@ -3370,6 +3433,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/linux-arm@npm:0.24.2":
version: 0.24.2
resolution: "@esbuild/linux-arm@npm:0.24.2"
conditions: os=linux & cpu=arm
languageName: node
linkType: hard
"@esbuild/linux-ia32@npm:0.21.5": "@esbuild/linux-ia32@npm:0.21.5":
version: 0.21.5 version: 0.21.5
resolution: "@esbuild/linux-ia32@npm:0.21.5" resolution: "@esbuild/linux-ia32@npm:0.21.5"
@ -3391,6 +3461,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/linux-ia32@npm:0.24.2":
version: 0.24.2
resolution: "@esbuild/linux-ia32@npm:0.24.2"
conditions: os=linux & cpu=ia32
languageName: node
linkType: hard
"@esbuild/linux-loong64@npm:0.21.5": "@esbuild/linux-loong64@npm:0.21.5":
version: 0.21.5 version: 0.21.5
resolution: "@esbuild/linux-loong64@npm:0.21.5" resolution: "@esbuild/linux-loong64@npm:0.21.5"
@ -3412,6 +3489,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/linux-loong64@npm:0.24.2":
version: 0.24.2
resolution: "@esbuild/linux-loong64@npm:0.24.2"
conditions: os=linux & cpu=loong64
languageName: node
linkType: hard
"@esbuild/linux-mips64el@npm:0.21.5": "@esbuild/linux-mips64el@npm:0.21.5":
version: 0.21.5 version: 0.21.5
resolution: "@esbuild/linux-mips64el@npm:0.21.5" resolution: "@esbuild/linux-mips64el@npm:0.21.5"
@ -3433,6 +3517,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/linux-mips64el@npm:0.24.2":
version: 0.24.2
resolution: "@esbuild/linux-mips64el@npm:0.24.2"
conditions: os=linux & cpu=mips64el
languageName: node
linkType: hard
"@esbuild/linux-ppc64@npm:0.21.5": "@esbuild/linux-ppc64@npm:0.21.5":
version: 0.21.5 version: 0.21.5
resolution: "@esbuild/linux-ppc64@npm:0.21.5" resolution: "@esbuild/linux-ppc64@npm:0.21.5"
@ -3454,6 +3545,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/linux-ppc64@npm:0.24.2":
version: 0.24.2
resolution: "@esbuild/linux-ppc64@npm:0.24.2"
conditions: os=linux & cpu=ppc64
languageName: node
linkType: hard
"@esbuild/linux-riscv64@npm:0.21.5": "@esbuild/linux-riscv64@npm:0.21.5":
version: 0.21.5 version: 0.21.5
resolution: "@esbuild/linux-riscv64@npm:0.21.5" resolution: "@esbuild/linux-riscv64@npm:0.21.5"
@ -3475,6 +3573,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/linux-riscv64@npm:0.24.2":
version: 0.24.2
resolution: "@esbuild/linux-riscv64@npm:0.24.2"
conditions: os=linux & cpu=riscv64
languageName: node
linkType: hard
"@esbuild/linux-s390x@npm:0.21.5": "@esbuild/linux-s390x@npm:0.21.5":
version: 0.21.5 version: 0.21.5
resolution: "@esbuild/linux-s390x@npm:0.21.5" resolution: "@esbuild/linux-s390x@npm:0.21.5"
@ -3496,6 +3601,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/linux-s390x@npm:0.24.2":
version: 0.24.2
resolution: "@esbuild/linux-s390x@npm:0.24.2"
conditions: os=linux & cpu=s390x
languageName: node
linkType: hard
"@esbuild/linux-x64@npm:0.21.5": "@esbuild/linux-x64@npm:0.21.5":
version: 0.21.5 version: 0.21.5
resolution: "@esbuild/linux-x64@npm:0.21.5" resolution: "@esbuild/linux-x64@npm:0.21.5"
@ -3517,6 +3629,20 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/linux-x64@npm:0.24.2":
version: 0.24.2
resolution: "@esbuild/linux-x64@npm:0.24.2"
conditions: os=linux & cpu=x64
languageName: node
linkType: hard
"@esbuild/netbsd-arm64@npm:0.24.2":
version: 0.24.2
resolution: "@esbuild/netbsd-arm64@npm:0.24.2"
conditions: os=netbsd & cpu=arm64
languageName: node
linkType: hard
"@esbuild/netbsd-x64@npm:0.21.5": "@esbuild/netbsd-x64@npm:0.21.5":
version: 0.21.5 version: 0.21.5
resolution: "@esbuild/netbsd-x64@npm:0.21.5" resolution: "@esbuild/netbsd-x64@npm:0.21.5"
@ -3538,6 +3664,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/netbsd-x64@npm:0.24.2":
version: 0.24.2
resolution: "@esbuild/netbsd-x64@npm:0.24.2"
conditions: os=netbsd & cpu=x64
languageName: node
linkType: hard
"@esbuild/openbsd-arm64@npm:0.23.1": "@esbuild/openbsd-arm64@npm:0.23.1":
version: 0.23.1 version: 0.23.1
resolution: "@esbuild/openbsd-arm64@npm:0.23.1" resolution: "@esbuild/openbsd-arm64@npm:0.23.1"
@ -3552,6 +3685,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/openbsd-arm64@npm:0.24.2":
version: 0.24.2
resolution: "@esbuild/openbsd-arm64@npm:0.24.2"
conditions: os=openbsd & cpu=arm64
languageName: node
linkType: hard
"@esbuild/openbsd-x64@npm:0.21.5": "@esbuild/openbsd-x64@npm:0.21.5":
version: 0.21.5 version: 0.21.5
resolution: "@esbuild/openbsd-x64@npm:0.21.5" resolution: "@esbuild/openbsd-x64@npm:0.21.5"
@ -3573,6 +3713,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/openbsd-x64@npm:0.24.2":
version: 0.24.2
resolution: "@esbuild/openbsd-x64@npm:0.24.2"
conditions: os=openbsd & cpu=x64
languageName: node
linkType: hard
"@esbuild/sunos-x64@npm:0.21.5": "@esbuild/sunos-x64@npm:0.21.5":
version: 0.21.5 version: 0.21.5
resolution: "@esbuild/sunos-x64@npm:0.21.5" resolution: "@esbuild/sunos-x64@npm:0.21.5"
@ -3594,6 +3741,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/sunos-x64@npm:0.24.2":
version: 0.24.2
resolution: "@esbuild/sunos-x64@npm:0.24.2"
conditions: os=sunos & cpu=x64
languageName: node
linkType: hard
"@esbuild/win32-arm64@npm:0.21.5": "@esbuild/win32-arm64@npm:0.21.5":
version: 0.21.5 version: 0.21.5
resolution: "@esbuild/win32-arm64@npm:0.21.5" resolution: "@esbuild/win32-arm64@npm:0.21.5"
@ -3615,6 +3769,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/win32-arm64@npm:0.24.2":
version: 0.24.2
resolution: "@esbuild/win32-arm64@npm:0.24.2"
conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
"@esbuild/win32-ia32@npm:0.21.5": "@esbuild/win32-ia32@npm:0.21.5":
version: 0.21.5 version: 0.21.5
resolution: "@esbuild/win32-ia32@npm:0.21.5" resolution: "@esbuild/win32-ia32@npm:0.21.5"
@ -3636,6 +3797,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/win32-ia32@npm:0.24.2":
version: 0.24.2
resolution: "@esbuild/win32-ia32@npm:0.24.2"
conditions: os=win32 & cpu=ia32
languageName: node
linkType: hard
"@esbuild/win32-x64@npm:0.21.5": "@esbuild/win32-x64@npm:0.21.5":
version: 0.21.5 version: 0.21.5
resolution: "@esbuild/win32-x64@npm:0.21.5" resolution: "@esbuild/win32-x64@npm:0.21.5"
@ -3657,6 +3825,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/win32-x64@npm:0.24.2":
version: 0.24.2
resolution: "@esbuild/win32-x64@npm:0.24.2"
conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": "@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0":
version: 4.4.1 version: 4.4.1
resolution: "@eslint-community/eslint-utils@npm:4.4.1" resolution: "@eslint-community/eslint-utils@npm:4.4.1"
@ -3764,17 +3939,17 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@floating-ui/react@npm:^0.26.28": "@floating-ui/react@npm:^0.27.2":
version: 0.26.28 version: 0.27.2
resolution: "@floating-ui/react@npm:0.26.28" resolution: "@floating-ui/react@npm:0.27.2"
dependencies: dependencies:
"@floating-ui/react-dom": "npm:^2.1.2" "@floating-ui/react-dom": "npm:^2.1.2"
"@floating-ui/utils": "npm:^0.2.8" "@floating-ui/utils": "npm:^0.2.8"
tabbable: "npm:^6.0.0" tabbable: "npm:^6.0.0"
peerDependencies: peerDependencies:
react: ">=16.8.0" react: ">=17.0.0"
react-dom: ">=16.8.0" react-dom: ">=17.0.0"
checksum: 10c0/a42df129e1e976fe8ba3f4c8efdda265a0196c1b66b83f2b9b27423d08dcc765406f893aeff9d830e70e3f14a9d4c490867eb4c32983317cbaa33863b0fae6f6 checksum: 10c0/7de7810b501422a12e4d4089042dc8ab9de8a95f53003a4a5e2b25fd8b2ee0dddcfab996a26558ec4614c2e15ce1b68d2e06f188bec55de7346c904610d50837
languageName: node languageName: node
linkType: hard linkType: hard
@ -4803,9 +4978,9 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@rollup/plugin-node-resolve@npm:^15.3.0": "@rollup/plugin-node-resolve@npm:^16.0.0":
version: 15.3.0 version: 16.0.0
resolution: "@rollup/plugin-node-resolve@npm:15.3.0" resolution: "@rollup/plugin-node-resolve@npm:16.0.0"
dependencies: dependencies:
"@rollup/pluginutils": "npm:^5.0.1" "@rollup/pluginutils": "npm:^5.0.1"
"@types/resolve": "npm:1.20.2" "@types/resolve": "npm:1.20.2"
@ -4817,7 +4992,7 @@ __metadata:
peerDependenciesMeta: peerDependenciesMeta:
rollup: rollup:
optional: true optional: true
checksum: 10c0/5f3b11f9f6d00fe9fd3fe1977cc71f6a99c2b13d0ee82ad6822c4c4ecfc98854791c5a505798762f7e2332d9d67568a561e89aa8268ed3b1668563be1845109e checksum: 10c0/b63deb6fc14b37070ccaffacc8c10c9720f28ce7632f4fe2ee77064c0c79bcc3fe060fb77160e673c9fd847307252f25a2983030bd54f1888324063c69ae1399
languageName: node languageName: node
linkType: hard linkType: hard
@ -6522,12 +6697,12 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@types/react-dom@npm:^18.3.1": "@types/react-dom@npm:^19.0.2":
version: 18.3.1 version: 19.0.2
resolution: "@types/react-dom@npm:18.3.1" resolution: "@types/react-dom@npm:19.0.2"
dependencies: peerDependencies:
"@types/react": "npm:*" "@types/react": ^19.0.0
checksum: 10c0/8b416551c60bb6bd8ec10e198c957910cfb271bc3922463040b0d57cf4739cdcd24b13224f8d68f10318926e1ec3cd69af0af79f0291b599a992f8c80d47f1eb checksum: 10c0/3d0c7b78dbe8df64ea769f30af990a5950173a8321c745fe11094d765423f7964c3519dca6e7cd36b4be6521c8efc690bdd3b79b327b229dd1e9d5a8bad677dd
languageName: node languageName: node
linkType: hard linkType: hard
@ -6573,13 +6748,12 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@types/react@npm:^18.3.13": "@types/react@npm:^19.0.2":
version: 18.3.13 version: 19.0.2
resolution: "@types/react@npm:18.3.13" resolution: "@types/react@npm:19.0.2"
dependencies: dependencies:
"@types/prop-types": "npm:*"
csstype: "npm:^3.0.2" csstype: "npm:^3.0.2"
checksum: 10c0/91815e00157deb179fa670aa2dfc491952698b7743ffddca0e3e0f16e7a18454f3f5ef72321a07386c49e721563b9d280dbbdfae039face764e2fdd8ad949d4b checksum: 10c0/8992f39701fcf1bf893ef8f94a56196445667baf08fe4f6050a14e229a17aad3265ad3efc01595ff3b4d5d5c69da885f9aa4ff80f164a613018734efcff1eb8f
languageName: node languageName: node
linkType: hard linkType: hard
@ -6793,15 +6967,15 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@typescript-eslint/eslint-plugin@npm:8.18.0": "@typescript-eslint/eslint-plugin@npm:8.18.2":
version: 8.18.0 version: 8.18.2
resolution: "@typescript-eslint/eslint-plugin@npm:8.18.0" resolution: "@typescript-eslint/eslint-plugin@npm:8.18.2"
dependencies: dependencies:
"@eslint-community/regexpp": "npm:^4.10.0" "@eslint-community/regexpp": "npm:^4.10.0"
"@typescript-eslint/scope-manager": "npm:8.18.0" "@typescript-eslint/scope-manager": "npm:8.18.2"
"@typescript-eslint/type-utils": "npm:8.18.0" "@typescript-eslint/type-utils": "npm:8.18.2"
"@typescript-eslint/utils": "npm:8.18.0" "@typescript-eslint/utils": "npm:8.18.2"
"@typescript-eslint/visitor-keys": "npm:8.18.0" "@typescript-eslint/visitor-keys": "npm:8.18.2"
graphemer: "npm:^1.4.0" graphemer: "npm:^1.4.0"
ignore: "npm:^5.3.1" ignore: "npm:^5.3.1"
natural-compare: "npm:^1.4.0" natural-compare: "npm:^1.4.0"
@ -6810,64 +6984,64 @@ __metadata:
"@typescript-eslint/parser": ^8.0.0 || ^8.0.0-alpha.0 "@typescript-eslint/parser": ^8.0.0 || ^8.0.0-alpha.0
eslint: ^8.57.0 || ^9.0.0 eslint: ^8.57.0 || ^9.0.0
typescript: ">=4.8.4 <5.8.0" typescript: ">=4.8.4 <5.8.0"
checksum: 10c0/c338da1b96c41d7b94401a6711659d0fef3acb691eff7a958f9d3aa0442a858830daad67e3575288a4f4669572e2b690517a513519b404a465ad68fe0a82d3ec checksum: 10c0/ce854835a12747cd8efea5b70921e1a80b62af2a2d311b09343862a6af225b821a6729784547d37eb5f8eb286d1f086f41f305445adc3a054e37cc8c71561ccd
languageName: node languageName: node
linkType: hard linkType: hard
"@typescript-eslint/parser@npm:8.18.0": "@typescript-eslint/parser@npm:8.18.2":
version: 8.18.0 version: 8.18.2
resolution: "@typescript-eslint/parser@npm:8.18.0" resolution: "@typescript-eslint/parser@npm:8.18.2"
dependencies: dependencies:
"@typescript-eslint/scope-manager": "npm:8.18.0" "@typescript-eslint/scope-manager": "npm:8.18.2"
"@typescript-eslint/types": "npm:8.18.0" "@typescript-eslint/types": "npm:8.18.2"
"@typescript-eslint/typescript-estree": "npm:8.18.0" "@typescript-eslint/typescript-estree": "npm:8.18.2"
"@typescript-eslint/visitor-keys": "npm:8.18.0" "@typescript-eslint/visitor-keys": "npm:8.18.2"
debug: "npm:^4.3.4" debug: "npm:^4.3.4"
peerDependencies: peerDependencies:
eslint: ^8.57.0 || ^9.0.0 eslint: ^8.57.0 || ^9.0.0
typescript: ">=4.8.4 <5.8.0" typescript: ">=4.8.4 <5.8.0"
checksum: 10c0/d3a062511c24dfcf522a645db1153022d49aa3bb05e288c22474cf04dc1d836f877eb9d2733947e448981ffb16e4de50d4ebe7570a268733a641f228ca6c4849 checksum: 10c0/ea28130e0a2733e3e40708ddfbb7b6522d9644e49cae2c3dc3faddd7ac7e7f73ed9775f19463ca0deca55edb52f5d9d522c206bb2a14fe3c9c6eef03d144b41f
languageName: node languageName: node
linkType: hard linkType: hard
"@typescript-eslint/scope-manager@npm:8.18.0": "@typescript-eslint/scope-manager@npm:8.18.2":
version: 8.18.0 version: 8.18.2
resolution: "@typescript-eslint/scope-manager@npm:8.18.0" resolution: "@typescript-eslint/scope-manager@npm:8.18.2"
dependencies: dependencies:
"@typescript-eslint/types": "npm:8.18.0" "@typescript-eslint/types": "npm:8.18.2"
"@typescript-eslint/visitor-keys": "npm:8.18.0" "@typescript-eslint/visitor-keys": "npm:8.18.2"
checksum: 10c0/6bf6532fd43f2b55b9b47fa8b0217c5b5a03f022e869a6a21228fc3ae04c0ac6c5ae5d6026866d189ba424d2f98cc6fbd2a34f909d241c9b86c031afd808f90c checksum: 10c0/2c05f5361e84d687555717bfb15988d5c11601c1094edeaafc8db5c961359982d7aeb192d775d348ab65ac43c5a6c968f3e8503ee1e6bf875aca27588907139f
languageName: node languageName: node
linkType: hard linkType: hard
"@typescript-eslint/type-utils@npm:8.18.0": "@typescript-eslint/type-utils@npm:8.18.2":
version: 8.18.0 version: 8.18.2
resolution: "@typescript-eslint/type-utils@npm:8.18.0" resolution: "@typescript-eslint/type-utils@npm:8.18.2"
dependencies: dependencies:
"@typescript-eslint/typescript-estree": "npm:8.18.0" "@typescript-eslint/typescript-estree": "npm:8.18.2"
"@typescript-eslint/utils": "npm:8.18.0" "@typescript-eslint/utils": "npm:8.18.2"
debug: "npm:^4.3.4" debug: "npm:^4.3.4"
ts-api-utils: "npm:^1.3.0" ts-api-utils: "npm:^1.3.0"
peerDependencies: peerDependencies:
eslint: ^8.57.0 || ^9.0.0 eslint: ^8.57.0 || ^9.0.0
typescript: ">=4.8.4 <5.8.0" typescript: ">=4.8.4 <5.8.0"
checksum: 10c0/c0fcf201c3b53f9374c0571198a639c81536170141caa08fd0f47094a596b1f82f839a849eac5832f954345c567dccb45b2ee1c0872c513331165f7bcb812396 checksum: 10c0/0441ca33f7381abae559e188bd7b2844159806e8bf5ab8d6f6d9b3a7a6bf9f9d0babf8452e83565da0e9841f656b25f44fd96f40bda1006c934535e37a997c6a
languageName: node languageName: node
linkType: hard linkType: hard
"@typescript-eslint/types@npm:8.18.0": "@typescript-eslint/types@npm:8.18.2":
version: 8.18.0 version: 8.18.2
resolution: "@typescript-eslint/types@npm:8.18.0" resolution: "@typescript-eslint/types@npm:8.18.2"
checksum: 10c0/2dd7468c3f1c305545268b72c3a333488e6ab1b628c5f65081d895866422b9376c21634a7aac437805f84b22e352b6a8fc4dcf925ef4a8fd7d1898b8359f71be checksum: 10c0/4abf252671dd7c3a5c9b7ae2f523d91b04d937dbb601f3bc0182c234d50e4958be67248c1bb37833584ff0128844243145753614c7e80615b6cd6813f0713872
languageName: node languageName: node
linkType: hard linkType: hard
"@typescript-eslint/typescript-estree@npm:8.18.0": "@typescript-eslint/typescript-estree@npm:8.18.2":
version: 8.18.0 version: 8.18.2
resolution: "@typescript-eslint/typescript-estree@npm:8.18.0" resolution: "@typescript-eslint/typescript-estree@npm:8.18.2"
dependencies: dependencies:
"@typescript-eslint/types": "npm:8.18.0" "@typescript-eslint/types": "npm:8.18.2"
"@typescript-eslint/visitor-keys": "npm:8.18.0" "@typescript-eslint/visitor-keys": "npm:8.18.2"
debug: "npm:^4.3.4" debug: "npm:^4.3.4"
fast-glob: "npm:^3.3.2" fast-glob: "npm:^3.3.2"
is-glob: "npm:^4.0.3" is-glob: "npm:^4.0.3"
@ -6876,32 +7050,32 @@ __metadata:
ts-api-utils: "npm:^1.3.0" ts-api-utils: "npm:^1.3.0"
peerDependencies: peerDependencies:
typescript: ">=4.8.4 <5.8.0" typescript: ">=4.8.4 <5.8.0"
checksum: 10c0/87b432b190b627314f007b17b2371898db78baaa3df67a0d9a94d080d88a7a307906b54a735084cacef37f6421e2b9c3320040617e73fe54eac2bf22c610f1ec checksum: 10c0/648296d6c95d80d37bdb5ee6662554af425ff85f1c4805ea344234a1c386c91a36b05cddf52c80264912b29693d3e1b9a45d84414a3aee1393ace2d0babc9e95
languageName: node languageName: node
linkType: hard linkType: hard
"@typescript-eslint/utils@npm:8.18.0": "@typescript-eslint/utils@npm:8.18.2":
version: 8.18.0 version: 8.18.2
resolution: "@typescript-eslint/utils@npm:8.18.0" resolution: "@typescript-eslint/utils@npm:8.18.2"
dependencies: dependencies:
"@eslint-community/eslint-utils": "npm:^4.4.0" "@eslint-community/eslint-utils": "npm:^4.4.0"
"@typescript-eslint/scope-manager": "npm:8.18.0" "@typescript-eslint/scope-manager": "npm:8.18.2"
"@typescript-eslint/types": "npm:8.18.0" "@typescript-eslint/types": "npm:8.18.2"
"@typescript-eslint/typescript-estree": "npm:8.18.0" "@typescript-eslint/typescript-estree": "npm:8.18.2"
peerDependencies: peerDependencies:
eslint: ^8.57.0 || ^9.0.0 eslint: ^8.57.0 || ^9.0.0
typescript: ">=4.8.4 <5.8.0" typescript: ">=4.8.4 <5.8.0"
checksum: 10c0/58a2fc1e404d1f905c2a958d995824eb4abc6e73836b186717550677f8b1d17954acc369feddb83277350915388bc3d8b721423c37777b8b8017fc29c89ec6ee checksum: 10c0/1cb86e2e4f4e29cbaebe4272c15d98f6193b1476f65dd028d77bf4fd09e715b01d82619509c466b95056148db8d3e04f0a3ef27dc2f034a7c7ab4b2d429e58bb
languageName: node languageName: node
linkType: hard linkType: hard
"@typescript-eslint/visitor-keys@npm:8.18.0": "@typescript-eslint/visitor-keys@npm:8.18.2":
version: 8.18.0 version: 8.18.2
resolution: "@typescript-eslint/visitor-keys@npm:8.18.0" resolution: "@typescript-eslint/visitor-keys@npm:8.18.2"
dependencies: dependencies:
"@typescript-eslint/types": "npm:8.18.0" "@typescript-eslint/types": "npm:8.18.2"
eslint-visitor-keys: "npm:^4.2.0" eslint-visitor-keys: "npm:^4.2.0"
checksum: 10c0/d4cdc2adab553098b5be7117fb7df76fb66cfd380528881a0a8c2a9eee03bf8baddda07d15ca0bd3ed8b35c379b3f449292183df18e3e81898dbcadafcb708b8 checksum: 10c0/b8fe05bc3bafa7930d6671c2e1807ae47788060eb573e6a000c9597690dfaff6a4eb9f6f934719a18bae631d238ca32847510aeecc61032170e58ab45244e869
languageName: node languageName: node
linkType: hard linkType: hard
@ -10711,7 +10885,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"esbuild@npm:^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0, esbuild@npm:^0.24.0": "esbuild@npm:^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0":
version: 0.24.0 version: 0.24.0
resolution: "esbuild@npm:0.24.0" resolution: "esbuild@npm:0.24.0"
dependencies: dependencies:
@ -10874,6 +11048,92 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"esbuild@npm:^0.24.2":
version: 0.24.2
resolution: "esbuild@npm:0.24.2"
dependencies:
"@esbuild/aix-ppc64": "npm:0.24.2"
"@esbuild/android-arm": "npm:0.24.2"
"@esbuild/android-arm64": "npm:0.24.2"
"@esbuild/android-x64": "npm:0.24.2"
"@esbuild/darwin-arm64": "npm:0.24.2"
"@esbuild/darwin-x64": "npm:0.24.2"
"@esbuild/freebsd-arm64": "npm:0.24.2"
"@esbuild/freebsd-x64": "npm:0.24.2"
"@esbuild/linux-arm": "npm:0.24.2"
"@esbuild/linux-arm64": "npm:0.24.2"
"@esbuild/linux-ia32": "npm:0.24.2"
"@esbuild/linux-loong64": "npm:0.24.2"
"@esbuild/linux-mips64el": "npm:0.24.2"
"@esbuild/linux-ppc64": "npm:0.24.2"
"@esbuild/linux-riscv64": "npm:0.24.2"
"@esbuild/linux-s390x": "npm:0.24.2"
"@esbuild/linux-x64": "npm:0.24.2"
"@esbuild/netbsd-arm64": "npm:0.24.2"
"@esbuild/netbsd-x64": "npm:0.24.2"
"@esbuild/openbsd-arm64": "npm:0.24.2"
"@esbuild/openbsd-x64": "npm:0.24.2"
"@esbuild/sunos-x64": "npm:0.24.2"
"@esbuild/win32-arm64": "npm:0.24.2"
"@esbuild/win32-ia32": "npm:0.24.2"
"@esbuild/win32-x64": "npm:0.24.2"
dependenciesMeta:
"@esbuild/aix-ppc64":
optional: true
"@esbuild/android-arm":
optional: true
"@esbuild/android-arm64":
optional: true
"@esbuild/android-x64":
optional: true
"@esbuild/darwin-arm64":
optional: true
"@esbuild/darwin-x64":
optional: true
"@esbuild/freebsd-arm64":
optional: true
"@esbuild/freebsd-x64":
optional: true
"@esbuild/linux-arm":
optional: true
"@esbuild/linux-arm64":
optional: true
"@esbuild/linux-ia32":
optional: true
"@esbuild/linux-loong64":
optional: true
"@esbuild/linux-mips64el":
optional: true
"@esbuild/linux-ppc64":
optional: true
"@esbuild/linux-riscv64":
optional: true
"@esbuild/linux-s390x":
optional: true
"@esbuild/linux-x64":
optional: true
"@esbuild/netbsd-arm64":
optional: true
"@esbuild/netbsd-x64":
optional: true
"@esbuild/openbsd-arm64":
optional: true
"@esbuild/openbsd-x64":
optional: true
"@esbuild/sunos-x64":
optional: true
"@esbuild/win32-arm64":
optional: true
"@esbuild/win32-ia32":
optional: true
"@esbuild/win32-x64":
optional: true
bin:
esbuild: bin/esbuild
checksum: 10c0/5a25bb08b6ba23db6e66851828d848bd3ff87c005a48c02d83e38879058929878a6baa5a414e1141faee0d1dece3f32b5fbc2a87b82ed6a7aa857cf40359aeb5
languageName: node
linkType: hard
"esbuild@npm:~0.23.0": "esbuild@npm:~0.23.0":
version: 0.23.1 version: 0.23.1
resolution: "esbuild@npm:0.23.1" resolution: "esbuild@npm:0.23.1"
@ -17805,7 +18065,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"react-dom@npm:^16.8.0 || ^17.0.0 || ^18.0.0, react-dom@npm:^18.0.0, react-dom@npm:^18.3.1": "react-dom@npm:^16.8.0 || ^17.0.0 || ^18.0.0":
version: 18.3.1 version: 18.3.1
resolution: "react-dom@npm:18.3.1" resolution: "react-dom@npm:18.3.1"
dependencies: dependencies:
@ -17817,6 +18077,17 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"react-dom@npm:^19.0.0":
version: 19.0.0
resolution: "react-dom@npm:19.0.0"
dependencies:
scheduler: "npm:^0.25.0"
peerDependencies:
react: ^19.0.0
checksum: 10c0/a36ce7ab507b237ae2759c984cdaad4af4096d8199fb65b3815c16825e5cfeb7293da790a3fc2184b52bfba7ba3ff31c058c01947aff6fd1a3701632aabaa6a9
languageName: node
linkType: hard
"react-error-overlay@npm:^6.0.11": "react-error-overlay@npm:^6.0.11":
version: 6.0.11 version: 6.0.11
resolution: "react-error-overlay@npm:6.0.11" resolution: "react-error-overlay@npm:6.0.11"
@ -18019,7 +18290,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"react@npm:^16.8.0 || ^17.0.0 || ^18.0.0, react@npm:^18.0.0, react@npm:^18.3.1": "react@npm:^16.8.0 || ^17.0.0 || ^18.0.0":
version: 18.3.1 version: 18.3.1
resolution: "react@npm:18.3.1" resolution: "react@npm:18.3.1"
dependencies: dependencies:
@ -18028,6 +18299,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"react@npm:^19.0.0":
version: 19.0.0
resolution: "react@npm:19.0.0"
checksum: 10c0/9cad8f103e8e3a16d15cb18a0d8115d8bd9f9e1ce3420310aea381eb42aa0a4f812cf047bb5441349257a05fba8a291515691e3cb51267279b2d2c3253f38471
languageName: node
linkType: hard
"read-binary-file-arch@npm:^1.0.6": "read-binary-file-arch@npm:^1.0.6":
version: 1.0.6 version: 1.0.6
resolution: "read-binary-file-arch@npm:1.0.6" resolution: "read-binary-file-arch@npm:1.0.6"
@ -19404,6 +19682,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"scheduler@npm:^0.25.0":
version: 0.25.0
resolution: "scheduler@npm:0.25.0"
checksum: 10c0/a4bb1da406b613ce72c1299db43759526058fdcc413999c3c3e0db8956df7633acf395cb20eb2303b6a65d658d66b6585d344460abaee8080b4aa931f10eaafe
languageName: node
linkType: hard
"schema-utils@npm:2.7.0": "schema-utils@npm:2.7.0":
version: 2.7.0 version: 2.7.0
resolution: "schema-utils@npm:2.7.0" resolution: "schema-utils@npm:2.7.0"
@ -20960,17 +21245,17 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"typescript-eslint@npm:^8.18.0": "typescript-eslint@npm:^8.18.2":
version: 8.18.0 version: 8.18.2
resolution: "typescript-eslint@npm:8.18.0" resolution: "typescript-eslint@npm:8.18.2"
dependencies: dependencies:
"@typescript-eslint/eslint-plugin": "npm:8.18.0" "@typescript-eslint/eslint-plugin": "npm:8.18.2"
"@typescript-eslint/parser": "npm:8.18.0" "@typescript-eslint/parser": "npm:8.18.2"
"@typescript-eslint/utils": "npm:8.18.0" "@typescript-eslint/utils": "npm:8.18.2"
peerDependencies: peerDependencies:
eslint: ^8.57.0 || ^9.0.0 eslint: ^8.57.0 || ^9.0.0
typescript: ">=4.8.4 <5.8.0" typescript: ">=4.8.4 <5.8.0"
checksum: 10c0/dda882cbfc1ebad6903864571bc69bfd7e32e17fec67d98fdfab2bd652348d425c6a1c3697734d59cd5dd15d26d496db3c3808c1de5840fa29b9e76184fa1865 checksum: 10c0/30a0314a2484bcbe286fc6eda55784d9954605c7e60ddd35281da90c6fcb75a40bd3abd84617814dff4e1504d762234407c99153fdd812dce712cef11bbb9b3f
languageName: node languageName: node
linkType: hard linkType: hard
@ -21730,11 +22015,11 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"vite@npm:^6.0.3": "vite@npm:^6.0.6":
version: 6.0.3 version: 6.0.6
resolution: "vite@npm:6.0.3" resolution: "vite@npm:6.0.6"
dependencies: dependencies:
esbuild: "npm:^0.24.0" esbuild: "npm:^0.24.2"
fsevents: "npm:~2.3.3" fsevents: "npm:~2.3.3"
postcss: "npm:^8.4.49" postcss: "npm:^8.4.49"
rollup: "npm:^4.23.0" rollup: "npm:^4.23.0"
@ -21778,7 +22063,7 @@ __metadata:
optional: true optional: true
bin: bin:
vite: bin/vite.js vite: bin/vite.js
checksum: 10c0/764ebed14770426a638575b23a51127c630ace873999ab896b0184484d8107e7255cdf64cfb36c65c1ef1d583e44b70a1d14c0f05b89612e834a5806e3964475 checksum: 10c0/144c3f80a7920a4b2fa14f00f99b58ece246455ca9313561a67a227b45dadac3343e406d3c1dbfafa79992ac88f54cb2b040b229997e432daf47594fe8cacec2
languageName: node languageName: node
linkType: hard linkType: hard
@ -21923,8 +22208,8 @@ __metadata:
prettier-plugin-jsdoc: "npm:^1.3.0" prettier-plugin-jsdoc: "npm:^1.3.0"
prettier-plugin-organize-imports: "npm:^4.1.0" prettier-plugin-organize-imports: "npm:^4.1.0"
prism-react-renderer: "npm:^2.3.0" prism-react-renderer: "npm:^2.3.0"
react: "npm:^18.0.0" react: "npm:^19.0.0"
react-dom: "npm:^18.0.0" react-dom: "npm:^19.0.0"
remark-cli: "npm:^12.0.1" remark-cli: "npm:^12.0.1"
remark-frontmatter: "npm:^5.0.0" remark-frontmatter: "npm:^5.0.0"
remark-gfm: "npm:^4.0.0" remark-gfm: "npm:^4.0.0"
@ -21933,7 +22218,7 @@ __metadata:
remark-preset-lint-recommended: "npm:^7.0.0" remark-preset-lint-recommended: "npm:^7.0.0"
remark-typescript-code-import: "npm:^1.0.1" remark-typescript-code-import: "npm:^1.0.1"
typescript: "npm:^5.7.2" typescript: "npm:^5.7.2"
typescript-eslint: "npm:^8.18.0" typescript-eslint: "npm:^8.18.2"
ua-parser-js: "npm:^2.0.0" ua-parser-js: "npm:^2.0.0"
languageName: unknown languageName: unknown
linkType: soft linkType: soft
@ -21944,12 +22229,12 @@ __metadata:
dependencies: dependencies:
"@chromatic-com/storybook": "npm:^3.2.2" "@chromatic-com/storybook": "npm:^3.2.2"
"@eslint/js": "npm:^9.16.0" "@eslint/js": "npm:^9.16.0"
"@floating-ui/react": "npm:^0.26.28" "@floating-ui/react": "npm:^0.27.2"
"@monaco-editor/loader": "npm:^1.4.0" "@monaco-editor/loader": "npm:^1.4.0"
"@monaco-editor/react": "npm:^4.6.0" "@monaco-editor/react": "npm:^4.6.0"
"@observablehq/plot": "npm:^0.6.16" "@observablehq/plot": "npm:^0.6.16"
"@react-hook/resize-observer": "npm:^2.0.2" "@react-hook/resize-observer": "npm:^2.0.2"
"@rollup/plugin-node-resolve": "npm:^15.3.0" "@rollup/plugin-node-resolve": "npm:^16.0.0"
"@storybook/addon-essentials": "npm:^8.4.7" "@storybook/addon-essentials": "npm:^8.4.7"
"@storybook/addon-interactions": "npm:^8.4.7" "@storybook/addon-interactions": "npm:^8.4.7"
"@storybook/addon-links": "npm:^8.4.7" "@storybook/addon-links": "npm:^8.4.7"
@ -21970,8 +22255,8 @@ __metadata:
"@types/papaparse": "npm:^5" "@types/papaparse": "npm:^5"
"@types/pngjs": "npm:^6.0.5" "@types/pngjs": "npm:^6.0.5"
"@types/prop-types": "npm:^15" "@types/prop-types": "npm:^15"
"@types/react": "npm:^18.3.13" "@types/react": "npm:^19.0.2"
"@types/react-dom": "npm:^18.3.1" "@types/react-dom": "npm:^19.0.2"
"@types/semver": "npm:^7" "@types/semver": "npm:^7"
"@types/shell-quote": "npm:^1" "@types/shell-quote": "npm:^1"
"@types/sprintf-js": "npm:^1" "@types/sprintf-js": "npm:^1"
@ -22016,10 +22301,10 @@ __metadata:
prettier-plugin-jsdoc: "npm:^1.3.0" prettier-plugin-jsdoc: "npm:^1.3.0"
prettier-plugin-organize-imports: "npm:^4.1.0" prettier-plugin-organize-imports: "npm:^4.1.0"
prop-types: "npm:^15.8.1" prop-types: "npm:^15.8.1"
react: "npm:^18.3.1" react: "npm:^19.0.0"
react-dnd: "npm:^16.0.1" react-dnd: "npm:^16.0.1"
react-dnd-html5-backend: "npm:^16.0.1" react-dnd-html5-backend: "npm:^16.0.1"
react-dom: "npm:^18.3.1" react-dom: "npm:^19.0.0"
react-frame-component: "npm:^5.2.7" react-frame-component: "npm:^5.2.7"
react-gauge-chart: "npm:^0.5.1" react-gauge-chart: "npm:^0.5.1"
react-markdown: "npm:^9.0.1" react-markdown: "npm:^9.0.1"
@ -22045,9 +22330,9 @@ __metadata:
tslib: "npm:^2.8.1" tslib: "npm:^2.8.1"
tsx: "npm:^4.19.2" tsx: "npm:^4.19.2"
typescript: "npm:^5.7.2" typescript: "npm:^5.7.2"
typescript-eslint: "npm:^8.18.0" typescript-eslint: "npm:^8.18.2"
use-device-pixel-ratio: "npm:^1.1.2" use-device-pixel-ratio: "npm:^1.1.2"
vite: "npm:^6.0.3" vite: "npm:^6.0.6"
vite-plugin-image-optimizer: "npm:^1.1.8" vite-plugin-image-optimizer: "npm:^1.1.8"
vite-plugin-static-copy: "npm:^2.2.0" vite-plugin-static-copy: "npm:^2.2.0"
vite-plugin-svgr: "npm:^4.3.0" vite-plugin-svgr: "npm:^4.3.0"