diff --git a/public/index.html b/public/index.html index bcdfca39..d48c36ef 100644 --- a/public/index.html +++ b/public/index.html @@ -8,7 +8,17 @@ - + + + + + + + + + CapRover | Server Dashboard @@ -17,4 +27,5 @@
- + + \ No newline at end of file diff --git a/src/App.tsx b/src/App.tsx index dcec5585..f33cd4b5 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,18 +1,24 @@ -import { App as AntdApp, ConfigProvider, theme } from 'antd' +import { App as AntdApp, ConfigProvider, theme, ThemeConfig } from 'antd' import { useState } from 'react' import { Provider } from 'react-redux' import { HashRouter, Route, Switch } from 'react-router-dom' import { applyMiddleware, createStore } from 'redux' import thunk from 'redux-thunk' +import CenteredSpinner from './containers/global/CenteredSpinner' import Login from './containers/Login' import PageRoot from './containers/PageRoot' +import CapRoverThemeContext from './contexts/CapRoverThemeContext' import DarkModeContext from './contexts/DarkModeContext' import LanguageContext from './contexts/LanguageContext' import reducers from './redux/reducers' import './styles/style.css' +import CapRoverTheme from './styles/theme/CapRoverTheme' +import ThemeParser from './styles/theme/ThemeParser' +import { ThemeProvider } from './styles/theme/ThemeProvider' import CrashReporter from './utils/CrashReporter' import { getCurrentLanguageOption } from './utils/Language' import StorageHelper from './utils/StorageHelper' +import Toaster from './utils/Toaster' CrashReporter.getInstance().init() @@ -32,26 +38,95 @@ const MainComponent = () => { ) } +let themeState: undefined | 'LOADING' | 'LOADED' | 'TIMED_OUT' = undefined + +const contentPushedToHead = [] as string[] + function App() { const { defaultAlgorithm, darkAlgorithm } = theme + const [isDarkMode, setIsDarkMode] = useState( StorageHelper.getDarkModeFromLocalStorage() ) + const [currTheme, setTheme] = useState( + undefined as undefined | CapRoverTheme + ) + const [refreshCounter, setRefreshCounter] = useState(0) const [currentLang, setCurrentLang] = useState(getCurrentLanguageOption()) + const defaultTheme = { + algorithm: isDarkMode ? darkAlgorithm : defaultAlgorithm, + components: { + Menu: { + // itemBg:'', + darkItemBg: '#001529', + darkPopupBg: '#001529', + }, + Layout: { + // lightSiderBg: '#ff00ff', + // siderBg: '#ff0000', + // headerBg: '#ff0000', + }, + }, + token: { + colorPrimary: '#4f5bff', + colorLink: '#2672c9', + fontFamily: `'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', + 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', + 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'`, + }, + } + + if ( + currTheme && + currTheme.headEmbed && + !contentPushedToHead.some((it) => it === currTheme.headEmbed) + ) { + contentPushedToHead.push(currTheme.headEmbed) + + const headElement = document.head + const injectionElement = document.createElement('div') + injectionElement.innerHTML = currTheme.headEmbed + Array.from(injectionElement.childNodes).forEach((node) => { + headElement.appendChild(node) + }) + } + + const customTheme = currTheme + ? ThemeParser.parseTheme( + currTheme, + isDarkMode, + defaultAlgorithm, + darkAlgorithm + ) + : undefined + + const themeToUse: ThemeConfig = customTheme || defaultTheme + + if (!themeState) { + themeState = 'LOADING' + setTimeout(() => { + if (themeState === 'LOADING') { + themeState = 'TIMED_OUT' + setRefreshCounter(refreshCounter + 1) + } + }, 600) + ThemeProvider.getInstance() + .getCurrentTheme() + .then((t) => { + setTheme(t.theme) + }) + .catch(Toaster.createCatcher()) + .then(() => { + themeState = 'LOADED' + setRefreshCounter(refreshCounter + 1) + }) + } + return ( - - - + { + setTheme(value) + }, + }} + > + + {themeState === 'LOADING' ? ( + + ) : ( + + )} + + diff --git a/src/api/ApiManager.ts b/src/api/ApiManager.ts index 1108ab9a..181e7145 100644 --- a/src/api/ApiManager.ts +++ b/src/api/ApiManager.ts @@ -9,6 +9,7 @@ import { import { IRegistryInfo } from '../models/IRegistryInfo' import { IVersionInfo } from '../models/IVersionInfo' import ProjectDefinition from '../models/ProjectDefinition' +import CapRoverTheme from '../styles/theme/CapRoverTheme' import ErrorFactory from '../utils/ErrorFactory' import Logger from '../utils/Logger' import StorageHelper from '../utils/StorageHelper' @@ -100,6 +101,54 @@ export default class ApiManager { }) } + getAllThemes(): Promise<{ themes: CapRoverTheme[] | undefined }> { + const http = this.http + + return Promise.resolve() // + .then(http.fetch(http.GET, '/user/system/themes/all', {})) + } + + getCurrentTheme(): Promise<{ theme: CapRoverTheme }> { + const http = this.http + + return Promise.resolve() // + .then(http.fetch(http.GET, '/theme/current', {})) + } + + setCurrentTheme(themeName: string): any { + const http = this.http + + return Promise.resolve() // + .then( + http.fetch(http.POST, '/user/system/themes/setcurrent', { + themeName, + }) + ) + } + saveTheme(oldName: string, theme: CapRoverTheme): any { + const http = this.http + + return Promise.resolve() // + .then( + http.fetch(http.POST, '/user/system/themes/update', { + oldName, + name: theme.name, + content: theme.content, + }) + ) + } + + deleteTheme(themeName: string): any { + const http = this.http + + return Promise.resolve() // + .then( + http.fetch(http.POST, '/user/system/themes/delete', { + themeName, + }) + ) + } + getProFeaturesState(): Promise<{ proFeaturesState: IProFeatures }> { const http = this.http diff --git a/src/containers/PageRoot.tsx b/src/containers/PageRoot.tsx index 9e837fe7..60df5e41 100644 --- a/src/containers/PageRoot.tsx +++ b/src/containers/PageRoot.tsx @@ -1,18 +1,10 @@ import { BarsOutlined, - ClusterOutlined, - CodeOutlined, - DashboardOutlined, - FileTextOutlined, GiftTwoTone, - GithubOutlined, GlobalOutlined, - LaptopOutlined, LogoutOutlined, - SettingOutlined, } from '@ant-design/icons' -import type { MenuProps } from 'antd' -import { Button, Col, Layout, Menu, Row } from 'antd' +import { Button, Col, Layout, Row } from 'antd' import React, { Fragment, RefObject } from 'react' import { connect } from 'react-redux' import { Route, RouteComponentProps, Switch } from 'react-router' @@ -23,6 +15,7 @@ import { localize } from '../utils/Language' import StorageHelper from '../utils/StorageHelper' import Dashboard from './Dashboard' import LoggedInCatchAll from './LoggedInCatchAll' +import Sidebar from './Sidebar' import Apps from './apps/Apps' import ProjectDetailsEdit from './apps/ProjectDetailsEdit' import AppDetails from './apps/appDetails/AppDetails' @@ -37,7 +30,7 @@ import Monitoring from './monitoring/Monitoring' import Cluster from './nodes/Cluster' import Settings from './settings/Settings' -const { Header, Content, Sider } = Layout +const { Header, Content } = Layout interface RootPageInterface extends RouteComponentProps { rootElementKey: string @@ -160,33 +153,6 @@ class PageRoot extends ApiComponent< render() { const self = this - const MENU_ITEMS: MenuProps['items'] = [ - { - key: 'dashboard', - label: localize('menu_item.dashboard', 'Dashboard'), - icon: , - }, - { - key: 'apps', - label: localize('menu_item.app', 'Apps'), - icon: , - }, - { - key: 'monitoring', - label: localize('menu_item.monitoring', 'Monitoring'), - icon: , - }, - { - key: 'cluster', - label: localize('menu_item.cluster', 'Cluster'), - icon: , - }, - { - key: 'settings', - label: localize('menu_item.settings', 'Settings'), - icon: , - }, - ] return ( @@ -286,91 +252,17 @@ class PageRoot extends ApiComponent< - - { - this.props.history.push(`/${e.key}`) - }} - > - {this.props.isMobile && ( - -
-
- - - {localize( - 'page_root.github_link', - 'Github' - )} - -
- -
- - - {localize( - 'page_root.docs_link', - 'Docs' - )} - -
- -
- { - this.apiManager.setAuthToken('') - this.goToLogin() - }} - > - {' '} - - {localize( - 'page_root.logout', - 'Logout' - )} - -
- - )} -
-
+ toggleSider={this.toggleSider} + location={this.props.location} + history={this.props.history} + onLogoutClicked={() => { + self.apiManager.setAuthToken('') + self.goToLogin() + }} + />
void + onLogoutClicked: () => void + location: any + history: any +} + +const Sidebar: React.FC = ({ + isMobile, + collapsed, + toggleSider, + onLogoutClicked, + location, + history, +}) => { + const { currentTheme } = useContext(CapRoverThemeContext) + + let siderTheme = (ThemeParser.parseExtra(currentTheme)?.siderTheme || + 'light') as 'light' | 'dark' + + const MENU_ITEMS: MenuProps['items'] = [ + { + key: 'dashboard', + label: localize('menu_item.dashboard', 'Dashboard'), + icon: , + }, + { + key: 'apps', + label: localize('menu_item.app', 'Apps'), + icon: , + }, + { + key: 'monitoring', + label: localize('menu_item.monitoring', 'Monitoring'), + icon: , + }, + { + key: 'cluster', + label: localize('menu_item.cluster', 'Cluster'), + icon: , + }, + { + key: 'settings', + label: localize('menu_item.settings', 'Settings'), + icon: , + }, + ] + + const LOGOUT = 'logout' + + if (isMobile) { + MENU_ITEMS.push({ + key: LOGOUT, + label: localize('page_root.logout', 'Logout'), + icon: , + }) + } + + return ( + + { + if (e.key === LOGOUT) { + onLogoutClicked() + } else { + history.push(`/${e.key}`) + } + }} + > + + ) +} + +export default Sidebar diff --git a/src/containers/apps/Apps.tsx b/src/containers/apps/Apps.tsx index 9218cd1f..facdcd68 100644 --- a/src/containers/apps/Apps.tsx +++ b/src/containers/apps/Apps.tsx @@ -73,7 +73,7 @@ export default class Apps extends ApiComponent< } return ( -
+
= ({ themes }) => { + const { currentTheme, setCapRoverThemeContext } = + useContext(CapRoverThemeContext) + + // const dispatch = useDispatch() + + const options = themes.map((it) => { + return { value: it.name, label: it.name } + }) + + options.unshift({ value: 'default', label: 'Default' }) + + const handleChange = (value: string) => { + const t = themes.find((it) => it.name === value) + setCapRoverThemeContext(t) + ThemeProvider.getInstance() + .saveCurrentTheme(t ? t.name : '') + .catch(Toaster.createCatcher()) + // dispatch(emitRootKeyChanged()) Needed? TODO + } + + return ( + { + const cp = Utils.copyObject(editModalTheme!!) + cp.theme.name = e.target.value + setEditModalTheme(cp) + }} + /> +
+ {localize('themes.ant_design_theme', 'Ant Design theme')} + + + {' '} + + + + +
+ { + const cp = Utils.copyObject(editModalTheme!!) + cp.theme.content = e.target.value + setEditModalTheme(cp) + }} + /> + +
+ ) +} + +export default ThemeSettings diff --git a/src/contexts/CapRoverThemeContext.ts b/src/contexts/CapRoverThemeContext.ts new file mode 100644 index 00000000..a40abe1c --- /dev/null +++ b/src/contexts/CapRoverThemeContext.ts @@ -0,0 +1,9 @@ +import { createContext } from 'react' +import CapRoverTheme from '../styles/theme/CapRoverTheme' + +const CapRoverThemeContext = createContext({ + currentTheme: undefined as undefined | CapRoverTheme, + setCapRoverThemeContext: (value: CapRoverTheme | undefined) => {}, +}) + +export default CapRoverThemeContext diff --git a/src/styles/style.css b/src/styles/style.css index eadff466..19d940b9 100644 --- a/src/styles/style.css +++ b/src/styles/style.css @@ -100,3 +100,20 @@ hr { .pre-line-content { white-space: pre-wrap; } + +.slow-fadein-slow { + animation: fadeIn 0.5s ease-in; +} + +.slow-fadein-fast { + animation: fadeIn 0.1s ease-in; +} + +@keyframes fadeIn { + from { + opacity: 0; + } + to { + opacity: 1; + } +} diff --git a/src/styles/theme/CapRoverTheme.ts b/src/styles/theme/CapRoverTheme.ts new file mode 100644 index 00000000..b8e24faf --- /dev/null +++ b/src/styles/theme/CapRoverTheme.ts @@ -0,0 +1,11 @@ +export interface CapRoverExtraTheme { + siderTheme?: string +} + +export default interface CapRoverTheme { + content: string + name: string + extra?: string + headEmbed?: string + builtIn?: boolean +} diff --git a/src/styles/theme/ThemeParser.ts b/src/styles/theme/ThemeParser.ts new file mode 100644 index 00000000..9858f0d6 --- /dev/null +++ b/src/styles/theme/ThemeParser.ts @@ -0,0 +1,74 @@ +import { ThemeConfig } from 'antd' +import CapRoverTheme, { CapRoverExtraTheme } from './CapRoverTheme' + +function evaluateExpression(expression: any, context: any) { + try { + // Use the Function constructor to create a new function that returns the evaluation of the expression + // Note: The context is expanded to include commonly used JavaScript objects and functions for flexibility + // eslint-disable-next-line no-new-func + const func = new Function( + 'isDarkMode', + 'darkAlgorithm', + 'defaultAlgorithm', + `return ${expression};` + ) + return func( + context.isDarkMode, + context.darkAlgorithm, + context.defaultAlgorithm + ) + } catch (error) { + // console.error('Error evaluating expression:', expression, error) + return undefined + } +} + +// Recursive function to parse and interpret nested objects and strings +function parseObject(item: any, context: any) { + if (typeof item === 'string') { + // Check if string is an object expression by looking for '{' at any position (after whitespace) + const trimmedItem = item.trim() + if (trimmedItem.startsWith('{') && trimmedItem.endsWith('}')) { + return evaluateExpression(`(${item})`, context) // Wrap in parentheses to ensure valid expression evaluation + } else { + return evaluateExpression(item, context) + } + } else if (typeof item === 'object' && item !== null) { + // Recursively handle objects and arrays + const result: any = Array.isArray(item) ? [] : {} + for (const key in item) { + result[key] = parseObject(item[key], context) as any + } + return result + } else { + // Return primitives as-is + return item + } +} + +const ThemeParser = { + parseTheme( + currTheme: CapRoverTheme | undefined, + isDarkMode: boolean, + defaultAlgorithm: any, + darkAlgorithm: any + ): ThemeConfig | undefined { + if (!currTheme) return undefined + + // Define the context for evaluations based on provided algorithms and mode + const context = { isDarkMode, darkAlgorithm, defaultAlgorithm } + + // Start parsing the response object + return parseObject(currTheme, context).content + }, + parseExtra(currTheme: CapRoverTheme | undefined) { + if (!currTheme) return undefined + + const context = {} + return (parseObject(currTheme, context) as CapRoverTheme)?.extra as + | CapRoverExtraTheme + | undefined + }, +} + +export default ThemeParser diff --git a/src/styles/theme/ThemeProvider.ts b/src/styles/theme/ThemeProvider.ts new file mode 100644 index 00000000..3ce7f901 --- /dev/null +++ b/src/styles/theme/ThemeProvider.ts @@ -0,0 +1,60 @@ +import ApiManager from '../../api/ApiManager' +import CapRoverTheme from './CapRoverTheme' + +export class ThemeProvider { + static instance: ThemeProvider + + static getInstance() { + if (!ThemeProvider.instance) { + ThemeProvider.instance = new ThemeProvider() + } + return ThemeProvider.instance + } + + private apiManager: ApiManager + + constructor() { + this.apiManager = new ApiManager() + } + + getCurrentTheme() { + const self = this + return Promise.resolve() // + .then(() => { + return self.apiManager.getCurrentTheme() + }) + } + + saveCurrentTheme(themeName: string) { + const self = this + return Promise.resolve() // + .then(() => { + return self.apiManager.setCurrentTheme(themeName) + }) + } + + saveCustomTheme(oldName: string, editModalTheme: CapRoverTheme) { + const self = this + return Promise.resolve().then(() => { + return self.apiManager.saveTheme(oldName, editModalTheme) + }) + } + + getAllThemes() { + const self = this + return Promise.resolve() + .then(() => { + return self.apiManager.getAllThemes() + }) + .then((data) => { + return data.themes || ([] as CapRoverTheme[]) + }) + } + + deleteTheme(themeName: string) { + const self = this + return Promise.resolve().then(() => { + return self.apiManager.deleteTheme(themeName) + }) + } +} diff --git a/src/utils/StorageHelper.ts b/src/utils/StorageHelper.ts index 6e5b3763..ecf96d0e 100644 --- a/src/utils/StorageHelper.ts +++ b/src/utils/StorageHelper.ts @@ -56,14 +56,13 @@ class StorageHelper { getDarkModeFromLocalStorage(): boolean { const isDarkMode = localStorage.getItem(DARK_MODE) - // If not preference exists, return DarkMode based on users colorScheme - return isDarkMode - ? JSON.parse(isDarkMode) - : // default to dark mode - !( - window.matchMedia && - window.matchMedia('(prefers-color-scheme: light)').matches - ) + // If not preference exists, default to dark mode + return isDarkMode ? JSON.parse(isDarkMode) : true + // return DarkMode based on users colorScheme + // !( + // window.matchMedia && + // window.matchMedia('(prefers-color-scheme: light)').matches + // ) } setLanguageInLocalStorage(language: string) { diff --git a/yarn.lock b/yarn.lock index 920ed0f7..6933132e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -100,15 +100,15 @@ "@babel/highlight" "^7.25.7" picocolors "^1.0.0" -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.25.7.tgz#b8479fe0018ef0ac87b6b7a5c6916fcd67ae2c9c" - integrity sha512-9ickoLz+hcXCeh7jrcin+/SLWm+GkxE2kTvoYyp38p4WkdFXfQJxDFGWp/YHjiKLPx06z2A7W8XKuqbReXDzsw== +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.25.7", "@babel/compat-data@^7.25.8": + version "7.25.8" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.25.8.tgz#0376e83df5ab0eb0da18885c0140041f0747a402" + integrity sha512-ZsysZyXY4Tlx+Q53XdnOFmqwfB9QDTHYxaZYajWRoBLuLEAwI2UIbtxOjWh/cFaa9IKUlcB+DDuoskLuKu56JA== "@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.3", "@babel/core@^7.16.0", "@babel/core@^7.7.2", "@babel/core@^7.8.0": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.25.7.tgz#1b3d144157575daf132a3bc80b2b18e6e3ca6ece" - integrity sha512-yJ474Zv3cwiSOO9nXJuqzvwEeM+chDuQ8GJirw+pZ91sCGCyOZ3dJkVE09fTV0VEVzXyLWhh3G/AolYTPX7Mow== + version "7.25.8" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.25.8.tgz#a57137d2a51bbcffcfaeba43cb4dd33ae3e0e1c6" + integrity sha512-Oixnb+DzmRT30qu9d3tJSQkxuygWm32DFykT4bRoORPa9hZ/L4KhVB/XiRm6KG+roIEM7DBQlmg27kw2HZkdZg== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.25.7" @@ -116,10 +116,10 @@ "@babel/helper-compilation-targets" "^7.25.7" "@babel/helper-module-transforms" "^7.25.7" "@babel/helpers" "^7.25.7" - "@babel/parser" "^7.25.7" + "@babel/parser" "^7.25.8" "@babel/template" "^7.25.7" "@babel/traverse" "^7.25.7" - "@babel/types" "^7.25.7" + "@babel/types" "^7.25.8" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -127,9 +127,9 @@ semver "^6.3.1" "@babel/eslint-parser@^7.16.3": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.25.7.tgz#27b43de786c83cbabbcb328efbb4f099ae85415e" - integrity sha512-B+BO9x86VYsQHimucBAL1fxTJKF4wyKY6ZVzee9QgzdZOUfs3BaR6AQrgoGrRI+7IFS1wUz/VyQ+SoBcSpdPbw== + version "7.25.8" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.25.8.tgz#0119dec46be547d7a339978dedb9d29e517c2443" + integrity sha512-Po3VLMN7fJtv0nsOjBDSbO1J71UhzShE9MuOSkWEV9IZQXzhZklYtzKZ8ZD/Ij3a0JBv1AG3Ny2L3jvAHQVOGg== dependencies: "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" eslint-visitor-keys "^2.1.0" @@ -237,7 +237,7 @@ dependencies: "@babel/types" "^7.25.7" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.25.7", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.25.7", "@babel/helper-plugin-utils@^7.8.0": version "7.25.7" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.7.tgz#8ec5b21812d992e1ef88a9b068260537b6f0e36c" integrity sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw== @@ -318,12 +318,12 @@ js-tokens "^4.0.0" picocolors "^1.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.7.tgz#99b927720f4ddbfeb8cd195a363ed4532f87c590" - integrity sha512-aZn7ETtQsjjGG5HruveUK06cU3Hljuhd9Iojm4M8WWv3wLE6OkE5PWbDUkItmMgegmccaITudyuW5RPYrYlgWw== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.25.7", "@babel/parser@^7.25.8": + version "7.25.8" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.8.tgz#f6aaf38e80c36129460c1657c0762db584c9d5e2" + integrity sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ== dependencies: - "@babel/types" "^7.25.7" + "@babel/types" "^7.25.8" "@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.7": version "7.25.7" @@ -454,20 +454,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-flow@^7.25.7": version "7.25.7" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.25.7.tgz#7d1255201b55d7644c57e0eb354aaf9f8b8d2d02" @@ -588,14 +574,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-async-generator-functions@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.7.tgz#af61a02b30d7bff5108c63bd39ac7938403426d7" - integrity sha512-4B6OhTrwYKHYYgcwErvZjbmH9X5TxQBsaBHdzEIB4l71gR5jh/tuHGlb9in47udL2+wVUcOz5XXhhfhVJwEpEg== +"@babel/plugin-transform-async-generator-functions@^7.25.8": + version "7.25.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.8.tgz#3331de02f52cc1f2c75b396bec52188c85b0b1ec" + integrity sha512-9ypqkozyzpG+HxlH4o4gdctalFGIjjdufzo7I2XPda0iBnZ6a+FO0rIEQcdSPXp02CkvGsII1exJhmROPQd5oA== dependencies: "@babel/helper-plugin-utils" "^7.25.7" "@babel/helper-remap-async-to-generator" "^7.25.7" - "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/traverse" "^7.25.7" "@babel/plugin-transform-async-to-generator@^7.25.7": @@ -629,14 +614,13 @@ "@babel/helper-create-class-features-plugin" "^7.25.7" "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-class-static-block@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.25.7.tgz#d2cf3c812e3b3162d56aadf4566f45c30538cb2c" - integrity sha512-rvUUtoVlkDWtDWxGAiiQj0aNktTPn3eFynBcMC2IhsXweehwgdI9ODe+XjWw515kEmv22sSOTp/rxIRuTiB7zg== +"@babel/plugin-transform-class-static-block@^7.25.8": + version "7.25.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.25.8.tgz#a8af22028920fe404668031eceb4c3aadccb5262" + integrity sha512-e82gl3TCorath6YLf9xUwFehVvjvfqFhdOo4+0iVIVju+6XOi5XHkqB3P2AXnSwoeTX0HBoXq5gJFtvotJzFnQ== dependencies: "@babel/helper-create-class-features-plugin" "^7.25.7" "@babel/helper-plugin-utils" "^7.25.7" - "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-transform-classes@^7.25.7": version "7.25.7" @@ -688,13 +672,12 @@ "@babel/helper-create-regexp-features-plugin" "^7.25.7" "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-dynamic-import@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.7.tgz#31905ab2cfa94dcf1b1f8ce66096720b2908e518" - integrity sha512-UvcLuual4h7/GfylKm2IAA3aph9rwvAM2XBA0uPKU3lca+Maai4jBjjEVUS568ld6kJcgbouuumCBhMd/Yz17w== +"@babel/plugin-transform-dynamic-import@^7.25.8": + version "7.25.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.8.tgz#f1edbe75b248cf44c70c8ca8ed3818a668753aaa" + integrity sha512-gznWY+mr4ZQL/EWPcbBQUP3BXS5FwZp8RUOw06BaRn8tQLzN4XLIxXejpHN9Qo8x8jjBmAAKp6FoS51AgkSA/A== dependencies: "@babel/helper-plugin-utils" "^7.25.7" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-transform-exponentiation-operator@^7.25.7": version "7.25.7" @@ -704,13 +687,12 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.25.7" "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-export-namespace-from@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.7.tgz#beb2679db6fd3bdfe6ad6de2c8cac84a86ef2da1" - integrity sha512-h3MDAP5l34NQkkNulsTNyjdaR+OiB0Im67VU//sFupouP8Q6m9Spy7l66DcaAQxtmCqGdanPByLsnwFttxKISQ== +"@babel/plugin-transform-export-namespace-from@^7.25.8": + version "7.25.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.8.tgz#d1988c3019a380b417e0516418b02804d3858145" + integrity sha512-sPtYrduWINTQTW7FtOy99VCTWp4H23UX7vYcut7S4CIMEXU+54zKX9uCoGkLsWXteyaMXzVHgzWbLfQ1w4GZgw== dependencies: "@babel/helper-plugin-utils" "^7.25.7" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" "@babel/plugin-transform-flow-strip-types@^7.16.0": version "7.25.7" @@ -737,13 +719,12 @@ "@babel/helper-plugin-utils" "^7.25.7" "@babel/traverse" "^7.25.7" -"@babel/plugin-transform-json-strings@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.7.tgz#6626433554aff4bd6f76a2c621a1f40e802dfb0a" - integrity sha512-Ot43PrL9TEAiCe8C/2erAjXMeVSnE/BLEx6eyrKLNFCCw5jvhTHKyHxdI1pA0kz5njZRYAnMO2KObGqOCRDYSA== +"@babel/plugin-transform-json-strings@^7.25.8": + version "7.25.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.8.tgz#6fb3ec383a2ea92652289fdba653e3f9de722694" + integrity sha512-4OMNv7eHTmJ2YXs3tvxAfa/I43di+VcF+M4Wt66c88EAED1RoGaf1D64cL5FkRpNL+Vx9Hds84lksWvd/wMIdA== dependencies: "@babel/helper-plugin-utils" "^7.25.7" - "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-transform-literals@^7.25.7": version "7.25.7" @@ -752,13 +733,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-logical-assignment-operators@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.7.tgz#93847feb513a1f191c5f5d903d991a0ee24fe99b" - integrity sha512-iImzbA55BjiovLyG2bggWS+V+OLkaBorNvc/yJoeeDQGztknRnDdYfp2d/UPmunZYEnZi6Lg8QcTmNMHOB0lGA== +"@babel/plugin-transform-logical-assignment-operators@^7.25.8": + version "7.25.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.8.tgz#01868ff92daa9e525b4c7902aa51979082a05710" + integrity sha512-f5W0AhSbbI+yY6VakT04jmxdxz+WsID0neG7+kQZbCOjuyJNdL5Nn4WIBm4hRpKnUcO9lP0eipUhFN12JpoH8g== dependencies: "@babel/helper-plugin-utils" "^7.25.7" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" "@babel/plugin-transform-member-expression-literals@^7.25.7": version "7.25.7" @@ -817,30 +797,27 @@ dependencies: "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-nullish-coalescing-operator@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.7.tgz#0af84b86d4332654c43cf028dbdcf878b00ac168" - integrity sha512-FbuJ63/4LEL32mIxrxwYaqjJxpbzxPVQj5a+Ebrc8JICV6YX8nE53jY+K0RZT3um56GoNWgkS2BQ/uLGTjtwfw== +"@babel/plugin-transform-nullish-coalescing-operator@^7.25.8": + version "7.25.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.8.tgz#befb4900c130bd52fccf2b926314557987f1b552" + integrity sha512-Z7WJJWdQc8yCWgAmjI3hyC+5PXIubH9yRKzkl9ZEG647O9szl9zvmKLzpbItlijBnVhTUf1cpyWBsZ3+2wjWPQ== dependencies: "@babel/helper-plugin-utils" "^7.25.7" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-transform-numeric-separator@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.7.tgz#a516b78f894d1c08283f39d809b2048fd2f29448" - integrity sha512-8CbutzSSh4hmD+jJHIA8vdTNk15kAzOnFLVVgBSMGr28rt85ouT01/rezMecks9pkU939wDInImwCKv4ahU4IA== +"@babel/plugin-transform-numeric-separator@^7.25.8": + version "7.25.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.8.tgz#91e370486371637bd42161052f2602c701386891" + integrity sha512-rm9a5iEFPS4iMIy+/A/PiS0QN0UyjPIeVvbU5EMZFKJZHt8vQnasbpo3T3EFcxzCeYO0BHfc4RqooCZc51J86Q== dependencies: "@babel/helper-plugin-utils" "^7.25.7" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-transform-object-rest-spread@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.7.tgz#fa0916521be96fd434e2db59780b24b308c6d169" - integrity sha512-1JdVKPhD7Y5PvgfFy0Mv2brdrolzpzSoUq2pr6xsR+m+3viGGeHEokFKsCgOkbeFOQxfB1Vt2F0cPJLRpFI4Zg== +"@babel/plugin-transform-object-rest-spread@^7.25.8": + version "7.25.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.8.tgz#0904ac16bcce41df4db12d915d6780f85c7fb04b" + integrity sha512-LkUu0O2hnUKHKE7/zYOIjByMa4VRaV2CD/cdGz0AxU9we+VA3kDDggKEzI0Oz1IroG+6gUP6UmWEHBMWZU316g== dependencies: "@babel/helper-compilation-targets" "^7.25.7" "@babel/helper-plugin-utils" "^7.25.7" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-transform-parameters" "^7.25.7" "@babel/plugin-transform-object-super@^7.25.7": @@ -851,22 +828,20 @@ "@babel/helper-plugin-utils" "^7.25.7" "@babel/helper-replace-supers" "^7.25.7" -"@babel/plugin-transform-optional-catch-binding@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.7.tgz#400e2d891f9288f5231694234696aa67164e4913" - integrity sha512-m9obYBA39mDPN7lJzD5WkGGb0GO54PPLXsbcnj1Hyeu8mSRz7Gb4b1A6zxNX32ZuUySDK4G6it8SDFWD1nCnqg== +"@babel/plugin-transform-optional-catch-binding@^7.25.8": + version "7.25.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.8.tgz#2649b86a3bb202c6894ec81a6ddf41b94d8f3103" + integrity sha512-EbQYweoMAHOn7iJ9GgZo14ghhb9tTjgOc88xFgYngifx7Z9u580cENCV159M4xDh3q/irbhSjZVpuhpC2gKBbg== dependencies: "@babel/helper-plugin-utils" "^7.25.7" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-optional-chaining@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.7.tgz#b7f7c9321aa1d8414e67799c28d87c23682e4d68" - integrity sha512-h39agClImgPWg4H8mYVAbD1qP9vClFbEjqoJmt87Zen8pjqK8FTPUwrOXAvqu5soytwxrLMd2fx2KSCp2CHcNg== +"@babel/plugin-transform-optional-chaining@^7.25.7", "@babel/plugin-transform-optional-chaining@^7.25.8": + version "7.25.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.8.tgz#f46283b78adcc5b6ab988a952f989e7dce70653f" + integrity sha512-q05Bk7gXOxpTHoQ8RSzGSh/LHVB9JEIkKnk3myAWwZHnYiTGYtbdrYkIsS8Xyh4ltKf7GNUSgzs/6P2bJtBAQg== dependencies: "@babel/helper-plugin-utils" "^7.25.7" "@babel/helper-skip-transparent-expression-wrappers" "^7.25.7" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-transform-parameters@^7.25.7": version "7.25.7" @@ -883,15 +858,14 @@ "@babel/helper-create-class-features-plugin" "^7.25.7" "@babel/helper-plugin-utils" "^7.25.7" -"@babel/plugin-transform-private-property-in-object@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.7.tgz#aff877efd05b57c4ad04611d8de97bf155a53369" - integrity sha512-LzA5ESzBy7tqj00Yjey9yWfs3FKy4EmJyKOSWld144OxkTji81WWnUT8nkLUn+imN/zHL8ZQlOu/MTUAhHaX3g== +"@babel/plugin-transform-private-property-in-object@^7.25.8": + version "7.25.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.8.tgz#1234f856ce85e061f9688764194e51ea7577c434" + integrity sha512-8Uh966svuB4V8RHHg0QJOB32QK287NBksJOByoKmHMp1TAobNniNalIkI2i5IPj5+S9NYCG4VIjbEuiSN8r+ow== dependencies: "@babel/helper-annotate-as-pure" "^7.25.7" "@babel/helper-create-class-features-plugin" "^7.25.7" "@babel/helper-plugin-utils" "^7.25.7" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-transform-property-literals@^7.25.7": version "7.25.7" @@ -1046,11 +1020,11 @@ "@babel/helper-plugin-utils" "^7.25.7" "@babel/preset-env@^7.11.0", "@babel/preset-env@^7.12.1", "@babel/preset-env@^7.16.4": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.25.7.tgz#fc1b092152db4b58377b85dc05c890081c1157e0" - integrity sha512-Gibz4OUdyNqqLj+7OAvBZxOD7CklCtMA5/j0JgUEwOnaRULsPDXmic2iKxL2DX2vQduPR5wH2hjZas/Vr/Oc0g== + version "7.25.8" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.25.8.tgz#dc6b719627fb29cd9cccbbbe041802fd575b524c" + integrity sha512-58T2yulDHMN8YMUxiLq5YmWUnlDCyY1FsHM+v12VMx+1/FlrUj5tY50iDCpofFQEM8fMYOaY9YRvym2jcjn1Dg== dependencies: - "@babel/compat-data" "^7.25.7" + "@babel/compat-data" "^7.25.8" "@babel/helper-compilation-targets" "^7.25.7" "@babel/helper-plugin-utils" "^7.25.7" "@babel/helper-validator-option" "^7.25.7" @@ -1060,45 +1034,30 @@ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.25.7" "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.7" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" "@babel/plugin-syntax-import-assertions" "^7.25.7" "@babel/plugin-syntax-import-attributes" "^7.25.7" - "@babel/plugin-syntax-import-meta" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" "@babel/plugin-transform-arrow-functions" "^7.25.7" - "@babel/plugin-transform-async-generator-functions" "^7.25.7" + "@babel/plugin-transform-async-generator-functions" "^7.25.8" "@babel/plugin-transform-async-to-generator" "^7.25.7" "@babel/plugin-transform-block-scoped-functions" "^7.25.7" "@babel/plugin-transform-block-scoping" "^7.25.7" "@babel/plugin-transform-class-properties" "^7.25.7" - "@babel/plugin-transform-class-static-block" "^7.25.7" + "@babel/plugin-transform-class-static-block" "^7.25.8" "@babel/plugin-transform-classes" "^7.25.7" "@babel/plugin-transform-computed-properties" "^7.25.7" "@babel/plugin-transform-destructuring" "^7.25.7" "@babel/plugin-transform-dotall-regex" "^7.25.7" "@babel/plugin-transform-duplicate-keys" "^7.25.7" "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.7" - "@babel/plugin-transform-dynamic-import" "^7.25.7" + "@babel/plugin-transform-dynamic-import" "^7.25.8" "@babel/plugin-transform-exponentiation-operator" "^7.25.7" - "@babel/plugin-transform-export-namespace-from" "^7.25.7" + "@babel/plugin-transform-export-namespace-from" "^7.25.8" "@babel/plugin-transform-for-of" "^7.25.7" "@babel/plugin-transform-function-name" "^7.25.7" - "@babel/plugin-transform-json-strings" "^7.25.7" + "@babel/plugin-transform-json-strings" "^7.25.8" "@babel/plugin-transform-literals" "^7.25.7" - "@babel/plugin-transform-logical-assignment-operators" "^7.25.7" + "@babel/plugin-transform-logical-assignment-operators" "^7.25.8" "@babel/plugin-transform-member-expression-literals" "^7.25.7" "@babel/plugin-transform-modules-amd" "^7.25.7" "@babel/plugin-transform-modules-commonjs" "^7.25.7" @@ -1106,15 +1065,15 @@ "@babel/plugin-transform-modules-umd" "^7.25.7" "@babel/plugin-transform-named-capturing-groups-regex" "^7.25.7" "@babel/plugin-transform-new-target" "^7.25.7" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.25.7" - "@babel/plugin-transform-numeric-separator" "^7.25.7" - "@babel/plugin-transform-object-rest-spread" "^7.25.7" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.25.8" + "@babel/plugin-transform-numeric-separator" "^7.25.8" + "@babel/plugin-transform-object-rest-spread" "^7.25.8" "@babel/plugin-transform-object-super" "^7.25.7" - "@babel/plugin-transform-optional-catch-binding" "^7.25.7" - "@babel/plugin-transform-optional-chaining" "^7.25.7" + "@babel/plugin-transform-optional-catch-binding" "^7.25.8" + "@babel/plugin-transform-optional-chaining" "^7.25.8" "@babel/plugin-transform-parameters" "^7.25.7" "@babel/plugin-transform-private-methods" "^7.25.7" - "@babel/plugin-transform-private-property-in-object" "^7.25.7" + "@babel/plugin-transform-private-property-in-object" "^7.25.8" "@babel/plugin-transform-property-literals" "^7.25.7" "@babel/plugin-transform-regenerator" "^7.25.7" "@babel/plugin-transform-reserved-words" "^7.25.7" @@ -1203,10 +1162,10 @@ debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.20.7", "@babel/types@^7.25.7", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.7.tgz#1b7725c1d3a59f328cb700ce704c46371e6eef9b" - integrity sha512-vwIVdXG+j+FOpkwqHRcBgHLYNL7XMkufrlaFvL9o6Ai9sJn9+PdyIL5qa0XzTZw084c+u9LOls53eoZWP/W5WQ== +"@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.20.7", "@babel/types@^7.25.7", "@babel/types@^7.25.8", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.25.8" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.8.tgz#5cf6037258e8a9bcad533f4979025140cb9993e1" + integrity sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg== dependencies: "@babel/helper-string-parser" "^7.25.7" "@babel/helper-validator-identifier" "^7.25.7" @@ -2430,9 +2389,9 @@ "@types/node" "*" "@types/node@*": - version "22.7.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.7.4.tgz#e35d6f48dca3255ce44256ddc05dee1c23353fcc" - integrity sha512-y+NPi1rFzDs1NdQHHToqeiX2TIS79SWEAw9GYhkkx8bD0ChpfqC+n2j5OXOCpzfojBEBt6DnEnnG9MY0zk1XLg== + version "22.7.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.7.5.tgz#cfde981727a7ab3611a481510b473ae54442b92b" + integrity sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ== dependencies: undici-types "~6.19.2" @@ -2442,9 +2401,9 @@ integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== "@types/node@^16.18.39": - version "16.18.112" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.112.tgz#efd468e4edd08404eed23b6aed6c2f35edfa9450" - integrity sha512-EKrbKUGJROm17+dY/gMi31aJlGLJ75e1IkTojt9n6u+hnaTBDs+M1bIdOawpk2m6YUAXq/R2W0SxCng1tndHCg== + version "16.18.113" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.113.tgz#fbe99013933c4997db5838d20497494a7e01f4ab" + integrity sha512-4jHxcEzSXpF1cBNxogs5FVbVSFSKo50sFCn7Xg7vmjJTbWFWgeuHW3QnoINlfmfG++MFR/q97RZE5RQXKeT+jg== "@types/parse-json@^4.0.0": version "4.0.2" @@ -2484,9 +2443,9 @@ integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== "@types/react-dom@^18.2.7": - version "18.3.0" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.3.0.tgz#0cbc818755d87066ab6ca74fbedb2547d74a82b0" - integrity sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg== + version "18.3.1" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.3.1.tgz#1e4654c08a9cdcfb6594c780ac59b55aad42fe07" + integrity sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ== dependencies: "@types/react" "*" @@ -3078,9 +3037,9 @@ ansi-wrap@0.1.0, ansi-wrap@^0.1.0: integrity sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw== antd@5.x: - version "5.21.2" - resolved "https://registry.yarnpkg.com/antd/-/antd-5.21.2.tgz#6933c508d885d4be8f38b8aec874d0bd96b66600" - integrity sha512-ZcyykH58xRkNp5oxFqn255VxrjLj6qG6czHJQPoDHqRdR9roSfWQGTiqYVb4Omg77WZHNgu17QrWzvL4Hp6/FA== + version "5.21.3" + resolved "https://registry.yarnpkg.com/antd/-/antd-5.21.3.tgz#5f451960605d07ea593a1e996e3bf120e525a7f8" + integrity sha512-Yby3gU6jfuvhNFRPsrHB4Yc/G3LHLNHHy0kShwNmmZf1QTCiW5TmqP3DT5m/NHbJsTgEwJpwo3AaOWo+KQyEjw== dependencies: "@ant-design/colors" "^7.1.0" "@ant-design/cssinjs" "^1.21.1" @@ -3118,7 +3077,7 @@ antd@5.x: rc-resize-observer "^1.4.0" rc-segmented "~2.5.0" rc-select "~14.15.2" - rc-slider "~11.1.6" + rc-slider "~11.1.7" rc-steps "~6.0.1" rc-switch "~4.1.0" rc-table "~7.47.5" @@ -3777,9 +3736,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001646, caniuse-lite@^1.0.30001663: - version "1.0.30001667" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001667.tgz#99fc5ea0d9c6e96897a104a8352604378377f949" - integrity sha512-7LTwJjcRkzKFmtqGsibMeuXmvFDfZq/nzIjnmgCGzKKRVzjD72selLDK1oPF/Oxzmt4fNcPvTDvGqSDG4tCALw== + version "1.0.30001668" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001668.tgz#98e214455329f54bf7a4d70b49c9794f0fbedbed" + integrity sha512-nWLrdxqCdblixUO+27JtGJJE/txpJlyUy5YN1u53wLZkP0emYCo5zgS6QYft7VUYR42LGgi/S5hdLZTrnyIddw== case-sensitive-paths-webpack-plugin@^2.4.0: version "2.4.0" @@ -4117,10 +4076,10 @@ cookie-signature@1.0.6: resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== -cookie@0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" - integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== +cookie@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.1.tgz#2f73c42142d5d5cf71310a74fc4ae61670e5dbc9" + integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w== copy-to-clipboard@^3.3.3: version "3.3.3" @@ -4822,9 +4781,9 @@ ejs@^3.1.6: jake "^10.8.5" electron-to-chromium@^1.5.28: - version "1.5.32" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.32.tgz#4a05ee78e29e240aabaf73a67ce9fe73f52e1bc7" - integrity sha512-M+7ph0VGBQqqpTT2YrabjNKSQ2fEl9PVx6AK3N558gDH9NO8O6XN9SXXFWRo9u9PbEg/bWq+tjXQr+eXmxubCw== + version "1.5.36" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.36.tgz#ec41047f0e1446ec5dce78ed5970116533139b88" + integrity sha512-HYTX8tKge/VNp6FGO+f/uVDmUkq+cEfcxYhKf15Akc4M5yxt5YmorwlAitKWjWhWQnKcDRBAQKXkhqqXMqcrjw== emittery@^0.10.2: version "0.10.2" @@ -4988,9 +4947,9 @@ es-get-iterator@^1.1.3: stop-iteration-iterator "^1.0.0" es-iterator-helpers@^1.0.19: - version "1.0.19" - resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz#117003d0e5fec237b4b5c08aded722e0c6d50ca8" - integrity sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw== + version "1.1.0" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.1.0.tgz#f6d745d342aea214fe09497e7152170dc333a7a6" + integrity sha512-/SurEfycdyssORP/E+bj4sEu1CWw4EmLDsHynHwSXQ7utgbrMRWW195pTrCjFgFCddf/UkYm3oqKPRq5i8bJbw== dependencies: call-bind "^1.0.7" define-properties "^1.2.1" @@ -4999,12 +4958,12 @@ es-iterator-helpers@^1.0.19: es-set-tostringtag "^2.0.3" function-bind "^1.1.2" get-intrinsic "^1.2.4" - globalthis "^1.0.3" + globalthis "^1.0.4" has-property-descriptors "^1.0.2" has-proto "^1.0.3" has-symbols "^1.0.3" internal-slot "^1.0.7" - iterator.prototype "^1.1.2" + iterator.prototype "^1.1.3" safe-array-concat "^1.1.2" es-module-lexer@^1.2.1: @@ -5444,16 +5403,16 @@ expect@^29.0.0: jest-util "^29.7.0" express@^4.17.3: - version "4.21.0" - resolved "https://registry.yarnpkg.com/express/-/express-4.21.0.tgz#d57cb706d49623d4ac27833f1cbc466b668eb915" - integrity sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng== + version "4.21.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.21.1.tgz#9dae5dda832f16b4eec941a4e44aa89ec481b281" + integrity sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ== dependencies: accepts "~1.3.8" array-flatten "1.1.1" body-parser "1.20.3" content-disposition "0.5.4" content-type "~1.0.4" - cookie "0.6.0" + cookie "0.7.1" cookie-signature "1.0.6" debug "2.6.9" depd "2.0.0" @@ -5728,9 +5687,9 @@ fork-ts-checker-webpack-plugin@^6.5.0: tapable "^1.0.0" form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + version "3.0.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.2.tgz#83ad9ced7c03feaad97e293d6f6091011e1659c8" + integrity sha512-sJe+TQb2vIaIyO783qN6BlMYWMw3WBOHA1Ay2qxsnjuafEOQFJ2JakedOQirT6D5XPRxDvS7AHYyem9fTpb4LQ== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" @@ -5958,7 +5917,7 @@ globals@^13.19.0: dependencies: type-fest "^0.20.2" -globalthis@^1.0.3: +globalthis@^1.0.3, globalthis@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== @@ -6201,9 +6160,9 @@ http-proxy-agent@^4.0.1: debug "4" http-proxy-middleware@^2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f" - integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== + version "2.0.7" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz#915f236d92ae98ef48278a95dedf17e991936ec6" + integrity sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA== dependencies: "@types/http-proxy" "^1.17.8" http-proxy "^1.18.1" @@ -6762,10 +6721,10 @@ istanbul-reports@^3.1.3: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -iterator.prototype@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0" - integrity sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w== +iterator.prototype@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.3.tgz#016c2abe0be3bbdb8319852884f60908ac62bf9c" + integrity sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ== dependencies: define-properties "^1.2.1" get-intrinsic "^1.2.1" @@ -9568,10 +9527,10 @@ rc-select@~14.15.0, rc-select@~14.15.2: rc-util "^5.16.1" rc-virtual-list "^3.5.2" -rc-slider@~11.1.6: - version "11.1.6" - resolved "https://registry.yarnpkg.com/rc-slider/-/rc-slider-11.1.6.tgz#7ce762ff76e5ea8f4a54431ebe582df5c498629b" - integrity sha512-LACAaXM0hi+4x4ErDGZLy7weIQwmBIVbIgPE+eDHiHkyzMvKjWHraCG8/B22Y/tCQUPAsP02wBhKhth7mH2PIw== +rc-slider@~11.1.7: + version "11.1.7" + resolved "https://registry.yarnpkg.com/rc-slider/-/rc-slider-11.1.7.tgz#3de333b1ec84d53a7bda2f816bb4779423628f09" + integrity sha512-ytYbZei81TX7otdC0QvoYD72XSlxvTihNth5OeZ6PMXyEDq/vHdWFulQmfDGyXK1NwKwSlKgpvINOa88uT5g2A== dependencies: "@babel/runtime" "^7.10.1" classnames "^2.2.5"