diff --git a/.changeset/rich-avocados-type.md b/.changeset/rich-avocados-type.md new file mode 100644 index 000000000..dbd5517c8 --- /dev/null +++ b/.changeset/rich-avocados-type.md @@ -0,0 +1,7 @@ +--- +"@ensembleui/react-framework": patch +"@ensembleui/react-kitchen-sink": patch +"@ensembleui/react-runtime": patch +--- + +reduce runtime bundle size by modularize icons diff --git a/apps/kitchen-sink/package.json b/apps/kitchen-sink/package.json index e696f4cc0..a63be27b2 100644 --- a/apps/kitchen-sink/package.json +++ b/apps/kitchen-sink/package.json @@ -5,6 +5,7 @@ "dependencies": { "@ensembleui/react-framework": "workspace:*", "@ensembleui/react-runtime": "workspace:*", + "@mui/icons-material": "^6.4.1", "react": "^18.2.0", "react-dom": "^18.2.0", "web-vitals": "^2.1.4" @@ -22,6 +23,7 @@ "https-browserify": "^1.0.0", "node-polyfill-webpack-plugin": "^2.0.1", "path-browserify": "^1.0.1", + "react-feather": "^2.0.10", "react-scripts": "5.0.1", "stream-browserify": "^3.0.0", "stream-http": "^3.2.0", diff --git a/apps/kitchen-sink/src/App.tsx b/apps/kitchen-sink/src/App.tsx index 16345b2cb..cd6a7c107 100644 --- a/apps/kitchen-sink/src/App.tsx +++ b/apps/kitchen-sink/src/App.tsx @@ -1,6 +1,8 @@ import type { ApplicationDTO } from "@ensembleui/react-framework"; import { EnsembleApp } from "@ensembleui/react-runtime"; +import * as Icons from "react-feather"; // Screens +import React from "react"; import MenuYAML from "./ensemble/screens/menu.yaml"; import HomeYAML from "./ensemble/screens/home.yaml"; import WidgetsYAML from "./ensemble/screens/widgets.yaml"; @@ -143,6 +145,12 @@ const testApp: ApplicationDTO = { }, ], config: EnsembleConfig, + icons: [ + { + icons: Icons, + prefix: "Fe", + }, + ], }; const App: React.FC = () => { diff --git a/apps/kitchen-sink/src/ensemble/screens/menu.yaml b/apps/kitchen-sink/src/ensemble/screens/menu.yaml index 1bdc42e50..e61c3f75a 100644 --- a/apps/kitchen-sink/src/ensemble/screens/menu.yaml +++ b/apps/kitchen-sink/src/ensemble/screens/menu.yaml @@ -30,7 +30,7 @@ ViewGroup: source: /logo.svg items: - label: Home - icon: HomeOutlined + icon: FeHome page: home selected: true - label: Widgets diff --git a/apps/preview/package.json b/apps/preview/package.json index ecbf00a3e..f349ed2f2 100644 --- a/apps/preview/package.json +++ b/apps/preview/package.json @@ -5,6 +5,7 @@ "dependencies": { "@ensembleui/react-framework": "workspace:*", "@ensembleui/react-runtime": "workspace:*", + "@mui/icons-material": "^6.4.1", "antd": "^5.9.0", "firebase": "9.10.0", "lodash-es": "^4.17.21", diff --git a/apps/starter/package.json b/apps/starter/package.json index b9da91bc4..ceaf139ff 100644 --- a/apps/starter/package.json +++ b/apps/starter/package.json @@ -5,6 +5,7 @@ "dependencies": { "@ensembleui/react-framework": "workspace:*", "@ensembleui/react-runtime": "workspace:*", + "@mui/icons-material": "^6.4.1", "firebase": "9.10.0", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/packages/framework/src/shared/dto.ts b/packages/framework/src/shared/dto.ts index 1098777b5..8e294baf8 100644 --- a/packages/framework/src/shared/dto.ts +++ b/packages/framework/src/shared/dto.ts @@ -23,7 +23,7 @@ export interface ApplicationDTO extends Omit { readonly languages?: LanguageDTO[]; readonly config?: string | EnsembleConfigYAML; readonly fonts?: FontDTO[]; - + readonly icons?: IconDTO[]; readonly description?: string; readonly isPublic?: boolean; readonly isAutoGenerated?: boolean; @@ -63,3 +63,8 @@ export interface FontDTO { readonly fontWeight: string; readonly fontStyle: string; } + +export interface IconDTO { + readonly prefix?: string; + readonly icons?: { [key: string]: unknown }; +} diff --git a/packages/runtime/package.json b/packages/runtime/package.json index ef0666ca9..1aaebc28f 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -18,6 +18,7 @@ }, "peerDependencies": { "@ensembleui/react-framework": "*", + "@mui/icons-material": "^6.4.1", "react": "^18.2.0", "react-dom": "^18.2.0" }, @@ -27,7 +28,7 @@ "@emotion/styled": "^11.11.0", "@ensembleui/react-framework": "workspace:*", "@lottiefiles/react-lottie-player": "^3.5.3", - "@mui/icons-material": "^5.14.9", + "@mui/icons-material": "^6.4.1", "@mui/material": "^5.14.9", "@mui/x-date-pickers": "^6.18.3", "@react-oauth/google": "^0.12.1", diff --git a/packages/runtime/src/EnsembleApp.tsx b/packages/runtime/src/EnsembleApp.tsx index b31edcffb..4b4cd7387 100644 --- a/packages/runtime/src/EnsembleApp.tsx +++ b/packages/runtime/src/EnsembleApp.tsx @@ -1,8 +1,9 @@ -import { useEffect, useMemo, useState } from "react"; +import React, { useEffect, useMemo, useState } from "react"; import type { ApplicationDTO, EnsembleAppModel, ApplicationLoader, + IconDTO, } from "@ensembleui/react-framework"; import { ApplicationContextProvider, @@ -13,13 +14,15 @@ import { createBrowserRouter, RouterProvider } from "react-router-dom"; import { ToastContainer } from "react-toastify"; import { injectStyle } from "react-toastify/dist/inject-style"; import { QueryClientProvider } from "@tanstack/react-query"; +import * as Icons from "@mui/icons-material"; import { ThemeProvider } from "./ThemeProvider"; import { EnsembleEntry } from "./runtime/entry"; import { EnsembleScreen } from "./runtime/screen"; import { ErrorPage } from "./runtime/error"; // Register built in widgets; import "./widgets"; -import { WidgetRegistry } from "./registry"; +import type { WidgetComponent } from "./registry"; +import { IconRegistry, WidgetRegistry } from "./registry"; import { createCustomWidget } from "./runtime/customWidget"; import { ModalWrapper } from "./runtime/modal"; @@ -58,6 +61,20 @@ export const EnsembleApp: React.FC = ({ ); }); + Object.entries(Icons).forEach(([name, icon]) => { + IconRegistry.register(name, icon as WidgetComponent); + }); + + appDto?.icons?.forEach((iconSet: IconDTO) => { + const { prefix = "", icons = {} } = iconSet; + Object.entries(icons).forEach(([name, icon]) => { + IconRegistry.register( + `${prefix}${name}`, + icon as WidgetComponent, + ); + }); + }); + setApp(parsedApp); }; diff --git a/packages/runtime/src/registry.tsx b/packages/runtime/src/registry.tsx index 617a6806f..70375082d 100644 --- a/packages/runtime/src/registry.tsx +++ b/packages/runtime/src/registry.tsx @@ -1,11 +1,14 @@ import { Alert } from "antd"; import type { ReactElement } from "react"; -export type WidgetComponent = React.FC; +export type WidgetComponent = React.ComponentType; // eslint-disable-next-line @typescript-eslint/no-explicit-any const registry: { [key: string]: WidgetComponent | undefined } = {}; +// eslint-disable-next-line @typescript-eslint/no-explicit-any +const iconRegistry: { [key: string]: WidgetComponent | undefined } = {}; + export const WidgetRegistry = { register: (name: string, component: WidgetComponent): void => { registry[name] = component; @@ -25,6 +28,29 @@ export const WidgetRegistry = { }, }; +export const IconRegistry = { + register: (name: string, component: WidgetComponent): void => { + iconRegistry[name] = component; + }, + find: (name: string): WidgetComponent | ReactElement => { + const Icon = iconRegistry[name]; + if (!Icon) { + return ; + } + return Icon; + }, + findOrNull: (name: string): WidgetComponent | null => { + return iconRegistry[name] || null; + }, + unregister: (name: string): void => { + delete iconRegistry[name]; + }, +}; + const UnknownWidget: React.FC<{ missingName: string }> = ({ missingName }) => { return ; }; + +const UnknownIcon: React.FC<{ missingName: string }> = ({ missingName }) => { + return ; +}; diff --git a/packages/runtime/src/runtime/menu.tsx b/packages/runtime/src/runtime/menu.tsx index d3348cb11..a981dc090 100644 --- a/packages/runtime/src/runtime/menu.tsx +++ b/packages/runtime/src/runtime/menu.tsx @@ -1,4 +1,4 @@ -import type { PropsWithChildren, ReactNode } from "react"; +import type { PropsWithChildren } from "react"; import React, { useState, useEffect, useCallback, useMemo } from "react"; import { Menu as AntMenu, @@ -6,7 +6,6 @@ import { Drawer as AntDrawer, ConfigProvider, } from "antd"; -import * as MuiIcons from "@mui/icons-material"; import { unwrapWidget, useRegisterBindings, @@ -17,6 +16,8 @@ import { import { Outlet, Link, useLocation } from "react-router-dom"; import { cloneDeep, omit } from "lodash-es"; import { getColor } from "../shared/styles"; +import type { IconProps } from "../shared/types"; +import { normalizeIconProps } from "../shared/utils"; import { EnsembleRuntime } from "./runtime"; // eslint-disable-next-line import/no-cycle import { useEnsembleAction } from "./hooks"; @@ -48,8 +49,8 @@ export interface EnsembleMenuContext { interface MenuItemProps { id?: string; testId?: string; - icon?: string | { [key: string]: unknown }; - activeIcon?: string | { [key: string]: unknown }; + icon?: string | IconProps; + activeIcon?: string | IconProps; iconLibrary?: "default" | "fontAwesome"; label?: string; url?: string; @@ -98,29 +99,6 @@ interface DrawerMenuStyles extends MenuStyles { position?: "left" | "right" | "top" | "bottom"; } -const renderMuiIcon = ( - iconName?: string, - width = "15px", - height = "15px", -): ReactNode => { - if (!iconName) { - return null; - } - - const MuiIconComponent = MuiIcons[iconName as keyof typeof MuiIcons]; - if (MuiIconComponent) { - return ( - - ); - } - return null; -}; - const CustomLink: React.FC = ({ item, children, @@ -358,27 +336,23 @@ const MenuItems: React.FC<{ setSelectedItem, isCollapsed = false, }) => { - const getIcon = useCallback( + const getCustomIcon = useCallback( (item: MenuItemProps) => { const key = selectedItem === item.page ? "activeIcon" : "icon"; - const icon = + const iconProps = selectedItem === item.page && item.activeIcon ? item.activeIcon : item.icon; - if (!icon) { + if (!iconProps) { return null; } - if (typeof icon === "string") { - return renderMuiIcon(icon, styles.iconWidth, styles.iconHeight); - } - return EnsembleRuntime.render([ - { - ...unwrapWidget({ Icon: icon }), - key, - }, - ]); + const icon = normalizeIconProps(iconProps, { + styles: { width: styles.iconWidth, height: styles.iconHeight }, + }); + + return EnsembleRuntime.render([{ ...unwrapWidget({ Icon: icon }), key }]); }, [styles.iconHeight, styles.iconWidth, selectedItem], ); @@ -425,7 +399,7 @@ const MenuItems: React.FC<{ {items.map((item, itemIndex) => ( { if (!item.openNewTab && item.page) { @@ -433,6 +407,7 @@ const MenuItems: React.FC<{ } }} style={{ + gap: "10px", color: selectedItem === item.page ? (styles.selectedColor as string) ?? "white" diff --git a/packages/runtime/src/runtime/modal/index.tsx b/packages/runtime/src/runtime/modal/index.tsx index 4f88c00a2..ce8dd7579 100644 --- a/packages/runtime/src/runtime/modal/index.tsx +++ b/packages/runtime/src/runtime/modal/index.tsx @@ -11,9 +11,11 @@ import { useState, } from "react"; import { createPortal } from "react-dom"; -import OpenInFullIcon from "@mui/icons-material/OpenInFull"; -import CloseFullscreenIcon from "@mui/icons-material/CloseFullscreen"; -import { CloseOutlined } from "@ant-design/icons"; +import { + CloseOutlined, + FullscreenOutlined, + FullscreenExitOutlined, +} from "@ant-design/icons"; import { generateRandomString, useEvaluate } from "@ensembleui/react-framework"; import { isString, omit, pick } from "lodash-es"; import { useNavigate } from "react-router-dom"; @@ -253,7 +255,7 @@ export const ModalWrapper: React.FC = ({ children }) => { const getFullScreenIcon = (index: number): React.ReactNode => isFullScreen[index] ? ( - setIsFullScreen((oldIsFullScreen) => { const newIsFullScreen = [...oldIsFullScreen]; @@ -264,7 +266,7 @@ export const ModalWrapper: React.FC = ({ children }) => { style={iconStyles} /> ) : ( - setIsFullScreen((oldIsFullScreen) => { const newIsFullScreen = [...oldIsFullScreen]; diff --git a/packages/runtime/src/shared/icons.tsx b/packages/runtime/src/shared/icons.tsx deleted file mode 100644 index 9c9ae170f..000000000 --- a/packages/runtime/src/shared/icons.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import * as MuiIcons from "@mui/icons-material"; - -export const renderMuiIcon = ( - iconName: keyof typeof MuiIcons, - width?: string, - height?: string, -) => { - const MuiIconComponent = MuiIcons[iconName]; - if (MuiIconComponent) { - return ( - - ); - } - return null; -}; diff --git a/packages/runtime/src/shared/styles.ts b/packages/runtime/src/shared/styles.ts index 781aefd7c..8d3c7a2eb 100644 --- a/packages/runtime/src/shared/styles.ts +++ b/packages/runtime/src/shared/styles.ts @@ -1,8 +1,7 @@ -import * as Icons from "@mui/icons-material"; -import type { SvgIconComponent } from "@mui/icons-material"; import { get, isInteger } from "lodash-es"; -import React from "react"; -import { TextAlignment } from "./styleSchema"; +import type React from "react"; +import { IconRegistry } from "../registry"; +import type { TextAlignment } from "./styleSchema"; type Color = number | string; @@ -97,8 +96,10 @@ export const getCrossAxis = (crossAxis: string): string | undefined => { } }; -export const getIcon = (name: string): SvgIconComponent | undefined => { - return get(Icons, name) as SvgIconComponent; +export const getIcon = >( + name: string, +): T | undefined => { + return IconRegistry.find(name) as T | undefined; }; export const getComponentStyles = ( diff --git a/packages/runtime/src/shared/utils.ts b/packages/runtime/src/shared/utils.ts new file mode 100644 index 000000000..4e65c577f --- /dev/null +++ b/packages/runtime/src/shared/utils.ts @@ -0,0 +1,13 @@ +import { isString } from "lodash-es"; +import { IconProps } from "./types"; + +export const normalizeIconProps = ( + iconProps?: string | IconProps, + additionalProps?: { [key: string]: unknown }, +): IconProps | undefined => { + const props = isString(iconProps) + ? { name: iconProps, ...(additionalProps || {}) } + : iconProps; + + return props; +}; diff --git a/packages/runtime/src/widgets/Avatar/Avatar.tsx b/packages/runtime/src/widgets/Avatar/Avatar.tsx index a09c5f8c4..867d842fc 100644 --- a/packages/runtime/src/widgets/Avatar/Avatar.tsx +++ b/packages/runtime/src/widgets/Avatar/Avatar.tsx @@ -9,6 +9,8 @@ import { } from "@mui/material"; import { WidgetRegistry } from "../../registry"; import type { EnsembleWidgetStyles, IconProps } from "../../shared/types"; +import { normalizeIconProps } from "../../shared/utils"; +// eslint-disable-next-line import/no-cycle import { Icon } from "../Icon"; import { useEnsembleAction } from "../../runtime/hooks/useEnsembleAction"; import { generateInitials } from "./utils/generateInitials"; @@ -108,20 +110,23 @@ export const Avatar: React.FC = (props) => { onClose={handleMenuClose} open={isMenuOpen} > - {values?.menu.map((menuItem, idx) => ( - handleMenuClick(menuItem)}> - {menuItem.icon ? ( - - - - ) : null} - {menuItem.label} - - ))} + {values?.menu.map((menuItem, idx) => { + const icon = normalizeIconProps(menuItem.icon); + + return ( + handleMenuClick(menuItem)} + > + {icon ? ( + + + + ) : null} + {menuItem.label} + + ); + })} ) : null} diff --git a/packages/runtime/src/widgets/Icon.tsx b/packages/runtime/src/widgets/Icon.tsx index c2b78f4c1..7ec9e570f 100644 --- a/packages/runtime/src/widgets/Icon.tsx +++ b/packages/runtime/src/widgets/Icon.tsx @@ -1,4 +1,4 @@ -import React, { useState } from "react"; +import React, { isValidElement, useState } from "react"; import { useRegisterBindings } from "@ensembleui/react-framework"; import { WidgetRegistry } from "../registry"; import type { IconProps } from "../shared/types"; @@ -50,13 +50,18 @@ export const Icon: React.FC = ({ onMouseLeaveAction?.callback(); setIsMouseOver(false); }; + + if (isValidElement(IconComponent)) { + return IconComponent; + } + return ( onTapActionCallback?.callback()} onMouseEnter={handleMouseOver} onMouseLeave={handleMouseLeave} - sx={{ + style={{ cursor: onTap ? "pointer" : "auto", ...values?.styles, color: values?.color && getColor(String(values.color)), diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ad7d2e5aa..acee412a7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -34,6 +34,7 @@ importers: '@craco/craco': ^7.1.0 '@ensembleui/react-framework': workspace:* '@ensembleui/react-runtime': workspace:* + '@mui/icons-material': ^6.4.1 '@testing-library/jest-dom': ^5.17.0 '@testing-library/react': ^13.4.0 '@testing-library/user-event': ^13.5.0 @@ -47,6 +48,7 @@ importers: path-browserify: ^1.0.1 react: ^18.2.0 react-dom: ^18.2.0 + react-feather: ^2.0.10 react-scripts: 5.0.1 stream-browserify: ^3.0.0 stream-http: ^3.2.0 @@ -58,6 +60,7 @@ importers: dependencies: '@ensembleui/react-framework': link:../../packages/framework '@ensembleui/react-runtime': link:../../packages/runtime + '@mui/icons-material': 6.4.1_fb28c32afc3535fd55e20f7883f1b980 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 web-vitals: 2.1.4 @@ -74,6 +77,7 @@ importers: https-browserify: 1.0.0 node-polyfill-webpack-plugin: 2.0.1 path-browserify: 1.0.1 + react-feather: 2.0.10_react@18.2.0 react-scripts: 5.0.1_d0d00780f67467135f0be55299847f4a stream-browserify: 3.0.0 stream-http: 3.2.0 @@ -87,6 +91,7 @@ importers: '@craco/craco': ^7.1.0 '@ensembleui/react-framework': workspace:* '@ensembleui/react-runtime': workspace:* + '@mui/icons-material': ^6.4.1 '@testing-library/jest-dom': ^5.17.0 '@testing-library/react': ^13.4.0 '@testing-library/user-event': ^13.5.0 @@ -118,6 +123,7 @@ importers: dependencies: '@ensembleui/react-framework': link:../../packages/framework '@ensembleui/react-runtime': link:../../packages/runtime + '@mui/icons-material': 6.4.1_fb28c32afc3535fd55e20f7883f1b980 antd: 5.20.0_react-dom@18.2.0+react@18.2.0 firebase: 9.10.0 lodash-es: 4.17.21 @@ -154,6 +160,7 @@ importers: '@craco/craco': ^7.1.0 '@ensembleui/react-framework': workspace:* '@ensembleui/react-runtime': workspace:* + '@mui/icons-material': ^6.4.1 '@testing-library/jest-dom': ^5.17.0 '@testing-library/react': ^13.4.0 '@testing-library/user-event': ^13.5.0 @@ -179,6 +186,7 @@ importers: dependencies: '@ensembleui/react-framework': link:../../packages/framework '@ensembleui/react-runtime': link:../../packages/runtime + '@mui/icons-material': 6.4.1_fb28c32afc3535fd55e20f7883f1b980 firebase: 9.10.0 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 @@ -336,7 +344,7 @@ importers: '@emotion/styled': ^11.11.0 '@ensembleui/react-framework': workspace:* '@lottiefiles/react-lottie-player': ^3.5.3 - '@mui/icons-material': ^5.14.9 + '@mui/icons-material': ^6.4.1 '@mui/material': ^5.14.9 '@mui/x-date-pickers': ^6.18.3 '@react-oauth/google': ^0.12.1 @@ -374,7 +382,7 @@ importers: '@emotion/styled': 11.11.0_dd4092d1e0c7dc2863a676e563fa1e79 '@ensembleui/react-framework': link:../framework '@lottiefiles/react-lottie-player': 3.5.3 - '@mui/icons-material': 5.15.11_da55fe8c6e6066fef4b7dc0994910613 + '@mui/icons-material': 6.4.1_da55fe8c6e6066fef4b7dc0994910613 '@mui/material': 5.15.11_d729d530559e435818d6dfbb9bc0bc34 '@mui/x-date-pickers': 6.19.6_1dcf445c77f90e2d41581270c9a3b06f '@react-oauth/google': 0.12.1 @@ -446,7 +454,7 @@ packages: react-dom: '>=16.9.0' dependencies: '@ant-design/cssinjs': 1.21.0 - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 rc-util: 5.43.0 dev: true @@ -457,7 +465,7 @@ packages: react-dom: '>=16.9.0' dependencies: '@ant-design/cssinjs': 1.21.0_react-dom@18.2.0+react@18.2.0 - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 rc-util: 5.43.0_react-dom@18.2.0+react@18.2.0 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 @@ -469,7 +477,7 @@ packages: react: '>=16.0.0' react-dom: '>=16.0.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@emotion/hash': 0.8.0 '@emotion/unitless': 0.7.5 classnames: 2.5.1 @@ -484,7 +492,7 @@ packages: react: '>=16.0.0' react-dom: '>=16.0.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@emotion/hash': 0.8.0 '@emotion/unitless': 0.7.5 classnames: 2.5.1 @@ -499,7 +507,7 @@ packages: resolution: {integrity: sha512-y2217gk4NqL35giHl72o6Zzqji9O7vHh9YmhUVkPtAOpoTCH4uWxo/pr4VE8t0+ChEPs0qo4eJRC5Q1eXWo3vA==} engines: {node: '>=8.x'} dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 /@ant-design/icons-svg/4.4.2: resolution: {integrity: sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==} @@ -527,7 +535,7 @@ packages: dependencies: '@ant-design/colors': 7.1.0 '@ant-design/icons-svg': 4.4.2 - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-util: 5.43.0_react-dom@18.2.0+react@18.2.0 react: 18.2.0 @@ -539,7 +547,7 @@ packages: peerDependencies: react: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 json2mq: 0.2.0 resize-observer-polyfill: 1.5.1 @@ -551,7 +559,7 @@ packages: peerDependencies: react: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 json2mq: 0.2.0 react: 18.2.0 @@ -2647,6 +2655,12 @@ packages: dependencies: regenerator-runtime: 0.14.1 + /@babel/runtime/7.26.0: + resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.1 + /@babel/template/7.24.0: resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} engines: {node: '>=6.9.0'} @@ -3065,7 +3079,7 @@ packages: resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} dependencies: '@babel/helper-module-imports': 7.22.15 - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@emotion/hash': 0.9.1 '@emotion/memoize': 0.8.1 '@emotion/serialize': 1.1.3 @@ -4519,7 +4533,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@floating-ui/react-dom': 2.0.8 '@mui/types': 7.2.13_@types+react@18.2.62 '@mui/utils': 5.15.11_@types+react@18.2.62 @@ -4533,22 +4547,38 @@ packages: resolution: {integrity: sha512-JVrJ9Jo4gyU707ujnRzmE8ABBWpXd6FwL9GYULmwZRtfPg89ggXs/S3MStQkpJ1JRWfdLL6S5syXmgQGq5EDAw==} dev: true - /@mui/icons-material/5.15.11_da55fe8c6e6066fef4b7dc0994910613: - resolution: {integrity: sha512-R5ZoQqnKpd+5Ew7mBygTFLxgYsQHPhgR3TDXSgIHYIjGzYuyPLmGLSdcPUoMdi6kxiYqHlpPj4NJxlbaFD0UHA==} - engines: {node: '>=12.0.0'} + /@mui/icons-material/6.4.1_da55fe8c6e6066fef4b7dc0994910613: + resolution: {integrity: sha512-wsxFcUTQxt4s+7Bg4GgobqRjyaHLmZGNOs+HJpbwrwmLbT6mhIJxhpqsKzzWq9aDY8xIe7HCjhpH7XI5UD6teA==} + engines: {node: '>=14.0.0'} peerDependencies: - '@mui/material': ^5.0.0 - '@types/react': ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 + '@mui/material': ^6.4.1 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: '@types/react': optional: true dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@mui/material': 5.15.11_d729d530559e435818d6dfbb9bc0bc34 '@types/react': 18.2.62 dev: true + /@mui/icons-material/6.4.1_fb28c32afc3535fd55e20f7883f1b980: + resolution: {integrity: sha512-wsxFcUTQxt4s+7Bg4GgobqRjyaHLmZGNOs+HJpbwrwmLbT6mhIJxhpqsKzzWq9aDY8xIe7HCjhpH7XI5UD6teA==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@mui/material': ^6.4.1 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.26.0 + '@types/react': 18.2.62 + react: 18.2.0 + dev: false + /@mui/material/5.15.11_d729d530559e435818d6dfbb9bc0bc34: resolution: {integrity: sha512-FA3eEuEZaDaxgN3CgfXezMWbCZ4VCeU/sv0F0/PK5n42qIgsPVD6q+j71qS7/62sp6wRFMHtDMpXRlN+tT/7NA==} engines: {node: '>=12.0.0'} @@ -4593,7 +4623,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@mui/utils': 5.15.11_@types+react@18.2.62 '@types/react': 18.2.62 prop-types: 15.8.1 @@ -4612,7 +4642,7 @@ packages: '@emotion/styled': optional: true dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@emotion/cache': 11.11.0 '@emotion/react': 11.11.4_@types+react@18.2.62 '@emotion/styled': 11.11.0_dd4092d1e0c7dc2863a676e563fa1e79 @@ -4636,7 +4666,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@emotion/react': 11.11.4_@types+react@18.2.62 '@emotion/styled': 11.11.0_dd4092d1e0c7dc2863a676e563fa1e79 '@mui/private-theming': 5.15.11_@types+react@18.2.62 @@ -4670,7 +4700,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@types/prop-types': 15.7.11 '@types/react': 18.2.62 prop-types: 15.8.1 @@ -4963,7 +4993,7 @@ packages: resolution: {integrity: sha512-qgGdcVIF604M9EqjNF0hbUTz42bz/RDtxWdWuU5EQe3hi7M8ob54B6B35rOsvX5eSvIHIzT9iH1R3n+hk3CGfg==} engines: {node: '>=14.x'} dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 /@rc-component/color-picker/2.0.0: resolution: {integrity: sha512-52z3XqUwUr0+Br3B8RjN2GfuR1Pk3MZPAVd34WptWFEOyTz7OQmmn8nqgXUBOYwZem8jXp6G3iv+6Dm1+1epJA==} @@ -4972,7 +5002,7 @@ packages: react-dom: '>=16.9.0' dependencies: '@ant-design/fast-color': 2.0.6 - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-util: 5.43.0 dev: true @@ -4984,7 +5014,7 @@ packages: react-dom: '>=16.9.0' dependencies: '@ant-design/fast-color': 2.0.6 - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-util: 5.43.0_react-dom@18.2.0+react@18.2.0 react: 18.2.0 @@ -4997,7 +5027,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 rc-util: 5.43.0 dev: true @@ -5007,7 +5037,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 rc-util: 5.43.0_react-dom@18.2.0+react@18.2.0 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 @@ -5017,7 +5047,7 @@ packages: resolution: {integrity: sha512-jS4E7T9Li2GuYwI6PyiVXmxTiM6b07rlD9Ge8uGZSCz3WlzcG5ZK7g5bbuKNeZ9pgUuPK/5guV781ujdVpm4HQ==} engines: {node: '>=8.x'} dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 /@rc-component/mutate-observer/1.1.0: resolution: {integrity: sha512-QjrOsDXQusNwGZPf4/qRQasg7UFEj06XiCJ8iuiq/Io7CrHrgVi6Uuetw60WAMG1799v+aM8kyc+1L/GBbHSlw==} @@ -5026,7 +5056,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-util: 5.43.0 dev: true @@ -5038,7 +5068,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-util: 5.43.0_react-dom@18.2.0+react@18.2.0 react: 18.2.0 @@ -5052,7 +5082,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-util: 5.43.0 dev: true @@ -5064,7 +5094,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-util: 5.43.0_react-dom@18.2.0+react@18.2.0 react: 18.2.0 @@ -5078,7 +5108,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-util: 5.43.0 dev: true @@ -5090,7 +5120,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-util: 5.43.0_react-dom@18.2.0+react@18.2.0 react: 18.2.0 @@ -5104,7 +5134,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@rc-component/portal': 1.1.2 '@rc-component/trigger': 2.2.0 classnames: 2.5.1 @@ -5118,7 +5148,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@rc-component/portal': 1.1.2_react-dom@18.2.0+react@18.2.0 '@rc-component/trigger': 2.2.0_react-dom@18.2.0+react@18.2.0 classnames: 2.5.1 @@ -5134,7 +5164,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@rc-component/portal': 1.1.2 classnames: 2.5.1 rc-motion: 2.9.2 @@ -5149,7 +5179,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@rc-component/portal': 1.1.2_react-dom@18.2.0+react@18.2.0 classnames: 2.5.1 rc-motion: 2.9.2_react-dom@18.2.0+react@18.2.0 @@ -5886,7 +5916,7 @@ packages: engines: {node: '>=12'} dependencies: '@babel/code-frame': 7.23.5 - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@types/aria-query': 5.0.4 aria-query: 5.1.3 chalk: 4.1.2 @@ -7708,7 +7738,7 @@ packages: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 cosmiconfig: 7.1.0 resolve: 1.22.8 dev: true @@ -7808,7 +7838,7 @@ packages: '@babel/preset-env': 7.24.0_@babel+core@7.24.0 '@babel/preset-react': 7.23.3_@babel+core@7.24.0 '@babel/preset-typescript': 7.23.3_@babel+core@7.24.0 - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 babel-plugin-macros: 3.1.0 babel-plugin-transform-react-remove-prop-types: 0.4.24 transitivePeerDependencies: @@ -9444,7 +9474,7 @@ packages: /dom-helpers/5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 csstype: 3.1.3 dev: true @@ -10252,7 +10282,7 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 aria-query: 5.3.0 array-includes: 3.1.8 array.prototype.flatmap: 1.3.2 @@ -16040,7 +16070,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 array-tree-filter: 2.1.0 classnames: 2.5.1 rc-select: 14.15.1 @@ -16054,7 +16084,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 array-tree-filter: 2.1.0 classnames: 2.5.1 rc-select: 14.15.1_react-dom@18.2.0+react@18.2.0 @@ -16070,7 +16100,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-util: 5.43.0 dev: true @@ -16081,7 +16111,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-util: 5.43.0_react-dom@18.2.0+react@18.2.0 react: 18.2.0 @@ -16094,7 +16124,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-motion: 2.9.2 rc-util: 5.43.0 @@ -16106,7 +16136,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-motion: 2.9.2_react-dom@18.2.0+react@18.2.0 rc-util: 5.43.0_react-dom@18.2.0+react@18.2.0 @@ -16120,7 +16150,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@rc-component/portal': 1.1.2 classnames: 2.5.1 rc-motion: 2.9.2 @@ -16133,7 +16163,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@rc-component/portal': 1.1.2_react-dom@18.2.0+react@18.2.0 classnames: 2.5.1 rc-motion: 2.9.2_react-dom@18.2.0+react@18.2.0 @@ -16148,7 +16178,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@rc-component/portal': 1.1.2 classnames: 2.5.1 rc-motion: 2.9.2 @@ -16161,7 +16191,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@rc-component/portal': 1.1.2_react-dom@18.2.0+react@18.2.0 classnames: 2.5.1 rc-motion: 2.9.2_react-dom@18.2.0+react@18.2.0 @@ -16176,7 +16206,7 @@ packages: react: '>=16.11.0' react-dom: '>=16.11.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@rc-component/trigger': 2.2.0 classnames: 2.5.1 rc-util: 5.43.0 @@ -16188,7 +16218,7 @@ packages: react: '>=16.11.0' react-dom: '>=16.11.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@rc-component/trigger': 2.2.0_react-dom@18.2.0+react@18.2.0 classnames: 2.5.1 rc-util: 5.43.0_react-dom@18.2.0+react@18.2.0 @@ -16203,7 +16233,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@rc-component/async-validator': 5.0.4 rc-util: 5.43.0 dev: true @@ -16215,7 +16245,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@rc-component/async-validator': 5.0.4 rc-util: 5.43.0_react-dom@18.2.0+react@18.2.0 react: 18.2.0 @@ -16228,7 +16258,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@rc-component/portal': 1.1.2 classnames: 2.5.1 rc-dialog: 9.5.2 @@ -16242,7 +16272,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@rc-component/portal': 1.1.2_react-dom@18.2.0+react@18.2.0 classnames: 2.5.1 rc-dialog: 9.5.2_react-dom@18.2.0+react@18.2.0 @@ -16258,7 +16288,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@rc-component/mini-decimal': 1.1.0 classnames: 2.5.1 rc-input: 1.6.2 @@ -16271,7 +16301,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@rc-component/mini-decimal': 1.1.0 classnames: 2.5.1 rc-input: 1.6.2_react-dom@18.2.0+react@18.2.0 @@ -16286,7 +16316,7 @@ packages: react: '>=16.0.0' react-dom: '>=16.0.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-util: 5.43.0 dev: true @@ -16297,7 +16327,7 @@ packages: react: '>=16.0.0' react-dom: '>=16.0.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-util: 5.43.0_react-dom@18.2.0+react@18.2.0 react: 18.2.0 @@ -16310,7 +16340,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@rc-component/trigger': 2.2.0 classnames: 2.5.1 rc-input: 1.6.2 @@ -16325,7 +16355,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@rc-component/trigger': 2.2.0_react-dom@18.2.0+react@18.2.0 classnames: 2.5.1 rc-input: 1.6.2_react-dom@18.2.0+react@18.2.0 @@ -16342,7 +16372,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@rc-component/trigger': 2.2.0 classnames: 2.5.1 rc-motion: 2.9.2 @@ -16356,7 +16386,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@rc-component/trigger': 2.2.0_react-dom@18.2.0+react@18.2.0 classnames: 2.5.1 rc-motion: 2.9.2_react-dom@18.2.0+react@18.2.0 @@ -16372,7 +16402,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-util: 5.43.0 dev: true @@ -16383,7 +16413,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-util: 5.43.0_react-dom@18.2.0+react@18.2.0 react: 18.2.0 @@ -16397,7 +16427,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-motion: 2.9.2 rc-util: 5.43.0 @@ -16410,7 +16440,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-motion: 2.9.2_react-dom@18.2.0+react@18.2.0 rc-util: 5.43.0_react-dom@18.2.0+react@18.2.0 @@ -16424,7 +16454,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-resize-observer: 1.4.0 rc-util: 5.43.0 @@ -16436,7 +16466,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-resize-observer: 1.4.0_react-dom@18.2.0+react@18.2.0 rc-util: 5.43.0_react-dom@18.2.0+react@18.2.0 @@ -16450,7 +16480,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-util: 5.43.0 dev: true @@ -16461,7 +16491,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-util: 5.43.0_react-dom@18.2.0+react@18.2.0 react: 18.2.0 @@ -16488,7 +16518,7 @@ packages: moment: optional: true dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@rc-component/trigger': 2.2.0_react-dom@18.2.0+react@18.2.0 classnames: 2.5.1 dayjs: 1.11.12 @@ -16519,7 +16549,7 @@ packages: moment: optional: true dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@rc-component/trigger': 2.2.0 classnames: 2.5.1 dayjs: 1.11.12 @@ -16534,7 +16564,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-util: 5.43.0 dev: true @@ -16545,7 +16575,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-util: 5.43.0_react-dom@18.2.0+react@18.2.0 react: 18.2.0 @@ -16559,7 +16589,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-util: 5.43.0 dev: true @@ -16571,7 +16601,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-util: 5.43.0_react-dom@18.2.0+react@18.2.0 react: 18.2.0 @@ -16584,7 +16614,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-util: 5.43.0 resize-observer-polyfill: 1.5.1 @@ -16596,7 +16626,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-util: 5.43.0_react-dom@18.2.0+react@18.2.0 react: 18.2.0 @@ -16610,7 +16640,7 @@ packages: react: '>=16.0.0' react-dom: '>=16.0.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-motion: 2.9.2 rc-util: 5.43.0 @@ -16622,7 +16652,7 @@ packages: react: '>=16.0.0' react-dom: '>=16.0.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-motion: 2.9.2_react-dom@18.2.0+react@18.2.0 rc-util: 5.43.0_react-dom@18.2.0+react@18.2.0 @@ -16637,7 +16667,7 @@ packages: react: '*' react-dom: '*' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@rc-component/trigger': 2.2.0 classnames: 2.5.1 rc-motion: 2.9.2 @@ -16653,7 +16683,7 @@ packages: react: '*' react-dom: '*' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@rc-component/trigger': 2.2.0_react-dom@18.2.0+react@18.2.0 classnames: 2.5.1 rc-motion: 2.9.2_react-dom@18.2.0+react@18.2.0 @@ -16671,7 +16701,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-util: 5.43.0 dev: true @@ -16683,7 +16713,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-util: 5.43.0_react-dom@18.2.0+react@18.2.0 react: 18.2.0 @@ -16697,7 +16727,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-util: 5.43.0 dev: true @@ -16709,7 +16739,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-util: 5.43.0_react-dom@18.2.0+react@18.2.0 react: 18.2.0 @@ -16722,7 +16752,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-util: 5.43.0 dev: true @@ -16733,7 +16763,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-util: 5.43.0_react-dom@18.2.0+react@18.2.0 react: 18.2.0 @@ -16747,7 +16777,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@rc-component/context': 1.4.0 classnames: 2.5.1 rc-resize-observer: 1.4.0 @@ -16762,7 +16792,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@rc-component/context': 1.4.0_react-dom@18.2.0+react@18.2.0 classnames: 2.5.1 rc-resize-observer: 1.4.0_react-dom@18.2.0+react@18.2.0 @@ -16779,7 +16809,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-dropdown: 4.2.0 rc-menu: 9.14.1 @@ -16795,7 +16825,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-dropdown: 4.2.0_react-dom@18.2.0+react@18.2.0 rc-menu: 9.14.1_react-dom@18.2.0+react@18.2.0 @@ -16812,7 +16842,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-input: 1.6.2 rc-resize-observer: 1.4.0 @@ -16825,7 +16855,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-input: 1.6.2_react-dom@18.2.0+react@18.2.0 rc-resize-observer: 1.4.0_react-dom@18.2.0+react@18.2.0 @@ -16840,7 +16870,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@rc-component/trigger': 2.2.0 classnames: 2.5.1 dev: true @@ -16851,7 +16881,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@rc-component/trigger': 2.2.0_react-dom@18.2.0+react@18.2.0 classnames: 2.5.1 react: 18.2.0 @@ -16864,7 +16894,7 @@ packages: react: '*' react-dom: '*' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-select: 14.15.1 rc-tree: 5.8.8 @@ -16877,7 +16907,7 @@ packages: react: '*' react-dom: '*' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-select: 14.15.1_react-dom@18.2.0+react@18.2.0 rc-tree: 5.8.8_react-dom@18.2.0+react@18.2.0 @@ -16893,7 +16923,7 @@ packages: react: '*' react-dom: '*' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-motion: 2.9.2 rc-util: 5.43.0 @@ -16907,7 +16937,7 @@ packages: react: '*' react-dom: '*' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-motion: 2.9.2_react-dom@18.2.0+react@18.2.0 rc-util: 5.43.0_react-dom@18.2.0+react@18.2.0 @@ -16922,7 +16952,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-util: 5.43.0 dev: true @@ -16933,7 +16963,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-util: 5.43.0_react-dom@18.2.0+react@18.2.0 react: 18.2.0 @@ -16946,7 +16976,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 react-is: 18.2.0 dev: true @@ -16956,7 +16986,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 react-is: 18.2.0 @@ -16969,7 +16999,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-resize-observer: 1.4.0 rc-util: 5.43.0 @@ -16982,7 +17012,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-resize-observer: 1.4.0_react-dom@18.2.0+react@18.2.0 rc-util: 5.43.0_react-dom@18.2.0+react@18.2.0 @@ -17094,6 +17124,15 @@ packages: resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==} dev: true + /react-feather/2.0.10_react@18.2.0: + resolution: {integrity: sha512-BLhukwJ+Z92Nmdcs+EMw6dy1Z/VLiJTzEQACDUEnWMClhYnFykJCGWQx+NmwP/qQHGX/5CzQ+TGi8ofg2+HzVQ==} + peerDependencies: + react: '>=16.8.6' + dependencies: + prop-types: 15.8.1 + react: 18.2.0 + dev: true + /react-i18next/14.1.2_i18next@23.11.5: resolution: {integrity: sha512-FSIcJy6oauJbGEXfhUgVeLzvWBhIBIS+/9c6Lj4niwKZyGaGb4V4vUbATXSlsHJDXXB+ociNxqFNiFuV1gmoqg==} peerDependencies: @@ -17318,7 +17357,7 @@ packages: react: '>=16.6.0' react-dom: '>=16.6.0' dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -17491,7 +17530,7 @@ packages: /regenerator-transform/0.15.2: resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 dev: true /regex-parser/2.3.0: @@ -17776,7 +17815,7 @@ packages: /rtl-css-js/1.16.1: resolution: {integrity: sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==} dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 dev: true /run-async/2.4.1: @@ -20195,7 +20234,7 @@ packages: '@apideck/better-ajv-errors': 0.3.6_ajv@8.12.0 '@babel/core': 7.24.0 '@babel/preset-env': 7.24.0_@babel+core@7.24.0 - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.26.0 '@rollup/plugin-babel': 5.3.1_@babel+core@7.24.0+rollup@2.79.1 '@rollup/plugin-node-resolve': 11.2.1_rollup@2.79.1 '@rollup/plugin-replace': 2.4.2_rollup@2.79.1