diff --git a/.github/workflows/build-desktop.yml b/.github/workflows/build-desktop.yml index be8bb8e1..f3e8aef5 100644 --- a/.github/workflows/build-desktop.yml +++ b/.github/workflows/build-desktop.yml @@ -39,6 +39,7 @@ jobs: 'beta' }} env: ILLA_API_BASE_URL: ${{ vars.ILLA_API_BASE_URL }} + ILLA_PERIPHERAL_API_BASE_URL: ${{ vars.ILLA_PERIPHERAL_API_BASE_URL }} ILLA_APP_ENV: ${{ vars.ILLA_APP_ENV }} ILLA_CLOUD_URL: tauri://localhost ILLA_MARKET_URL: ${{ vars.ILLA_MARKET_URL }} @@ -85,6 +86,12 @@ jobs: - uses: tauri-apps/tauri-action@v0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }} + APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }} + APPLE_SIGNING_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }} + APPLE_ID: ${{ secrets.APPLE_ID }} + APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }} + APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} with: tagName: app-v__VERSION__ # the action automatically replaces \_\_VERSION\_\_ with the app version. releaseName: "App v__VERSION__" diff --git a/.github/workflows/build-docker.yml b/.github/workflows/build-docker.yml index 43bbb8f2..ca92d5d4 100644 --- a/.github/workflows/build-docker.yml +++ b/.github/workflows/build-docker.yml @@ -31,6 +31,8 @@ jobs: ILLA_APP_ENV: ${{ vars.ILLA_APP_ENV }} ILLA_CLOUD_URL: ${{ vars.ILLA_CLOUD_URL }} ILLA_MARKET_URL: ${{ vars.ILLA_MARKET_URL }} + ILLA_PERIPHERAL_API_BASE_URL: ${{ vars.ILLA_PERIPHERAL_API_BASE_URL }} + steps: - uses: actions/checkout@v4 with: diff --git a/.npmrc b/.npmrc index d1cdf2f0..b6f27f13 100644 --- a/.npmrc +++ b/.npmrc @@ -1 +1 @@ -engine-strict = true \ No newline at end of file +engine-strict=true diff --git a/apps/agent/.env.production b/apps/agent/.env.production index d6bd5b18..5b0af797 100644 --- a/apps/agent/.env.production +++ b/apps/agent/.env.production @@ -1,4 +1,5 @@ ILLA_API_BASE_URL=CLOUD_API_PATH +ILLA_PERIPHERAL_API_BASE_URL=PERIPHERAL_API_PATH ILLA_MARKET_URL=MARKET_PATH ILLA_CLOUD_URL=CLOUD_PATH ILLA_INSTANCE_ID=CLOUD diff --git a/apps/agent/package.json b/apps/agent/package.json index e8ecd986..66db4a3e 100644 --- a/apps/agent/package.json +++ b/apps/agent/package.json @@ -28,30 +28,23 @@ "terser": "^5.30.3" }, "dependencies": { - "@ant-design/icons": "^5.3.1", "@atlaskit/pragmatic-drag-and-drop-hitbox": "^1.0.3", "@atlaskit/pragmatic-drag-and-drop-react-drop-indicator": "^1.1.0", "@atlaskit/tokens": "^1.43.0", - "@codemirror/autocomplete": "^6.4.0", - "@codemirror/commands": "^6.1.3", - "@codemirror/lang-javascript": "^6.2.1", - "@codemirror/lang-sql": "^6.5.4", - "@codemirror/language": "^6.3.2", - "@codemirror/lint": "^6.4.2", - "@codemirror/search": "^6.5.5", - "@codemirror/state": "^6.2.0", - "@codemirror/view": "^6.7.2", "@illa-public/auth-shown": "workspace:^", "@illa-public/avatar": "workspace:^", - "@illa-public/code-editor": "workspace:^", + "@illa-public/code-editor-new": "workspace:^", "@illa-public/color-scheme": "workspace:^", + "@illa-public/draggable-modal": "workspace:*", "@illa-public/dynamic-string": "workspace:^", "@illa-public/icon": "workspace:^", "@illa-public/icon-hot-spot": "workspace:^", "@illa-public/illa-net": "workspace:^", "@illa-public/illa-storage": "workspace:^", "@illa-public/illa-web-socket": "workspace:^", + "@illa-public/invite-modal": "workspace:^", "@illa-public/layout-auto-change": "workspace:^", + "@illa-public/market-share": "workspace:^", "@illa-public/new-invite-modal": "workspace:^", "@illa-public/public-configs": "workspace:^", "@illa-public/public-types": "workspace:^", @@ -63,10 +56,6 @@ "@illa-public/user-data": "workspace:^", "@illa-public/user-role-utils": "workspace:^", "@illa-public/utils": "workspace:^", - "@illa-public/invite-modal": "workspace:^", - "@illa-public/market-share": "workspace:^", - "@lezer/common": "^1.2.1", - "@lezer/highlight": "^1.2.0", "@mui/material": "^5.15.3", "@mui/x-data-grid-premium": "^6.19.6", "@reduxjs/toolkit": "^2.2.1", @@ -74,7 +63,6 @@ "@sentry/vite-plugin": "^2.16.1", "@tauri-apps/api": "^1.5.3", "@types/tern": "^0.23.9", - "antd": "^5.15.2", "antd-img-crop": "^4.21.0", "axios": "^1.6.2", "chart.js": "^4.4.2", @@ -94,15 +82,16 @@ "pdfjs-dist": "2.16.105", "posthog-js": "^1.116.6", "qs": "^6.12.0", + "re-resizable": "^6.9.16", "react-chartjs-2": "^5.2.0", "react-helmet-async": "^2.0.4", "react-hook-form": "^7.51.0", "react-markdown": "^8.0.5", "react-redux": "^9.1.0", - "react-rnd": "^10.4.1", + "react-rnd": "^10.4.10", "react-router-dom": "^6.22.2", "react-syntax-highlighter": "^15.5.0", - "react-use": "^17.4.0", + "react-use": "^17.5.0", "react-use-intercom": "^5.3.0", "react-use-measure": "^2.1.1", "remark-breaks": "^4.0.0", diff --git a/apps/agent/src/App.tsx b/apps/agent/src/App.tsx index 54da1901..4ea23a9d 100644 --- a/apps/agent/src/App.tsx +++ b/apps/agent/src/App.tsx @@ -3,9 +3,8 @@ import { App as AntdContextProvider, ConfigProvider, ThemeConfig } from "antd" import { HelmetProvider } from "react-helmet-async" import { IntercomProvider } from "react-use-intercom" import tipisThemConfig from "@/config/them/theme-tipis.json" -import { illaCodeMirrorTooltipStyle } from "./components/CodeEditor/CodeMirror/theme" import { ILLARouterProvider } from "./router/config" -import { globalStyle } from "./style" +import { globalStyle, globalTooltipContainerStyle } from "./style" import AntdStore from "./utils/antdStore" function App() { @@ -23,7 +22,7 @@ function App() {
diff --git a/apps/agent/src/Layout/Form/ErrorText/index.tsx b/apps/agent/src/Layout/Form/ErrorText/index.tsx index b3edd570..04803015 100644 --- a/apps/agent/src/Layout/Form/ErrorText/index.tsx +++ b/apps/agent/src/Layout/Form/ErrorText/index.tsx @@ -4,15 +4,15 @@ import { WarningCircleIcon } from "@illa-public/icon" import { errorMsgStyle } from "./style" interface ErrorTextProps { - errorMessage: string + message: string | null | undefined } -export const ErrorText: FC = ({ errorMessage }) => { - if (!errorMessage) return null +export const ErrorText: FC = ({ message }) => { + if (!message) return null return (
- {errorMessage} + {message}
) } diff --git a/apps/agent/src/Layout/Form/LayoutBlock/index.tsx b/apps/agent/src/Layout/Form/LayoutBlock/index.tsx index b80c8323..224519d5 100644 --- a/apps/agent/src/Layout/Form/LayoutBlock/index.tsx +++ b/apps/agent/src/Layout/Form/LayoutBlock/index.tsx @@ -10,11 +10,14 @@ import { blockTItleAndRequireContainerStyle, blockTitleContainer, childrenAndErrorMessageContainerStyle, + descriptionStyle, + titleAndDescriptionContainerStyle, } from "./style" export const LayoutBlock: FC = (props) => { const { title, + description, tips, children, subtitle, @@ -23,30 +26,39 @@ export const LayoutBlock: FC = (props) => { scrollId, isMobile = false, errorMessage, + customRenderSubtitle, } = props return (
-
-
- {title && ( - -
{title}
-
- )} - {required && } +
+
+
+ {title && ( + +
{title}
+
+ )} + {required && } +
+ {customRenderSubtitle + ? customRenderSubtitle + : subtitle && ( + +
+ {subtitle} +
+
+ )}
- {subtitle && ( - -
- {subtitle} -
-
- )} + + {description &&
{description}
}
{children} - {errorMessage && } + {errorMessage && }
) diff --git a/apps/agent/src/Layout/Form/LayoutBlock/interface.ts b/apps/agent/src/Layout/Form/LayoutBlock/interface.ts index 6351e3f0..5f03b748 100644 --- a/apps/agent/src/Layout/Form/LayoutBlock/interface.ts +++ b/apps/agent/src/Layout/Form/LayoutBlock/interface.ts @@ -2,6 +2,7 @@ import { ReactNode } from "react" export interface ILayoutBlock { title: string + description?: ReactNode tips?: string subtitle?: string | ReactNode children?: ReactNode @@ -10,4 +11,5 @@ export interface ILayoutBlock { scrollId?: string isMobile?: boolean errorMessage?: string + customRenderSubtitle?: ReactNode } diff --git a/apps/agent/src/Layout/Form/LayoutBlock/style.ts b/apps/agent/src/Layout/Form/LayoutBlock/style.ts index 16846c4d..70773364 100644 --- a/apps/agent/src/Layout/Form/LayoutBlock/style.ts +++ b/apps/agent/src/Layout/Form/LayoutBlock/style.ts @@ -54,3 +54,18 @@ export const childrenAndErrorMessageContainerStyle = css` flex-direction: column; gap: 8px; ` + +export const titleAndDescriptionContainerStyle = css` + width: 100%; + display: flex; + flex-direction: column; + gap: 4px; +` + +export const descriptionStyle = css` + width: 100%; + color: ${getColor("grayBlue", "03")}; + font-size: 12px; + font-weight: 400; + line-height: 130%; +` diff --git a/apps/agent/src/Layout/Function/Label/index.tsx b/apps/agent/src/Layout/Function/Label/index.tsx new file mode 100644 index 00000000..f72f09cd --- /dev/null +++ b/apps/agent/src/Layout/Function/Label/index.tsx @@ -0,0 +1,25 @@ +import { FC } from "react" +import RequireIcon from "@/assets/agent/require.svg?react" +import { ILabelProps } from "./interface" +import { + iconContainerStyle, + labelContainerStyle, + labelStyle, + requiredIconStyle, +} from "./style" + +const Label: FC = (props) => { + const { title, required } = props + return ( +
+

{title}

+ {required && ( +
+ +
+ )} +
+ ) +} + +export default Label diff --git a/apps/agent/src/Layout/Function/Label/interface.ts b/apps/agent/src/Layout/Function/Label/interface.ts new file mode 100644 index 00000000..f0cbbd69 --- /dev/null +++ b/apps/agent/src/Layout/Function/Label/interface.ts @@ -0,0 +1,4 @@ +export interface ILabelProps { + title: string + required?: boolean +} diff --git a/apps/agent/src/Layout/Function/Label/style.ts b/apps/agent/src/Layout/Function/Label/style.ts new file mode 100644 index 00000000..aea779a3 --- /dev/null +++ b/apps/agent/src/Layout/Function/Label/style.ts @@ -0,0 +1,32 @@ +import { css } from "@emotion/react" +import { getColor } from "@illa-public/color-scheme" + +export const labelContainerStyle = css` + width: 160px; + flex: none; + display: flex; + padding: 9px 0; + gap: 4px; +` + +export const labelStyle = css` + width: 100%; + color: ${getColor("grayBlue", "02")}; + text-align: right; + font-weight: 500; + line-height: 22px; + font-size: 14px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +` + +export const requiredIconStyle = css` + flex: none; + width: 8px; + height: 8px; +` + +export const iconContainerStyle = css` + line-height: 22px; +` diff --git a/apps/agent/src/Layout/Function/LabelWithController/index.tsx b/apps/agent/src/Layout/Function/LabelWithController/index.tsx new file mode 100644 index 00000000..14d5f298 --- /dev/null +++ b/apps/agent/src/Layout/Function/LabelWithController/index.tsx @@ -0,0 +1,30 @@ +import { FC } from "react" +import ErrorMessage from "../../../components/InputErrorMessage" +import Label from "../Label" +import { ILabelWithControllerProps } from "./interface" +import { + controllerContainerStyle, + errorMessageContainerStyle, + labelWithContainerStyle, + outerContainerStyle, +} from "./style" + +const LabelWithController: FC = (props) => { + const { title, children, required, errorMessage } = props + return ( +
+
+
+ {errorMessage && ( +
+
+ )} +
+ ) +} + +export default LabelWithController diff --git a/apps/agent/src/Layout/Function/LabelWithController/interface.ts b/apps/agent/src/Layout/Function/LabelWithController/interface.ts new file mode 100644 index 00000000..f912f1da --- /dev/null +++ b/apps/agent/src/Layout/Function/LabelWithController/interface.ts @@ -0,0 +1,8 @@ +import { ReactNode } from "react" + +export interface ILabelWithControllerProps { + title: string + required?: boolean + children: ReactNode + errorMessage?: string +} diff --git a/apps/agent/src/Layout/Function/LabelWithController/style.ts b/apps/agent/src/Layout/Function/LabelWithController/style.ts new file mode 100644 index 00000000..fa51819d --- /dev/null +++ b/apps/agent/src/Layout/Function/LabelWithController/style.ts @@ -0,0 +1,25 @@ +import { css } from "@emotion/react" + +export const labelWithContainerStyle = css` + display: flex; + gap: 16px; + width: 100%; + padding: 8px 0; +` + +export const controllerContainerStyle = css` + display: flex; + flex-direction: column; + width: 100%; +` + +export const outerContainerStyle = css` + display: flex; + flex-direction: column; +` + +export const errorMessageContainerStyle = css` + width: 100%; + display: flex; + gap: 16px; +` diff --git a/apps/agent/src/Layout/Function/LayoutBlock/index.tsx b/apps/agent/src/Layout/Function/LayoutBlock/index.tsx new file mode 100644 index 00000000..64034da5 --- /dev/null +++ b/apps/agent/src/Layout/Function/LayoutBlock/index.tsx @@ -0,0 +1,56 @@ +import { Tooltip } from "antd" +import { FC } from "react" +import RequireIcon from "@/assets/agent/require.svg?react" +import { ILayoutBlock } from "./interface" +import { + agentBlockStyle, + applyBlockSubtitleStyle, + applyBlockTextStyle, + blockTItleAndRequireContainerStyle, + blockTitleContainer, + childrenAndErrorMessageContainerStyle, + descriptionStyle, + titleAndDescriptionContainerStyle, +} from "./style" + +export const LayoutBlock: FC = (props) => { + const { + title, + description, + tips, + children, + subtitle, + subtitleTips, + required, + isMobile = false, + } = props + + return ( +
+
+
+
+ {title && ( + +
{title}
+
+ )} + {required && } +
+ {subtitle && ( + +
+ {subtitle} +
+
+ )} +
+ {description &&
{description}
} +
+
{children}
+
+ ) +} + +export default LayoutBlock +LayoutBlock.displayName = "AIAgentBlock" diff --git a/apps/agent/src/Layout/Function/LayoutBlock/interface.ts b/apps/agent/src/Layout/Function/LayoutBlock/interface.ts new file mode 100644 index 00000000..457c9bd4 --- /dev/null +++ b/apps/agent/src/Layout/Function/LayoutBlock/interface.ts @@ -0,0 +1,12 @@ +import { ReactNode } from "react" + +export interface ILayoutBlock { + title: string + description?: ReactNode + tips?: string + subtitle?: string | ReactNode + children?: ReactNode + subtitleTips?: string + required?: boolean + isMobile?: boolean +} diff --git a/apps/agent/src/Layout/Function/LayoutBlock/style.ts b/apps/agent/src/Layout/Function/LayoutBlock/style.ts new file mode 100644 index 00000000..70773364 --- /dev/null +++ b/apps/agent/src/Layout/Function/LayoutBlock/style.ts @@ -0,0 +1,71 @@ +import { SerializedStyles, css } from "@emotion/react" +import { getColor } from "@illa-public/color-scheme" + +export const agentBlockStyle = (isMobile: boolean) => css` + width: 100%; + display: flex; + flex-direction: column; + gap: 8px; + padding: ${isMobile ? "0px" : "8px 0px"}; +` + +export function applyBlockTextStyle( + renderBottomLine?: boolean, +): SerializedStyles { + return css` + color: ${getColor("grayBlue", "02")}; + font-size: 14px; + font-weight: 600; + line-height: 22px; + border-bottom: ${renderBottomLine + ? `1px dashed ${getColor("grayBlue", "06")}` + : "none"}; + ` +} + +export const blockTitleContainer = css` + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; +` + +export const blockTItleAndRequireContainerStyle = css` + display: flex; + align-items: center; + gap: 4px; +` + +export function applyBlockSubtitleStyle( + renderBottomLine?: boolean, +): SerializedStyles { + return css` + display: inline-flex; + align-items: center; + border-bottom: ${renderBottomLine + ? `1px dashed ${getColor("grayBlue", "06")}` + : "none"}; + ` +} + +export const childrenAndErrorMessageContainerStyle = css` + width: 100%; + display: flex; + flex-direction: column; + gap: 8px; +` + +export const titleAndDescriptionContainerStyle = css` + width: 100%; + display: flex; + flex-direction: column; + gap: 4px; +` + +export const descriptionStyle = css` + width: 100%; + color: ${getColor("grayBlue", "03")}; + font-size: 12px; + font-weight: 400; + line-height: 130%; +` diff --git a/apps/agent/src/Layout/Function/TipText/index.tsx b/apps/agent/src/Layout/Function/TipText/index.tsx new file mode 100644 index 00000000..93504ad4 --- /dev/null +++ b/apps/agent/src/Layout/Function/TipText/index.tsx @@ -0,0 +1,11 @@ +import { FC } from "react" +import { errorMsgStyle } from "./style" + +interface ErrorTextProps { + message: string | undefined +} + +export const TipText: FC = ({ message }) => { + if (!message) return null + return
{message}
+} diff --git a/apps/agent/src/Layout/Function/TipText/style.ts b/apps/agent/src/Layout/Function/TipText/style.ts new file mode 100644 index 00000000..7c44554d --- /dev/null +++ b/apps/agent/src/Layout/Function/TipText/style.ts @@ -0,0 +1,11 @@ +import { css } from "@emotion/react" +import { getColor } from "@illa-public/color-scheme" + +export const errorMsgStyle = css` + font-size: 14px; + line-height: 22px; + color: ${getColor("grayBlue", "03")}; + display: flex; + align-items: center; + gap: 8px; +` diff --git a/apps/agent/src/Layout/Workspace/components/Tab/TipisTab/mobile/index.tsx b/apps/agent/src/Layout/Workspace/components/Tab/TipisTab/mobile/index.tsx index 1060d555..5de6f07f 100644 --- a/apps/agent/src/Layout/Workspace/components/Tab/TipisTab/mobile/index.tsx +++ b/apps/agent/src/Layout/Workspace/components/Tab/TipisTab/mobile/index.tsx @@ -13,7 +13,7 @@ import { import { recentTabActions } from "@/redux/ui/recentTab/slice" import { DEFAULT_CHAT_ID } from "@/redux/ui/recentTab/state" import { useRemoveRecentTabReducer } from "@/utils/recentTabs/baseHook" -import { getChatPath } from "@/utils/routeHelper" +import { genTabNavigateLink, getChatPath } from "@/utils/routeHelper" import { useGetCurrentTeamInfo } from "@/utils/team" import { baseActionIconContainerStyle, @@ -21,7 +21,7 @@ import { } from "../../baseTabStyle" import { SHOULD_MODEL_TIP_TAB_TYPES } from "../constant" import { menuItemNameStyle, menuItemStyle, navLinkStyle } from "../style" -import { genTabNavigateLink, getIconByTabInfo, useGetTabName } from "../utils" +import { getIconByTabInfo, useGetTabName } from "../utils" import { IMobileTipisTabProps } from "./interface" const MobileTipisTab: FC = (props) => { diff --git a/apps/agent/src/Layout/Workspace/components/Tab/TipisTab/pc/index.tsx b/apps/agent/src/Layout/Workspace/components/Tab/TipisTab/pc/index.tsx index 4341e010..79527c04 100644 --- a/apps/agent/src/Layout/Workspace/components/Tab/TipisTab/pc/index.tsx +++ b/apps/agent/src/Layout/Workspace/components/Tab/TipisTab/pc/index.tsx @@ -13,7 +13,7 @@ import { import { recentTabActions } from "@/redux/ui/recentTab/slice" import { DEFAULT_CHAT_ID } from "@/redux/ui/recentTab/state" import { useRemoveRecentTabReducer } from "@/utils/recentTabs/baseHook" -import { getChatPath } from "@/utils/routeHelper" +import { genTabNavigateLink, getChatPath } from "@/utils/routeHelper" import { useGetCurrentTeamInfo } from "@/utils/team" import DropIndicator from "../../DropIndicator/DropIndicator" import { @@ -24,7 +24,7 @@ import { import { DRAG_TAB_TYPES, useTabSortableItem } from "../../hook" import { SHOULD_MODEL_TIP_TAB_TYPES } from "../constant" import { menuItemNameStyle, menuItemStyle, navLinkStyle } from "../style" -import { genTabNavigateLink, getIconByTabInfo, useGetTabName } from "../utils" +import { getIconByTabInfo, useGetTabName } from "../utils" import { IPCTipisTab } from "./interface" const PCTipisTab: FC = (props) => { diff --git a/apps/agent/src/Layout/Workspace/components/Tab/TipisTab/utils.tsx b/apps/agent/src/Layout/Workspace/components/Tab/TipisTab/utils.tsx index 007be533..76d6dc27 100644 --- a/apps/agent/src/Layout/Workspace/components/Tab/TipisTab/utils.tsx +++ b/apps/agent/src/Layout/Workspace/components/Tab/TipisTab/utils.tsx @@ -8,18 +8,6 @@ import FunctionIcon from "@/assets/workspace/function.svg?react" import MarketplaceIcon from "@/assets/workspace/marketplace.svg?react" import { TAB_TYPE } from "@/redux/ui/recentTab/interface" import { DEFAULT_CHAT_ID } from "@/redux/ui/recentTab/state" -import { - getChatPath, - getCreateFunctionPath, - getCreateTipiPath, - getEditFunctionPath, - getEditTipiPath, - getExploreFunctionsPath, - getExploreTipisPath, - getMarketTipiDetailPath, - getRunTipiPath, - getTipiDetailPath, -} from "@/utils/routeHelper" import { basePCMenuItemButtonCustomIconContainerStyle } from "../baseTabStyle" import { chatIconStyle, menuItemIconContainerStyle } from "./style" @@ -104,36 +92,3 @@ export const useGetTabName = () => { return getTabName } - -export const genTabNavigateLink = ( - teamIdentifier: string = "", - tabType: TAB_TYPE, - cacheID: string, - tabID: string, -) => { - switch (tabType) { - case TAB_TYPE.CREATE_TIPIS: - return getCreateTipiPath(teamIdentifier) - case TAB_TYPE.EDIT_TIPIS: - return getEditTipiPath(teamIdentifier, cacheID) - case TAB_TYPE.RUN_TIPIS: - return `${getRunTipiPath(teamIdentifier, cacheID, tabID)}` - case TAB_TYPE.CHAT: - return getChatPath(teamIdentifier, cacheID) - case TAB_TYPE.CREATE_FUNCTION: - return getCreateFunctionPath(teamIdentifier, cacheID) - case TAB_TYPE.EDIT_FUNCTION: - return getEditFunctionPath(teamIdentifier, cacheID) - case TAB_TYPE.EXPLORE_TIPIS: - return getExploreTipisPath(teamIdentifier) - case TAB_TYPE.EXPLORE_FUNCTION: - return getExploreFunctionsPath(teamIdentifier) - case TAB_TYPE.EXPLORE_TIPIS_DETAIL: - return getTipiDetailPath(teamIdentifier, cacheID) - case TAB_TYPE.EXPLORE_MARKET_TIPIS_DETAIL: - return getMarketTipiDetailPath(teamIdentifier, cacheID) - case TAB_TYPE.EXPLORE_MARKET_FUNCTION_DETAIL: - case TAB_TYPE.EXPLORE_FUNCTION_DETAIL: - return "" - } -} diff --git a/apps/agent/src/Layout/Workspace/modules/FeatureArea/index.tsx b/apps/agent/src/Layout/Workspace/modules/FeatureArea/index.tsx index 1344134c..8e48dd29 100644 --- a/apps/agent/src/Layout/Workspace/modules/FeatureArea/index.tsx +++ b/apps/agent/src/Layout/Workspace/modules/FeatureArea/index.tsx @@ -5,27 +5,28 @@ import { v4 } from "uuid" import { PenIcon, PlusIcon } from "@illa-public/icon" import { TipisTrack } from "@illa-public/track-utils" import { getIsEmptyTeam } from "@illa-public/user-data" -// import FunctionIcon from "@/assets/workspace/function.svg?react" +import FunctionIcon from "@/assets/workspace/function.svg?react" import MarketplaceIcon from "@/assets/workspace/marketplace.svg?react" import store from "@/redux/store" import { canShownCreateTipi } from "@/utils/UIHelper/tipis" import { useNavigateToCreateTipis, + useNavigateToExploreFunction, useNavigateToExploreTipis, useNavigateToNewChat, } from "@/utils/routeHelper/hook" import { useGetCurrentTeamInfo } from "@/utils/team" -// import FeatureCard from "../../components/FeatureCard" +import FeatureCard from "../../components/FeatureCard" import MenuItemButton from "../../components/MenuItemButton" import { createTeamContext } from "../../context" -import { featureAreaContainerStyle } from "./style" +import { featureAreaContainerStyle, featureCardsContainerStyle } from "./style" const FeatureArea: FC = () => { const { t } = useTranslation() const navigateToCreateTIpis = useNavigateToCreateTipis() const navigateToChat = useNavigateToNewChat() const navigateToExploreTipis = useNavigateToExploreTipis() - // const navigateToExploreFunction = useNavigateToExploreFunction() + const navigateToExploreFunction = useNavigateToExploreFunction() const { onChangeTeamVisible } = useContext(createTeamContext) const currentTeamInfo = useGetCurrentTeamInfo() @@ -70,23 +71,23 @@ const FeatureArea: FC = () => { navigateToExploreTipis() } - // const handleClickFunction = () => { - // const isEmptyTeam = getIsEmptyTeam(store.getState()) - // TipisTrack.track("click_function_entry") + const handleClickFunction = () => { + const isEmptyTeam = getIsEmptyTeam(store.getState()) + TipisTrack.track("click_function_dashboard_tab") - // if (isEmptyTeam) { - // TipisTrack.track("click_create_team_entry", { - // parameter1: "left_panel_no_team", - // }) - // onChangeTeamVisible?.(true) - // return - // } - // navigateToExploreFunction() - // } + if (isEmptyTeam) { + TipisTrack.track("click_create_team_entry", { + parameter1: "left_panel_no_team", + }) + onChangeTeamVisible?.(true) + return + } + navigateToExploreFunction() + } return (
- {/*
+
} title={t("homepage.left_panel.feature.explore_tipi")} @@ -99,12 +100,7 @@ const FeatureArea: FC = () => { position="right" onClick={handleClickFunction} /> -
*/} - } - onClick={handleClickExploreTipis} - /> +
} diff --git a/apps/agent/src/Layout/Workspace/pc/components/Header/style.ts b/apps/agent/src/Layout/Workspace/pc/components/Header/style.ts index 446b8fdd..c1cc05f8 100644 --- a/apps/agent/src/Layout/Workspace/pc/components/Header/style.ts +++ b/apps/agent/src/Layout/Workspace/pc/components/Header/style.ts @@ -9,6 +9,7 @@ export const headerLayoutContainerStyle = css` align-items: center; gap: 24px; justify-content: space-between; + flex: none; ` export const titleAndTitleDescContainerStyle = css` diff --git a/apps/agent/src/Layout/Workspace/pc/modules/Menu/index.tsx b/apps/agent/src/Layout/Workspace/pc/modules/Menu/index.tsx index d3fd6bbf..3db40e25 100644 --- a/apps/agent/src/Layout/Workspace/pc/modules/Menu/index.tsx +++ b/apps/agent/src/Layout/Workspace/pc/modules/Menu/index.tsx @@ -171,7 +171,7 @@ const PCWorkspaceMenu: FC = () => { className="divider" />
- {recentTabInfos.length > 1 && ( + {recentTabInfos.length > 0 && (
import("./modules/TencentCos")) +const LarkBotConfigElement = lazy(() => import("./modules/LarkBot")) + +export const INTEGRATION_TYPE_MAP_CONFIG_ELEMENT: Record< + TIntegrationType, + ComponentType +> = { + larkbot: LarkBotConfigElement, + tencentcos: TencentCosConfigElement, +} diff --git a/apps/agent/src/Modules/Integration/ConfigElement/index.tsx b/apps/agent/src/Modules/Integration/ConfigElement/index.tsx new file mode 100644 index 00000000..93879811 --- /dev/null +++ b/apps/agent/src/Modules/Integration/ConfigElement/index.tsx @@ -0,0 +1,45 @@ +import { Input } from "antd" +import { FC, Suspense } from "react" +import { Controller, useFormContext } from "react-hook-form" +import { useTranslation } from "react-i18next" +import { IBaseIntegration } from "@illa-public/public-types" +import LabelWithController from "@/Layout/Function/LabelWithController" +import { INTEGRATION_TYPE_MAP_CONFIG_ELEMENT } from "./config" +import { ConfigElementProps } from "./interface" + +const ConfigElement: FC = (props) => { + const { integrationType } = props + const { control } = useFormContext() + const { t } = useTranslation() + + const IntegrationConfigElement = + INTEGRATION_TYPE_MAP_CONFIG_ELEMENT[integrationType] + return ( + <> + { + return ( + + + + ) + }} + /> + + + + + + ) +} + +export default ConfigElement diff --git a/apps/agent/src/Modules/Integration/ConfigElement/interface.ts b/apps/agent/src/Modules/Integration/ConfigElement/interface.ts new file mode 100644 index 00000000..b246b16d --- /dev/null +++ b/apps/agent/src/Modules/Integration/ConfigElement/interface.ts @@ -0,0 +1,5 @@ +import { TIntegrationType } from "@illa-public/public-types" + +export interface ConfigElementProps { + integrationType: TIntegrationType +} diff --git a/apps/agent/src/Modules/Integration/ConfigElement/modules/LarkBot/index.tsx b/apps/agent/src/Modules/Integration/ConfigElement/modules/LarkBot/index.tsx new file mode 100644 index 00000000..b281b981 --- /dev/null +++ b/apps/agent/src/Modules/Integration/ConfigElement/modules/LarkBot/index.tsx @@ -0,0 +1,84 @@ +import { Input, Switch } from "antd" +import { FC } from "react" +import { Controller, useFormContext, useWatch } from "react-hook-form" +import { useTranslation } from "react-i18next" +import { ILarkBotIntegration } from "@illa-public/public-types" +import LabelWithController from "@/Layout/Function/LabelWithController" +import { WEBHOOK_PREFIX_RULES } from "./rules" +import { switchContext } from "./style" + +const TencentCosConfigElement: FC = () => { + const { control } = useFormContext() + const { t } = useTranslation() + + const allowImageContent = useWatch({ + control, + name: "content.allowImageContent", + }) + return ( + <> + { + if (WEBHOOK_PREFIX_RULES.every((rule) => !value.startsWith(rule))) { + return t("editor.action.form.tips.lark.webhook") + } + return true + }, + }} + render={({ field, fieldState }) => { + return ( + + + + ) + }} + /> + { + return ( + +
+ +
+
+ ) + }} + /> + {allowImageContent && ( + { + return ( + + + + ) + }} + /> + )} + + ) +} + +export default TencentCosConfigElement diff --git a/apps/agent/src/Modules/Integration/ConfigElement/modules/LarkBot/rules.ts b/apps/agent/src/Modules/Integration/ConfigElement/modules/LarkBot/rules.ts new file mode 100644 index 00000000..df1909db --- /dev/null +++ b/apps/agent/src/Modules/Integration/ConfigElement/modules/LarkBot/rules.ts @@ -0,0 +1,4 @@ +export const WEBHOOK_PREFIX_RULES = [ + "https://open.larksuite.com/open-apis/bot/", + "https://open.feishu.cn/open-apis/bot/", +] diff --git a/apps/agent/src/Modules/Integration/ConfigElement/modules/LarkBot/style.ts b/apps/agent/src/Modules/Integration/ConfigElement/modules/LarkBot/style.ts new file mode 100644 index 00000000..13df7e3c --- /dev/null +++ b/apps/agent/src/Modules/Integration/ConfigElement/modules/LarkBot/style.ts @@ -0,0 +1,9 @@ +import { css } from "@emotion/react" + +export const configContentStyle = css` + display: flex; +` + +export const switchContext = css` + padding: 9px 0; +` diff --git a/apps/agent/src/Modules/Integration/ConfigElement/modules/TencentCos/constants.ts b/apps/agent/src/Modules/Integration/ConfigElement/modules/TencentCos/constants.ts new file mode 100644 index 00000000..46eb9415 --- /dev/null +++ b/apps/agent/src/Modules/Integration/ConfigElement/modules/TencentCos/constants.ts @@ -0,0 +1,90 @@ +export const regionOptions = [ + { + label: "ap-beijing-1", + value: "ap-beijing-1", + }, + { + label: "ap-beijing", + value: "ap-beijing", + }, + { + label: "ap-nanjing", + value: "ap-nanjing", + }, + { + label: "ap-shanghai", + value: "ap-shanghai", + }, + { + label: "ap-guangzhou", + value: "ap-guangzhou", + }, + { + label: "ap-chengdu", + value: "ap-chengdu", + }, + { + label: "ap-chongqing", + value: "ap-chongqing", + }, + { + label: "ap-shenzhen-fsi", + value: "ap-shenzhen-fsi", + }, + { + label: "ap-shanghai-fsi", + value: "ap-shanghai-fsi", + }, + { + label: "ap-beijing-fsi", + value: "ap-beijing-fsi", + }, + { + label: "ap-hongkong", + value: "ap-hongkong", + }, + { + label: "ap-singapore", + value: "ap-singapore", + }, + { + label: "ap-mumbai", + value: "ap-mumbai", + }, + { + label: "ap-jakarta", + value: "ap-jakarta", + }, + { + label: "ap-seoul", + value: "ap-seoul", + }, + { + label: "ap-bangkok", + value: "ap-bangkok", + }, + { + label: "ap-tokyo", + value: "ap-tokyo", + }, + { + label: "na-siliconvalley", + value: "na-siliconvalley", + }, + { + label: "na-ashburn", + value: "na-ashburn", + }, + { + label: "na-toronto", + value: "na-toronto", + }, + { + label: "sa-saopaulo", + value: "sa-saopaulo", + }, + { + label: "eu-frankfurt", + value: "eu-frankfurt", + }, +] diff --git a/apps/agent/src/Modules/Integration/ConfigElement/modules/TencentCos/index.tsx b/apps/agent/src/Modules/Integration/ConfigElement/modules/TencentCos/index.tsx new file mode 100644 index 00000000..762c9e6c --- /dev/null +++ b/apps/agent/src/Modules/Integration/ConfigElement/modules/TencentCos/index.tsx @@ -0,0 +1,95 @@ +import { Input, Select } from "antd" +import { FC } from "react" +import { Controller, useFormContext } from "react-hook-form" +import { useTranslation } from "react-i18next" +import { ITencentCosIntegration } from "@illa-public/public-types" +import LabelWithController from "@/Layout/Function/LabelWithController" +import { regionOptions } from "./constants" + +const TencentCosConfigElement: FC = () => { + const { control } = useFormContext() + const { t } = useTranslation() + return ( + <> + { + return ( + + + + ) + }} + /> + { + return ( + + + + ) + }} + /> + { + return ( + + + + ) + }} + /> + + ) +} + +export default TencentCosConfigElement diff --git a/apps/agent/src/Modules/Integration/ConfigElement/modules/TencentCos/style.ts b/apps/agent/src/Modules/Integration/ConfigElement/modules/TencentCos/style.ts new file mode 100644 index 00000000..362b6253 --- /dev/null +++ b/apps/agent/src/Modules/Integration/ConfigElement/modules/TencentCos/style.ts @@ -0,0 +1,5 @@ +import { css } from "@emotion/react" + +export const configContentStyle = css` + display: flex; +` diff --git a/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/index.tsx b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/index.tsx new file mode 100644 index 00000000..43ac5b76 --- /dev/null +++ b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/index.tsx @@ -0,0 +1,43 @@ +import { FC } from "react" +import { useGetIntegrationListQuery } from "@/redux/services/integrationAPI" +import { useGetCurrentTeamInfo } from "@/utils/team" +import FullSectionLoading from "../../../components/FullSectionLoading" +import { IIntegrationSelectorProps } from "./interface" +import CreateIntegration from "./modules/CreateOrUpdateIntegration/createIntegration" +import SelectAndCreateIntegration from "./modules/SelectAndCreate" +import { loadingContainerStyle } from "./style" + +const IntegrationSelector: FC = (props) => { + const currentTeamInfo = useGetCurrentTeamInfo() + const { onConfirm, integrationType, integrationID, defaultStep } = props + + const { data, isLoading } = useGetIntegrationListQuery(currentTeamInfo!.id) + + const targetTypeIntegration = (data ?? []).filter( + (item) => item.resourceType === integrationType, + ) + + if (isLoading) { + return ( +
+ +
+ ) + } + + return targetTypeIntegration.length > 0 ? ( + + ) : ( + + ) +} + +export default IntegrationSelector diff --git a/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/interface.ts b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/interface.ts new file mode 100644 index 00000000..119c04ff --- /dev/null +++ b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/interface.ts @@ -0,0 +1,22 @@ +import { TIntegrationType } from "@illa-public/public-types" +import { SELECT_INTEGRATION_STEP } from "./modules/SelectAndCreate/interface" + +export interface IIntegrationSelectorProps { + onConfirm: (integrationID: string) => void + integrationType: TIntegrationType + integrationID: string + defaultStep?: SELECT_INTEGRATION_STEP +} + +export interface IIntegrationSelectorModalProps { + open: boolean + changeOpen: (open: boolean) => void + integrationType: TIntegrationType + integrationID: string + onConfirm: (integrationID: string) => void +} + +export interface ISelectIntegrationInject { + setModalName: (name: string) => void + modalName: string +} diff --git a/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modal.tsx b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modal.tsx new file mode 100644 index 00000000..62b828e7 --- /dev/null +++ b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modal.tsx @@ -0,0 +1,65 @@ +import { Modal } from "antd" +import { FC, useEffect, useState } from "react" +import IntegrationSelector from "." +import { CREATE_INTEGRATION_EVENT } from "../../../utils/eventEmitter/constants" +import { IntegrationEventEmitter } from "../../../utils/function" +import { IIntegrationSelectorModalProps } from "./interface" +import { SELECT_INTEGRATION_STEP } from "./modules/SelectAndCreate/interface" +import { customModalStyle } from "./style" +import { IntegrationSelectorContext } from "./utils" + +const IntegrationSelectorModal: FC = ( + props, +) => { + const { open, changeOpen, onConfirm, integrationType, integrationID } = props + + const [modalName, setModalName] = useState("") + + const [defaultStep, setDefaultStep] = useState( + SELECT_INTEGRATION_STEP.SELECT_OR_CREATE, + ) + + useEffect(() => { + IntegrationEventEmitter.on( + CREATE_INTEGRATION_EVENT.CHANGE_MODAL_STEP, + setDefaultStep, + ) + + return () => { + IntegrationEventEmitter.off( + CREATE_INTEGRATION_EVENT.CHANGE_MODAL_STEP, + setDefaultStep, + ) + } + }, []) + + return ( + + { + changeOpen(false) + }} + > + + + + ) +} + +export default IntegrationSelectorModal diff --git a/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/CreateOrUpdateIntegration/components/Footer/index.tsx b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/CreateOrUpdateIntegration/components/Footer/index.tsx new file mode 100644 index 00000000..81d6b14f --- /dev/null +++ b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/CreateOrUpdateIntegration/components/Footer/index.tsx @@ -0,0 +1,85 @@ +import Icon from "@ant-design/icons" +import { Button } from "antd" +import { FC } from "react" +import { useFormContext } from "react-hook-form" +import { useTranslation } from "react-i18next" +import { PreviousIcon } from "@illa-public/icon" +import { IBaseIntegration } from "@illa-public/public-types" +import BlackButton from "@/components/BlackButton" +import { + useCreateIntegrationMutation, + useUpdateIntegrationByIDMutation, +} from "@/redux/services/integrationAPI" +import { useGetCurrentTeamInfo } from "@/utils/team" +import { IFooterProps } from "./interface" +import { confirmButtonStyle, footerContainerStyle } from "./style" + +const ConfigElementFooter: FC = (props) => { + const { onBack, onConfirm } = props + const { t } = useTranslation() + + const { handleSubmit } = useFormContext() + const currentTeamInfo = useGetCurrentTeamInfo()! + const [createIntegration, { isLoading: isCreateLoading }] = + useCreateIntegrationMutation() + + const [updateIntegrationByID, { isLoading: isUpdateLoading }] = + useUpdateIntegrationByIDMutation() + + const createIntegrationWhenSubmit = async (data: IBaseIntegration) => { + try { + const integrationInfo = await createIntegration({ + teamID: currentTeamInfo.id, + integrationData: data, + }).unwrap() + onConfirm(integrationInfo.resourceID) + } catch {} + } + + const updateIntegrationWhenSubmit = async (data: IBaseIntegration) => { + try { + const integrationInfo = await updateIntegrationByID({ + teamID: currentTeamInfo.id, + integrationID: data.resourceID!, + integrationData: data, + }).unwrap() + onConfirm(integrationInfo.resourceID) + } catch {} + } + + const onSubmit = async (data: IBaseIntegration) => { + if (data.resourceID) { + await updateIntegrationWhenSubmit(data) + } else { + await createIntegrationWhenSubmit(data) + } + } + + return ( +
+ {onBack && ( + + )} + + {t("function.edit.variable_modal.button.confirm")} + +
+ ) +} + +export default ConfigElementFooter diff --git a/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/CreateOrUpdateIntegration/components/Footer/interface.ts b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/CreateOrUpdateIntegration/components/Footer/interface.ts new file mode 100644 index 00000000..bdcbe90f --- /dev/null +++ b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/CreateOrUpdateIntegration/components/Footer/interface.ts @@ -0,0 +1,4 @@ +export interface IFooterProps { + onBack?: () => void + onConfirm: (integrationID: string) => void +} diff --git a/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/CreateOrUpdateIntegration/components/Footer/style.ts b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/CreateOrUpdateIntegration/components/Footer/style.ts new file mode 100644 index 00000000..fd5690ff --- /dev/null +++ b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/CreateOrUpdateIntegration/components/Footer/style.ts @@ -0,0 +1,14 @@ +import { css } from "@emotion/react" + +export const footerContainerStyle = (hasBackButton: boolean) => css` + width: 100%; + display: flex; + align-items: center; + + justify-content: ${hasBackButton ? "space-between" : "flex-end"}; + padding-top: 24px; +` + +export const confirmButtonStyle = css` + width: 200px; +` diff --git a/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/CreateOrUpdateIntegration/createIntegration.tsx b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/CreateOrUpdateIntegration/createIntegration.tsx new file mode 100644 index 00000000..36135740 --- /dev/null +++ b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/CreateOrUpdateIntegration/createIntegration.tsx @@ -0,0 +1,34 @@ +import { FC, useEffect } from "react" +import { FormProvider, useForm } from "react-hook-form" +import { INTEGRATION_TYPE_MAP_CONFIG } from "@illa-public/public-configs" +import { IBaseIntegration } from "@illa-public/public-types" +import { useGetResourceNameFormResourceType } from "@illa-public/utils" +import ConfigElement from "../../../ConfigElement" +import { useIntegrationSelectorContext } from "../../utils" +import ConfigElementFooter from "./components/Footer" +import { ICreateIntegrationProps } from "./interface" + +const CreateIntegration: FC = (props) => { + const { onBack, onConfirm, integrationType } = props + + const methods = useForm({ + defaultValues: INTEGRATION_TYPE_MAP_CONFIG[integrationType], + mode: "onChange", + }) + + const { setModalName } = useIntegrationSelectorContext() + const getResourceNameFromResourceType = useGetResourceNameFormResourceType() + + useEffect(() => { + setModalName(getResourceNameFromResourceType(integrationType)) + }, [getResourceNameFromResourceType, integrationType, setModalName]) + + return ( + + + + + ) +} + +export default CreateIntegration diff --git a/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/CreateOrUpdateIntegration/editIntegration.tsx b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/CreateOrUpdateIntegration/editIntegration.tsx new file mode 100644 index 00000000..55954839 --- /dev/null +++ b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/CreateOrUpdateIntegration/editIntegration.tsx @@ -0,0 +1,65 @@ +import { FC, useEffect } from "react" +import { FormProvider, useForm } from "react-hook-form" +import { IBaseIntegration } from "@illa-public/public-types" +import { useGetResourceNameFormResourceType } from "@illa-public/utils" +import FullSectionLoading from "@/components/FullSectionLoading" +import { useGetIntegrationListQuery } from "@/redux/services/integrationAPI" +import { useGetCurrentTeamInfo } from "@/utils/team" +import ConfigElement from "../../../ConfigElement" +import { useIntegrationSelectorContext } from "../../utils" +import ConfigElementFooter from "./components/Footer" +import { + IEditIntegrationDataProviderProps, + IEditIntegrationProps, +} from "./interface" + +const EditIntegration: FC = (props) => { + const { onBack, onConfirm, integration } = props + + const methods = useForm({ + defaultValues: integration, + mode: "onChange", + }) + + const { setModalName } = useIntegrationSelectorContext() + const getResourceNameFromResourceType = useGetResourceNameFormResourceType() + + useEffect(() => { + setModalName(getResourceNameFromResourceType(integration.resourceType)) + }, [getResourceNameFromResourceType, integration, setModalName]) + + return ( + + + + + ) +} + +const EditIntegrationDataProvider: FC = ( + props, +) => { + const { onBack, onConfirm, integrationID } = props + const currentTeamInfo = useGetCurrentTeamInfo()! + const { data, isLoading } = useGetIntegrationListQuery(currentTeamInfo.id) + + if (isLoading) { + return + } + + if (!data) return null + + const targetIntegration = data.find( + (integration) => integration.resourceID === integrationID, + ) + if (!targetIntegration) return null + return ( + + ) +} + +export default EditIntegrationDataProvider diff --git a/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/CreateOrUpdateIntegration/index.tsx b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/CreateOrUpdateIntegration/index.tsx new file mode 100644 index 00000000..aad1673f --- /dev/null +++ b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/CreateOrUpdateIntegration/index.tsx @@ -0,0 +1,25 @@ +import { FC } from "react" +import CreateIntegration from "./createIntegration" +import EditIntegrationDataProvider from "./editIntegration" +import { ICreateOrEditIntegrationProps } from "./interface" + +const CreateOrUpdateIntegration: FC = ( + props, +) => { + const { onConfirm, onBack, integrationID, integrationType } = props + + return integrationID ? ( + + ) : ( + + ) +} + +export default CreateOrUpdateIntegration diff --git a/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/CreateOrUpdateIntegration/interface.ts b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/CreateOrUpdateIntegration/interface.ts new file mode 100644 index 00000000..ed83e649 --- /dev/null +++ b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/CreateOrUpdateIntegration/interface.ts @@ -0,0 +1,27 @@ +import { TIntegrationType } from "@illa-public/public-types" +import { IBaseIntegration } from "@illa-public/public-types" + +export interface ICreateIntegrationProps { + onBack?: () => void + onConfirm: (integrationID: string) => void + integrationType: TIntegrationType +} + +export interface IEditIntegrationDataProviderProps { + onBack?: () => void + onConfirm: (integrationID: string) => void + integrationID: string +} + +export interface IEditIntegrationProps { + onBack?: () => void + onConfirm: (integrationID: string) => void + integration: IBaseIntegration +} + +export interface ICreateOrEditIntegrationProps { + onBack?: () => void + onConfirm: (integrationID: string) => void + integrationID: string + integrationType: TIntegrationType +} diff --git a/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/SelectAndCreate/index.tsx b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/SelectAndCreate/index.tsx new file mode 100644 index 00000000..ec7853cb --- /dev/null +++ b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/SelectAndCreate/index.tsx @@ -0,0 +1,57 @@ +import { FC, useState } from "react" +import CreateIntegration from "../CreateOrUpdateIntegration/createIntegration" +import EditIntegrationDataProvider from "../CreateOrUpdateIntegration/editIntegration" +import SelectIntegration from "../SelectIntegration" +import { + ISelectAndCreateIntegrationProps, + SELECT_INTEGRATION_STEP, +} from "./interface" + +const SelectAndCreateIntegration: FC = ( + props, +) => { + const { + onConfirm, + integrationType, + integrationID, + defaultStep = SELECT_INTEGRATION_STEP.SELECT_OR_CREATE, + } = props + const [step, setStep] = useState(defaultStep) + + return ( + <> + {step === SELECT_INTEGRATION_STEP.SELECT_OR_CREATE && ( + { + setStep(SELECT_INTEGRATION_STEP.CREATE) + }} + onConfirm={onConfirm} + integrationType={integrationType} + /> + )} + {step === SELECT_INTEGRATION_STEP.CREATE && ( + { + setStep(SELECT_INTEGRATION_STEP.SELECT_OR_CREATE) + }} + integrationType={integrationType} + /> + )} + {step === SELECT_INTEGRATION_STEP.EDIT && + (integrationID ? ( + + ) : ( + + ))} + + ) +} + +export default SelectAndCreateIntegration diff --git a/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/SelectAndCreate/interface.ts b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/SelectAndCreate/interface.ts new file mode 100644 index 00000000..375f3509 --- /dev/null +++ b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/SelectAndCreate/interface.ts @@ -0,0 +1,14 @@ +import { TIntegrationType } from "@illa-public/public-types" + +export enum SELECT_INTEGRATION_STEP { + SELECT_OR_CREATE = "SELECT_OR_CREATE", + EDIT = "EDIT", + CREATE = "CREATE", +} + +export interface ISelectAndCreateIntegrationProps { + onConfirm: (integrationID: string) => void + integrationType: TIntegrationType + integrationID: string + defaultStep?: SELECT_INTEGRATION_STEP +} diff --git a/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/SelectIntegration/components/Footer/index.tsx b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/SelectIntegration/components/Footer/index.tsx new file mode 100644 index 00000000..54330e53 --- /dev/null +++ b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/SelectIntegration/components/Footer/index.tsx @@ -0,0 +1,39 @@ +import { Button } from "antd" +import { FC } from "react" +import BlackButton from "@/components/BlackButton" +import { ISelectIntegrationFooterProps } from "./interface" +import { confirmButtonStyle, footerContainerStyle } from "./style" + +const SelectIntegrationFooter: FC = (props) => { + const { onCreateIntegration, selectedIntegration, onConfirm } = props + + const handleClickConfirm = () => { + onConfirm(selectedIntegration) + } + return ( +
+ {onCreateIntegration && ( + + )} + + Confirm + +
+ ) +} + +export default SelectIntegrationFooter diff --git a/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/SelectIntegration/components/Footer/interface.ts b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/SelectIntegration/components/Footer/interface.ts new file mode 100644 index 00000000..cb35f123 --- /dev/null +++ b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/SelectIntegration/components/Footer/interface.ts @@ -0,0 +1,5 @@ +export interface ISelectIntegrationFooterProps { + selectedIntegration: string + onConfirm: (selectedIntegrationID: string) => void + onCreateIntegration?: () => void +} diff --git a/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/SelectIntegration/components/Footer/style.ts b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/SelectIntegration/components/Footer/style.ts new file mode 100644 index 00000000..f0a043ff --- /dev/null +++ b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/SelectIntegration/components/Footer/style.ts @@ -0,0 +1,14 @@ +import { css } from "@emotion/react" + +export const footerContainerStyle = css` + width: 100%; + display: flex; + align-items: center; + justify-content: flex-end; + padding-top: 24px; + gap: 8px; +` + +export const confirmButtonStyle = css` + width: 200px; +` diff --git a/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/SelectIntegration/components/List/index.tsx b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/SelectIntegration/components/List/index.tsx new file mode 100644 index 00000000..50f22918 --- /dev/null +++ b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/SelectIntegration/components/List/index.tsx @@ -0,0 +1,37 @@ +import { FC } from "react" +import { useGetIntegrationListQuery } from "@/redux/services/integrationAPI" +import { useGetCurrentTeamInfo } from "@/utils/team" +import { IIntegrationListProps } from "./interface" +import IntegrationListItem from "./item" +import { listContainerStyle } from "./style" + +const IntegrationList: FC = (props) => { + const { onClickItem, selectedIntegrationID, integrationType } = props + + const currentTeamInfo = useGetCurrentTeamInfo() + + const { integrationList } = useGetIntegrationListQuery(currentTeamInfo!.id, { + selectFromResult: ({ data }) => ({ + integrationList: (data ?? []).filter( + (item) => item.resourceType === integrationType, + ), + }), + }) + + return ( +
+ {integrationList.map((item) => ( + + ))} +
+ ) +} + +export default IntegrationList diff --git a/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/SelectIntegration/components/List/interface.ts b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/SelectIntegration/components/List/interface.ts new file mode 100644 index 00000000..1fb5253d --- /dev/null +++ b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/SelectIntegration/components/List/interface.ts @@ -0,0 +1,15 @@ +import { TIntegrationType } from "@illa-public/public-types" + +export interface IIntegrationListItemProps { + integrationType: TIntegrationType + integrationName: string + integrationID: string + onClickItem: (integrationID: string) => void + isSelected: boolean +} + +export interface IIntegrationListProps { + onClickItem: (integrationID: string) => void + selectedIntegrationID: string + integrationType: TIntegrationType +} diff --git a/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/SelectIntegration/components/List/item.tsx b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/SelectIntegration/components/List/item.tsx new file mode 100644 index 00000000..d6b48107 --- /dev/null +++ b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/SelectIntegration/components/List/item.tsx @@ -0,0 +1,41 @@ +import { FC } from "react" +import { INTEGRATION_TYPE_MAP_ICON } from "@illa-public/icon" +import { IIntegrationListItemProps } from "./interface" +import { + iconStyle, + itemContainerStyle, + itemIconAndNameContainerStyle, + itemNameStyle, + itemTimeContainerStyle, +} from "./style" + +const IntegrationListItem: FC = (props) => { + const { + integrationType, + integrationName, + integrationID, + onClickItem, + isSelected, + } = props + const ResourceIcon = INTEGRATION_TYPE_MAP_ICON[integrationType] + + const onClickCard = () => { + onClickItem(integrationID) + } + + return ( +
+
+ {ResourceIcon ? ( + + ) : ( +
+ )} +

{integrationName}

+
+
+
+ ) +} + +export default IntegrationListItem diff --git a/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/SelectIntegration/components/List/style.ts b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/SelectIntegration/components/List/style.ts new file mode 100644 index 00000000..afd8802e --- /dev/null +++ b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/SelectIntegration/components/List/style.ts @@ -0,0 +1,57 @@ +import { css } from "@emotion/react" +import { getColor } from "@illa-public/color-scheme" + +export const itemContainerStyle = (isSelected: boolean) => css` + width: 100%; + padding: 12px 0; + display: flex; + align-items: center; + cursor: pointer; + border-radius: 8px; + transition: background-color 0.2s; + background-color: ${isSelected ? getColor("grayBlue", "09") : "transparent"}; + :hover { + background-color: ${getColor("grayBlue", "09")}; + } +` + +export const itemIconAndNameContainerStyle = css` + flex: none; + width: 360px; + padding: 0 24px; + display: flex; + align-items: center; + gap: 8px; +` + +export const iconStyle = css` + width: 24px; + height: 24px; + font-size: 24px; + flex: none; +` + +export const itemNameStyle = css` + color: ${getColor("grayBlue", "02")}; + font-size: 14px; + font-weight: 500; + line-height: 22px; + width: 100%; + overflow: hidden; + text-overflow: ellipsis; +` + +export const itemTimeContainerStyle = css` + display: flex; + flex: none; + width: 120px; + padding: 0px 16px; + align-items: center; +` + +export const listContainerStyle = css` + min-height: 384px; + display: flex; + flex-direction: column; + width: 100%; +` diff --git a/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/SelectIntegration/index.tsx b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/SelectIntegration/index.tsx new file mode 100644 index 00000000..618a54e8 --- /dev/null +++ b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/SelectIntegration/index.tsx @@ -0,0 +1,34 @@ +import { FC, useEffect, useState } from "react" +import { useTranslation } from "react-i18next" +import { useIntegrationSelectorContext } from "../../utils" +import SelectIntegrationFooter from "./components/Footer" +import IntegrationList from "./components/List" +import { ISelectIntegrationProps } from "./interface" + +const SelectIntegration: FC = (props) => { + const { onClickCreate, onConfirm, integrationType } = props + const [selectedIntegration, setSelectedIntegration] = useState("") + const { setModalName } = useIntegrationSelectorContext() + const { t } = useTranslation() + + useEffect(() => { + setModalName(t("editor.action.modal.select_integration")) + }, [setModalName, t]) + + return ( + <> + + + + ) +} + +export default SelectIntegration diff --git a/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/SelectIntegration/interface.ts b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/SelectIntegration/interface.ts new file mode 100644 index 00000000..fa839e42 --- /dev/null +++ b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/modules/SelectIntegration/interface.ts @@ -0,0 +1,7 @@ +import { TIntegrationType } from "@illa-public/public-types" + +export interface ISelectIntegrationProps { + onClickCreate: () => void + onConfirm: (integrationID: string) => void + integrationType: TIntegrationType +} diff --git a/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/style.ts b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/style.ts new file mode 100644 index 00000000..498f80d5 --- /dev/null +++ b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/style.ts @@ -0,0 +1,12 @@ +import { css } from "@emotion/react" + +export const customModalStyle = css` + .ant-modal-title { + text-align: center; + } +` + +export const loadingContainerStyle = css` + width: 100%; + height: 520px; +` diff --git a/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/utils.ts b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/utils.ts new file mode 100644 index 00000000..cd37612c --- /dev/null +++ b/apps/agent/src/Modules/Integration/CreateOrSelectIntegration/utils.ts @@ -0,0 +1,11 @@ +import { createContext, useContext } from "react" +import { ISelectIntegrationInject } from "./interface" + +export const IntegrationSelectorContext = createContext( + {} as ISelectIntegrationInject, +) + +export const useIntegrationSelectorContext = () => { + const context = useContext(IntegrationSelectorContext) + return context +} diff --git a/apps/agent/src/Modules/Integration/IntegrationSelector/components/ResourceCard/index.tsx b/apps/agent/src/Modules/Integration/IntegrationSelector/components/ResourceCard/index.tsx new file mode 100644 index 00000000..1959f7f7 --- /dev/null +++ b/apps/agent/src/Modules/Integration/IntegrationSelector/components/ResourceCard/index.tsx @@ -0,0 +1,29 @@ +import { FC } from "react" +import { INTEGRATION_TYPE_MAP_ICON } from "@illa-public/icon" +import { useGetResourceNameFormResourceType } from "@illa-public/utils" +import { ResourceCardSelectorProps } from "./interface" +import { applyItemStyle, nameStyle, titleContainerStyle } from "./style" + +export const ResourceCard: FC = (props) => { + const { resourceType, onSelect } = props + + const getResourceNameFromResourceType = useGetResourceNameFormResourceType() + + const onClickCard = () => { + onSelect(resourceType) + } + const ResourceIcon = INTEGRATION_TYPE_MAP_ICON[resourceType] + + return ( +
+ {ResourceIcon ? : null} +
+
+ {getResourceNameFromResourceType(resourceType)} +
+
+
+ ) +} + +ResourceCard.displayName = "ResourceCard" diff --git a/apps/agent/src/Modules/Integration/IntegrationSelector/components/ResourceCard/interface.ts b/apps/agent/src/Modules/Integration/IntegrationSelector/components/ResourceCard/interface.ts new file mode 100644 index 00000000..4732ad90 --- /dev/null +++ b/apps/agent/src/Modules/Integration/IntegrationSelector/components/ResourceCard/interface.ts @@ -0,0 +1,6 @@ +import { TIntegrationType } from "@illa-public/public-types" + +export interface ResourceCardSelectorProps { + resourceType: TIntegrationType + onSelect: (item: TIntegrationType) => void +} diff --git a/apps/agent/src/Modules/Integration/IntegrationSelector/components/ResourceCard/style.ts b/apps/agent/src/Modules/Integration/IntegrationSelector/components/ResourceCard/style.ts new file mode 100644 index 00000000..4ce7721a --- /dev/null +++ b/apps/agent/src/Modules/Integration/IntegrationSelector/components/ResourceCard/style.ts @@ -0,0 +1,53 @@ +import { css } from "@emotion/react" +import { getColor, globalColor, illaPrefix } from "@illa-public/color-scheme" + +export const applyItemStyle = css` + display: flex; + padding: 0 0 0 16px; + height: 56px; + flex-direction: row; + align-items: center; + border-radius: 8px; + border: solid 1px ${globalColor(`--${illaPrefix}-grayBlue-08`)}; + position: relative; + background-color: ${globalColor(`--${illaPrefix}-white-01`)}; + cursor: pointer; + transition: all 0.2s ease-in-out; + color: ${getColor("grayBlue", "02")}; + &:hover { + box-shadow: 0 4px 10px 0 ${globalColor(`--${illaPrefix}-blackAlpha-07`)}; + background-color: ${globalColor(`--${illaPrefix}-techPurple-08`)}; + border-color: ${globalColor(`--${illaPrefix}-techPurple-03`)}; + color: ${getColor("grayBlue", "02")}; + } +` + +export const nameStyle = css` + font-size: 14px; + font-weight: 500; + line-height: 22px; + color: ${getColor("grayBlue", "02")}; + overflow: hidden; + text-overflow: ellipsis; +` + +export const titleContainerStyle = css` + display: inline-flex; + flex-direction: column; + margin-left: 12px; + overflow: hidden; + white-space: nowrap; +` + +export const subTitleStyle = css` + font-size: 12px; + line-height: 16px; + font-weight: 400; + color: ${getColor("grayBlue", "04")}; +` + +export const iconStyle = css` + flex: none; + width: 24px; + height: 24px; +` diff --git a/apps/agent/src/Modules/Integration/IntegrationSelector/components/ResourceCard/suggestCard.tsx b/apps/agent/src/Modules/Integration/IntegrationSelector/components/ResourceCard/suggestCard.tsx new file mode 100644 index 00000000..83a01adb --- /dev/null +++ b/apps/agent/src/Modules/Integration/IntegrationSelector/components/ResourceCard/suggestCard.tsx @@ -0,0 +1,27 @@ +import { FC } from "react" +import { useTranslation } from "react-i18next" +import { CommentIcon } from "@illa-public/icon" +import { + applyItemStyle, + iconStyle, + nameStyle, + titleContainerStyle, +} from "./style" + +export const SuggestResourceCard: FC = () => { + const { t } = useTranslation() + + const handleClickTellUs = () => { + window.open("https://forms.gle/ngEoRvBtWvrTuWDNA", "_blank") + } + return ( + + +
+
{t("editor.action.form.option.tell_us")}
+
+
+ ) +} + +SuggestResourceCard.displayName = "SuggestResourceCard" diff --git a/apps/agent/src/Modules/Integration/IntegrationSelector/config.ts b/apps/agent/src/Modules/Integration/IntegrationSelector/config.ts new file mode 100644 index 00000000..1dcc115b --- /dev/null +++ b/apps/agent/src/Modules/Integration/IntegrationSelector/config.ts @@ -0,0 +1,34 @@ +import { useMemo } from "react" +import { useTranslation } from "react-i18next" +import { TIntegrationType } from "@illa-public/public-types" + +export interface ResourceItem { + resourceType: TIntegrationType + hidden?: boolean +} + +export const Apis: ResourceItem[] = [ + { + resourceType: "tencentcos", + }, + // { + // resourceType: "larkbot", + // }, +] + +export const useGetIntegrationTypeList = () => { + const { t } = useTranslation() + + const integrationTypeList = useMemo( + () => [ + { + title: t("editor.action.type.api"), + item: Apis, + category: "apis" as const, + }, + ], + [t], + ) + + return integrationTypeList +} diff --git a/apps/agent/src/Modules/Integration/IntegrationSelector/index.tsx b/apps/agent/src/Modules/Integration/IntegrationSelector/index.tsx new file mode 100644 index 00000000..3fab51af --- /dev/null +++ b/apps/agent/src/Modules/Integration/IntegrationSelector/index.tsx @@ -0,0 +1,72 @@ +import { FC } from "react" +import { useTranslation } from "react-i18next" +import { ResourceCard } from "./components/ResourceCard" +import { SuggestResourceCard } from "./components/ResourceCard/suggestCard" +import { useGetIntegrationTypeList } from "./config" +import { IIntegrationTypeSelectorProps } from "./interface" +import { categoryStyle, containerStyle, resourceListStyle } from "./style" + +export const IntegrationTypeSelector: FC = ( + props, +) => { + const { onSelect, filterIntegrationType } = props + + const { t } = useTranslation() + + const integrationTypeList = useGetIntegrationTypeList() + + const finalResourceTypeList = integrationTypeList.filter((resource) => { + const { item } = resource + + const finalItems = item + .filter(({ hidden }) => !hidden) + .filter(({ resourceType }) => { + if (filterIntegrationType) { + return filterIntegrationType(resourceType) + } + return resourceType + }) + return finalItems.length > 0 + }) + + return ( +
+ {finalResourceTypeList.map(({ title, item, category }) => { + return ( +
+ {title} +
+ {item + .filter(({ hidden }) => !hidden) + .filter(({ resourceType }) => { + if (filterIntegrationType) { + return filterIntegrationType(resourceType) + } + return resourceType + }) + .map(({ resourceType }) => ( + { + onSelect(item) + }} + resourceType={resourceType} + /> + ))} +
+
+ ) + })} +
+ + {t("editor.action.form.title.feedback")} + +
+ +
+
+
+ ) +} + +IntegrationTypeSelector.displayName = "ResourceTypeSelector" diff --git a/apps/agent/src/Modules/Integration/IntegrationSelector/interface.ts b/apps/agent/src/Modules/Integration/IntegrationSelector/interface.ts new file mode 100644 index 00000000..2d8e00e4 --- /dev/null +++ b/apps/agent/src/Modules/Integration/IntegrationSelector/interface.ts @@ -0,0 +1,6 @@ +import { TIntegrationType } from "@illa-public/public-types" + +export interface IIntegrationTypeSelectorProps { + onSelect: (item: TIntegrationType) => void + filterIntegrationType?: (item: TIntegrationType) => boolean +} diff --git a/apps/agent/src/Modules/Integration/IntegrationSelector/style.ts b/apps/agent/src/Modules/Integration/IntegrationSelector/style.ts new file mode 100644 index 00000000..dc094abf --- /dev/null +++ b/apps/agent/src/Modules/Integration/IntegrationSelector/style.ts @@ -0,0 +1,26 @@ +import { css } from "@emotion/react" +import { getColor } from "@illa-public/color-scheme" + +export const containerStyle = css` + width: 100%; + display: flex; + flex-direction: column; + overflow: auto; +` + +export const categoryStyle = css` + display: inline-block; + height: 30px; + line-height: 30px; + padding-top: 8px; + font-size: 14px; + font-weight: 500; + color: ${getColor("grayBlue", "04")}; +` + +export const resourceListStyle = css` + padding: 8px 0; + display: grid; + grid-gap: 16px; + grid-template-columns: repeat(auto-fill, minmax(184px, 1fr)); +` diff --git a/apps/agent/src/components/BlackSwitch/index.tsx b/apps/agent/src/components/BlackSwitch/index.tsx index f720f4d6..ba295d3f 100644 --- a/apps/agent/src/components/BlackSwitch/index.tsx +++ b/apps/agent/src/components/BlackSwitch/index.tsx @@ -1,13 +1,17 @@ import { ConfigProvider, Switch, SwitchProps, ThemeConfig } from "antd" -import { FC } from "react" +import { forwardRef } from "react" import BlackButtonTheme from "@/config/them/theme-blackButton.json" -const BlackSwitch: FC = (antdSwitchProps) => { - return ( - - - - ) -} +const BlackSwitch = forwardRef( + (antdSwitchProps, ref) => { + return ( + + + + ) + }, +) + +BlackSwitch.displayName = "BlackSwitch" export default BlackSwitch diff --git a/apps/agent/src/components/CodeEditor/CodeMirror/assets/array.svg b/apps/agent/src/components/CodeEditor/CodeMirror/assets/array.svg deleted file mode 100644 index 478a99df..00000000 --- a/apps/agent/src/components/CodeEditor/CodeMirror/assets/array.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/apps/agent/src/components/CodeEditor/CodeMirror/assets/boolean.svg b/apps/agent/src/components/CodeEditor/CodeMirror/assets/boolean.svg deleted file mode 100644 index 170bf040..00000000 --- a/apps/agent/src/components/CodeEditor/CodeMirror/assets/boolean.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/apps/agent/src/components/CodeEditor/CodeMirror/assets/component.svg b/apps/agent/src/components/CodeEditor/CodeMirror/assets/component.svg deleted file mode 100644 index 6822adc8..00000000 --- a/apps/agent/src/components/CodeEditor/CodeMirror/assets/component.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/apps/agent/src/components/CodeEditor/CodeMirror/assets/function.svg b/apps/agent/src/components/CodeEditor/CodeMirror/assets/function.svg deleted file mode 100644 index e557f6ad..00000000 --- a/apps/agent/src/components/CodeEditor/CodeMirror/assets/function.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/apps/agent/src/components/CodeEditor/CodeMirror/assets/keyword.svg b/apps/agent/src/components/CodeEditor/CodeMirror/assets/keyword.svg deleted file mode 100644 index 3e2b5906..00000000 --- a/apps/agent/src/components/CodeEditor/CodeMirror/assets/keyword.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/apps/agent/src/components/CodeEditor/CodeMirror/assets/null.svg b/apps/agent/src/components/CodeEditor/CodeMirror/assets/null.svg deleted file mode 100644 index c149154f..00000000 --- a/apps/agent/src/components/CodeEditor/CodeMirror/assets/null.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/apps/agent/src/components/CodeEditor/CodeMirror/assets/number.svg b/apps/agent/src/components/CodeEditor/CodeMirror/assets/number.svg deleted file mode 100644 index d821fb77..00000000 --- a/apps/agent/src/components/CodeEditor/CodeMirror/assets/number.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/apps/agent/src/components/CodeEditor/CodeMirror/assets/object.svg b/apps/agent/src/components/CodeEditor/CodeMirror/assets/object.svg deleted file mode 100644 index 3158af27..00000000 --- a/apps/agent/src/components/CodeEditor/CodeMirror/assets/object.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/apps/agent/src/components/CodeEditor/CodeMirror/assets/string.svg b/apps/agent/src/components/CodeEditor/CodeMirror/assets/string.svg deleted file mode 100644 index 5c413cb9..00000000 --- a/apps/agent/src/components/CodeEditor/CodeMirror/assets/string.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/apps/agent/src/components/CodeEditor/CodeMirror/assets/table.svg b/apps/agent/src/components/CodeEditor/CodeMirror/assets/table.svg deleted file mode 100644 index fa7efb23..00000000 --- a/apps/agent/src/components/CodeEditor/CodeMirror/assets/table.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/apps/agent/src/components/CodeEditor/CodeMirror/assets/type.svg b/apps/agent/src/components/CodeEditor/CodeMirror/assets/type.svg deleted file mode 100644 index 61c1a83a..00000000 --- a/apps/agent/src/components/CodeEditor/CodeMirror/assets/type.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/apps/agent/src/components/CodeEditor/CodeMirror/assets/undefine.svg b/apps/agent/src/components/CodeEditor/CodeMirror/assets/undefine.svg deleted file mode 100644 index 0f4d7832..00000000 --- a/apps/agent/src/components/CodeEditor/CodeMirror/assets/undefine.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/apps/agent/src/components/CodeEditor/CodeMirror/core.tsx b/apps/agent/src/components/CodeEditor/CodeMirror/core.tsx deleted file mode 100644 index e312254d..00000000 --- a/apps/agent/src/components/CodeEditor/CodeMirror/core.tsx +++ /dev/null @@ -1,233 +0,0 @@ -import { closeCompletion } from "@codemirror/autocomplete" -import { - Compartment, - EditorState, - Extension, - StateEffect, -} from "@codemirror/state" -import { - EditorView, - placeholder as placeholderExtension, -} from "@codemirror/view" -import { FC, useCallback, useEffect, useMemo, useRef, useState } from "react" -import { useBasicSetup } from "./extensions" -import { CODE_LANG, CODE_TYPE } from "./extensions/interface" -import { ILLACodeMirrorProps } from "./interface" -import { applyEditorWrapperStyle } from "./style" -import { ILLACodeMirrorTheme } from "./theme" - -// thk ReactCodeMirror:https://github.com/uiwjs/react-codemirror -export const ILLACodeMirrorCore: FC = (props) => { - const { - className, - value, - height = "", - maxHeight = "", - minHeight = "", - width = "", - maxWidth = "", - minWidth = "", - editable = true, - readOnly = false, - placeholder, - showLineNumbers = false, - lang = CODE_LANG.JAVASCRIPT, - codeType = CODE_TYPE.EXPRESSION, - expressions = [], - sqlScheme = {}, - singleLine, - completionOptions, - autoCompleteTipContainer, - hasError = false, - onChange, - onBlur, - onFocus, - } = props - - const [isFocus, setIsFocus] = useState(false) - - const editorViewRef = useRef() - const editorWrapperRef = useRef(null) - const compartmentsRef = useRef([]) - - const extensionOptions = useMemo(() => { - return { - expressions, - completionOptions, - showLineNumbers, - lang, - codeType, - sqlScheme, - autoCompleteTipContainer, - } - }, [ - autoCompleteTipContainer, - codeType, - completionOptions, - expressions, - lang, - showLineNumbers, - sqlScheme, - ]) - - const basicExtensions = useBasicSetup(extensionOptions) - - const defaultThemeOption = useMemo( - () => - EditorView.theme({ - "&": { - height, - minHeight, - maxHeight, - width, - maxWidth, - minWidth, - }, - ...ILLACodeMirrorTheme, - }), - [height, maxHeight, maxWidth, minHeight, minWidth, width], - ) - - const focusUpdateListener: Extension = useMemo(() => { - return EditorView.updateListener.of((viewUpdate) => { - if (viewUpdate.focusChanged) { - setIsFocus(viewUpdate.view.hasFocus) - const currentString = viewUpdate.state.doc.toString() - - if (viewUpdate.view.hasFocus) { - onFocus?.() - } else { - onBlur?.(currentString) - } - if (!viewUpdate.view.hasFocus) { - setTimeout(() => { - closeCompletion(viewUpdate.view) - }, 500) - } - } - }) - }, [onBlur, onFocus]) - - const changeUpdateListener: Extension = useMemo(() => { - return EditorView.updateListener.of((viewUpdate) => { - const currentString = viewUpdate.state.doc.toString() - if (viewUpdate.docChanged) { - onChange?.(currentString) - } - }) - }, [onChange]) - - const readOnlyStateChangeEffect: Extension = useMemo( - () => EditorState.readOnly.of(readOnly), - [readOnly], - ) - - const editableStateChangeEffect: Extension = useMemo( - () => EditorView.editable.of(editable), - [editable], - ) - - const placeholderExt: Extension = useMemo(() => { - return typeof placeholder === "string" - ? placeholderExtension(placeholder) - : [] - }, [placeholder]) - - const singleLineExt: Extension = useMemo(() => { - return singleLine - ? EditorState.transactionFilter.of((tr) => { - return tr.newDoc.lines > 1 ? [] : [tr] - }) - : EditorView.lineWrapping - }, [singleLine]) - - const allExtensions = useMemo(() => { - return [ - basicExtensions, - defaultThemeOption, - focusUpdateListener, - changeUpdateListener, - readOnlyStateChangeEffect, - editableStateChangeEffect, - placeholderExt, - singleLineExt, - EditorView.lineWrapping, - ] - }, [ - basicExtensions, - defaultThemeOption, - focusUpdateListener, - changeUpdateListener, - readOnlyStateChangeEffect, - editableStateChangeEffect, - placeholderExt, - singleLineExt, - ]) - - const extensionsWithCompartment = useMemo(() => { - for ( - let i = compartmentsRef.current.length; - i < allExtensions.length; - i++ - ) { - const compartment = new Compartment() - compartmentsRef.current.push(compartment) - } - return allExtensions.map((ext, index) => - compartmentsRef.current[index].of(ext), - ) - }, [allExtensions]) - - useEffect(() => { - if ( - !editorViewRef.current || - (!isFocus && value !== editorViewRef.current.state.doc.toString()) - ) { - const state = EditorState.create({ - doc: value, - extensions: extensionsWithCompartment, - }) - if (editorViewRef.current) { - editorViewRef.current.setState(state) - } else { - if (editorWrapperRef.current) { - editorViewRef.current = new EditorView({ - state, - parent: editorWrapperRef.current, - }) - } - } - } - }, [value, extensionsWithCompartment, isFocus]) - - const reconfigure = useCallback( - (view?: EditorView) => { - if (view) { - const effects: StateEffect[] = [] - allExtensions.forEach((e, i) => { - if (compartmentsRef.current[i].get(view.state) !== e) { - effects.push(compartmentsRef.current[i].reconfigure(e)) - } - }) - if (effects.length > 0) { - view.dispatch({ effects }) - } - } - }, - [allExtensions], - ) - - useEffect(() => { - if (editorViewRef.current) { - reconfigure(editorViewRef.current) - } - }, [reconfigure]) - - return ( -
- ) -} diff --git a/apps/agent/src/components/CodeEditor/CodeMirror/extensions/completionSources/TernServer/defs/ecmascript.json b/apps/agent/src/components/CodeEditor/CodeMirror/extensions/completionSources/TernServer/defs/ecmascript.json deleted file mode 100644 index 4ad7522d..00000000 --- a/apps/agent/src/components/CodeEditor/CodeMirror/extensions/completionSources/TernServer/defs/ecmascript.json +++ /dev/null @@ -1,1910 +0,0 @@ -{ - "!name": "ecmascript", - "!define": { - "Error.prototype": "Error.prototype", - "propertyDescriptor": { - "enumerable": "bool", - "configurable": "bool", - "value": "?", - "writable": "bool", - "get": "fn() -> ?", - "set": "fn(value: ?)" - }, - "Promise.prototype": { - "catch": { - "!doc": "The catch() method returns a Promise and deals with rejected cases only. It behaves the same as calling Promise.prototype.then(undefined, onRejected).", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/catch", - "!type": "fn(onRejected: fn(reason: ?)) -> !this" - }, - "then": { - "!doc": "The then() method returns a Promise. It takes two arguments, both are callback functions for the success and failure cases of the Promise.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then", - "!type": "fn(onFulfilled: fn(value: ?), onRejected: fn(reason: ?)) -> !custom:Promise_then", - "!effects": ["call !0 !this.:t"] - } - }, - "Promise_reject": { - "!type": "fn(reason: ?) -> !this", - "!doc": "The Promise.reject(reason) method returns a Promise object that is rejected with the given reason.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/reject" - }, - "iter_prototype": { - ":Symbol.iterator": "fn() -> !this" - }, - "iter": { - "!proto": "iter_prototype", - "next": { - "!type": "fn() -> +iter_result[value=!this.:t]", - "!doc": "Return the next item in the sequence.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators" - }, - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators" - }, - "iter_result": { - "done": "bool", - "value": "?" - }, - "generator_prototype": { - "!proto": "iter_prototype", - "next": "fn(value?: ?) -> iter_result", - "return": "fn(value?: ?) -> iter_result", - "throw": "fn(exception: +Error)" - }, - "Proxy_handler": { - "!doc": "The proxy's handler object is a placeholder object which contains traps for proxies.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler", - "getPrototypeOf": "fn(target: ?)", - "setPrototypeOf": "fn(target: ?, prototype: ?)", - "isExtensible": "fn(target: ?)", - "preventExtensions": "fn(target: ?)", - "getOwnPropertyDescriptor": "fn(target: ?, property: string) -> propertyDescriptor", - "defineProperty": "fn(target: ?, property: string, descriptor: propertyDescriptor)", - "has": "fn(target: ?, property: string)", - "get": "fn(target: ?, property: string)", - "set": "fn(target: ?, property: string, value: ?)", - "deleteProperty": "fn(target: ?, property: string)", - "enumerate": "fn(target: ?)", - "ownKeys": "fn(target: ?)", - "apply": "fn(target: ?, self: ?, arguments: [?])", - "construct": "fn(target: ?, arguments: [?])" - }, - "Proxy_revocable": { - "proxy": "+Proxy", - "revoke": "fn()" - }, - "TypedArray": { - "!type": "fn(size: number)", - "!doc": "A TypedArray object describes an array-like view of an underlying binary data buffer. There is no global property named TypedArray, nor is there a directly visible TypedArray constructor. Instead, there are a number of different global properties, whose values are typed array constructors for specific element types, listed below. On the following pages you will find common properties and methods that can be used with any typed array containing elements of any type.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray", - "from": { - "!type": "fn(arrayLike: ?, mapFn?: fn(elt: ?, i: number) -> number, thisArg?: ?) -> +TypedArray", - "!effects": ["call !1 this=!2 !0. number"], - "!doc": "Creates a new typed array from an array-like or iterable object.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from" - }, - "of": { - "!type": "fn(elements: number) -> +TypedArray", - "!doc": "Creates a new typed array from a variable number of arguments.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of" - }, - "BYTES_PER_ELEMENT": { - "!type": "number", - "!doc": "The TypedArray.BYTES_PER_ELEMENT property represents the size in bytes of each element in an typed array.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/BYTES_PER_ELEMENT" - }, - "name": { - "!type": "string", - "!doc": "The TypedArray.name property represents a string value of the typed array constructor name.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/name" - }, - "prototype": { - "": "number", - "buffer": { - "!type": "+ArrayBuffer", - "!doc": "The buffer accessor property represents the ArrayBuffer referenced by a TypedArray at construction time.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/buffer" - }, - "byteLength": { - "!type": "number", - "!doc": "The byteLength accessor property represents the length (in bytes) of a typed array from the start of its ArrayBuffer.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/byteLength" - }, - "byteOffset": { - "!type": "number", - "!doc": "The byteOffset accessor property represents the offset (in bytes) of a typed array from the start of its ArrayBuffer.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/byteOffset" - }, - "copyWithin": { - "!type": "fn(target: number, start: number, end?: number) -> ?", - "!doc": "The copyWithin() method copies the sequence of array elements within the array to the position starting at target. The copy is taken from the index positions of the second and third arguments start and end. The end argument is optional and defaults to the length of the array. This method has the same algorithm as Array.prototype.copyWithin. TypedArray is one of the typed array types here.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/copyWithin" - }, - "entries": { - "!type": "fn() -> +iter[:t=number]", - "!doc": "The entries() method returns a new Array Iterator object that contains the key/value pairs for each index in the array.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/entries" - }, - "every": { - "!type": "fn(callback: fn(element: number, index: number, array: TypedArray) -> bool, thisArg?: ?) -> bool", - "!effects": ["call !0 this=!1 number number !this"], - "!doc": "The every() method tests whether all elements in the typed array pass the test implemented by the provided function. This method has the same algorithm as Array.prototype.every(). TypedArray is one of the typed array types here.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/every" - }, - "fill": { - "!type": "fn(value: number, start?: number, end?: number)", - "!doc": "The fill() method fills all the elements of a typed array from a start index to an end index with a static value. This method has the same algorithm as Array.prototype.fill(). TypedArray is one of the typed array types here.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/fill" - }, - "filter": { - "!type": "fn(test: fn(element: number, i: number) -> bool, context?: ?) -> !this", - "!effects": ["call !0 this=!1 number number"], - "!doc": "Creates a new array with all of the elements of this array for which the provided filtering function returns true. See also Array.prototype.filter().", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/filter" - }, - "find": { - "!type": "fn(callback: fn(element: number, index: number, array: +TypedArray) -> bool, thisArg?: ?) -> number", - "!effects": ["call !0 this=!1 number number !this"], - "!doc": "The find() method returns a value in the typed array, if an element satisfies the provided testing function. Otherwise undefined is returned. TypedArray is one of the typed array types here.\nSee also the findIndex() method, which returns the index of a found element in the typed array instead of its value.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/find" - }, - "findIndex": { - "!type": "fn(callback: fn(element: number, index: number, array: +TypedArray) -> bool, thisArg?: ?) -> number", - "!effects": ["call !0 this=!1 number number !this"], - "!doc": "The findIndex() method returns an index in the typed array, if an element in the typed array satisfies the provided testing function. Otherwise -1 is returned.\nSee also the find() method, which returns the value of a found element in the typed array instead of its index.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/findIndex" - }, - "forEach": { - "!type": "fn(callback: fn(value: number, key: number, array: +TypedArray), thisArg?: ?)", - "!effects": ["call !0 this=!1 number number !this"], - "!doc": "Executes a provided function once per array element.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/forEach" - }, - "indexOf": { - "!type": "fn(searchElement: number, fromIndex?: number) -> number", - "!doc": "The indexOf() method returns the first index at which a given element can be found in the typed array, or -1 if it is not present. This method has the same algorithm as Array.prototype.indexOf(). TypedArray is one of the typed array types here.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/indexOf" - }, - "join": { - "!type": "fn(separator?: string) -> string", - "!doc": "The join() method joins all elements of an array into a string. This method has the same algorithm as Array.prototype.join(). TypedArray is one of the typed array types here.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/join" - }, - "keys": { - "!type": "fn() -> +iter[:t=number]", - "!doc": "The keys() method returns a new Array Iterator object that contains the keys for each index in the array.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/keys" - }, - "lastIndexOf": { - "!type": "fn(searchElement: number, fromIndex?: number) -> number", - "!doc": "The lastIndexOf() method returns the last index at which a given element can be found in the typed array, or -1 if it is not present. The typed array is searched backwards, starting at fromIndex. This method has the same algorithm as Array.prototype.lastIndexOf(). TypedArray is one of the typed array types here.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/lastIndexOf" - }, - "length": { - "!type": "number", - "!doc": "Returns the number of elements hold in the typed array. Fixed at construction time and thus read only.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/length" - }, - "map": { - "!type": "fn(f: fn(element: number, i: number) -> number, context?: ?) -> +TypedArray", - "!effects": ["call !0 this=!1 number number"], - "!doc": "Creates a new array with the results of calling a provided function on every element in this array. See also Array.prototype.map().", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/map" - }, - "reduce": { - "!type": "fn(combine: fn(sum: ?, elt: number, i: number) -> ?, init?: ?) -> !0.!ret", - "!effects": ["call !0 !1 number number"], - "!doc": "Apply a function against an accumulator and each value of the array (from left-to-right) as to reduce it to a single value. See also Array.prototype.reduce().", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/reduce" - }, - "reduceRight": { - "!type": "fn(combine: fn(sum: ?, elt: number, i: number) -> ?, init?: ?) -> !0.!ret", - "!effects": ["call !0 !1 number number"], - "!doc": "Apply a function against an accumulator and each value of the array (from right-to-left) as to reduce it to a single value. See also Array.prototype.reduceRight().", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/reduceRight" - }, - "reverse": { - "!type": "fn()", - "!doc": "The reverse() method reverses a typed array in place. The first typed array element becomes the last and the last becomes the first. This method has the same algorithm as Array.prototype.reverse(). TypedArray is one of the typed array types here.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/reverse" - }, - "set": { - "!type": "fn(array: [number], offset?: number)", - "!doc": "The set() method stores multiple values in the typed array, reading input values from a specified array.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/set" - }, - "slice": { - "!type": "fn(from: number, to?: number) -> +TypedArray", - "!doc": "Extracts a section of an array and returns a new array. See also Array.prototype.slice().", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/slice" - }, - "some": { - "!type": "fn(test: fn(elt: number, i: number) -> bool, context?: ?) -> bool", - "!effects": ["call !0 this=!1 number number"], - "!doc": "The some() method tests whether some element in the typed array passes the test implemented by the provided function. This method has the same algorithm as Array.prototype.some(). TypedArray is one of the typed array types here.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/some" - }, - "sort": { - "!type": "fn(compare?: fn(a: number, b: number) -> number)", - "!effects": ["call !0 number number"], - "!doc": "Sorts the elements of an array in place and returns the array. See also Array.prototype.sort().", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/sort" - }, - "subarray": { - "!type": "fn(begin?: number, end?: number) -> +TypedArray", - "!doc": "The subarray() method returns a new TypedArray on the same ArrayBuffer store and with the same element types as for this TypedArray object. The begin offset is inclusive and the end offset is exclusive. TypedArray is one of the typed array types.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/subarray" - }, - "values": { - "!type": "fn() -> +iter[:t=number]", - "!doc": "The values() method returns a new Array Iterator object that contains the values for each index in the array.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/values" - }, - ":Symbol.iterator": { - "!type": "fn() -> +iter[:t=number]", - "!doc": "Returns a new Array Iterator object that contains the values for each index in the array.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/@@iterator" - } - } - } - }, - "Infinity": { - "!type": "number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Infinity", - "!doc": "A numeric value representing infinity." - }, - "undefined": { - "!type": "?", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/undefined", - "!doc": "The value undefined." - }, - "NaN": { - "!type": "number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/NaN", - "!doc": "A value representing Not-A-Number." - }, - "Object": { - "!type": "fn()", - "getPrototypeOf": { - "!type": "fn(obj: ?) -> ?", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/getPrototypeOf", - "!doc": "Returns the prototype (i.e. the internal prototype) of the specified object." - }, - "create": { - "!type": "fn(proto: ?) -> !custom:Object_create", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/create", - "!doc": "Creates a new object with the specified prototype object and properties." - }, - "defineProperty": { - "!type": "fn(obj: ?, prop: string, desc: propertyDescriptor) -> !custom:Object_defineProperty", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/defineProperty", - "!doc": "Defines a new property directly on an object, or modifies an existing property on an object, and returns the object. If you want to see how to use the Object.defineProperty method with a binary-flags-like syntax, see this article." - }, - "defineProperties": { - "!type": "fn(obj: ?, props: ?) -> !custom:Object_defineProperties", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/defineProperty", - "!doc": "Defines a new property directly on an object, or modifies an existing property on an object, and returns the object. If you want to see how to use the Object.defineProperty method with a binary-flags-like syntax, see this article." - }, - "getOwnPropertyDescriptor": { - "!type": "fn(obj: ?, prop: string) -> propertyDescriptor", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor", - "!doc": "Returns a property descriptor for an own property (that is, one directly present on an object, not present by dint of being along an object's prototype chain) of a given object." - }, - "keys": { - "!type": "fn(obj: ?) -> [string]", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/keys", - "!doc": "Returns an array of a given object's own enumerable properties, in the same order as that provided by a for-in loop (the difference being that a for-in loop enumerates properties in the prototype chain as well)." - }, - "getOwnPropertyNames": { - "!type": "fn(obj: ?) -> [string]", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames", - "!doc": "Returns an array of all properties (enumerable or not) found directly upon a given object." - }, - "seal": { - "!type": "fn(obj: ?)", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/seal", - "!doc": "Seals an object, preventing new properties from being added to it and marking all existing properties as non-configurable. Values of present properties can still be changed as long as they are writable." - }, - "isSealed": { - "!type": "fn(obj: ?) -> bool", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/isSealed", - "!doc": "Determine if an object is sealed." - }, - "freeze": { - "!type": "fn(obj: ?) -> !0", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/freeze", - "!doc": "Freezes an object: that is, prevents new properties from being added to it; prevents existing properties from being removed; and prevents existing properties, or their enumerability, configurability, or writability, from being changed. In essence the object is made effectively immutable. The method returns the object being frozen." - }, - "isFrozen": { - "!type": "fn(obj: ?) -> bool", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/isFrozen", - "!doc": "Determine if an object is frozen." - }, - "preventExtensions": { - "!type": "fn(obj: ?)", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/preventExtensions", - "!doc": "Prevents new properties from ever being added to an object." - }, - "isExtensible": { - "!type": "fn(obj: ?) -> bool", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isExtensible", - "!doc": "The Object.isExtensible() method determines if an object is extensible (whether it can have new properties added to it)." - }, - "assign": { - "!type": "fn(target: ?, source: ?, source?: ?) -> !0", - "!effects": ["copy !1 !0", "copy !2 !0", "copy !3 !0"], - "!doc": "The Object.assign() method is used to copy the values of all enumerable own properties from one or more source objects to a target object. It will return the target object.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign" - }, - "getOwnPropertySymbols": { - "!type": "fn(obj: ?) -> !custom:getOwnPropertySymbols", - "!doc": "The Object.getOwnPropertySymbols() method returns an array of all symbol properties found directly upon a given object.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertySymbols" - }, - "is": { - "!type": "fn(value1: ?, value2: ?) -> bool", - "!doc": "The Object.is() method determines whether two values are the same value.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is" - }, - "setPrototypeOf": { - "!type": "fn(obj: ?, prototype: ?)", - "!doc": "The Object.setPrototype() method sets the prototype (i.e., the internal [[Prototype]] property) of a specified object to another object or null.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf" - }, - "prototype": { - "!stdProto": "Object", - "toString": { - "!type": "fn() -> string", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/toString", - "!doc": "Returns a string representing the object." - }, - "toLocaleString": { - "!type": "fn() -> string", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/toLocaleString", - "!doc": "Returns a string representing the object. This method is meant to be overriden by derived objects for locale-specific purposes." - }, - "valueOf": { - "!type": "fn() -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/valueOf", - "!doc": "Returns the primitive value of the specified object" - }, - "hasOwnProperty": { - "!type": "fn(prop: string) -> bool", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/hasOwnProperty", - "!doc": "Returns a boolean indicating whether the object has the specified property." - }, - "propertyIsEnumerable": { - "!type": "fn(prop: string) -> bool", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable", - "!doc": "Returns a Boolean indicating whether the specified property is enumerable." - }, - "isPrototypeOf": { - "!type": "fn(obj: ?) -> bool", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isPrototypeOf", - "!doc": "Tests for an object in another object's prototype chain." - } - }, - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object", - "!doc": "Creates an object wrapper." - }, - "Function": { - "!type": "fn(body: string) -> fn()", - "prototype": { - "!stdProto": "Function", - "apply": { - "!type": "fn(this: ?, args: [?])", - "!effects": ["call and return !this this=!0 !1. !1. !1."], - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/apply", - "!doc": "Calls a function with a given this value and arguments provided as an array (or an array like object)." - }, - "call": { - "!type": "fn(this: ?, args?: ?) -> !this.!ret", - "!effects": ["call and return !this this=!0 !1 !2 !3 !4"], - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/call", - "!doc": "Calls a function with a given this value and arguments provided individually." - }, - "bind": { - "!type": "fn(this: ?, args?: ?) -> !custom:Function_bind", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/bind", - "!doc": "Creates a new function that, when called, has its this keyword set to the provided value, with a given sequence of arguments preceding any provided when the new function was called." - }, - "prototype": "?" - }, - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function", - "!doc": "Every function in JavaScript is actually a Function object." - }, - "Array": { - "!type": "fn(size: number) -> !custom:Array_ctor", - "isArray": { - "!type": "fn(value: ?) -> bool", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/isArray", - "!doc": "Returns true if an object is an array, false if it is not." - }, - "from": { - "!type": "fn(arrayLike: ?, mapFn?: fn(elt: ?, i: number) -> ?, thisArg?: ?) -> [!0.]", - "!effects": ["call !1 this=!2 !0. number"], - "!doc": "The Array.from() method creates a new Array instance from an array-like or iterable object.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from" - }, - "of": { - "!type": "fn(elementN: ?) -> [!0]", - "!doc": "The Array.of() method creates a new Array instance with a variable number of arguments, regardless of number or type of the arguments.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/of" - }, - "prototype": { - "!stdProto": "Array", - "length": { - "!type": "number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/length", - "!doc": "An unsigned, 32-bit integer that specifies the number of elements in an array." - }, - "concat": { - "!type": "fn(other: [?]) -> !this", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/concat", - "!doc": "Returns a new array comprised of this array joined with other array(s) and/or value(s)." - }, - "join": { - "!type": "fn(separator?: string) -> string", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/join", - "!doc": "Joins all elements of an array into a string." - }, - "splice": { - "!type": "fn(pos: number, amount: number, newelt?: ?) -> [?]", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/splice", - "!doc": "Changes the content of an array, adding new elements while removing old elements." - }, - "pop": { - "!type": "fn() -> !this.", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/pop", - "!doc": "Removes the last element from an array and returns that element." - }, - "push": { - "!type": "fn(newelt: ?) -> number", - "!effects": ["propagate !0 !this."], - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/push", - "!doc": "Mutates an array by appending the given elements and returning the new length of the array." - }, - "shift": { - "!type": "fn() -> !this.", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/shift", - "!doc": "Removes the first element from an array and returns that element. This method changes the length of the array." - }, - "unshift": { - "!type": "fn(newelt: ?) -> number", - "!effects": ["propagate !0 !this."], - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/unshift", - "!doc": "Adds one or more elements to the beginning of an array and returns the new length of the array." - }, - "slice": { - "!type": "fn(from?: number, to?: number) -> !this", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/slice", - "!doc": "Returns a shallow copy of a portion of an array." - }, - "reverse": { - "!type": "fn()", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/reverse", - "!doc": "Reverses an array in place. The first array element becomes the last and the last becomes the first." - }, - "sort": { - "!type": "fn(compare?: fn(a: ?, b: ?) -> number)", - "!effects": ["call !0 !this. !this."], - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/sort", - "!doc": "Sorts the elements of an array in place and returns the array." - }, - "indexOf": { - "!type": "fn(elt: ?, from?: number) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/indexOf", - "!doc": "Returns the first index at which a given element can be found in the array, or -1 if it is not present." - }, - "lastIndexOf": { - "!type": "fn(elt: ?, from?: number) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/lastIndexOf", - "!doc": "Returns the last index at which a given element can be found in the array, or -1 if it is not present. The array is searched backwards, starting at fromIndex." - }, - "every": { - "!type": "fn(test: fn(elt: ?, i: number, array: +Array) -> bool, context?: ?) -> bool", - "!effects": ["call !0 this=!1 !this. number !this"], - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/every", - "!doc": "Tests whether all elements in the array pass the test implemented by the provided function." - }, - "some": { - "!type": "fn(test: fn(elt: ?, i: number, array: +Array) -> bool, context?: ?) -> bool", - "!effects": ["call !0 this=!1 !this. number !this"], - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/some", - "!doc": "Tests whether some element in the array passes the test implemented by the provided function." - }, - "filter": { - "!type": "fn(test: fn(elt: ?, i: number, array: +Array) -> bool, context?: ?) -> !this", - "!effects": ["call !0 this=!1 !this. number !this"], - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/filter", - "!doc": "Creates a new array with all elements that pass the test implemented by the provided function." - }, - "forEach": { - "!type": "fn(f: fn(elt: ?, i: number, array: +Array), context?: ?)", - "!effects": ["call !0 this=!1 !this. number !this"], - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/forEach", - "!doc": "Executes a provided function once per array element." - }, - "map": { - "!type": "fn(f: fn(elt: ?, i: number, array: +Array) -> ?, context?: ?) -> [!0.!ret]", - "!effects": ["call !0 this=!1 !this. number !this"], - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/map", - "!doc": "Creates a new array with the results of calling a provided function on every element in this array." - }, - "reduce": { - "!type": "fn(combine: fn(sum: ?, elt: ?, i: number, array: +Array) -> ?, init?: ?) -> !0.!ret", - "!effects": ["call !0 !1 !this. number !this"], - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/Reduce", - "!doc": "Apply a function against an accumulator and each value of the array (from left-to-right) as to reduce it to a single value." - }, - "reduceRight": { - "!type": "fn(combine: fn(sum: ?, elt: ?, i: number, array: +Array) -> ?, init?: ?) -> !0.!ret", - "!effects": ["call !0 !1 !this. number !this"], - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/ReduceRight", - "!doc": "Apply a function simultaneously against two values of the array (from right-to-left) as to reduce it to a single value." - }, - "copyWithin": { - "!type": "fn(target: number, start: number, end?: number) -> !this", - "!doc": "The copyWithin() method copies the sequence of array elements within the array to the position starting at target. The copy is taken from the index positions of the second and third arguments start and end.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/copyWithin" - }, - "entries": { - "!type": "fn() -> +iter[:t=[number, !this.]]", - "!doc": "The entries() method returns a new Array Iterator object that contains the key/value pairs for each index in the array.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/entries" - }, - "fill": { - "!type": "fn(value: ?, start?: number, end?: number) -> !this", - "!doc": "The fill() method fills all the elements of an array from a start index to an end index with a static value.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/fill" - }, - "find": { - "!type": "fn(callback: fn(element: ?, index: number, array: [?]) -> bool, thisArg?: ?) -> !this.", - "!effects": ["call !0 this=!2 !this. number"], - "!doc": "The find() method returns a value in the array, if an element in the array satisfies the provided testing function. Otherwise undefined is returned.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find" - }, - "findIndex": { - "!type": "fn(callback: fn(element: ?, index: number, array: [?]), thisArg?: ?) -> number", - "!effects": ["call !0 this=!2 !this. number"], - "!doc": "The findIndex() method returns an index in the array, if an element in the array satisfies the provided testing function. Otherwise -1 is returned.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex" - }, - "keys": { - "!type": "fn() -> +iter[:t=number]", - "!doc": "The keys() method returns a new Array Iterator that contains the keys for each index in the array.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/keys" - }, - "values": { - "!type": "fn() -> +iter[:t=!this.]", - "!doc": "The values() method returns a new Array Iterator object that contains the values for each index in the array.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/values" - }, - ":Symbol.iterator": { - "!type": "fn() -> +iter[:t=!this.]", - "!doc": "Returns a new Array Iterator object that contains the values for each index in the array.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/@@iterator" - }, - "includes": { - "!type": "fn(value: ?) -> bool", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes", - "!doc": "Determines whether an array includes a certain element, returning true or false as appropriate." - } - }, - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array", - "!doc": "The JavaScript Array global object is a constructor for arrays, which are high-level, list-like objects." - }, - "String": { - "!type": "fn(value: ?) -> string", - "fromCharCode": { - "!type": "fn(code: number) -> string", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/fromCharCode", - "!doc": "Returns a string created by using the specified sequence of Unicode values." - }, - "fromCodePoint": { - "!type": "fn(point: number, point?: number) -> string", - "!doc": "The static String.fromCodePoint() method returns a string created by using the specified sequence of code points.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCodePoint" - }, - "raw": { - "!type": "fn(template: [string], substitutions: ?, templateString: ?) -> string", - "!doc": "The static String.raw() method is a tag function of template strings, used to get the raw string form of template strings.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/raw" - }, - "prototype": { - "!stdProto": "String", - "length": { - "!type": "number", - "!url": "https://developer.mozilla.org/en/docs/JavaScript/Reference/Global_Objects/String/length", - "!doc": "Represents the length of a string." - }, - "": "string", - "charAt": { - "!type": "fn(i: number) -> string", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/charAt", - "!doc": "Returns the specified character from a string." - }, - "charCodeAt": { - "!type": "fn(i: number) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/charCodeAt", - "!doc": "Returns the numeric Unicode value of the character at the given index (except for unicode codepoints > 0x10000)." - }, - "indexOf": { - "!type": "fn(char: string, from?: number) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/indexOf", - "!doc": "Returns the index within the calling String object of the first occurrence of the specified value, starting the search at fromIndex,\nreturns -1 if the value is not found." - }, - "lastIndexOf": { - "!type": "fn(char: string, from?: number) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/lastIndexOf", - "!doc": "Returns the index within the calling String object of the last occurrence of the specified value, or -1 if not found. The calling string is searched backward, starting at fromIndex." - }, - "substring": { - "!type": "fn(from: number, to?: number) -> string", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/substring", - "!doc": "Returns a subset of a string between one index and another, or through the end of the string." - }, - "substr": { - "!type": "fn(from: number, length?: number) -> string", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/substr", - "!doc": "Returns the characters in a string beginning at the specified location through the specified number of characters." - }, - "slice": { - "!type": "fn(from: number, to?: number) -> string", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/slice", - "!doc": "Extracts a section of a string and returns a new string." - }, - "trim": { - "!type": "fn() -> string", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/Trim", - "!doc": "Removes whitespace from both ends of the string." - }, - "toUpperCase": { - "!type": "fn() -> string", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/toUpperCase", - "!doc": "Returns the calling string value converted to uppercase." - }, - "toLowerCase": { - "!type": "fn() -> string", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/toLowerCase", - "!doc": "Returns the calling string value converted to lowercase." - }, - "toLocaleUpperCase": { - "!type": "fn() -> string", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/toLocaleUpperCase", - "!doc": "Returns the calling string value converted to upper case, according to any locale-specific case mappings." - }, - "toLocaleLowerCase": { - "!type": "fn() -> string", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase", - "!doc": "Returns the calling string value converted to lower case, according to any locale-specific case mappings." - }, - "split": { - "!type": "fn(pattern?: string|+RegExp, limit?: number) -> [string]", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/split", - "!doc": "Splits a String object into an array of strings by separating the string into substrings." - }, - "concat": { - "!type": "fn(other: string) -> string", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/concat", - "!doc": "Combines the text of two or more strings and returns a new string." - }, - "localeCompare": { - "!type": "fn(other: string) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/localeCompare", - "!doc": "Returns a number indicating whether a reference string comes before or after or is the same as the given string in sort order." - }, - "match": { - "!type": "fn(pattern: +RegExp) -> [string]", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/match", - "!doc": "Used to retrieve the matches when matching a string against a regular expression." - }, - "replace": { - "!type": "fn(pattern: string|+RegExp, replacement: string) -> string", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/replace", - "!doc": "Returns a new string with some or all matches of a pattern replaced by a replacement. The pattern can be a string or a RegExp, and the replacement can be a string or a function to be called for each match." - }, - "search": { - "!type": "fn(pattern: +RegExp) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/search", - "!doc": "Executes the search for a match between a regular expression and this String object." - }, - "codePointAt": { - "!type": "fn(pos: number) -> number", - "!doc": "The codePointAt() method returns a non-negative integer that is the UTF-16 encoded code point value.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/codePointAt" - }, - "endsWith": { - "!type": "fn(searchString: string, position?: number) -> bool", - "!doc": "The endsWith() method determines whether a string ends with the characters of another string, returning true or false as appropriate.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith" - }, - "includes": { - "!type": "fn(searchString: string, position?: number) -> bool", - "!doc": "The includes() method determines whether one string may be found within another string, returning true or false as appropriate.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/contains" - }, - "normalize": { - "!type": "fn(form: string) -> string", - "!doc": "The normalize() method returns the Unicode Normalization Form of a given string (if the value isn't a string, it will be converted to one first).", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize" - }, - "repeat": { - "!type": "fn(count: number) -> string", - "!doc": "The repeat() method constructs and returns a new string which contains the specified number of copies of the string on which it was called, concatenated together.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat" - }, - "startsWith": { - "!type": "fn(searchString: string, position?: number) -> bool", - "!doc": "The startsWith() method determines whether a string begins with the characters of another string, returning true or false as appropriate.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith" - }, - ":Symbol.iterator": { - "!type": "fn() -> +iter[:t=string]", - "!doc": "Returns a new Iterator object that iterates over the code points of a String value, returning each code point as a String value.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/@@iterator" - } - }, - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String", - "!doc": "The String global object is a constructor for strings, or a sequence of characters." - }, - "Number": { - "!type": "fn(value: ?) -> number", - "MAX_VALUE": { - "!type": "number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number/MAX_VALUE", - "!doc": "The maximum numeric value representable in JavaScript." - }, - "MIN_VALUE": { - "!type": "number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number/MIN_VALUE", - "!doc": "The smallest positive numeric value representable in JavaScript." - }, - "POSITIVE_INFINITY": { - "!type": "number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number/POSITIVE_INFINITY", - "!doc": "A value representing the positive Infinity value." - }, - "NEGATIVE_INFINITY": { - "!type": "number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number/NEGATIVE_INFINITY", - "!doc": "A value representing the negative Infinity value." - }, - "prototype": { - "!stdProto": "Number", - "toString": { - "!type": "fn(radix?: number) -> string", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number/toString", - "!doc": "Returns a string representing the specified Number object" - }, - "toFixed": { - "!type": "fn(digits: number) -> string", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number/toFixed", - "!doc": "Formats a number using fixed-point notation" - }, - "toExponential": { - "!type": "fn(digits: number) -> string", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number/toExponential", - "!doc": "Returns a string representing the Number object in exponential notation" - }, - "toPrecision": { - "!type": "fn(digits: number) -> string", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number/toPrecision", - "!doc": "The toPrecision() method returns a string representing the number to the specified precision." - } - }, - "EPSILON": { - "!type": "number", - "!doc": "The Number.EPSILON property represents the difference between one and the smallest value greater than one that can be represented as a Number.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/EPSILON" - }, - "MAX_SAFE_INTEGER": { - "!type": "number", - "!doc": "The Number.MAX_SAFE_INTEGER constant represents the maximum safe integer in JavaScript (253 - 1).", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER" - }, - "MIN_SAFE_INTEGER": { - "!type": "number", - "!doc": "The Number.MIN_SAFE_INTEGER constant represents the minimum safe integer in JavaScript (-(253 - 1)).", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MIN_SAFE_INTEGER" - }, - "isFinite": { - "!type": "fn(testValue: ?) -> bool", - "!doc": "The Number.isFinite() method determines whether the passed value is finite.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite" - }, - "isInteger": { - "!type": "fn(testValue: ?) -> bool", - "!doc": "The Number.isInteger() method determines whether the passed value is an integer.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger" - }, - "isNaN": { - "!type": "fn(testValue: ?) -> bool", - "!doc": "The Number.isNaN() method determines whether the passed value is NaN. More robust version of the original global isNaN().", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN" - }, - "isSafeInteger": { - "!type": "fn(testValue: ?) -> bool", - "!doc": "The Number.isSafeInteger() method determines whether the provided value is a number that is a safe integer. A safe integer is an integer that", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isSafeInteger" - }, - "parseFloat": { - "!type": "fn(string: string) -> number", - "!doc": "The Number.parseFloat() method parses a string argument and returns a floating point number.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/parseFloat" - }, - "parseInt": { - "!type": "fn(string: string, radix?: number) -> number", - "!doc": "The Number.parseInt() method parses a string argument and returns an integer of the specified radix or base.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/parseInt" - }, - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number", - "!doc": "The Number JavaScript object is a wrapper object allowing you to work with numerical values. A Number object is created using the Number() constructor." - }, - "Boolean": { - "!type": "fn(value: ?) -> bool", - "prototype": { - "!stdProto": "Boolean" - }, - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean", - "!doc": "The Boolean object is an object wrapper for a boolean value." - }, - "RegExp": { - "!type": "fn(source: string, flags?: string)", - "prototype": { - "!stdProto": "RegExp", - "exec": { - "!type": "fn(input: string) -> [string]", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/RegExp/exec", - "!doc": "Executes a search for a match in a specified string. Returns a result array, or null." - }, - "test": { - "!type": "fn(input: string) -> bool", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/RegExp/test", - "!doc": "Executes the search for a match between a regular expression and a specified string. Returns true or false." - }, - "global": { - "!type": "bool", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/RegExp", - "!doc": "Creates a regular expression object for matching text with a pattern." - }, - "ignoreCase": { - "!type": "bool", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/RegExp", - "!doc": "Creates a regular expression object for matching text with a pattern." - }, - "multiline": { - "!type": "bool", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/RegExp/multiline", - "!doc": "Reflects whether or not to search in strings across multiple lines.\n" - }, - "source": { - "!type": "string", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/RegExp/source", - "!doc": "A read-only property that contains the text of the pattern, excluding the forward slashes.\n" - }, - "lastIndex": { - "!type": "number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/RegExp/lastIndex", - "!doc": "A read/write integer property that specifies the index at which to start the next match." - }, - "flags": { - "!type": "string", - "!doc": "The flags property returns a string consisting of the flags of the current regular expression object.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/flags" - }, - "sticky": { - "!type": "bool", - "!doc": "The sticky property reflects whether or not the search is sticky (searches in strings only from the index indicated by the lastIndex property of this regular expression). sticky is a read-only property of an individual regular expression object.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/sticky" - }, - "unicode": { - "!type": "bool", - "!doc": "The 'u' flag enables various Unicode-related features.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/unicode" - } - }, - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/RegExp", - "!doc": "Creates a regular expression object for matching text with a pattern." - }, - "Date": { - "!type": "fn(ms: number)", - "parse": { - "!type": "fn(source: string) -> +Date", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/parse", - "!doc": "Parses a string representation of a date, and returns the number of milliseconds since January 1, 1970, 00:00:00 UTC." - }, - "UTC": { - "!type": "fn(year: number, month: number, date: number, hour?: number, min?: number, sec?: number, ms?: number) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/UTC", - "!doc": "Accepts the same parameters as the longest form of the constructor, and returns the number of milliseconds in a Date object since January 1, 1970, 00:00:00, universal time." - }, - "now": { - "!type": "fn() -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/now", - "!doc": "Returns the number of milliseconds elapsed since 1 January 1970 00:00:00 UTC." - }, - "prototype": { - "toUTCString": { - "!type": "fn() -> string", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/toUTCString", - "!doc": "Converts a date to a string, using the universal time convention." - }, - "toISOString": { - "!type": "fn() -> string", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/toISOString", - "!doc": "JavaScript provides a direct way to convert a date object into a string in ISO format, the ISO 8601 Extended Format." - }, - "toDateString": { - "!type": "fn() -> string", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/toDateString", - "!doc": "Returns the date portion of a Date object in human readable form in American English." - }, - "toTimeString": { - "!type": "fn() -> string", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/toTimeString", - "!doc": "Returns the time portion of a Date object in human readable form in American English." - }, - "toLocaleDateString": { - "!type": "fn() -> string", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/toLocaleDateString", - "!doc": "Converts a date to a string, returning the \"date\" portion using the operating system's locale's conventions.\n" - }, - "toLocaleTimeString": { - "!type": "fn() -> string", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/toLocaleTimeString", - "!doc": "Converts a date to a string, returning the \"time\" portion using the current locale's conventions." - }, - "getTime": { - "!type": "fn() -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getTime", - "!doc": "Returns the numeric value corresponding to the time for the specified date according to universal time." - }, - "getFullYear": { - "!type": "fn() -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getFullYear", - "!doc": "Returns the year of the specified date according to local time." - }, - "getYear": { - "!type": "fn() -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getYear", - "!doc": "Returns the year in the specified date according to local time." - }, - "getMonth": { - "!type": "fn() -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getMonth", - "!doc": "Returns the month in the specified date according to local time." - }, - "getUTCMonth": { - "!type": "fn() -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getUTCMonth", - "!doc": "Returns the month of the specified date according to universal time.\n" - }, - "getDate": { - "!type": "fn() -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getDate", - "!doc": "Returns the day of the month for the specified date according to local time." - }, - "getUTCDate": { - "!type": "fn() -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getUTCDate", - "!doc": "Returns the day (date) of the month in the specified date according to universal time.\n" - }, - "getDay": { - "!type": "fn() -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getDay", - "!doc": "Returns the day of the week for the specified date according to local time." - }, - "getUTCDay": { - "!type": "fn() -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getUTCDay", - "!doc": "Returns the day of the week in the specified date according to universal time.\n" - }, - "getHours": { - "!type": "fn() -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getHours", - "!doc": "Returns the hour for the specified date according to local time." - }, - "getUTCHours": { - "!type": "fn() -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getUTCHours", - "!doc": "Returns the hours in the specified date according to universal time.\n" - }, - "getMinutes": { - "!type": "fn() -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getMinutes", - "!doc": "Returns the minutes in the specified date according to local time." - }, - "getUTCMinutes": { - "!type": "fn() -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date", - "!doc": "Creates JavaScript Date instances which let you work with dates and times." - }, - "getSeconds": { - "!type": "fn() -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getSeconds", - "!doc": "Returns the seconds in the specified date according to local time." - }, - "getUTCSeconds": { - "!type": "fn() -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getUTCSeconds", - "!doc": "Returns the seconds in the specified date according to universal time.\n" - }, - "getMilliseconds": { - "!type": "fn() -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getMilliseconds", - "!doc": "Returns the milliseconds in the specified date according to local time." - }, - "getUTCMilliseconds": { - "!type": "fn() -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getUTCMilliseconds", - "!doc": "Returns the milliseconds in the specified date according to universal time.\n" - }, - "getTimezoneOffset": { - "!type": "fn() -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset", - "!doc": "Returns the time-zone offset from UTC, in minutes, for the current locale." - }, - "setTime": { - "!type": "fn(date: +Date) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/setTime", - "!doc": "Sets the Date object to the time represented by a number of milliseconds since January 1, 1970, 00:00:00 UTC.\n" - }, - "setFullYear": { - "!type": "fn(year: number) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/setFullYear", - "!doc": "Sets the full year for a specified date according to local time.\n" - }, - "setUTCFullYear": { - "!type": "fn(year: number) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/setUTCFullYear", - "!doc": "Sets the full year for a specified date according to universal time.\n" - }, - "setMonth": { - "!type": "fn(month: number) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/setMonth", - "!doc": "Set the month for a specified date according to local time." - }, - "setUTCMonth": { - "!type": "fn(month: number) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/setUTCMonth", - "!doc": "Sets the month for a specified date according to universal time.\n" - }, - "setDate": { - "!type": "fn(day: number) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/setDate", - "!doc": "Sets the day of the month for a specified date according to local time." - }, - "setUTCDate": { - "!type": "fn(day: number) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/setUTCDate", - "!doc": "Sets the day of the month for a specified date according to universal time.\n" - }, - "setHours": { - "!type": "fn(hour: number) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/setHours", - "!doc": "Sets the hours for a specified date according to local time, and returns the number of milliseconds since 1 January 1970 00:00:00 UTC until the time represented by the updated Date instance." - }, - "setUTCHours": { - "!type": "fn(hour: number) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/setUTCHours", - "!doc": "Sets the hour for a specified date according to universal time.\n" - }, - "setMinutes": { - "!type": "fn(min: number) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/setMinutes", - "!doc": "Sets the minutes for a specified date according to local time." - }, - "setUTCMinutes": { - "!type": "fn(min: number) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/setUTCMinutes", - "!doc": "Sets the minutes for a specified date according to universal time.\n" - }, - "setSeconds": { - "!type": "fn(sec: number) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/setSeconds", - "!doc": "Sets the seconds for a specified date according to local time." - }, - "setUTCSeconds": { - "!type": "fn(sec: number) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/setUTCSeconds", - "!doc": "Sets the seconds for a specified date according to universal time.\n" - }, - "setMilliseconds": { - "!type": "fn(ms: number) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/setMilliseconds", - "!doc": "Sets the milliseconds for a specified date according to local time.\n" - }, - "setUTCMilliseconds": { - "!type": "fn(ms: number) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/setUTCMilliseconds", - "!doc": "Sets the milliseconds for a specified date according to universal time.\n" - }, - "toJSON": { - "!type": "fn() -> string", - "!doc": "Returns a string (using toISOString()) representing the Date object's value.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toJSON" - } - }, - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date", - "!doc": "Creates JavaScript Date instances which let you work with dates and times." - }, - "Error": { - "!type": "fn(message: string)", - "prototype": { - "name": { - "!type": "string", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Error/name", - "!doc": "A name for the type of error." - }, - "message": { - "!type": "string", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Error/message", - "!doc": "A human-readable description of the error." - } - }, - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Error", - "!doc": "Creates an error object." - }, - "SyntaxError": { - "!type": "fn(message: string)", - "prototype": "Error.prototype", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/SyntaxError", - "!doc": "Represents an error when trying to interpret syntactically invalid code." - }, - "ReferenceError": { - "!type": "fn(message: string)", - "prototype": "Error.prototype", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/ReferenceError", - "!doc": "Represents an error when a non-existent variable is referenced." - }, - "URIError": { - "!type": "fn(message: string)", - "prototype": "Error.prototype", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/URIError", - "!doc": "Represents an error when a malformed URI is encountered." - }, - "EvalError": { - "!type": "fn(message: string)", - "prototype": "Error.prototype", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/EvalError", - "!doc": "Represents an error regarding the eval function." - }, - "RangeError": { - "!type": "fn(message: string)", - "prototype": "Error.prototype", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/RangeError", - "!doc": "Represents an error when a number is not within the correct range allowed." - }, - "TypeError": { - "!type": "fn(message: string)", - "prototype": "Error.prototype", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/TypeError", - "!doc": "Represents an error an error when a value is not of the expected type." - }, - "parseInt": { - "!type": "fn(string: string, radix?: number) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/parseInt", - "!doc": "Parses a string argument and returns an integer of the specified radix or base." - }, - "parseFloat": { - "!type": "fn(string: string) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/parseFloat", - "!doc": "Parses a string argument and returns a floating point number." - }, - "isNaN": { - "!type": "fn(value: number) -> bool", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/isNaN", - "!doc": "Determines whether a value is NaN or not. Be careful, this function is broken. You may be interested in ECMAScript 6 Number.isNaN." - }, - "isFinite": { - "!type": "fn(value: number) -> bool", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/isFinite", - "!doc": "Determines whether the passed value is a finite number." - }, - "eval": { - "!type": "fn(code: string) -> ?", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/eval", - "!doc": "Evaluates JavaScript code represented as a string." - }, - "encodeURI": { - "!type": "fn(uri: string) -> string", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/encodeURI", - "!doc": "Encodes a Uniform Resource Identifier (URI) by replacing each instance of certain characters by one, two, three, or four escape sequences representing the UTF-8 encoding of the character (will only be four escape sequences for characters composed of two \"surrogate\" characters)." - }, - "encodeURIComponent": { - "!type": "fn(uri: string) -> string", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/encodeURIComponent", - "!doc": "Encodes a Uniform Resource Identifier (URI) component by replacing each instance of certain characters by one, two, three, or four escape sequences representing the UTF-8 encoding of the character (will only be four escape sequences for characters composed of two \"surrogate\" characters)." - }, - "decodeURI": { - "!type": "fn(uri: string) -> string", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/decodeURI", - "!doc": "Decodes a Uniform Resource Identifier (URI) previously created by encodeURI or by a similar routine." - }, - "decodeURIComponent": { - "!type": "fn(uri: string) -> string", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/decodeURIComponent", - "!doc": "Decodes a Uniform Resource Identifier (URI) component previously created by encodeURIComponent or by a similar routine." - }, - "Math": { - "E": { - "!type": "number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/E", - "!doc": "The base of natural logarithms, e, approximately 2.718." - }, - "LN2": { - "!type": "number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/LN2", - "!doc": "The natural logarithm of 2, approximately 0.693." - }, - "LN10": { - "!type": "number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/LN10", - "!doc": "The natural logarithm of 10, approximately 2.302." - }, - "LOG2E": { - "!type": "number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/LOG2E", - "!doc": "The base 2 logarithm of E (approximately 1.442)." - }, - "LOG10E": { - "!type": "number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/LOG10E", - "!doc": "The base 10 logarithm of E (approximately 0.434)." - }, - "SQRT1_2": { - "!type": "number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/SQRT1_2", - "!doc": "The square root of 1/2; equivalently, 1 over the square root of 2, approximately 0.707." - }, - "SQRT2": { - "!type": "number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/SQRT2", - "!doc": "The square root of 2, approximately 1.414." - }, - "PI": { - "!type": "number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/PI", - "!doc": "The ratio of the circumference of a circle to its diameter, approximately 3.14159." - }, - "abs": { - "!type": "fn(number) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/abs", - "!doc": "Returns the absolute value of a number." - }, - "cos": { - "!type": "fn(number) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/cos", - "!doc": "Returns the cosine of a number." - }, - "sin": { - "!type": "fn(number) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/sin", - "!doc": "Returns the sine of a number." - }, - "tan": { - "!type": "fn(number) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/tan", - "!doc": "Returns the tangent of a number." - }, - "acos": { - "!type": "fn(number) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/acos", - "!doc": "Returns the arccosine (in radians) of a number." - }, - "asin": { - "!type": "fn(number) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/asin", - "!doc": "Returns the arcsine (in radians) of a number." - }, - "atan": { - "!type": "fn(number) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/atan", - "!doc": "Returns the arctangent (in radians) of a number." - }, - "atan2": { - "!type": "fn(y: number, x: number) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/atan2", - "!doc": "Returns the arctangent of the quotient of its arguments." - }, - "ceil": { - "!type": "fn(number) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/ceil", - "!doc": "Returns the smallest integer greater than or equal to a number." - }, - "floor": { - "!type": "fn(number) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/floor", - "!doc": "Returns the largest integer less than or equal to a number." - }, - "round": { - "!type": "fn(number) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/round", - "!doc": "Returns the value of a number rounded to the nearest integer." - }, - "exp": { - "!type": "fn(number) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/exp", - "!doc": "Returns Ex, where x is the argument, and E is Euler's constant, the base of the natural logarithms." - }, - "log": { - "!type": "fn(number) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/log", - "!doc": "Returns the natural logarithm (base E) of a number." - }, - "sqrt": { - "!type": "fn(number) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/sqrt", - "!doc": "Returns the square root of a number." - }, - "pow": { - "!type": "fn(number, number) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/pow", - "!doc": "Returns base to the exponent power, that is, baseexponent." - }, - "max": { - "!type": "fn(number, number) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/max", - "!doc": "Returns the largest of zero or more numbers." - }, - "min": { - "!type": "fn(number, number) -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/min", - "!doc": "Returns the smallest of zero or more numbers." - }, - "random": { - "!type": "fn() -> number", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/random", - "!doc": "Returns a floating-point, pseudo-random number in the range [0, 1) that is, from 0 (inclusive) up to but not including 1 (exclusive), which you can then scale to your desired range." - }, - "acosh": { - "!type": "fn(x: number) -> number", - "!doc": "The Math.acosh() function returns the hyperbolic arc-cosine of a number.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/acosh" - }, - "asinh": { - "!type": "fn(x: number) -> number", - "!doc": "The Math.asinh() function returns the hyperbolic arcsine of a number.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/asinh" - }, - "atanh": { - "!type": "fn(x: number) -> number", - "!doc": "The Math.atanh() function returns the hyperbolic arctangent of a number.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/atanh" - }, - "cbrt": { - "!type": "fn(x: number) -> number", - "!doc": "The Math.cbrt() function returns the cube root of a number.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/cbrt" - }, - "clz32": { - "!type": "fn(x: number) -> number", - "!doc": "The Math.clz32() function returns the number of leading zero bits in the 32-bit binary representation of a number.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32" - }, - "cosh": { - "!type": "fn(x: number) -> number", - "!doc": "The Math.cosh() function returns the hyperbolic cosine of a number, that can be expressed using the constant e:", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/cosh" - }, - "expm1": { - "!type": "fn(x: number) -> number", - "!doc": "The Math.expm1() function returns ex - 1, where x is the argument, and e the base of the natural logarithms.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/expm1" - }, - "fround": { - "!type": "fn(x: number) -> number", - "!doc": "The Math.fround() function returns the nearest single precision float representation of a number.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/fround" - }, - "hypot": { - "!type": "fn(value: number) -> number", - "!doc": "The Math.hypot() function returns the square root of the sum of squares of its arguments.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/hypot" - }, - "imul": { - "!type": "fn(a: number, b: number) -> number", - "!doc": "The Math.imul() function returns the result of the C-like 32-bit multiplication of the two parameters.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul" - }, - "log10": { - "!type": "fn(x: number) -> number", - "!doc": "The Math.log10() function returns the base 10 logarithm of a number.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log10" - }, - "log1p": { - "!type": "fn(x: number) -> number", - "!doc": "The Math.log1p() function returns the natural logarithm (base e) of 1 + a number.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log1p" - }, - "log2": { - "!type": "fn(x: number) -> number", - "!doc": "The Math.log2() function returns the base 2 logarithm of a number.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log2" - }, - "sign": { - "!type": "fn(x: number) -> number", - "!doc": "The Math.sign() function returns the sign of a number, indicating whether the number is positive, negative or zero.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sign" - }, - "sinh": { - "!type": "fn(x: number) -> number", - "!doc": "The Math.sinh() function returns the hyperbolic sine of a number, that can be expressed using the constant e:", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sinh" - }, - "tanh": { - "!type": "fn(x: number) -> number", - "!doc": "The Math.tanh() function returns the hyperbolic tangent of a number.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/tanh" - }, - "trunc": { - "!type": "fn(x: number) -> number", - "!doc": "The Math.trunc() function returns the integral part of a number by removing any fractional digits. It does not round any numbers. The function can be expressed with the floor() and ceil() function:", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc" - }, - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math", - "!doc": "A built-in object that has properties and methods for mathematical constants and functions." - }, - "JSON": { - "parse": { - "!type": "fn(json: string, reviver?: fn(key: string, value: ?) -> ?) -> ?", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/JSON/parse", - "!doc": "Parse a string as JSON, optionally transforming the value produced by parsing." - }, - "stringify": { - "!type": "fn(value: ?, replacer?: fn(key: string, value: ?) -> ?, space?: string|number) -> string", - "!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/JSON/stringify", - "!doc": "Convert a value to JSON, optionally replacing values if a replacer function is specified, or optionally including only the specified properties if a replacer array is specified." - }, - "!url": "https://developer.mozilla.org/en-US/docs/JSON", - "!doc": "JSON (JavaScript Object Notation) is a data-interchange format. It closely resembles a subset of JavaScript syntax, although it is not a strict subset. (See JSON in the JavaScript Reference for full details.) It is useful when writing any kind of JavaScript-based application, including websites and browser extensions. For example, you might store user information in JSON format in a cookie, or you might store extension preferences in JSON in a string-valued browser preference." - }, - "ArrayBuffer": { - "!type": "fn(length: number)", - "!doc": "The ArrayBuffer object is used to represent a generic, fixed-length raw binary data buffer.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer", - "isView": { - "!type": "fn(arg: +ArrayBuffer) -> bool", - "!doc": "The ArrayBuffer.isView() method returns true if arg is one of the ArrayBuffer views, such as typed array objects or a DataView; false otherwise.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer/isView" - }, - "prototype": { - "byteLength": { - "!type": "number", - "!doc": "The byteLength accessor property represents the length of an ArrayBuffer in bytes.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer/byteLength" - }, - "slice": { - "!type": "fn(begin: number, end?: number) -> +ArrayBuffer", - "!doc": "The slice() method returns a new ArrayBuffer whose contents are a copy of this ArrayBuffer's bytes from begin, inclusive, up to end, exclusive.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer/slice" - } - } - }, - "DataView": { - "!type": "fn(buffer: +ArrayBuffer, byteOffset?: number, byteLength?: number)", - "!doc": "The DataView view provides a low-level interface for reading data from and writing it to an ArrayBuffer.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView", - "prototype": { - "buffer": { - "!type": "+ArrayBuffer", - "!doc": "The buffer accessor property represents the ArrayBuffer referenced by the DataView at construction time.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/buffer" - }, - "byteLength": { - "!type": "number", - "!doc": "The byteLength accessor property represents the length (in bytes) of this view from the start of its ArrayBuffer.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/byteLength" - }, - "byteOffset": { - "!type": "number", - "!doc": "The byteOffset accessor property represents the offset (in bytes) of this view from the start of its ArrayBuffer.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/byteOffset" - }, - "getFloat32": { - "!type": "fn(byteOffset: number, littleEndian?: bool) -> number", - "!doc": "The getFloat32() method gets a signed 32-bit integer (float) at the specified byte offset from the start of the DataView.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/getFloat32" - }, - "getFloat64": { - "!type": "fn(byteOffset: number, littleEndian?: bool) -> number", - "!doc": "The getFloat64() method gets a signed 64-bit float (double) at the specified byte offset from the start of the DataView.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/getFloat64" - }, - "getInt16": { - "!type": "fn(byteOffset: number, littleEndian?: bool) -> number", - "!doc": "The getInt16() method gets a signed 16-bit integer (short) at the specified byte offset from the start of the DataView.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/getInt16" - }, - "getInt32": { - "!type": "fn(byteOffset: number, littleEndian?: bool) -> number", - "!doc": "The getInt32() method gets a signed 32-bit integer (long) at the specified byte offset from the start of the DataView.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/getInt32" - }, - "getInt8": { - "!type": "fn(byteOffset: number, littleEndian?: bool) -> number", - "!doc": "The getInt8() method gets a signed 8-bit integer (byte) at the specified byte offset from the start of the DataView.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/getInt8" - }, - "getUint16": { - "!type": "fn(byteOffset: number, littleEndian?: bool) -> number", - "!doc": "The getUint16() method gets an unsigned 16-bit integer (unsigned short) at the specified byte offset from the start of the DataView.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/getUint16" - }, - "getUint32": { - "!type": "fn(byteOffset: number, littleEndian?: bool) -> number", - "!doc": "The getUint32() method gets an unsigned 32-bit integer (unsigned long) at the specified byte offset from the start of the DataView.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/getUint32" - }, - "getUint8": { - "!type": "fn(byteOffset: number) -> number", - "!doc": "The getUint8() method gets an unsigned 8-bit integer (unsigned byte) at the specified byte offset from the start of the DataView.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/getUint8" - }, - "setFloat32": { - "!type": "fn(byteOffset: number, value: number, littleEndian?: bool)", - "!doc": "The setFloat32() method stores a signed 32-bit integer (float) value at the specified byte offset from the start of the DataView.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/setFloat32" - }, - "setFloat64": { - "!type": "fn(byteOffset: number, value: number, littleEndian?: bool)", - "!doc": "The setFloat64() method stores a signed 64-bit integer (double) value at the specified byte offset from the start of the DataView.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/setFloat64" - }, - "setInt16": { - "!type": "fn(byteOffset: number, value: number, littleEndian?: bool)", - "!doc": "The setInt16() method stores a signed 16-bit integer (short) value at the specified byte offset from the start of the DataView.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/setInt16" - }, - "setInt32": { - "!type": "fn(byteOffset: number, value: number, littleEndian?: bool)", - "!doc": "The setInt32() method stores a signed 32-bit integer (long) value at the specified byte offset from the start of the DataView.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/setInt32" - }, - "setInt8": { - "!type": "fn(byteOffset: number, value: number)", - "!doc": "The setInt8() method stores a signed 8-bit integer (byte) value at the specified byte offset from the start of the DataView.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/setInt8" - }, - "setUint16": { - "!type": "fn(byteOffset: number, value: number, littleEndian?: bool)", - "!doc": "The setUint16() method stores an unsigned 16-bit integer (unsigned short) value at the specified byte offset from the start of the DataView.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/setUint16" - }, - "setUint32": { - "!type": "fn(byteOffset: number, value: number, littleEndian?: bool)", - "!doc": "The setUint32() method stores an unsigned 32-bit integer (unsigned long) value at the specified byte offset from the start of the DataView.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/setUint32" - }, - "setUint8": { - "!type": "fn(byteOffset: number, value: number)", - "!doc": "The setUint8() method stores an unsigned 8-bit integer (byte) value at the specified byte offset from the start of the DataView.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/setUint8" - } - } - }, - "Float32Array": "TypedArray", - "Float64Array": "TypedArray", - "Int16Array": "TypedArray", - "Int32Array": "TypedArray", - "Int8Array": "TypedArray", - "Map": { - "!type": "fn(iterable?: [?])", - "!doc": "The Map object is a simple key/value map. Any value (both objects and primitive values) may be used as either a key or a value.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map", - "prototype": { - "clear": { - "!type": "fn()", - "!doc": "The clear() method removes all elements from a Map object.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/clear" - }, - "delete": { - "!type": "fn(key: ?)", - "!doc": "The delete() method removes the specified element from a Map object.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/delete" - }, - "entries": { - "!type": "fn() -> +iter[:t=[!this.:key, !this.:value]]", - "!doc": "The entries() method returns a new Iterator object that contains the [key, value] pairs for each element in the Map object in insertion order.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/entries" - }, - "forEach": { - "!type": "fn(callback: fn(value: ?, key: ?, map: +Map), thisArg?: ?)", - "!effects": ["call !0 this=!1 !this.:value !this.:key !this"], - "!doc": "The forEach() method executes a provided function once per each key/value pair in the Map object, in insertion order.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/forEach" - }, - "get": { - "!type": "fn(key: ?) -> !this.:value", - "!doc": "The get() method returns a specified element from a Map object.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/get" - }, - "has": { - "!type": "fn(key: ?) -> bool", - "!doc": "The has() method returns a boolean indicating whether an element with the specified key exists or not.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/has" - }, - "keys": { - "!type": "fn() -> +iter[:t=!this.:key]", - "!doc": "The keys() method returns a new Iterator object that contains the keys for each element in the Map object in insertion order.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/keys" - }, - "set": { - "!type": "fn(key: ?, value: ?) -> !this", - "!effects": ["propagate !0 !this.:key", "propagate !1 !this.:value"], - "!doc": "The set() method adds a new element with a specified key and value to a Map object.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/set" - }, - "size": { - "!type": "number", - "!doc": "The size accessor property returns the number of elements in a Map object.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/size" - }, - "values": { - "!type": "fn() -> +iter[:t=!this.:value]", - "!doc": "The values() method returns a new Iterator object that contains the values for each element in the Map object in insertion order.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/values" - }, - ":Symbol.iterator": { - "!type": "fn() -> +iter[:t=[!this.:key, !this.:value]]", - "!doc": "Returns a new Iterator object that contains the [key, value] pairs for each element in the Map object in insertion order.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/@@iterator" - } - } - }, - "Promise": { - "!type": "fn(executor: fn(resolve: fn(value: ?), reject: fn(reason: ?))) -> !custom:Promise_ctor", - "!doc": "The Promise object is used for deferred and asynchronous computations. A Promise is in one of the three states:", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise", - "all": { - "!type": "fn(iterable: [+Promise]) -> +Promise[:t=[!0..:t]]", - "!doc": "The Promise.all(iterable) method returns a promise that resolves when all of the promises in the iterable argument have resolved.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all" - }, - "race": { - "!type": "fn(iterable: [+Promise]) -> !0.", - "!doc": "The Promise.race(iterable) method returns a promise that resolves or rejects as soon as one of the promises in the iterable resolves or rejects, with the value or reason from that promise.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/race" - }, - "reject": "Promise_reject", - "resolve": { - "!type": "fn(value: ?) -> !custom:Promise_resolve", - "!doc": "The Promise.resolve(value) method returns a Promise object that is resolved with the given value. If the value is a thenable (i.e. has a then method), the returned promise will 'follow' that thenable, adopting its eventual state; otherwise the returned promise will be fulfilled with the value.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/resolve" - }, - "prototype": "Promise.prototype" - }, - "Proxy": { - "!type": "fn(target: ?, handler: Proxy_handler)", - "!doc": "The Proxy object is used to define the custom behavior in JavaScript fundamental operation (e.g. property lookup, assignment, enumeration, function invocation, etc).", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy", - "revocable": { - "!type": "fn(target: ?, handler: Proxy_handler) -> Proxy_revocable", - "!doc": "The Proxy.revocable() method is used to create a revocable Proxy object.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/revocable" - } - }, - "Reflect": { - "!doc": "Reflect is a built-in object that provides methods for interceptable JavaScript operations.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect", - "apply": { - "!type": "fn(target: fn(), thisArg?: ?, argumentList?: [?]) -> !0.!ret", - "!doc": "Calls a target function with arguments as specified.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/apply" - }, - "construct": { - "!type": "fn(target: fn(), argumentList?: [?]) -> ?", - "!doc": "Acts like the new operator as a function. It is equivalent to calling new target(...args).", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/construct" - }, - "defineProperty": { - "!type": "fn(target: ?, property: string, descriptor: propertyDescriptor) -> bool", - "!doc": "The static Reflect.defineProperty() method is like Object.defineProperty() but returns a Boolean.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty" - }, - "deleteProperty": { - "!type": "fn(target: ?, property: string) -> bool", - "!doc": "Works like the delete operator as a function.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/deleteProperty" - }, - "enumerate": { - "!type": "fn(target: ?) -> +iter[:t=string]", - "!doc": "Returns an iterator with the enumerable own and inherited properties of the target object.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/enumerate" - }, - "get": { - "!type": "fn(target: ?, property: string) -> ?", - "!doc": "Gets a property from an object.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/get" - }, - "getOwnPropertyDescriptor": { - "!type": "fn(target: ?, property: string) -> ?", - "!doc": "Returns a property descriptor of the given property if it exists on the object, undefined otherwise.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/getOwnPropertyDescriptor" - }, - "getPrototypeOf": { - "!type": "fn(target: ?) -> ?", - "!doc": "Returns the prototype of the specified object.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/getPrototypeOf" - }, - "has": { - "!type": "fn(target: ?, property: string) -> bool", - "!doc": "The static Reflect.has() method works like the in operator as a function.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/has" - }, - "isExtensible": { - "!type": "fn(target: ?) -> bool", - "!doc": "Determines if an object is extensible (whether it can have new properties added to it).", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/isExtensible" - }, - "ownKeys": { - "!type": "fn(target: ?) -> [string]", - "!doc": "Returns an array of the target object's own property keys.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/ownKeys" - }, - "preventExtensions": { - "!type": "fn(target: ?) -> bool", - "!doc": "Prevents new properties from ever being added to an object.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/preventExtensions" - }, - "set": { - "!type": "fn(target: ?, property: string, value: ?) -> bool", - "!doc": "Set a property on an object.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/set" - }, - "setPrototypeOf": { - "!type": "fn(target: ?, prototype: ?) -> bool", - "!doc": "Sets the prototype of a specified object to another object or to null.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/setPrototypeOf" - } - }, - "Set": { - "!type": "fn(iterable?: [?])", - "!doc": "The Set object lets you store unique values of any type, whether primitive values or object references.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set", - "prototype": { - "add": { - "!type": "fn(value: ?) -> !this", - "!effects": ["propagate !0 !this.:t"], - "!doc": "The add() method appends a new element with a specified value to the end of a Set object.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/add" - }, - "clear": { - "!type": "fn()", - "!doc": "The clear() method removes all elements from a Set object.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/clear" - }, - "delete": { - "!type": "fn(value: ?) -> bool", - "!doc": "The delete() method removes the specified element from a Set object.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/delete" - }, - "entries": { - "!type": "fn() -> +iter[:t=[!this.:t]]", - "!doc": "The entries() method returns a new Iterator object that contains an array of [value, value] for each element in the Set object, in insertion order. For Set objects there is no key like in Map objects. However, to keep the API similar to the Map object, each entry has the same value for its key and value here, so that an array [value, value] is returned.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/entries" - }, - "forEach": { - "!type": "fn(callback: fn(value: ?, value2: ?, set: +Set), thisArg?: ?)", - "!effects": ["call !0 this=!1 !this.:t number !this"], - "!doc": "The forEach() method executes a provided function once per each value in the Set object, in insertion order.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/forEach" - }, - "has": { - "!type": "fn(value: ?) -> bool", - "!doc": "The has() method returns a boolean indicating whether an element with the specified value exists in a Set object or not.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/has" - }, - "keys": { - "!type": "fn() -> +iter[:t=!this.:t]", - "!doc": "The values() method returns a new Iterator object that contains the values for each element in the Set object in insertion order.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/keys" - }, - "size": { - "!type": "number", - "!doc": "The size accessor property returns the number of elements in a Set object.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/size" - }, - "values": { - "!type": "fn() -> +iter[:t=!this.:t]", - "!doc": "The values() method returns a new Iterator object that contains the values for each element in the Set object in insertion order.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/values" - }, - ":Symbol.iterator": { - "!type": "fn() -> +iter[:t=!this.:t]", - "!doc": "Returns a new Iterator object that contains the values for each element in the Set object in insertion order.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/@@iterator" - } - } - }, - "Symbol": { - "!type": "fn(description?: string) -> !custom:getSymbol", - "!doc": "A symbol is a unique and immutable data type and may be used as an identifier for object properties. The symbol object is an implicit object wrapper for the symbol primitive data type.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol", - "for": { - "!type": "fn(key: string) -> !custom:getSymbol", - "!doc": "The Symbol.for(key) method searches for existing symbols in a runtime-wide symbol registry with the given key and returns it if found. Otherwise a new symbol gets created in the global symbol registry with this key.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/for" - }, - "keyFor": { - "!type": "fn(sym: +Symbol) -> string", - "!doc": "The Symbol.keyFor(sym) method retrieves a shared symbol key from the global symbol registry for the given symbol.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/keyFor" - }, - "hasInstance": ":Symbol.hasInstance", - "isConcatSpreadable": ":Symbol.isConcatSpreadable", - "iterator": ":Symbol.iterator", - "keyFor": ":Symbol.keyFor", - "match": ":Symbol.match", - "replace": ":Symbol.replace", - "search": ":Symbol.search", - "species": ":Symbol.species", - "split": ":Symbol.split", - "toStringTag": ":Symbol.toStringTag", - "unscopables": ":Symbol.unscopables", - "prototype": { - "!stdProto": "Symbol" - } - }, - "Uint16Array": "TypedArray", - "Uint32Array": "TypedArray", - "Uint8Array": "TypedArray", - "Uint8ClampedArray": "TypedArray", - "WeakMap": { - "!type": "fn(iterable?: [?])", - "!doc": "The WeakMap object is a collection of key/value pairs in which the keys are objects and the values can be arbitrary values.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap", - "prototype": { - "delete": { - "!type": "fn(key: ?) -> bool", - "!doc": "The delete() method removes the specified element from a WeakMap object.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap/delete" - }, - "get": { - "!type": "fn(key: ?) -> !this.:value", - "!doc": "The get() method returns a specified element from a WeakMap object.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap/get" - }, - "has": { - "!type": "fn(key: ?) -> bool", - "!doc": "The has() method returns a boolean indicating whether an element with the specified key exists in the WeakMap object or not.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap/has" - }, - "set": { - "!type": "fn(key: ?, value: ?)", - "!effects": ["propagate !0 !this.:key", "propagate !1 !this.:value"], - "!doc": "The set() method adds a new element with a specified key and value to a WeakMap object.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap/set" - } - } - }, - "WeakSet": { - "!type": "fn(iterable?: [?])", - "!doc": "The WeakSet object lets you store weakly held objects in a collection.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet", - "prototype": { - "add": { - "!type": "fn(value: ?)", - "!doc": "The add() method appends a new object to the end of a WeakSet object.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet/add" - }, - "delete": { - "!type": "fn(value: ?) -> bool", - "!doc": "The delete() method removes the specified element from a WeakSet object.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet/delete" - }, - "has": { - "!type": "fn(value: ?) -> bool", - "!doc": "The has() method returns a boolean indicating whether an object exists in a WeakSet or not.", - "!url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet/has" - } - } - }, - "uuid": {}, - "numbro": { - "!type": "fn(number)", - "!doc": "Numbers can be formatted to look like currency, percentages, times, or even plain old numbers with decimal places, thousands, and abbreviations.", - "!url": "https://numbrojs.com/format.html" - }, - "Papa": {} -} diff --git a/apps/agent/src/components/CodeEditor/CodeMirror/extensions/completionSources/TernServer/index.tsx b/apps/agent/src/components/CodeEditor/CodeMirror/extensions/completionSources/TernServer/index.tsx deleted file mode 100644 index 55f43dff..00000000 --- a/apps/agent/src/components/CodeEditor/CodeMirror/extensions/completionSources/TernServer/index.tsx +++ /dev/null @@ -1,126 +0,0 @@ -import { - Completion, - CompletionContext, - CompletionResult, -} from "@codemirror/autocomplete" -import { CompletionsQuery, Server } from "tern" -import { CompletionsQueryResult } from "tern/lib/tern" -import { CODE_TYPE } from "@/components/CodeEditor/CodeMirror/extensions/interface" -import { checkCursorInDynamicFlag } from "../util" -import ecmaScript from "./defs/ecmascript.json" - -// @ts-ignore -const server = new Server({ defs: [ecmaScript] }) - -export enum AutocompleteDataType { - OBJECT = "Object", - NUMBER = "Number", - ARRAY = "Array", - FUNCTION = "Function", - BOOLEAN = "Boolean", - STRING = "String", - UNKNOWN = "Unknown", -} - -export function getDataType(type: string): AutocompleteDataType { - if (type === "?") return AutocompleteDataType.UNKNOWN - else if (type === "number") return AutocompleteDataType.NUMBER - else if (type === "string") return AutocompleteDataType.STRING - else if (type === "bool") return AutocompleteDataType.BOOLEAN - else if (type === "array") return AutocompleteDataType.ARRAY - else if (/^\[/.test(type)) return AutocompleteDataType.ARRAY - else if (/^fn\(/.test(type)) return AutocompleteDataType.FUNCTION - else return AutocompleteDataType.UNKNOWN -} - -export const ternSeverCompletionSource = ( - codeType: CODE_TYPE, -): (( - context: CompletionContext, -) => CompletionResult | Promise | null) => { - const isFunction = - codeType === CODE_TYPE.FUNCTION || - codeType === CODE_TYPE.EXPRESSION_WITHOUT_TEMPLATE - return (context: CompletionContext) => { - const isCursorInDynamicFlag = isFunction - ? true - : checkCursorInDynamicFlag(context) - if (!isCursorInDynamicFlag) { - return null - } - if ( - context.matchBefore(/\w[\w\.]*/) === null && - (isFunction || context.matchBefore(/\{\{\s*/) === null) - ) { - return null - } - const pos = context.pos - const query: CompletionsQuery = { - type: "completions", - types: true, - docs: true, - urls: true, - origins: true, - caseInsensitive: true, - guess: false, - inLiteral: false, - includeKeywords: true, - end: pos, - file: "#0", - } - const files = [ - // @ts-ignore maybe this is a ternjs type error - { - type: "full", - name: "_temp", - text: context.state.sliceDoc(), - }, - ] - - const request = { query, files } - let error: string | null = null - - // @ts-ignore maybe this is a ternjs type error - let result: any - - server.request( - // @ts-ignore maybe this is a ternjs type error - request, - (ternError, response) => { - error = ternError - if (response) { - result = response as CompletionsQueryResult - } - }, - ) - - if (error || !result || result.completions.length === 0) { - return null - } - const options: Completion[] = [] - const completions = result.completions as Array<{ - name: string - type?: string | undefined - depth?: number | undefined - doc?: string | undefined - url?: string | undefined - origin?: string | undefined - }> - completions.forEach((completion) => { - const dataType = getDataType(completion?.type || "?") - const completionOption: Completion = { - type: dataType, - label: completion.name, - detail: dataType, - boost: -1, - } - options.push(completionOption) - }) - - return { - from: result.start, - validFor: /^\w*$/, - options, - } - } -} diff --git a/apps/agent/src/components/CodeEditor/CodeMirror/extensions/completionSources/buildSources.ts b/apps/agent/src/components/CodeEditor/CodeMirror/extensions/completionSources/buildSources.ts deleted file mode 100644 index 57bf483c..00000000 --- a/apps/agent/src/components/CodeEditor/CodeMirror/extensions/completionSources/buildSources.ts +++ /dev/null @@ -1,110 +0,0 @@ -import { CompletionContext, CompletionResult } from "@codemirror/autocomplete" -import { - Cassandra, - MSSQL, - MariaSQL, - MySQL, - PLSQL, - PostgreSQL, - SQLite, - StandardSQL, - keywordCompletionSource, - schemaCompletionSource, -} from "@codemirror/lang-sql" -import { CODE_LANG, CODE_TYPE } from "../interface" -import { ternSeverCompletionSource } from "./TernServer" -import { buildILLAContextCompletionSource } from "./illaContext" - -const buildSqlSchemeSources = (sqlScheme: Record) => { - const requiredScheme: { [table: string]: string[] } = {} - Object.keys(sqlScheme).forEach((tableName) => { - if ( - sqlScheme[tableName] && - Object.prototype.toString.call(sqlScheme[tableName]) === "[object Object]" - ) { - requiredScheme[tableName] = Object.keys( - sqlScheme[tableName] as Record, - ) - } - }) - const completionSourceFunc = schemaCompletionSource({ - schema: requiredScheme, - }) - return (context: CompletionContext) => { - const completionSource = completionSourceFunc(context) as CompletionResult - if (Array.isArray(completionSource?.options)) { - completionSource.options = completionSource.options.map((option) => { - return { - ...option, - type: "table", - } - }) - } - - return completionSource - } -} - -const buildSqlKeywordSources = (lang: CODE_LANG) => { - switch (lang) { - case CODE_LANG.PLSQL: { - return keywordCompletionSource(PLSQL, true) - } - case CODE_LANG.CASSANDRA: { - return keywordCompletionSource(Cassandra, true) - } - case CODE_LANG.SQLite: { - return keywordCompletionSource(SQLite, true) - } - case CODE_LANG.MSSQL: { - return keywordCompletionSource(MSSQL, true) - } - case CODE_LANG.MARIASQL: { - return keywordCompletionSource(MariaSQL, true) - } - case CODE_LANG.MYSQL: { - return keywordCompletionSource(MySQL, true) - } - case CODE_LANG.PGSQL: { - return keywordCompletionSource(PostgreSQL, true) - } - default: - case CODE_LANG.SQL: { - return keywordCompletionSource(StandardSQL, true) - } - } -} - -export const buildCompletionSources = ( - codeType: CODE_TYPE, - lang: CODE_LANG, - sqlScheme: Record, - completeOptions: Record, -) => { - const ternSource = ternSeverCompletionSource(codeType) - const illaSources = buildILLAContextCompletionSource( - completeOptions, - codeType, - ) - const completionSources = [ternSource, illaSources] - - switch (lang) { - case CODE_LANG.PGSQL: - case CODE_LANG.MARIASQL: - case CODE_LANG.MSSQL: - case CODE_LANG.SQLite: - case CODE_LANG.CASSANDRA: - case CODE_LANG.PLSQL: - case CODE_LANG.MYSQL: - case CODE_LANG.SQL: { - const sqlKeywordsSources = buildSqlKeywordSources(lang) - const sqlSchemeSources = buildSqlSchemeSources(sqlScheme) - completionSources.push(sqlKeywordsSources, sqlSchemeSources) - break - } - default: { - break - } - } - return completionSources -} diff --git a/apps/agent/src/components/CodeEditor/CodeMirror/extensions/completionSources/illaContext.ts b/apps/agent/src/components/CodeEditor/CodeMirror/extensions/completionSources/illaContext.ts deleted file mode 100644 index 496f121c..00000000 --- a/apps/agent/src/components/CodeEditor/CodeMirror/extensions/completionSources/illaContext.ts +++ /dev/null @@ -1,97 +0,0 @@ -import { - Completion, - CompletionContext, - CompletionResult, -} from "@codemirror/autocomplete" -import { EditorView } from "@codemirror/view" -import { capitalize } from "lodash-es" -import sanbox from "@/utils/sanbox" -import { CODE_TYPE } from "../interface" -import { checkCursorInDynamicFlag, getDataType } from "./util" - -export const getDataInfo = (data: Record, path: string) => { - const pos = path.lastIndexOf(".") - if (pos < 0) { - return [data, 0, path] - } - try { - const value = sanbox.evaluateExpression(path.slice(0, pos), data) - if (typeof value === "object" && value && !Array.isArray(value)) { - return [value, pos + 1, path.slice(pos + 1)] - } - } catch (e) { - return - } -} - -export const buildILLAContextCompletionSource = ( - completeOptions: Record, - codeType: CODE_TYPE, -): (( - context: CompletionContext, -) => CompletionResult | Promise | null) => { - return (context: CompletionContext) => { - const isFunction = - codeType === CODE_TYPE.FUNCTION || - codeType === CODE_TYPE.EXPRESSION_WITHOUT_TEMPLATE - const isCursorInDynamicFlag = isFunction - ? true - : checkCursorInDynamicFlag(context) - if (!isCursorInDynamicFlag) { - return null - } - const matchPath = context.matchBefore( - /(?:[A-Za-z_$][\w$]*(?:\[\s*(?:\d+|(["'])(?:[^\1\\]|\\.)*?\1)\s*\])*\.)*(?:[A-Za-z_$][\w$]*)?/, - ) - if (!matchPath) { - return null - } - - if ( - matchPath.text.length === 0 && - (isFunction || context.matchBefore(/\{\{\s*/) === null) - ) { - return null - } - - const info = getDataInfo(completeOptions, matchPath.text) - if (!info) { - return null - } - const [currentData, offset, prefix] = info - const keys = Object.keys(currentData).filter((key) => - key.startsWith(prefix), - ) - - const options = keys.map((key) => { - const dataType = getDataType(currentData[key]) - const result: Completion = { - type: dataType, - label: key, - detail: capitalize(dataType), - boost: 1, - apply: - offset === 0 - ? undefined - : (view: EditorView, c: Completion, from: number, to: number) => { - view.dispatch({ - changes: { - from: from - 1, - to: to, - insert: key.match(/^[A-Za-z_$][\w$]*$/) - ? `.${key}` - : `['${key.replace(/[\\']/g, (c) => "\\" + c)}']`, - }, - }) - }, - } - return result - }) - const completions = { - from: matchPath.from + offset, - validFor: /^\w*$/, - options: options, - } - return completions - } -} diff --git a/apps/agent/src/components/CodeEditor/CodeMirror/extensions/completionSources/util.ts b/apps/agent/src/components/CodeEditor/CodeMirror/extensions/completionSources/util.ts deleted file mode 100644 index 56dcecab..00000000 --- a/apps/agent/src/components/CodeEditor/CodeMirror/extensions/completionSources/util.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { CompletionContext } from "@codemirror/autocomplete" -import { getStringSnippets } from "@illa-public/dynamic-string" -import { AutocompleteDataType } from "./TernServer" - -export function getDataType(data: unknown): AutocompleteDataType { - const type = typeof data - if (type === "number") return AutocompleteDataType.NUMBER - else if (type === "string") return AutocompleteDataType.STRING - else if (type === "boolean") return AutocompleteDataType.BOOLEAN - else if (Array.isArray(data)) return AutocompleteDataType.ARRAY - else if (type === "function") return AutocompleteDataType.FUNCTION - else if (type === "undefined") return AutocompleteDataType.UNKNOWN - return AutocompleteDataType.OBJECT -} - -export function checkCursorInDynamicFlag(context: CompletionContext): boolean { - const { state, pos } = context - const doc = state.sliceDoc(0, pos) - const stringSnippets = getStringSnippets(doc) - let nextDynamicStringStartIndex = 0 - for (let i = 0; i < stringSnippets.length; i++) { - const snippet = stringSnippets[i] - const start = nextDynamicStringStartIndex - const dynamicStringStartIndex = snippet.indexOf("{{") - const stringStartIndex = dynamicStringStartIndex + start + 2 - const dynamicStringEndIndex = snippet.indexOf("}}") - const stringEndIndex = dynamicStringEndIndex + start - if ( - dynamicStringStartIndex > -1 && - stringStartIndex <= pos && - (dynamicStringEndIndex <= -1 || pos <= stringEndIndex) - ) { - return true - } - nextDynamicStringStartIndex += snippet.length - } - return false -} diff --git a/apps/agent/src/components/CodeEditor/CodeMirror/extensions/heighLightJSExpression.ts b/apps/agent/src/components/CodeEditor/CodeMirror/extensions/heighLightJSExpression.ts deleted file mode 100644 index 9f85c34e..00000000 --- a/apps/agent/src/components/CodeEditor/CodeMirror/extensions/heighLightJSExpression.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { Range } from "@codemirror/state" -import { - Decoration, - DecorationSet, - EditorView, - ViewPlugin, - ViewUpdate, -} from "@codemirror/view" -import { IExpressionShape } from "./interface" - -export const defaultHighlightClassName = "cm-default-highlight" -export const errorHighlightClassName = "cm-error-highlight" - -const defaultHighlightMark = Decoration.mark({ - class: defaultHighlightClassName, -}) -const errorHighlightMark = Decoration.mark({ class: errorHighlightClassName }) - -export function getDecoration( - view: EditorView, - expressions?: IExpressionShape[], -) { - if (!Array.isArray(expressions) || expressions.length === 0) { - return Decoration.none - } - const value = view.state.doc.toString() - if (!value) { - return Decoration.none - } - const ranges: Range[] = [] - let i = 0 - expressions.forEach((expression) => { - const start = value.indexOf(expression.value, i) - if (start >= 0) { - i = start + expression.value.length - const rang = ( - expression.hasError ? errorHighlightMark : defaultHighlightMark - ).range(start, i) - ranges.push(rang) - } - }) - return Decoration.set(ranges) -} - -const getHighlightExtDecorations = (value: { - decoration: DecorationSet - update: (update: ViewUpdate) => void -}) => value.decoration - -const getCls = (expressions?: IExpressionShape[]) => { - return class { - decoration: DecorationSet - constructor(view: EditorView) { - this.decoration = getDecoration(view, expressions) - } - update(update: ViewUpdate) { - this.decoration = getDecoration(update.view, expressions) - } - } -} -export const getHighlightExpressionExtension = ( - expressions?: IExpressionShape[], -) => { - return ViewPlugin.fromClass(getCls(expressions), { - decorations: getHighlightExtDecorations, - }) -} diff --git a/apps/agent/src/components/CodeEditor/CodeMirror/extensions/highLightSyntax.ts b/apps/agent/src/components/CodeEditor/CodeMirror/extensions/highLightSyntax.ts deleted file mode 100644 index 1c08ed06..00000000 --- a/apps/agent/src/components/CodeEditor/CodeMirror/extensions/highLightSyntax.ts +++ /dev/null @@ -1,138 +0,0 @@ -import { - HighlightStyle, - defaultHighlightStyle, - syntaxTree, -} from "@codemirror/language" -import { EditorState, Facet, Prec, RangeSetBuilder } from "@codemirror/state" -import { - Decoration, - DecorationSet, - EditorView, - ViewPlugin, - ViewUpdate, -} from "@codemirror/view" -import { Tree } from "@lezer/common" -import { highlightTree } from "@lezer/highlight" -import { - getStringSnippets, - hasDynamicStringSnippet, -} from "@illa-public/dynamic-string" -import { CODE_LANG, CODE_TYPE } from "./interface" - -const highlighterFacet = Facet.define() - -function getHighlighters(state: EditorState) { - return state.facet(highlighterFacet) -} - -function getJsRanges(view: EditorView) { - const segments = getStringSnippets(view.state.doc.toString()) - const ranges = [] - let i = 0 - for (const segment of segments) { - if (hasDynamicStringSnippet(segment)) { - ranges.push({ from: i + 2, to: i + segment.length - 2 }) - } - i += segment.length - } - return ranges -} - -function inJs( - from: number, - to: number, - ranges: { from: number; to: number }[], -) { - for (const range of ranges) { - if (from >= range.from && to <= range.to) { - return true - } - } - return false -} - -class TreeHighlighter { - private markCache: any - private tree: Tree - decorations: DecorationSet - - constructor( - view: EditorView, - readonly filterJs: boolean, - ) { - this.markCache = Object.create(null) - this.tree = syntaxTree(view.state) - this.decorations = this.buildDeco(view, getHighlighters(view.state)) - } - - update(update: ViewUpdate) { - const tree = syntaxTree(update.state) - const highlighters = getHighlighters(update.state) - const styleChange = highlighters !== getHighlighters(update.startState) - if ( - tree.length < update.view.viewport.to && - !styleChange && - tree.type === this.tree.type - ) { - this.decorations = this.decorations.map(update.changes) - } else if (tree !== this.tree || update.viewportChanged || styleChange) { - this.tree = tree - this.decorations = this.buildDeco(update.view, highlighters) - } - } - - buildDeco(view: EditorView, highlighters: any) { - if (!highlighters || !this.tree.length) { - return Decoration.none - } - const jsRanges = this.filterJs ? getJsRanges(view) : undefined - if (jsRanges && jsRanges.length === 0) { - return Decoration.none - } - const builder = new RangeSetBuilder() - for (const r of view.visibleRanges) { - highlightTree( - this.tree, - highlighters, - (from, to, style) => { - if (!jsRanges || inJs(from, to, jsRanges)) { - builder.add( - from, - to, - this.markCache[style] || - (this.markCache[style] = Decoration.mark({ class: style })), - ) - } - }, - r.from, - r.to, - ) - } - return builder.finish() - } -} - -function syntaxHighlighting(highlighter: HighlightStyle, filterJs: boolean) { - const ext = [ - Prec.high( - ViewPlugin.define((v) => new TreeHighlighter(v, filterJs), { - decorations: (v) => v.decorations, - }), - ), - ] - if (highlighter.module) { - ext.push(EditorView.styleModule.of(highlighter.module)) - } - ext.push(highlighterFacet.of(highlighter)) - return ext -} - -export function highlightSyntaxExtension( - language: CODE_LANG, - codeType?: CODE_TYPE, -) { - return syntaxHighlighting( - defaultHighlightStyle, - language === "javascript" && codeType === CODE_TYPE.EXPRESSION, - ) -} diff --git a/apps/agent/src/components/CodeEditor/CodeMirror/extensions/index.ts b/apps/agent/src/components/CodeEditor/CodeMirror/extensions/index.ts deleted file mode 100644 index 0fcdb6b0..00000000 --- a/apps/agent/src/components/CodeEditor/CodeMirror/extensions/index.ts +++ /dev/null @@ -1,157 +0,0 @@ -import { - acceptCompletion, - autocompletion, - closeBrackets, - closeBracketsKeymap, - closeCompletion, - moveCompletionSelection, -} from "@codemirror/autocomplete" -import { defaultKeymap, history, historyKeymap } from "@codemirror/commands" -import { javascript } from "@codemirror/lang-javascript" -import { sql } from "@codemirror/lang-sql" -import { bracketMatching, indentOnInput } from "@codemirror/language" -import { Extension, Prec } from "@codemirror/state" -import { dropCursor, keymap, lineNumbers, tooltips } from "@codemirror/view" -import { useCallback, useMemo } from "react" -import { buildCompletionSources } from "./completionSources/buildSources" -import { getHighlightExpressionExtension } from "./heighLightJSExpression" -import { highlightSyntaxExtension } from "./highLightSyntax" -import { CODE_LANG, CODE_TYPE, ICodeMirrorOptions } from "./interface" - -export const basicExtension: Extension = [ - history(), - dropCursor(), - indentOnInput(), - bracketMatching(), - closeBrackets(), - keymap.of([...closeBracketsKeymap, ...defaultKeymap, ...historyKeymap]), -] - -const keyMapExtensions = Prec.highest( - keymap.of([ - { key: "Escape", run: closeCompletion }, - { key: "ArrowDown", run: moveCompletionSelection(true) }, - { key: "ArrowUp", run: moveCompletionSelection(false) }, - { key: "PageDown", run: moveCompletionSelection(true, "page") }, - { key: "PageUp", run: moveCompletionSelection(false, "page") }, - { key: "Tab", run: acceptCompletion }, - { key: "Enter", run: acceptCompletion }, - ]), -) - -const getAutoCompletionExtension = ( - codeType: CODE_TYPE, - lang: CODE_LANG, - sqlScheme: Record, - completionOptions: Record, -) => { - const completionSources = buildCompletionSources( - codeType, - lang, - sqlScheme, - completionOptions, - ) - return [ - autocompletion({ - override: completionSources, - defaultKeymap: false, - closeOnBlur: false, - }), - keyMapExtensions, - ] -} - -export const useBasicSetup = (options: ICodeMirrorOptions) => { - const { - showLineNumbers, - expressions = [], - completionOptions, - lang = CODE_LANG.JAVASCRIPT, - codeType = CODE_TYPE.EXPRESSION, - sqlScheme = {}, - autoCompleteTipContainer, - } = options - - const autocompletionExtension = useMemo( - () => - getAutoCompletionExtension(codeType, lang, sqlScheme, completionOptions), - [codeType, completionOptions, lang, sqlScheme], - ) - - const showLinNUmberExtension = useMemo( - () => (showLineNumbers ? [lineNumbers()] : []), - [showLineNumbers], - ) - - const highlightJSExpressionExtension = useMemo(() => { - const isFunction = codeType === CODE_TYPE.FUNCTION - return isFunction ? [] : getHighlightExpressionExtension(expressions) - }, [codeType, expressions]) - - const langExtension = useMemo(() => { - const plugins: Extension[] = [ - // syntaxHighlighting(defaultHighlightStyle, { fallback: true }), - highlightSyntaxExtension(lang, codeType), - ] - switch (lang) { - case CODE_LANG.PGSQL: - case CODE_LANG.MARIASQL: - case CODE_LANG.MSSQL: - case CODE_LANG.SQLite: - case CODE_LANG.CASSANDRA: - case CODE_LANG.PLSQL: - case CODE_LANG.MYSQL: - case CODE_LANG.SQL: { - plugins.push( - sql({ - upperCaseKeywords: true, - }), - ) - break - } - case CODE_LANG.JAVASCRIPT: - default: { - plugins.push(javascript()) - break - } - } - return plugins - }, [codeType, lang]) - - const buildTooltipExtension = useCallback( - (autoCompleteTipContainer?: HTMLElement) => { - return tooltips({ - position: "fixed", - parent: - autoCompleteTipContainer || - document.querySelector(".illaCodeMirrorWrapper") || - document.body, - }) - }, - [], - ) - - const tooltipExtension = useMemo(() => { - return buildTooltipExtension(autoCompleteTipContainer) - }, [autoCompleteTipContainer, buildTooltipExtension]) - - const extensions = useMemo( - () => [ - basicExtension, - autocompletionExtension, - highlightJSExpressionExtension, - showLinNUmberExtension, - langExtension, - tooltipExtension, - ], - [ - autocompletionExtension, - highlightJSExpressionExtension, - langExtension, - showLinNUmberExtension, - tooltipExtension, - ], - ) - - return extensions -} diff --git a/apps/agent/src/components/CodeEditor/CodeMirror/extensions/interface.ts b/apps/agent/src/components/CodeEditor/CodeMirror/extensions/interface.ts deleted file mode 100644 index 851a56f5..00000000 --- a/apps/agent/src/components/CodeEditor/CodeMirror/extensions/interface.ts +++ /dev/null @@ -1,36 +0,0 @@ -export enum CODE_TYPE { - "EXPRESSION" = "EXPRESSION", - "FUNCTION" = "FUNCTION", - "EXPRESSION_WITHOUT_TEMPLATE" = "EXPRESSION_WITHOUT_TEMPLATE", -} - -export enum CODE_LANG { - "JAVASCRIPT" = "javascript", - "SQL" = "sql", - "HTML" = "html", - "JSON" = "json", - "XML" = "xml", - "PGSQL" = "pgsql", - "MYSQL" = "mysql", - "MARIASQL" = "mariasql", - "MSSQL" = "mssql", - "SQLite" = "sqlite", - "CASSANDRA" = "cassandra", - "PLSQL" = "plsql", -} - -export interface IExpressionShape { - value: string - hasError: boolean -} - -export interface ICodeMirrorOptions { - showLineNumbers?: boolean - lang?: CODE_LANG - codeType?: CODE_TYPE - expressions?: IExpressionShape[] - completionOptions: Record - sqlScheme?: Record - singleLine?: boolean - autoCompleteTipContainer?: HTMLElement -} diff --git a/apps/agent/src/components/CodeEditor/CodeMirror/interface.ts b/apps/agent/src/components/CodeEditor/CodeMirror/interface.ts deleted file mode 100644 index 67bc79dd..00000000 --- a/apps/agent/src/components/CodeEditor/CodeMirror/interface.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { ICodeMirrorOptions } from "./extensions/interface" - -export interface ILLACodeMirrorProps extends ICodeMirrorOptions { - value?: string - onChange?: (value: string) => void - onFocus?: () => void - onBlur?: (value: string) => void - height?: string - minHeight?: string - maxHeight?: string - width?: string - minWidth?: string - maxWidth?: string - editable?: boolean - readOnly?: boolean - placeholder?: string - className?: string - hasError?: boolean -} - -export enum RESULT_TYPES { - STRING = "STRING", - NUMBER = "NUMBER", - BOOLEAN = "BOOLEAN", - OBJECT = "OBJECT", - ARRAY = "ARRAY", - FUNCTION = "FUNCTION", - UNDEFINED = "UNDEFINED", - NULL = "NULL", - UNKNOWN = "UNKNOWN", -} diff --git a/apps/agent/src/components/CodeEditor/CodeMirror/style.ts b/apps/agent/src/components/CodeEditor/CodeMirror/style.ts deleted file mode 100644 index 50a234b5..00000000 --- a/apps/agent/src/components/CodeEditor/CodeMirror/style.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { css } from "@emotion/react" -import { getColor } from "@illa-public/color-scheme" - -const getEditorWrapperBorderColor = ( - hasError: boolean, - isFocused: boolean, - isHovered: boolean, -) => { - if (hasError) { - return getColor("red", "03") - } - if (isFocused) { - return getColor("green", "03") - } - return isHovered ? getColor("techPurple", "07") : getColor("grayBlue", "08") -} - -export const applyEditorWrapperStyle = ( - hasError: boolean, - isFocused: boolean, - editable: boolean, - readOnly: boolean, -) => { - const hoverStyle = - !editable || readOnly - ? null - : css` - :hover { - border: 1px solid - ${getEditorWrapperBorderColor(hasError, isFocused, true)}; - z-index: 1; - } - ` - return css` - width: 100%; - height: 100%; - .cm-editor { - border: 1px solid - ${getEditorWrapperBorderColor(hasError, isFocused, false)}; - border-radius: "8px"; - &.cm-focused { - z-index: 1; - } - ${hoverStyle} - } - ` -} diff --git a/apps/agent/src/components/CodeEditor/CodeMirror/theme.ts b/apps/agent/src/components/CodeEditor/CodeMirror/theme.ts deleted file mode 100644 index fc93a6dc..00000000 --- a/apps/agent/src/components/CodeEditor/CodeMirror/theme.ts +++ /dev/null @@ -1,234 +0,0 @@ -import { css } from "@emotion/react" -import { getColor } from "@illa-public/color-scheme" -import ArrayIcon from "@/components/CodeEditor/CodeMirror/assets/array.svg" -import BooleanIcon from "@/components/CodeEditor/CodeMirror/assets/boolean.svg" -import FunctionIcon from "@/components/CodeEditor/CodeMirror/assets/function.svg" -import KeywordIcon from "@/components/CodeEditor/CodeMirror/assets/keyword.svg" -import NullIcon from "@/components/CodeEditor/CodeMirror/assets/null.svg" -import NumberIcon from "@/components/CodeEditor/CodeMirror/assets/number.svg" -import ObjectIcon from "@/components/CodeEditor/CodeMirror/assets/object.svg" -import StringIcon from "@/components/CodeEditor/CodeMirror/assets/string.svg" -import TableIcon from "@/components/CodeEditor/CodeMirror/assets/table.svg" -import TypeIcon from "@/components/CodeEditor/CodeMirror/assets/type.svg" -import UnknownIcon from "@/components/CodeEditor/CodeMirror/assets/undefine.svg" -import { - defaultHighlightClassName, - errorHighlightClassName, -} from "@/components/CodeEditor/CodeMirror/extensions/heighLightJSExpression" - -export const ILLACodeMirrorTheme = { - "&.cm-editor": { - borderRadius: "8px", - border: `1px solid ${getColor("grayBlue", "03")}`, - overflow: "hidden", - fontFamily: "Fira Code", - }, - "&.cm-editor .cm-scroller": { - lineHeight: "22px", - fontSize: "12px", - }, - "&.cm-editor .cm-content": { - padding: "4px 0", - }, - "&.cm-editor .cm-line": { - padding: "0 16px", - }, - "&.cm-editor.cm-focused .cm-matchingBracket": { - color: getColor("green", "03"), - }, - "&.cm-editor .cm-placeholder": { - color: getColor("grayBlue", "04"), - height: 0, - }, - "&.cm-editor .cm-gutters .cm-gutter .cm-gutterElement": { - padding: "0 8px 0 23px", - }, - "&.cm-editor .cm-gutters": { - borderRadius: "8px 0 0 8px", - borderRight: "none", - }, - [`.${defaultHighlightClassName}`]: { - color: getColor("green", "03"), - backgroundColor: "rgba(0, 170, 91, 0.08);", - }, - [`.${errorHighlightClassName}`]: { - color: getColor("red", "03"), - backgroundColor: "rgba(255, 71, 71, 0.08);", - }, -} - -export const illaCodeMirrorTooltipStyle = css` - > div { - height: unset; - min-height: unset; - } - .cm-tooltip { - z-index: 1000; - &.cm-tooltip-autocomplete { - border: none; - > ul { - background-color: ${getColor("white", "01")}; - border: 1px solid ${getColor("greyBlue", "08")}; - box-shadow: 0 2px 16px rgba(0, 0, 0, 0.16); - border-radius: 8px; - font-family: "Fira Code", monospace; - li { - height: 24px; - line-height: 24px; - position: relative; - overflow: hidden; - &[aria-selected] { - background-color: ${getColor("techPurple", "08")}; - color: ${getColor("techPurple", "03")}; - } - .cm-completionIcon { - width: 14px; - height: 14px; - font-size: 14px; - opacity: 1; - padding-right: 8px; - position: absolute; - top: 2.5px; - } - .cm-completionIcon-Function::after { - content: url(${FunctionIcon}); - } - .cm-completionIcon-Number::after { - content: url(${NumberIcon}); - } - .cm-completionIcon-String::after { - content: url(${StringIcon}); - } - .cm-completionIcon-Boolean::after { - content: url(${BooleanIcon}); - } - .cm-completionIcon-Null::after { - content: url(${NullIcon}); - } - .cm-completionIcon-Object::after { - content: url(${ObjectIcon}); - } - .cm-completionIcon-Array::after { - content: url(${ArrayIcon}); - } - .cm-completionIcon-Unknown::after { - content: url(${UnknownIcon}); - } - .cm-completionIcon-keyword::after { - content: url(${KeywordIcon}); - } - .cm-completionIcon-type::after { - content: url(${TypeIcon}); - } - .cm-completionIcon-table::after { - content: url(${TableIcon}); - } - .cm-completionLabel { - font-size: 12px; - line-height: 22px; - position: absolute; - left: 25px; - top: 2px; - .cm-completionMatchedText { - font-weight: 600; - text-decoration: none; - } - } - .cm-completionDetail { - position: absolute; - right: 8px; - top: 2px; - margin: 0; - color: ${getColor("grayBlue", "04")}; - font-size: 12px; - line-height: 22px; - font-style: normal; - } - } - } - .cm-completionInfo { - padding: 4px 8px; - background-color: ${getColor("white", "01")}; - border: 1px solid ${getColor("greyBlue", "08")}; - box-shadow: 0 2px 16px rgba(0, 0, 0, 0.16); - border-radius: 8px; - width: 287px; - &.cm-completionInfo-right { - left: calc(100% + 8px); - } - .completionInfoCardTitle { - display: flex; - justify-content: space-between; - align-items: center; - .cardTitle { - width: 100%; - font-weight: 500; - font-size: 12px; - line-height: 20px; - color: ${getColor("techPurple", "03")}; - } - .openInfo { - width: 12px; - height: 12px; - display: flex; - align-items: center; - } - } - .completionInfoType { - font-size: 12px; - color: ${getColor("grayBlue", "02")}; - margin: 0; - line-height: 20px; - word-break: break-all; - } - .completionInfoEvaluatesTitle { - font-size: 12px; - color: ${getColor("grayBlue", "02")}; - margin: 0; - font-weight: 500; - line-height: 20px; - } - .completionInfoDoc { - font-size: 12px; - color: ${getColor("grayBlue", "04")}; - margin: 0; - line-height: 20px; - } - .evaluatesResult { - display: inline-block; - margin: 0; - padding: 0 8px; - font-size: 12px; - line-height: 18px; - color: ${getColor("grayBlue", "02")}; - background-color: ${getColor("grayBlue", "09")}; - position: relative; - cursor: pointer; - :hover { - .evaluatesTooltips { - visibility: visible; - } - } - .evaluatesTooltips { - visibility: hidden; - font-family: "Fira Code", monospace; - position: absolute; - left: calc(100% + 4px); - top: -50%; - max-height: 162px; - border-radius: 4px; - box-shadow: 0 2px 16px rgba(0, 0, 0, 0.16); - background-color: ${getColor("grayBlue", "01")}; - padding: 12px 16px; - font-size: 14px; - line-height: 18px; - color: ${getColor("white", "01")}; - white-space: pre; - overflow-y: auto; - cursor: auto; - } - } - } - } - } -` diff --git a/apps/agent/src/components/CodeEditor/CodeMirror/utils.ts b/apps/agent/src/components/CodeEditor/CodeMirror/utils.ts deleted file mode 100644 index edcf324d..00000000 --- a/apps/agent/src/components/CodeEditor/CodeMirror/utils.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { RESULT_TYPES } from "./interface" - -export const fixedValue = (value: unknown) => { - if (value == undefined) return "" - if (typeof value === "string") return value - return `{{${JSON.stringify(value)}}}` -} - -export const getResultType = (result: unknown) => { - if (Array.isArray(result)) { - return RESULT_TYPES.ARRAY - } else if (typeof result === "string") { - return RESULT_TYPES.STRING - } else if (typeof result === "number") { - return RESULT_TYPES.NUMBER - } else if (typeof result === "boolean") { - return RESULT_TYPES.BOOLEAN - } else if (typeof result === "undefined") { - return RESULT_TYPES.UNDEFINED - } else if (result === null) { - return RESULT_TYPES.NULL - } else { - return RESULT_TYPES.OBJECT - } -} - -export const transResultToResultType = (type: RESULT_TYPES, value: string) => { - switch (type) { - case RESULT_TYPES.ARRAY: - return Array.isArray(value) ? value : JSON.parse(value) - case RESULT_TYPES.STRING: - return value - case RESULT_TYPES.NUMBER: - return Number(value) - case RESULT_TYPES.BOOLEAN: - return Boolean(value) - case RESULT_TYPES.UNDEFINED: - return undefined - case RESULT_TYPES.NULL: - return null - case RESULT_TYPES.OBJECT: - return typeof value === "object" ? value : JSON.parse(value) - default: - return value - } -} diff --git a/apps/agent/src/components/CodeEditor/ModalCodeMirror/content.tsx b/apps/agent/src/components/CodeEditor/ModalCodeMirror/content.tsx deleted file mode 100644 index b04fcdcf..00000000 --- a/apps/agent/src/components/CodeEditor/ModalCodeMirror/content.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import { FC, useLayoutEffect, useRef, useState } from "react" -import { createPortal } from "react-dom" -import { CodeEditor } from "@/components/CodeEditor" -import { ModalBodyContent } from "@/components/CodeEditor/ModalCodeMirror/interface" -import { - applyCodeMirrorWrapperStyle, - contentWrapperStyle, -} from "@/components/CodeEditor/ModalCodeMirror/style" -import { illaCodeMirrorTooltipStyle } from "../CodeMirror/theme" - -export const ModalContent: FC = (props) => { - const { lang, onChange, value, placeholder, codeType, completionOptions } = - props - - const codeMirrorRef = useRef(null) - - const [canRender, setCanRender] = useState(false) - - useLayoutEffect(() => { - setCanRender(true) - - return () => { - setCanRender(false) - } - }, []) - - return ( -
-
- -
- {canRender && - createPortal( -
, - document.body, - )} -
- ) -} diff --git a/apps/agent/src/components/CodeEditor/ModalCodeMirror/index.tsx b/apps/agent/src/components/CodeEditor/ModalCodeMirror/index.tsx deleted file mode 100644 index 4dc47c30..00000000 --- a/apps/agent/src/components/CodeEditor/ModalCodeMirror/index.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import { FC } from "react" -import { useTranslation } from "react-i18next" -import { ModalContent } from "@/components/CodeEditor/ModalCodeMirror/content" -import { ModalCodeMirrorProps } from "@/components/CodeEditor/ModalCodeMirror/interface" -import { MovableModal } from "@/components/Modal/movableModal" - -export const ModalCodeMirror: FC = (props) => { - const { - title, - value, - lang, - codeType, - onChange, - onClose, - placeholder, - onBlur, - onFocus, - completionOptions, - } = props - const { t } = useTranslation() - - return ( - - } - footerContent={null} - onClose={onClose} - /> - ) -} diff --git a/apps/agent/src/components/CodeEditor/ModalCodeMirror/interface.ts b/apps/agent/src/components/CodeEditor/ModalCodeMirror/interface.ts deleted file mode 100644 index 93d03601..00000000 --- a/apps/agent/src/components/CodeEditor/ModalCodeMirror/interface.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { CodeEditorProps } from "@/components/CodeEditor/interface" -import { MovableModalProps } from "@/components/Modal/interface" - -export interface ModalBodyContent { - placeholder?: string - lang?: CodeEditorProps["lang"] - onChange?: CodeEditorProps["onChange"] - onFocus?: CodeEditorProps["onFocus"] - onBlur?: CodeEditorProps["onBlur"] - value: string - codeType?: CodeEditorProps["codeType"] - completionOptions: CodeEditorProps["completionOptions"] -} - -export interface FooterContentProps { - onClickSaveButton: () => void -} - -export interface ModalCodeMirrorProps - extends Omit, - ModalBodyContent { - onClickSaveButton?: () => void -} diff --git a/apps/agent/src/components/CodeEditor/assets/openWindow.svg b/apps/agent/src/components/CodeEditor/assets/openWindow.svg deleted file mode 100644 index bea1b080..00000000 --- a/apps/agent/src/components/CodeEditor/assets/openWindow.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/apps/agent/src/components/CodeEditor/index.tsx b/apps/agent/src/components/CodeEditor/index.tsx deleted file mode 100644 index 1bd06c35..00000000 --- a/apps/agent/src/components/CodeEditor/index.tsx +++ /dev/null @@ -1,120 +0,0 @@ -import { debounce } from "lodash-es" -import { FC, useCallback, useMemo, useRef, useState } from "react" -import sanbox from "@/utils/sanbox" -import { ILLACodeMirrorCore } from "./CodeMirror/core" -import { CODE_TYPE } from "./CodeMirror/extensions/interface" -import { illaCodeMirrorTooltipStyle } from "./CodeMirror/theme" -import { fixedValue } from "./CodeMirror/utils" -import { ModalCodeMirror } from "./ModalCodeMirror" -import OpenWindowIcon from "./assets/openWindow.svg?react" -import { CodeEditorProps } from "./interface" -import { ILLACodeMirrorWrapperStyle, openWindowIconHotspotStyle } from "./style" - -export const CodeEditor: FC = (props) => { - const { - value = "", - onChange = () => {}, - placeholder, - width, - maxWidth, - height, - maxHeight, - editable = true, - readOnly, - minWidth, - minHeight, - wrapperCss, - completionOptions, - showLineNumbers, - lang, - sqlScheme, - codeType = CODE_TYPE.EXPRESSION, - singleLine, - onBlur = () => {}, - onFocus = () => {}, - className, - canExpand, - modalTitle = "", - autoCompleteTipContainer, - } = props - - const [isExpanded, setIsExpanded] = useState(false) - - const innerCanExpand = canExpand && !readOnly && editable - - const needExecuteCode = value - - const stringSnippets = sanbox.checkRun(needExecuteCode, completionOptions) - const hasError = stringSnippets.some((item) => item.hasError) - const containerRef = useRef(null) - - const debounceHandleChange = useMemo(() => { - return debounce(onChange, 160) - }, [onChange]) - - const handleOpenExpandModal = useCallback(() => { - setIsExpanded(true) - }, []) - - const handleCloseExpandModal = useCallback(() => { - setIsExpanded(false) - }, []) - - return ( -
- - {innerCanExpand && ( -
- -
- )} - {isExpanded && ( - - )} -
- ) -} - -CodeEditor.displayName = "CodeEditor" diff --git a/apps/agent/src/components/CodeEditor/interface.ts b/apps/agent/src/components/CodeEditor/interface.ts deleted file mode 100644 index 617ec1a7..00000000 --- a/apps/agent/src/components/CodeEditor/interface.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { SerializedStyles } from "@emotion/react" -import { ILLACodeMirrorProps } from "./CodeMirror/interface" - -export interface CodeEditorProps - extends Omit< - ILLACodeMirrorProps, - | "hasError" - | "resultType" - | "result" - | "executionResult" - | "expressions" - | "canShowResultRealtime" - > { - wrapperCss?: SerializedStyles - canExpand?: boolean - modalTitle?: string -} diff --git a/apps/agent/src/components/CodeEditor/style.ts b/apps/agent/src/components/CodeEditor/style.ts deleted file mode 100644 index eded5af2..00000000 --- a/apps/agent/src/components/CodeEditor/style.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { css } from "@emotion/react" -import { getColor } from "@illa-public/color-scheme" - -export const ILLACodeMirrorWrapperStyle = css` - width: 100%; - height: 100%; - position: relative; - :hover { - .open-window-icon-hotspot { - visibility: visible; - } - } -` - -export const openWindowIconHotspotStyle = css` - position: absolute; - z-index: 10; - right: 2px; - bottom: 2px; - width: 16px; - height: 16px; - cursor: pointer; - font-size: 12px; - background-color: ${getColor("grayBlue", "09")}; - display: flex; - align-items: center; - justify-content: center; - border-radius: 2px 2px 6px 2px; - visibility: hidden; -` diff --git a/apps/agent/src/components/CodeMirrorRecordEditor/index.tsx b/apps/agent/src/components/CodeMirrorRecordEditor/index.tsx deleted file mode 100644 index b6907d02..00000000 --- a/apps/agent/src/components/CodeMirrorRecordEditor/index.tsx +++ /dev/null @@ -1,127 +0,0 @@ -import Icon from "@ant-design/icons" -import { Button } from "antd" -import { FC, useMemo } from "react" -import { useTranslation } from "react-i18next" -import { AddIcon, DeleteIcon } from "@illa-public/icon" -import { CodeEditor } from "@/components/CodeEditor" -import { CODE_LANG } from "@/components/CodeEditor/CodeMirror/extensions/interface" -import { RecordEditorProps } from "./interface" -import { - applyRecordEditorContainerStyle, - recordEditorLabelStyle, - recordEditorStyle, - recordKeyStyle, - recordStyle, - recordValueStyle, -} from "./style" - -export const RecordEditor: FC = (props) => { - const { - name, - records, - label, - completionOptions, - options = {}, - onDelete, - onAdd, - onChangeKey, - onChangeValue, - } = props - - const { - canAdd = true, - canDelete = true, - canEditKey = true, - canEditValue = true, - } = options - - const { t } = useTranslation() - - const recordList = useMemo(() => { - return ( - <> - {records?.map((record, index) => { - return ( -
- { - onChangeKey?.(index, value.trim(), record.value, name) - }} - singleLine - editable={canEditKey} - completionOptions={completionOptions} - canExpand - /> - { - onChangeValue?.(index, record.key, value.trim(), name) - }} - completionOptions={completionOptions} - canExpand - /> - {canDelete && ( -
- ) - })} - - ) - }, [ - canDelete, - canEditKey, - canEditValue, - completionOptions, - name, - onChangeKey, - onChangeValue, - onDelete, - records, - ]) - - return ( -
- {label != "" && ( - - {label} - - )} -
- {recordList} - {canAdd && ( - - - - )} -
-
- ) -} - -RecordEditor.displayName = "RecordEditor" diff --git a/apps/agent/src/components/CodeMirrorRecordEditor/interface.ts b/apps/agent/src/components/CodeMirrorRecordEditor/interface.ts deleted file mode 100644 index 2ab6cb84..00000000 --- a/apps/agent/src/components/CodeMirrorRecordEditor/interface.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { Params } from "@illa-public/public-types" - -export interface RecordEditorProps { - label: string - name?: string - records: Params[] | null - onAdd?: (name?: string) => void - onDelete?: (index: number, record: Params, name?: string) => void - onChangeKey?: ( - index: number, - key: string, - value: string, - name?: string, - ) => void - onChangeValue?: ( - index: number, - key: string, - value: string, - name?: string, - ) => void - completionOptions: Record - options?: { - canAdd?: boolean - canDelete?: boolean - canEditKey?: boolean - canEditValue?: boolean - } -} diff --git a/apps/agent/src/components/CodeMirrorRecordEditor/style.ts b/apps/agent/src/components/CodeMirrorRecordEditor/style.ts deleted file mode 100644 index b583840b..00000000 --- a/apps/agent/src/components/CodeMirrorRecordEditor/style.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { css } from "@emotion/react" -import { globalColor, illaPrefix } from "@illa-public/color-scheme" - -export function applyRecordEditorContainerStyle(label: string) { - return css` - display: flex; - padding-right: ${label !== "" ? "16px" : "0"}; - flex-direction: row; - ` -} - -export const recordEditorStyle = css` - display: flex; - flex-grow: 1; - flex-direction: column; - gap: 8px; -` - -export const recordStyle = css` - display: inline-flex; - flex-direction: row; - align-items: center; - - & > button { - color: ${globalColor(`--${illaPrefix}-grayBlue-05`)}; - - :hover { - color: ${globalColor(`--${illaPrefix}-grayBlue-02`)}; - transition: color 200ms ease-in-out; - } - } -` - -export const recordKeyStyle = css` - min-width: 160px; - flex-grow: 1; - width: 0; - height: auto; - - .ͼ1.cm-editor { - border-radius: 8px 0 0 8px; - } -` - -export const recordValueStyle = (canEditValue: boolean) => css` - margin-left: -1px; - flex-grow: 1; - width: 0; - height: auto; - - .ͼ1.cm-editor { - border-radius: ${canEditValue ? "0" : "0 8px 8px 0"}; - } -` - -export const recordEditorLabelStyle = css` - min-width: 160px; - margin-left: 16px; - margin-right: 16px; - height: 48px; - display: flex; - flex-direction: column; - justify-content: center; - align-items: end; - font-size: 14px; - font-weight: 500; - color: ${globalColor(`--${illaPrefix}-grayBlue-02`)}; -` diff --git a/apps/agent/src/components/ContributeTipisModalContent/ShareContent/index.tsx b/apps/agent/src/components/ContributeTipisModalContent/ShareContent/index.tsx index a57dc631..f110823c 100644 --- a/apps/agent/src/components/ContributeTipisModalContent/ShareContent/index.tsx +++ b/apps/agent/src/components/ContributeTipisModalContent/ShareContent/index.tsx @@ -3,7 +3,8 @@ import { App, Button, Input, Modal } from "antd" import { FC } from "react" import { useTranslation } from "react-i18next" import { CopyIcon } from "@illa-public/icon" -import { ShareBlockPC } from "@illa-public/market-share" +import { LayoutAutoChange } from "@illa-public/layout-auto-change" +import { ShareBlockMobile, ShareBlockPC } from "@illa-public/market-share" import { COPY_STATUS, copyToClipboard, @@ -97,9 +98,19 @@ const ShareContentModal: FC = ({
- + } + mobilePage={ + + } />
diff --git a/apps/agent/src/components/EmailCode/index.tsx b/apps/agent/src/components/EmailCode/index.tsx index 63c0cf31..096b5457 100644 --- a/apps/agent/src/components/EmailCode/index.tsx +++ b/apps/agent/src/components/EmailCode/index.tsx @@ -3,21 +3,29 @@ import { FC } from "react" import { useFormContext } from "react-hook-form" import { useTranslation } from "react-i18next" import { getColor } from "@illa-public/color-scheme" +import { useSendVerificationCodeToEmailMutation } from "@illa-public/user-data" +import { TIPISStorage } from "@/utils/storage" import { EmailCodeProps } from "./interface" const { Countdown } = Statistic export const EmailCode: FC = (props) => { - const { showCountDown, onCountDownChange, sendEmail } = props + const { showCountDown, onCountDownChange, usage } = props const { getValues, trigger } = useFormContext() const { t } = useTranslation() const { message } = App.useApp() + const [sendVerificationCodeToEmail] = useSendVerificationCodeToEmailMutation() const sendEmailCode = async () => { onCountDownChange(true) try { - await sendEmail(getValues("email")) + const verificationToken = await sendVerificationCodeToEmail({ + email: getValues("email"), + usage, + }).unwrap() message.success(t("page.user.sign_up.tips.verification_code")) + usage === "forgetpwd" && + TIPISStorage.setSessionStorage("verificationToken", verificationToken) } catch (error: any) { onCountDownChange(false) if (error?.response) { diff --git a/apps/agent/src/components/EmailCode/interface.ts b/apps/agent/src/components/EmailCode/interface.ts index 2d39da85..2b34a97c 100644 --- a/apps/agent/src/components/EmailCode/interface.ts +++ b/apps/agent/src/components/EmailCode/interface.ts @@ -2,5 +2,4 @@ export interface EmailCodeProps { showCountDown: boolean usage: "signup" | "forgetpwd" onCountDownChange: (showCountDown: boolean) => void - sendEmail: (email: string) => Promise } diff --git a/apps/agent/src/components/Modal/Body/index.tsx b/apps/agent/src/components/Modal/Body/index.tsx deleted file mode 100644 index f1aba99a..00000000 --- a/apps/agent/src/components/Modal/Body/index.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { FC } from "react" -import { ModalBodyProps } from "@/components/Modal/Body/interface" -import { applyModalBodyWrapperStyle } from "@/components/Modal/Body/style" -import { stopDragAndDrop } from "@/components/Modal/utils/stopDragAndDrop" - -export const ModalBody: FC = (props) => { - const { children, footerHeight } = props - return ( -
- {children} -
- ) -} diff --git a/apps/agent/src/components/Modal/Body/interface.ts b/apps/agent/src/components/Modal/Body/interface.ts deleted file mode 100644 index 8b59b1da..00000000 --- a/apps/agent/src/components/Modal/Body/interface.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { ReactNode } from "react" - -export interface ModalBodyProps { - children: ReactNode - footerHeight: number -} diff --git a/apps/agent/src/components/Modal/Body/style.ts b/apps/agent/src/components/Modal/Body/style.ts deleted file mode 100644 index 4b1a0c17..00000000 --- a/apps/agent/src/components/Modal/Body/style.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { css } from "@emotion/react" - -export const applyModalBodyWrapperStyle = (footerHeight: number) => css` - width: 100%; - height: calc(100% - 48px - ${`${footerHeight}px`}); - cursor: auto; - padding: 0 16px; -` diff --git a/apps/agent/src/components/Modal/Footer/index.tsx b/apps/agent/src/components/Modal/Footer/index.tsx deleted file mode 100644 index c1db25af..00000000 --- a/apps/agent/src/components/Modal/Footer/index.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import { ForwardedRef, forwardRef } from "react" -import ResizeBarIcon from "@/assets/public/resize-bar-icon.svg?react" -import { ModalFooterProps } from "@/components/Modal/Footer/interface" -import { - applyModalFooterWrapperStyle, - resizeBarIconStyle, -} from "@/components/Modal/Footer/style" -import { stopDragAndDrop } from "@/components/Modal/utils/stopDragAndDrop" - -const ModalFooter = forwardRef( - (props: ModalFooterProps, ref: ForwardedRef) => { - const { children, hasFooterChildren, canMove } = props - - return ( -
- {children} - {canMove && } -
- ) - }, -) - -ModalFooter.displayName = "ModalFooter" - -export default ModalFooter diff --git a/apps/agent/src/components/Modal/Footer/interface.ts b/apps/agent/src/components/Modal/Footer/interface.ts deleted file mode 100644 index a420c229..00000000 --- a/apps/agent/src/components/Modal/Footer/interface.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { ReactNode } from "react" - -export interface ModalFooterProps { - children?: ReactNode - hasFooterChildren: boolean - canMove?: boolean -} diff --git a/apps/agent/src/components/Modal/Footer/style.ts b/apps/agent/src/components/Modal/Footer/style.ts deleted file mode 100644 index d2bb4572..00000000 --- a/apps/agent/src/components/Modal/Footer/style.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { css } from "@emotion/react" - -export const applyModalFooterWrapperStyle = (hasChildren: boolean) => css` - width: 100%; - display: flex; - align-items: center; - position: relative; - cursor: auto; - padding: 0 16px; - height: ${hasChildren ? "auto" : "16px"}; - flex: none; -` - -export const resizeBarIconStyle = css` - position: absolute; - bottom: 0; - right: 0; -` diff --git a/apps/agent/src/components/Modal/Header/index.tsx b/apps/agent/src/components/Modal/Header/index.tsx deleted file mode 100644 index 0732f171..00000000 --- a/apps/agent/src/components/Modal/Header/index.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { FC } from "react" -import { Link } from "react-router-dom" -import { getColor } from "@illa-public/color-scheme" -import { CloseIcon, DocsIcon, DragPointIcon } from "@illa-public/icon" -import IconHotSpot from "@illa-public/icon-hot-spot" -import { HeaderProps } from "@/components/Modal/Header/interface" -import { - dragIconStyle, - headerContainerStyle, - headerWrapperStyle, - titleStyle, -} from "@/components/Modal/Header/style" - -export const ModalHeader: FC = (props) => { - const { title, canMove, docLink, onClose } = props - return ( -
-
- {canMove && } - {title} - {docLink && ( - - - - - - )} -
- - - -
- ) -} diff --git a/apps/agent/src/components/Modal/Header/interface.ts b/apps/agent/src/components/Modal/Header/interface.ts deleted file mode 100644 index ab85ff21..00000000 --- a/apps/agent/src/components/Modal/Header/interface.ts +++ /dev/null @@ -1,6 +0,0 @@ -export interface HeaderProps { - title: string - docLink?: string - canMove?: boolean - onClose: () => void -} diff --git a/apps/agent/src/components/Modal/Header/style.ts b/apps/agent/src/components/Modal/Header/style.ts deleted file mode 100644 index 846d7c46..00000000 --- a/apps/agent/src/components/Modal/Header/style.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { css } from "@emotion/react" -import { getColor } from "@illa-public/color-scheme" - -export const headerWrapperStyle = css` - width: 100%; - height: 48px; - display: flex; - align-items: center; - justify-content: space-around; - flex: none; - padding: 16px; - padding-left: 4px; - padding-bottom: 8px; - position: relative; -` - -export const titleStyle = css` - font-size: 16px; - font-weight: 600; - color: ${getColor("grayBlue", "02")}; - display: inline-block; - overflow: hidden; - text-overflow: ellipsis; - max-width: calc(100% - 64px); - flex: none; -` - -export const dragIconStyle = css` - color: ${getColor("grayBlue", "04")}; - font-size: 16px; - flex: none; -` - -export const headerContainerStyle = css` - display: flex; - gap: 4px; - align-items: center; - width: calc(100% - 32px); -` diff --git a/apps/agent/src/components/Modal/index.tsx b/apps/agent/src/components/Modal/index.tsx deleted file mode 100644 index 3d9baa46..00000000 --- a/apps/agent/src/components/Modal/index.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import { FC } from "react" -import useMeasure from "react-use-measure" -import { ModalBody } from "@/components/Modal/Body" -import ModalFooter from "@/components/Modal/Footer" -import { ModalHeader } from "@/components/Modal/Header" -import { ModalProps } from "@/components/Modal/interface" -import { applyModalWrapperStyle } from "@/components/Modal/style" - -export const BuilderModal: FC = (props) => { - const { bodyContent, title, footerContent, canMove, w, h, onClose, docLink } = - props - - const hasFooterChildren = - (Array.isArray(footerContent) && footerContent.length > 0) || - footerContent != null - - const [ref, rect] = useMeasure() - - return ( -
- - {bodyContent} - - {footerContent} - -
- ) -} - -BuilderModal.displayName = "Modal" diff --git a/apps/agent/src/components/Modal/interface.ts b/apps/agent/src/components/Modal/interface.ts deleted file mode 100644 index 86984307..00000000 --- a/apps/agent/src/components/Modal/interface.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { ReactNode } from "react" - -export interface BaseModalProps { - title: string - bodyContent: ReactNode - footerContent?: ReactNode - docLink?: string - onClose: () => void -} - -export interface ModalProps extends BaseModalProps { - docLink?: string - canMove?: boolean - w?: number - h?: number -} - -export interface MovableModalProps extends BaseModalProps { - defaultPosition?: { - x: number - y: number - width: number - height: number - } -} diff --git a/apps/agent/src/components/Modal/movableModal.tsx b/apps/agent/src/components/Modal/movableModal.tsx deleted file mode 100644 index 9bfbe222..00000000 --- a/apps/agent/src/components/Modal/movableModal.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import { FC } from "react" -import { createPortal } from "react-dom" -import { Rnd } from "react-rnd" -import { useWindowSize } from "react-use" -import { BuilderModal } from "@/components/Modal" -import { MovableModalProps } from "@/components/Modal/interface" - -export const MovableModal: FC = (props) => { - const { - bodyContent, - title, - footerContent, - onClose, - defaultPosition, - docLink, - } = props - const { width, height } = useWindowSize() - - return createPortal( - - - , - document.body, - ) -} - -MovableModal.displayName = "MovableModal" diff --git a/apps/agent/src/components/Modal/style.ts b/apps/agent/src/components/Modal/style.ts deleted file mode 100644 index cc662cb7..00000000 --- a/apps/agent/src/components/Modal/style.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { css } from "@emotion/react" -import { getColor } from "@illa-public/color-scheme" - -export const applyModalWrapperStyle = (w?: number, h?: number) => css` - width: ${w != undefined ? `${w}px` : "100%"}; - height: ${w != undefined ? `${h}px` : "100%"}; - background-color: ${getColor("white", "01")}; - border: 1px solid ${getColor("grayBlue", "08")}; - box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08); - border-radius: 8px; - display: flex; - flex-direction: column; -` diff --git a/apps/agent/src/components/Modal/utils/stopDragAndDrop.ts b/apps/agent/src/components/Modal/utils/stopDragAndDrop.ts deleted file mode 100644 index 41a92fb9..00000000 --- a/apps/agent/src/components/Modal/utils/stopDragAndDrop.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { MouseEvent } from "react" - -export const stopDragAndDrop = (e: MouseEvent) => { - e.stopPropagation() -} diff --git a/apps/agent/src/components/PreviewChat/MessageList/components/MessageListItem/index.tsx b/apps/agent/src/components/PreviewChat/MessageList/components/MessageListItem/index.tsx new file mode 100644 index 00000000..8f1fb1c9 --- /dev/null +++ b/apps/agent/src/components/PreviewChat/MessageList/components/MessageListItem/index.tsx @@ -0,0 +1,46 @@ +import { FC } from "react" +import AIAgentMessage from "@/page/WorkSpace/AI/components/AIAgentMessage" +import GroupAgentMessage from "@/page/WorkSpace/AI/components/GroupAgentMessage" +import UserMessage from "@/page/WorkSpace/AI/components/UserMessage" +import { isGroupMessage } from "@/utils/agent/typeHelper" +import { SenderType } from "../../../interface" +import { IMessageListItemProps } from "./interface" + +const MessageListItem: FC = ({ + message, + currentUserID, + isReceiving, + isLastMessage, +}) => { + if (isGroupMessage(message)) { + return ( + + ) + } else if ( + message.sender.senderType === SenderType.USER && + message.sender.senderID === currentUserID + ) { + return ( + + ) + } else { + return ( + + ) + } +} + +export default MessageListItem diff --git a/apps/agent/src/components/PreviewChat/MessageList/components/MessageListItem/interface.ts b/apps/agent/src/components/PreviewChat/MessageList/components/MessageListItem/interface.ts new file mode 100644 index 00000000..45d0833a --- /dev/null +++ b/apps/agent/src/components/PreviewChat/MessageList/components/MessageListItem/interface.ts @@ -0,0 +1,8 @@ +import { ChatMessage, IGroupMessage } from "../../../interface" + +export interface IMessageListItemProps { + message: IGroupMessage | ChatMessage + isReceiving: boolean + isLastMessage: boolean + currentUserID: string +} diff --git a/apps/agent/src/components/PreviewChat/MessageList/index.tsx b/apps/agent/src/components/PreviewChat/MessageList/index.tsx index 8e7357a7..50426d74 100644 --- a/apps/agent/src/components/PreviewChat/MessageList/index.tsx +++ b/apps/agent/src/components/PreviewChat/MessageList/index.tsx @@ -1,53 +1,40 @@ import { forwardRef } from "react" -import { isGroupMessage } from "@/utils/agent/typeHelper" -import AIAgentMessage from "../../../page/WorkSpace/AI/components/AIAgentMessage" -import GroupAgentMessage from "../../../page/WorkSpace/AI/components/GroupAgentMessage" -import UserMessage from "../../../page/WorkSpace/AI/components/UserMessage" -import { SenderType } from "../interface" +import MessageItem from "./components/MessageListItem" import { IMessageListProps } from "./interface" import { chatContainerStyle, maxWidthStyle } from "./style" const MessageList = forwardRef( (props, ref) => { - const { handleScroll, chatMessages, isReceiving, currentUserID } = props + const { + handleScroll, + chatMessages, + isReceiving, + currentUserID, + currentRenderMessage, + } = props return (
- {chatMessages.map((message, i) => { - if (isGroupMessage(message)) { - return ( - - ) - } else if ( - message.sender.senderType === SenderType.USER && - message.sender.senderID === currentUserID - ) { - return ( - - ) - } else { - return ( - - ) - } - })} -
+ {chatMessages.map((message, i) => ( + + ))} - {/*
{messagesList}
*/} + {!!currentRenderMessage && ( + + )} +
) }, diff --git a/apps/agent/src/components/PreviewChat/MessageList/interface.ts b/apps/agent/src/components/PreviewChat/MessageList/interface.ts index 410bc5b3..24c012c8 100644 --- a/apps/agent/src/components/PreviewChat/MessageList/interface.ts +++ b/apps/agent/src/components/PreviewChat/MessageList/interface.ts @@ -6,4 +6,5 @@ export interface IMessageListProps { chatMessages: (IGroupMessage | ChatMessage)[] isReceiving: boolean currentUserID: string + currentRenderMessage: IGroupMessage | ChatMessage | null } diff --git a/apps/agent/src/components/PreviewChat/MessageList/style.ts b/apps/agent/src/components/PreviewChat/MessageList/style.ts index 48f8970a..354711fe 100644 --- a/apps/agent/src/components/PreviewChat/MessageList/style.ts +++ b/apps/agent/src/components/PreviewChat/MessageList/style.ts @@ -1,4 +1,5 @@ import { css } from "@emotion/react" +import { applyMobileStyle } from "@illa-public/utils" export const chatContainerStyle = css` display: flex; @@ -14,4 +15,7 @@ export const maxWidthStyle = css` width: 100%; max-width: 832px; padding: 0 16px; + ${applyMobileStyle(css` + padding: 0 20px; + `)} ` diff --git a/apps/agent/src/components/PreviewChat/index.tsx b/apps/agent/src/components/PreviewChat/index.tsx index 1e42be7a..154a94f8 100644 --- a/apps/agent/src/components/PreviewChat/index.tsx +++ b/apps/agent/src/components/PreviewChat/index.tsx @@ -22,7 +22,8 @@ import { export const PreviewChat: FC = (props) => { const { blockInput, onSendMessage, wsContextValue } = props - const { chatMessages, isReceiving, sendMessage } = wsContextValue + const { chatMessages, isReceiving, sendMessage, currentRenderMessage } = + wsContextValue const { data: currentUserInfo } = useGetUserInfoQuery(null) @@ -30,7 +31,6 @@ export const PreviewChat: FC = (props) => { const scrollDirectRef = useRef(SCROLL_DIRECTION.DOWN) const cacheLastScroll = useRef(0) - const cacheMessageLength = useRef(chatMessages.length) const handleClickStopGenerating = useCallback(() => { TipisTrack.track("click_stop_generate") @@ -57,20 +57,15 @@ export const PreviewChat: FC = (props) => { } useEffect(() => { - if (chatMessages.length === 0) { - scrollDirectRef.current = SCROLL_DIRECTION.DOWN - } - if (scrollDirectRef.current === SCROLL_DIRECTION.DOWN) { + if ( + !!currentRenderMessage && + scrollDirectRef.current === SCROLL_DIRECTION.DOWN + ) { chatRef.current?.scrollTo({ top: chatRef.current.scrollHeight, }) - } else { - if (cacheMessageLength.current !== chatMessages.length) { - scrollDirectRef.current = SCROLL_DIRECTION.DOWN - } } - cacheMessageLength.current = chatMessages.length - }, [chatMessages]) + }, [currentRenderMessage]) return (
@@ -80,6 +75,7 @@ export const PreviewChat: FC = (props) => { chatMessages={chatMessages} isReceiving={isReceiving} currentUserID={currentUserInfo?.userID ?? ""} + currentRenderMessage={currentRenderMessage} />
{blockInput ? ( diff --git a/apps/agent/src/components/PreviewChat/interface.ts b/apps/agent/src/components/PreviewChat/interface.ts index 02616e1e..2f057c53 100644 --- a/apps/agent/src/components/PreviewChat/interface.ts +++ b/apps/agent/src/components/PreviewChat/interface.ts @@ -77,6 +77,7 @@ export interface PreviewChatProps { onSendMessage: (cheatMessage: ChatMessage) => void wsContextValue: { chatMessages: (IGroupMessage | ChatMessage)[] + currentRenderMessage: IGroupMessage | ChatMessage | null isReceiving: boolean sendMessage: IChatSendMessage } diff --git a/apps/agent/src/components/PreviewChat/style.ts b/apps/agent/src/components/PreviewChat/style.ts index cb7e8f59..a8ece644 100644 --- a/apps/agent/src/components/PreviewChat/style.ts +++ b/apps/agent/src/components/PreviewChat/style.ts @@ -22,7 +22,7 @@ export const inputTextContainerStyle = css` flex: none; ${applyMobileStyle(css` border-top: 1px solid ${getColor("grayBlue", "09")}; - padding: 20px; + padding: 12px 20px; `)} ` diff --git a/apps/agent/src/components/TeamCard/pc/style.ts b/apps/agent/src/components/TeamCard/pc/style.ts index 17fc1f98..30af4517 100644 --- a/apps/agent/src/components/TeamCard/pc/style.ts +++ b/apps/agent/src/components/TeamCard/pc/style.ts @@ -21,6 +21,7 @@ export const cardIconAndTitleContainerStyle = css` align-items: center; gap: 16px; width: 100%; + overflow: hidden; ` export const cardIconContainerStyle = css` diff --git a/apps/agent/src/config/constants/schedule.ts b/apps/agent/src/config/constants/schedule.ts new file mode 100644 index 00000000..1f621856 --- /dev/null +++ b/apps/agent/src/config/constants/schedule.ts @@ -0,0 +1,270 @@ +import i18next from "i18next" +import { DAY_OF_WEEK } from "@illa-public/public-types" + +export const MONTH_OPTIONS = [ + { + label: i18next.t("flow.editor.trigger.schedule.jan"), + value: 1, + }, + { + label: i18next.t("flow.editor.trigger.schedule.feb"), + value: 2, + }, + { + label: i18next.t("flow.editor.trigger.schedule.mar"), + value: 3, + }, + { + label: i18next.t("flow.editor.trigger.schedule.apr"), + value: 4, + }, + { + label: i18next.t("flow.editor.trigger.schedule.may"), + value: 5, + }, + { + label: i18next.t("flow.editor.trigger.schedule.jun"), + value: 6, + }, + { + label: i18next.t("flow.editor.trigger.schedule.jul"), + value: 7, + }, + { + label: i18next.t("flow.editor.trigger.schedule.aug"), + value: 8, + }, + { + label: i18next.t("flow.editor.trigger.schedule.sep"), + value: 9, + }, + { + label: i18next.t("flow.editor.trigger.schedule.oct"), + value: 10, + }, + { + label: i18next.t("flow.editor.trigger.schedule.nov"), + value: 11, + }, + { + label: i18next.t("flow.editor.trigger.schedule.dec"), + value: 12, + }, +] + +export const BASE_DAY_OF_MONTH_OPTIONS = [ + { + label: i18next.t(`flow.editor.trigger.schedule.1st`), + value: "1", + }, + { + label: i18next.t(`flow.editor.trigger.schedule.2nd`), + value: "2", + }, + { + label: i18next.t(`flow.editor.trigger.schedule.3rd`), + value: "3", + }, + { + label: i18next.t(`flow.editor.trigger.schedule.4th`), + value: "4", + }, + { + label: i18next.t(`flow.editor.trigger.schedule.5th`), + value: "5", + }, + { + label: i18next.t(`flow.editor.trigger.schedule.6th`), + value: "6", + }, + { + label: i18next.t(`flow.editor.trigger.schedule.7th`), + value: "7", + }, + { + label: i18next.t(`flow.editor.trigger.schedule.8th`), + value: "8", + }, + { + label: i18next.t(`flow.editor.trigger.schedule.9th`), + value: "9", + }, + { + label: i18next.t(`flow.editor.trigger.schedule.10th`), + value: "10", + }, + { + label: i18next.t(`flow.editor.trigger.schedule.11th`), + value: "11", + }, + { + label: i18next.t(`flow.editor.trigger.schedule.12th`), + value: "12", + }, + { + label: i18next.t(`flow.editor.trigger.schedule.13th`), + value: "13", + }, + { + label: i18next.t(`flow.editor.trigger.schedule.14th`), + value: "14", + }, + { + label: i18next.t(`flow.editor.trigger.schedule.15th`), + value: "15", + }, + { + label: i18next.t(`flow.editor.trigger.schedule.16th`), + value: "16", + }, + { + label: i18next.t(`flow.editor.trigger.schedule.17th`), + value: "17", + }, + { + label: i18next.t(`flow.editor.trigger.schedule.18th`), + value: "18", + }, + { + label: i18next.t(`flow.editor.trigger.schedule.19th`), + value: "19", + }, + { + label: i18next.t(`flow.editor.trigger.schedule.20th`), + value: "20", + }, + { + label: i18next.t(`flow.editor.trigger.schedule.21st`), + value: "21", + }, + { + label: i18next.t(`flow.editor.trigger.schedule.22nd`), + value: "22", + }, + { + label: i18next.t(`flow.editor.trigger.schedule.23rd`), + value: "23", + }, + { + label: i18next.t(`flow.editor.trigger.schedule.24th`), + value: "24", + }, + { + label: i18next.t(`flow.editor.trigger.schedule.25th`), + value: "25", + }, + { + label: i18next.t(`flow.editor.trigger.schedule.26th`), + value: "26", + }, + { + label: i18next.t(`flow.editor.trigger.schedule.27th`), + value: "27", + }, + { + label: i18next.t(`flow.editor.trigger.schedule.28th`), + value: "28", + }, + { + label: i18next.t(`flow.editor.trigger.schedule.29th`), + value: "29", + }, +] + +export const DAY_OF_MONTH_OPTIONS = [ + ...BASE_DAY_OF_MONTH_OPTIONS, + { + label: i18next.t("flow.editor.trigger.schedule.30th"), + value: "30", + }, + { + label: i18next.t("flow.editor.trigger.schedule.31st"), + value: "31", + }, + { + label: i18next.t("flow.editor.trigger.schedule.last_day_o"), + value: "lastDay", + }, +] + +export const DAY_OF_WEEK_OPTIONS = [ + { + label: i18next.t("flow.editor.trigger.schedule.monday"), + value: DAY_OF_WEEK.MONDAY, + }, + { + label: i18next.t("flow.editor.trigger.schedule.tuesday"), + value: DAY_OF_WEEK.TUESDAY, + }, + { + label: i18next.t("flow.editor.trigger.schedule.wednesday"), + value: DAY_OF_WEEK.WEDNESDAY, + }, + { + label: i18next.t("flow.editor.trigger.schedule.thursday"), + value: DAY_OF_WEEK.THURSDAY, + }, + { + label: i18next.t("flow.editor.trigger.schedule.friday"), + value: DAY_OF_WEEK.FRIDAY, + }, + { + label: i18next.t("flow.editor.trigger.schedule.saturday"), + value: DAY_OF_WEEK.SATURDAY, + }, + { + label: i18next.t("flow.editor.trigger.schedule.sunday"), + value: DAY_OF_WEEK.SUNDAY, + }, +] + +export const MINUTE_OPTIONS = Array.from({ length: 60 }, (_, i) => ({ + label: `${i}`, + value: i, +})) + +const JAN_DAYS = [ + ...BASE_DAY_OF_MONTH_OPTIONS, + { + label: i18next.t("flow.editor.trigger.schedule.30th"), + value: "30", + }, + { + label: i18next.t("flow.editor.trigger.schedule.31st"), + value: "31", + }, +] + +const FEB_DAYS = [ + ...BASE_DAY_OF_MONTH_OPTIONS, + { + label: i18next.t("flow.editor.trigger.schedule.last_day_feb"), + value: "lastDay", + }, +] + +const APR_DAYS = [ + ...BASE_DAY_OF_MONTH_OPTIONS, + { + label: i18next.t("flow.editor.trigger.schedule.30th"), + value: "30", + }, +] + +export const DATE_OPTIONS_MAP: Record< + number, + { label: string; value: string }[] +> = { + [1]: JAN_DAYS, + [2]: FEB_DAYS, + [3]: JAN_DAYS, + [4]: APR_DAYS, + [5]: JAN_DAYS, + [6]: APR_DAYS, + [7]: JAN_DAYS, + [8]: JAN_DAYS, + [9]: APR_DAYS, + [10]: JAN_DAYS, + [11]: APR_DAYS, + [12]: JAN_DAYS, +} diff --git a/apps/agent/src/main.tsx b/apps/agent/src/main.tsx index 781e972c..fec49749 100644 --- a/apps/agent/src/main.tsx +++ b/apps/agent/src/main.tsx @@ -10,6 +10,7 @@ import "@/i18n" import { initI18n } from "@/i18n" import App from "./App.tsx" import store from "./redux/store.ts" +import { TIPISStorage } from "./utils/storage/index.ts" if (import.meta.env.ILLA_APP_ENV === "production") { Sentry.init({ @@ -21,16 +22,16 @@ if (import.meta.env.ILLA_APP_ENV === "production") { if (import.meta.env.ILLA_MUI_LICENSE) { LicenseInfo.setLicenseKey(import.meta.env.ILLA_MUI_LICENSE) } - initGTMConfig() initI18n().then(() => { createRoot(document.getElementById("root")!).render( diff --git a/apps/agent/src/page/SettingPage/account/password/components/FirstSetPassword/index.tsx b/apps/agent/src/page/SettingPage/account/password/components/FirstSetPassword/index.tsx index b728756c..75db982d 100644 --- a/apps/agent/src/page/SettingPage/account/password/components/FirstSetPassword/index.tsx +++ b/apps/agent/src/page/SettingPage/account/password/components/FirstSetPassword/index.tsx @@ -6,7 +6,6 @@ import { ERROR_FLAG, isILLAAPiError } from "@illa-public/illa-net" import { LayoutAutoChange } from "@illa-public/layout-auto-change" import { useGetUserInfoQuery, - useSendVerificationCodeToEmailMutation, useSetPasswordMutation, } from "@illa-public/user-data" import { TIPISStorage } from "@/utils/storage" @@ -20,7 +19,6 @@ const FirstSetPassword = () => { const { message } = App.useApp() const [showCountDown, setShowCountDown] = useState(false) const [setPassword] = useSetPasswordMutation() - const [sendVerificationCodeToEmail] = useSendVerificationCodeToEmailMutation() const firstSetPasswordForm = useForm({ defaultValues: { email: userInfo?.email, @@ -72,21 +70,12 @@ const FirstSetPassword = () => { } } - const handleSendEmail = async (email: string) => { - try { - await sendVerificationCodeToEmail({ - email, - usage: "forgetpwd", - }) - } catch (e) {} - } return ( { mobilePage={ showCountDown: boolean onCountDownChange: (showCountDown: boolean) => void - sendEmail: (email: string) => Promise } diff --git a/apps/agent/src/page/SettingPage/account/password/components/FirstSetPassword/mobile/index.tsx b/apps/agent/src/page/SettingPage/account/password/components/FirstSetPassword/mobile/index.tsx index 4ab19a25..1982c34a 100644 --- a/apps/agent/src/page/SettingPage/account/password/components/FirstSetPassword/mobile/index.tsx +++ b/apps/agent/src/page/SettingPage/account/password/components/FirstSetPassword/mobile/index.tsx @@ -10,8 +10,7 @@ import { controllerContainerStyle, formContainerStyle } from "./style" const { Password } = Input const SetPasswordMobile: FC = (props) => { - const { onSubmit, errorMsg, showCountDown, onCountDownChange, sendEmail } = - props + const { onSubmit, errorMsg, showCountDown, onCountDownChange } = props const { t } = useTranslation() const { handleSubmit, control, formState } = useFormContext() @@ -41,7 +40,6 @@ const SetPasswordMobile: FC = (props) => { usage="forgetpwd" showCountDown={showCountDown} onCountDownChange={onCountDownChange} - sendEmail={sendEmail} /> } placeholder={t( diff --git a/apps/agent/src/page/SettingPage/account/password/components/FirstSetPassword/pc/index.tsx b/apps/agent/src/page/SettingPage/account/password/components/FirstSetPassword/pc/index.tsx index 8a65eb8b..ac5d6c4c 100644 --- a/apps/agent/src/page/SettingPage/account/password/components/FirstSetPassword/pc/index.tsx +++ b/apps/agent/src/page/SettingPage/account/password/components/FirstSetPassword/pc/index.tsx @@ -18,8 +18,7 @@ const { Password } = Input const SetPasswordPC: FC = (props) => { const { t } = useTranslation() - const { onSubmit, errorMsg, showCountDown, onCountDownChange, sendEmail } = - props + const { onSubmit, errorMsg, showCountDown, onCountDownChange } = props const { handleSubmit, control, formState, watch } = useFormContext() const { newPassword, verificationCode } = watch() @@ -64,7 +63,6 @@ const SetPasswordPC: FC = (props) => { usage="forgetpwd" showCountDown={showCountDown} onCountDownChange={onCountDownChange} - sendEmail={sendEmail} /> } placeholder={t( diff --git a/apps/agent/src/page/SettingPage/mobileSettingNavPage/component/Menu/index.tsx b/apps/agent/src/page/SettingPage/mobileSettingNavPage/component/Menu/index.tsx index fb820241..b5cd9581 100644 --- a/apps/agent/src/page/SettingPage/mobileSettingNavPage/component/Menu/index.tsx +++ b/apps/agent/src/page/SettingPage/mobileSettingNavPage/component/Menu/index.tsx @@ -8,15 +8,13 @@ import { menuItemStyle, rightIconStyle } from "./style" const Item: FC = ({ onClick, path, label }) => { const navigate = useNavigate() - const handleClick = (key: string) => { - navigate(key) + const handleClick = (path: string) => { + onClick?.() + path && navigate(path) } return ( -
(onClick ? onClick() : handleClick(path))} - > +
handleClick(path)}>
{label}
diff --git a/apps/agent/src/page/User/Register/index.tsx b/apps/agent/src/page/User/Register/index.tsx index d276321c..05d26628 100644 --- a/apps/agent/src/page/User/Register/index.tsx +++ b/apps/agent/src/page/User/Register/index.tsx @@ -10,10 +10,7 @@ import { TIPIS_TRACK_PUBLIC_PAGE_NAME, TipisTrack, } from "@illa-public/track-utils" -import { - useSendVerificationCodeToEmailMutation, - useSignUpMutation, -} from "@illa-public/user-data" +import { useSignUpMutation } from "@illa-public/user-data" import { setAuthToken } from "@illa-public/utils" import { useNavigateTargetWorkspace } from "@/utils/routeHelper/hook" import { useRedirectToRedirectURL } from "@/utils/routeHelper/redirectHook" @@ -32,7 +29,6 @@ const RegisterPage: FC = () => { const paramsRedirectURL = searchParams.get("redirectURL") const [signUp] = useSignUpMutation() - const [sendVerificationCodeToEmail] = useSendVerificationCodeToEmailMutation() const navigateToWorkspace = useNavigateTargetWorkspace() const redirect = useRedirectToRedirectURL() @@ -115,15 +111,6 @@ const RegisterPage: FC = () => { } } - const handleSendEmail = async (email: string) => { - try { - await sendVerificationCodeToEmail({ - email, - usage: "signup", - }) - } catch (e) {} - } - useEffect(() => { TipisTrack.pageViewTrack(TIPIS_TRACK_PUBLIC_PAGE_NAME.SIGNUP) return () => { @@ -147,7 +134,6 @@ const RegisterPage: FC = () => { loading={loading} errorMsg={errorMsg} onSubmit={onSubmit} - sendEmail={handleSendEmail} lockedEmail={email ?? searchParams.get("email") ?? ""} showCountDown={showCountDown} onCountDownChange={setShowCountDown} @@ -158,7 +144,6 @@ const RegisterPage: FC = () => { loading={loading} errorMsg={errorMsg} onSubmit={onSubmit} - sendEmail={handleSendEmail} lockedEmail={email ?? searchParams.get("email") ?? ""} showCountDown={showCountDown} onCountDownChange={setShowCountDown} diff --git a/apps/agent/src/page/User/Register/interface.ts b/apps/agent/src/page/User/Register/interface.ts index d783b022..cc7363ba 100644 --- a/apps/agent/src/page/User/Register/interface.ts +++ b/apps/agent/src/page/User/Register/interface.ts @@ -7,7 +7,6 @@ export interface RegisterProps { loading: boolean errorMsg: RegisterErrorMsg onSubmit: SubmitHandler - sendEmail: (email: string) => Promise showCountDown: boolean lockedEmail?: string | null onCountDownChange: (showCountDown: boolean) => void diff --git a/apps/agent/src/page/User/Register/mobile/index.tsx b/apps/agent/src/page/User/Register/mobile/index.tsx index 8df504b7..6526caea 100644 --- a/apps/agent/src/page/User/Register/mobile/index.tsx +++ b/apps/agent/src/page/User/Register/mobile/index.tsx @@ -36,7 +36,6 @@ export const MobileRegister: FC = (props) => { loading, showCountDown, onCountDownChange, - sendEmail, } = props const { t } = useTranslation() const navigate = useNavigate() @@ -197,7 +196,6 @@ export const MobileRegister: FC = (props) => { usage="signup" showCountDown={showCountDown} onCountDownChange={onCountDownChange} - sendEmail={sendEmail} /> } placeholder={t("page.user.sign_up.fields.verification_code")} diff --git a/apps/agent/src/page/User/Register/pc/index.tsx b/apps/agent/src/page/User/Register/pc/index.tsx index ac2e873a..8d35ca67 100644 --- a/apps/agent/src/page/User/Register/pc/index.tsx +++ b/apps/agent/src/page/User/Register/pc/index.tsx @@ -39,7 +39,6 @@ export const PCRegister: FC = (props) => { loading, showCountDown, onCountDownChange, - sendEmail, } = props const navigate = useNavigate() const { handleSubmit, control, formState, trigger } = @@ -206,7 +205,6 @@ export const PCRegister: FC = (props) => { usage="signup" showCountDown={showCountDown} onCountDownChange={onCountDownChange} - sendEmail={sendEmail} /> } placeholder={t( diff --git a/apps/agent/src/page/User/ResetPassword/index.tsx b/apps/agent/src/page/User/ResetPassword/index.tsx index afea139b..047ca072 100644 --- a/apps/agent/src/page/User/ResetPassword/index.tsx +++ b/apps/agent/src/page/User/ResetPassword/index.tsx @@ -15,10 +15,7 @@ import { TIPIS_TRACK_PUBLIC_PAGE_NAME, TipisTrack, } from "@illa-public/track-utils" -import { - useForgetPasswordMutation, - useSendVerificationCodeToEmailMutation, -} from "@illa-public/user-data" +import { useForgetPasswordMutation } from "@illa-public/user-data" import { LOGIN_PATH } from "@/utils/routeHelper" import { TIPISStorage } from "@/utils/storage" import { ResetPwdFields } from "../interface" @@ -32,7 +29,6 @@ export const ResetPasswordPage: FC = () => { const [searchParams] = useSearchParams() const { t } = useTranslation() const [forgetPassword] = useForgetPasswordMutation() - const [sendVerificationCodeToEmail] = useSendVerificationCodeToEmailMutation() const formProps = useForm({ mode: "onSubmit", @@ -93,16 +89,6 @@ export const ResetPasswordPage: FC = () => { } } - const handleSendEmail = async (email: string) => { - try { - const verificationToken = await sendVerificationCodeToEmail({ - email, - usage: "forgetpwd", - }).unwrap() - TIPISStorage.setSessionStorage("verificationToken", verificationToken) - } catch (e) {} - } - useEffect(() => { TipisTrack.pageViewTrack(TIPIS_TRACK_PUBLIC_PAGE_NAME.FORGET_PASSWORD) return () => { @@ -126,7 +112,6 @@ export const ResetPasswordPage: FC = () => { loading={loading} errorMsg={errorMsg} onSubmit={onSubmit} - sendEmail={handleSendEmail} lockedEmail={email ?? searchParams.get("email") ?? ""} showCountDown={showCountDown} onCountDownChange={setShowCountDown} @@ -137,7 +122,6 @@ export const ResetPasswordPage: FC = () => { loading={loading} errorMsg={errorMsg} onSubmit={onSubmit} - sendEmail={handleSendEmail} lockedEmail={email ?? searchParams.get("email") ?? ""} showCountDown={showCountDown} onCountDownChange={setShowCountDown} diff --git a/apps/agent/src/page/User/ResetPassword/interface.ts b/apps/agent/src/page/User/ResetPassword/interface.ts index ff667328..bceb2683 100644 --- a/apps/agent/src/page/User/ResetPassword/interface.ts +++ b/apps/agent/src/page/User/ResetPassword/interface.ts @@ -12,5 +12,4 @@ export interface ResetProps { loading: boolean errorMsg: ResetPwdErrorMsg onSubmit: SubmitHandler - sendEmail: (email: string) => Promise } diff --git a/apps/agent/src/page/User/ResetPassword/mobile/index.tsx b/apps/agent/src/page/User/ResetPassword/mobile/index.tsx index 20e01aaf..9e139aab 100644 --- a/apps/agent/src/page/User/ResetPassword/mobile/index.tsx +++ b/apps/agent/src/page/User/ResetPassword/mobile/index.tsx @@ -33,7 +33,6 @@ export const MobileReset: FC = (props) => { resetLabel, showCountDown, onCountDownChange, - sendEmail, } = props const { t } = useTranslation() const navigate = useNavigate() @@ -115,7 +114,6 @@ export const MobileReset: FC = (props) => { usage="forgetpwd" showCountDown={showCountDown} onCountDownChange={onCountDownChange} - sendEmail={sendEmail} /> } placeholder={t( diff --git a/apps/agent/src/page/User/ResetPassword/pc/index.tsx b/apps/agent/src/page/User/ResetPassword/pc/index.tsx index 09948c71..0e2ca294 100644 --- a/apps/agent/src/page/User/ResetPassword/pc/index.tsx +++ b/apps/agent/src/page/User/ResetPassword/pc/index.tsx @@ -36,7 +36,6 @@ export const PCReset: FC = (props) => { resetLabel, showCountDown, onCountDownChange, - sendEmail, } = props const { handleSubmit, control, formState } = useFormContext() @@ -130,7 +129,6 @@ export const PCReset: FC = (props) => { usage="forgetpwd" showCountDown={showCountDown} onCountDownChange={onCountDownChange} - sendEmail={sendEmail} /> } placeholder={t( diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/AvatarUploader/index.tsx b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/AvatarUploader/index.tsx index f76c8f25..e7a7e3f6 100644 --- a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/AvatarUploader/index.tsx +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/AvatarUploader/index.tsx @@ -29,10 +29,7 @@ const AvatarUploader: FC = memo(() => { control={control} shouldUnregister={false} render={({ field }) => ( - + { const { t } = useTranslation() const { control } = useFormContext() - const { errors } = useFormState({ - control: control, - }) return ( { }, }} shouldUnregister={false} - render={({ field }) => ( + render={({ field, fieldState }) => ( { + return ( + } + mobilePage={} + /> + ) +} + +export default FunctionsEditor diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/interface.ts b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/interface.ts new file mode 100644 index 00000000..e69de29b diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/mobile/components/EmptyFunctionContentMobile/index.tsx b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/mobile/components/EmptyFunctionContentMobile/index.tsx new file mode 100644 index 00000000..ce307150 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/mobile/components/EmptyFunctionContentMobile/index.tsx @@ -0,0 +1,19 @@ +import Icon from "@ant-design/icons" +import { FC } from "react" +import { useTranslation } from "react-i18next" +import EmptyTeamIcon from "@/assets/workspace/emptyTeam.svg?react" +import { containerStyle, emptyIconStyle, textStyle } from "./style" + +const EmptyFunctionContentMobile: FC = () => { + const { t } = useTranslation() + return ( +
+ + + {t("editor.action.form.title.general.no_function_mobile")} + +
+ ) +} + +export default EmptyFunctionContentMobile diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/mobile/components/EmptyFunctionContentMobile/style.ts b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/mobile/components/EmptyFunctionContentMobile/style.ts new file mode 100644 index 00000000..1a22784b --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/mobile/components/EmptyFunctionContentMobile/style.ts @@ -0,0 +1,25 @@ +import { css } from "@emotion/react" + +export const containerStyle = css` + width: 100%; + display: flex; + flex-direction: column; + align-items: center; + gap: 16px; + justify-content: center; + padding-top: 110px; +` + +export const emptyIconStyle = css` + font-size: 80px; + width: 80px; + height: 80px; + border-radius: 50%; +` + +export const textStyle = css` + text-align: center; + font-size: 14px; + font-weight: 500; + line-height: 17px; +` diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/mobile/components/SelectDrawer/index.tsx b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/mobile/components/SelectDrawer/index.tsx new file mode 100644 index 00000000..10cddcf5 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/mobile/components/SelectDrawer/index.tsx @@ -0,0 +1,58 @@ +import Icon from "@ant-design/icons" +import { Drawer } from "antd" +import { FC } from "react" +import { useTranslation } from "react-i18next" +import { CloseIcon } from "@illa-public/icon" +import { useGetAllAIToolsListQuery } from "@/redux/services/aiToolsAPI" +import { useGetCurrentTeamInfo } from "@/utils/team" +import EmptyFunctionContentMobile from "../EmptyFunctionContentMobile" +import SelectModalContentMobile from "../SelectModalContentMobile" +import { ISelectDrawerProps } from "./interface" +import { closeIconStyle, titleStyle } from "./style" + +const SelectDrawer: FC = ({ + selectModalVisible, + onCancel, + fieldAiTools, + handleValueChange, +}) => { + const { t } = useTranslation() + const teamInfo = useGetCurrentTeamInfo()! + const { data, isLoading } = useGetAllAIToolsListQuery(teamInfo.id) + if (isLoading) return null + return ( + + {t("editor.action.form.title.general.add_functions")} + + } + width="100%" + height="100%" + placement="bottom" + onClose={onCancel} + closeIcon={} + styles={{ + body: { + padding: 0, + }, + }} + > + {Array.isArray(data?.aiToolList) && data?.aiToolList.length > 0 ? ( + + ) : ( + + )} + + ) +} + +export default SelectDrawer diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/mobile/components/SelectDrawer/interface.ts b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/mobile/components/SelectDrawer/interface.ts new file mode 100644 index 00000000..8907ca72 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/mobile/components/SelectDrawer/interface.ts @@ -0,0 +1,8 @@ +import { IEditorAIToolsVO } from "@illa-public/public-types" + +export interface ISelectDrawerProps { + selectModalVisible: boolean + onCancel: () => void + fieldAiTools: IEditorAIToolsVO[] + handleValueChange: (values: IEditorAIToolsVO[]) => void +} diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/mobile/components/SelectDrawer/style.ts b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/mobile/components/SelectDrawer/style.ts new file mode 100644 index 00000000..c2735b1f --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/mobile/components/SelectDrawer/style.ts @@ -0,0 +1,12 @@ +import { css } from "@emotion/react" +import { getColor } from "@illa-public/color-scheme" + +export const titleStyle = css` + display: flex; + justify-content: center; + text-align: center; +` + +export const closeIconStyle = css` + color: ${getColor("grayBlue", "02")}; +` diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/mobile/components/SelectModalContentMobile/index.tsx b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/mobile/components/SelectModalContentMobile/index.tsx new file mode 100644 index 00000000..8bbab7ea --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/mobile/components/SelectModalContentMobile/index.tsx @@ -0,0 +1,64 @@ +import { FC, useMemo, useState } from "react" +import { useTranslation } from "react-i18next" +import { IEditorAIToolsVO } from "@illa-public/public-types" +import BlackButton from "@/components/BlackButton" +import ModalFunctionItem from "../../../modules/ModalFunctionItem" +import { ISelectModalContentMobileProps } from "./interface" +import { + actionContainerStyle, + itemsContainerStyle, + modalContentContainerStyle, +} from "./style" + +const SelectModalContentMobile: FC = ({ + onCancel, + onConfirm, + functions, + fieldFunctions = [], +}) => { + const { t } = useTranslation() + const [selectedItems, setSelectedItems] = + useState(fieldFunctions) + + const selectIDs = useMemo(() => { + return selectedItems.map((item) => item.aiToolID) + }, [selectedItems]) + + const handleOnConfirm = () => { + onCancel() + onConfirm(selectedItems) + } + + const handleSelected = (checked: boolean, aiToolID: string) => { + if (checked) { + const functionItem = functions.find((item) => item.aiToolID === aiToolID) + !!functionItem && setSelectedItems((prev) => [...prev, functionItem]) + } else { + setSelectedItems((prev) => + prev.filter((item) => item.aiToolID !== aiToolID), + ) + } + } + return ( +
+
+ {functions.map((item) => ( + + ))} +
+
+ + {t("editor.action.form.button.general.confirm")}{" "} + {selectIDs.length > 0 ? `(${selectIDs.length})` : ""} + +
+
+ ) +} + +export default SelectModalContentMobile diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/mobile/components/SelectModalContentMobile/interface.ts b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/mobile/components/SelectModalContentMobile/interface.ts new file mode 100644 index 00000000..68d8a7ef --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/mobile/components/SelectModalContentMobile/interface.ts @@ -0,0 +1,8 @@ +import { IEditorAIToolsVO } from "@illa-public/public-types" + +export interface ISelectModalContentMobileProps { + onCancel: () => void + onConfirm: (value: IEditorAIToolsVO[]) => void + functions: IEditorAIToolsVO[] + fieldFunctions: IEditorAIToolsVO[] +} diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/mobile/components/SelectModalContentMobile/style.ts b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/mobile/components/SelectModalContentMobile/style.ts new file mode 100644 index 00000000..c64cb4c0 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/mobile/components/SelectModalContentMobile/style.ts @@ -0,0 +1,25 @@ +import { css } from "@emotion/react" +import { getColor } from "@illa-public/color-scheme" + +export const modalContentContainerStyle = css` + width: 100%; + height: 100%; + display: flex; + flex-direction: column; +` + +export const itemsContainerStyle = css` + width: 100%; + flex: 1; + padding-top: 16px; + overflow-y: auto; +` + +export const actionContainerStyle = css` + width: 100%; + display: flex; + padding: 12px 10px; + gap: 8px; + flex: none; + border-top: 1px solid ${getColor("grayBlue", "08")}; +` diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/mobile/index.tsx b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/mobile/index.tsx new file mode 100644 index 00000000..d7daa969 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/mobile/index.tsx @@ -0,0 +1,98 @@ +import { Typography } from "antd" +import { FC, memo, useState } from "react" +import { Controller, useFormContext, useWatch } from "react-hook-form" +import { Trans, useTranslation } from "react-i18next" +import { IEditorAIToolsVO } from "@illa-public/public-types" +import LayoutBlock from "@/Layout/Form/LayoutBlock" +import { IAgentForm } from "../../../interface" +import { FUNCTION_LEARN_MORE_LINK } from "../constants" +import AddToolsButton from "../modules/AddToolsButton" +import EditorFunctionItem from "../modules/EditorFunctionItem" +import SelectDrawer from "./components/SelectDrawer" +import { containerStyle, functionContainerStyle } from "./style" + +const FunctionsEditorMobile: FC = memo(() => { + const { t } = useTranslation() + + const { control, getValues, setValue } = useFormContext() + const [selectModalVisible, setSelectModalVisible] = useState(false) + + const [fieldAiTools] = useWatch({ + control, + name: ["aiTools"], + }) + + const handleValueChange = (values: IEditorAIToolsVO[]) => { + setValue("aiTools", values, { shouldDirty: true }) + } + + const handleRemoveFunction = (aiToolID: string) => { + const aiTools = getValues("aiTools") + setValue( + "aiTools", + aiTools.filter((item) => item.aiToolID !== aiToolID), + { shouldDirty: true }, + ) + } + + const handleOpenSelectModal = async () => { + setSelectModalVisible(true) + } + + return ( + <> + ( + , + ]} + /> + } + > +
+
+ {field.value?.map((item) => ( + + ))} +
+ +
+
+ )} + /> + {selectModalVisible && ( + setSelectModalVisible(false)} + fieldAiTools={fieldAiTools} + handleValueChange={handleValueChange} + /> + )} + + ) +}) + +FunctionsEditorMobile.displayName = "FunctionsEditorMobile" + +export default FunctionsEditorMobile diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/mobile/style.ts b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/mobile/style.ts new file mode 100644 index 00000000..9116b7e2 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/mobile/style.ts @@ -0,0 +1,14 @@ +import { css } from "@emotion/react" + +export const containerStyle = css` + width: 100%; + padding-bottom: 8px; +` + +export const functionContainerStyle = css` + width: 100%; + padding-bottom: 8px; + gap: 16px; + display: flex; + flex-direction: column; +` diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/modules/AddToolsButton/index.tsx b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/modules/AddToolsButton/index.tsx new file mode 100644 index 00000000..4dabf1f8 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/modules/AddToolsButton/index.tsx @@ -0,0 +1,39 @@ +import Icon from "@ant-design/icons" +import { Button } from "antd" +import { FC } from "react" +import { useTranslation } from "react-i18next" +import { AddIcon } from "@illa-public/icon" +import BlackButton from "@/components/BlackButton" +import { IAddToolsButtonProps } from "./interface" + +const AddToolsButton: FC = ({ + toolsLength, + handleOpenSelectModal, +}) => { + const { t } = useTranslation() + return toolsLength > 0 ? ( + } + onClick={handleOpenSelectModal} + > + {t("editor.action.panel.btn.new")} + + ) : ( + + ) +} + +export default AddToolsButton diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/modules/AddToolsButton/interface.ts b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/modules/AddToolsButton/interface.ts new file mode 100644 index 00000000..5f240949 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/modules/AddToolsButton/interface.ts @@ -0,0 +1,4 @@ +export interface IAddToolsButtonProps { + toolsLength: number + handleOpenSelectModal: () => void +} diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/modules/EditorFunctionItem/index.tsx b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/modules/EditorFunctionItem/index.tsx new file mode 100644 index 00000000..5ce22fbf --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/modules/EditorFunctionItem/index.tsx @@ -0,0 +1,93 @@ +import Icon from "@ant-design/icons" +import { App, Button, Image } from "antd" +import { FC } from "react" +import { useFormContext } from "react-hook-form" +import { useTranslation } from "react-i18next" +import { useSelector } from "react-redux" +import { useNavigate } from "react-router-dom" +import { DeleteIcon, PenIcon } from "@illa-public/icon" +import { TipisTrack } from "@illa-public/track-utils" +import { IAgentForm } from "@/page/WorkSpace/AI/AIAgent/interface" +import { getCurrentTabID } from "@/redux/ui/recentTab/selector" +import { + CREATE_FUNCTION_FROM_SINGLE, + CREATE_FUNCTION_FROM_SINGLE_KEY, + CREATE_FUNCTION_FROM_TAB_KEY, + getEditFunctionPath, +} from "@/utils/routeHelper" +import { useGetCurrentTeamInfo } from "@/utils/team" +import { IEditorAIToolsVOItemProps } from "./interface" +import { functionItemContainerStyle, functionNameStyle } from "./style" + +const EditorFunctionItem: FC = ({ + aiToolID, + name, + config, + isMobile, + handleRemoveItem, +}) => { + const { t } = useTranslation() + const navigate = useNavigate() + const teamInfo = useGetCurrentTeamInfo() + const { getValues } = useFormContext() + const { modal } = App.useApp() + const currentTabID = useSelector(getCurrentTabID) + const handleClickEdit = () => { + if (!teamInfo) return + TipisTrack.track("tipi_add_function_edit") + const searchParams = new URLSearchParams() + const from = !!getValues("aiAgentID") + ? CREATE_FUNCTION_FROM_SINGLE.EDIT_TIPIS + : CREATE_FUNCTION_FROM_SINGLE.CREATE_TIPIS + + searchParams.append(CREATE_FUNCTION_FROM_SINGLE_KEY, from) + searchParams.append(CREATE_FUNCTION_FROM_TAB_KEY, currentTabID) + navigate( + `${getEditFunctionPath(teamInfo.identifier, aiToolID)}?${searchParams.toString()}`, + ) + } + + const handleClickRemove = () => { + modal.confirm({ + title: t("homepage.edit_tipi.modal.delete_function.title"), + content: t("homepage.edit_tipi.modal.delete_function.desc"), + cancelText: t("homepage.edit_tipi.modal.delete_function.cancel"), + okText: t("homepage.edit_tipi.modal.delete_function.confirm"), + okButtonProps: { + type: "primary", + danger: true, + }, + onOk: () => { + handleRemoveItem(aiToolID) + }, + }) + } + + return ( +
+ + {name} + {!isMobile && ( +
+ ) +} +export default EditorFunctionItem diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/modules/EditorFunctionItem/interface.ts b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/modules/EditorFunctionItem/interface.ts new file mode 100644 index 00000000..742041b4 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/modules/EditorFunctionItem/interface.ts @@ -0,0 +1,6 @@ +import { IEditorAIToolsVO } from "@illa-public/public-types" + +export interface IEditorAIToolsVOItemProps extends IEditorAIToolsVO { + isMobile?: boolean + handleRemoveItem: (functionID: string) => void +} diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/modules/EditorFunctionItem/style.ts b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/modules/EditorFunctionItem/style.ts new file mode 100644 index 00000000..90ab34d4 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/modules/EditorFunctionItem/style.ts @@ -0,0 +1,18 @@ +import { css } from "@emotion/react" +import { getColor } from "@illa-public/color-scheme" + +export const functionItemContainerStyle = css` + display: flex; + align-items: center; + gap: 8px; +` + +export const functionNameStyle = css` + flex: 1; + display: flex; + align-items: center; + font-size: 14px; + font-weight: 500; + line-height: 22px; + color: ${getColor("grayBlue", "02")}; +` diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/modules/ModalFunctionItem/index.tsx b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/modules/ModalFunctionItem/index.tsx new file mode 100644 index 00000000..c171dc8e --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/modules/ModalFunctionItem/index.tsx @@ -0,0 +1,41 @@ +import { Checkbox, Image } from "antd" +import { CheckboxChangeEvent } from "antd/es/checkbox" +import { FC } from "react" +import { IModalFunctionItemProps } from "./interface" +import { + functionDescStyle, + functionInfoStyle, + functionItemContainerStyle, + functionNameStyle, +} from "./style" + +const ModalFunctionItem: FC = ({ + aiToolID, + name, + description, + config, + handleSelected, + checked, +}) => { + const onSelectChange = (e: CheckboxChangeEvent) => { + const v = e.target.checked + handleSelected(v, aiToolID) + } + return ( + + ) +} +export default ModalFunctionItem diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/modules/ModalFunctionItem/interface.ts b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/modules/ModalFunctionItem/interface.ts new file mode 100644 index 00000000..d3948588 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/modules/ModalFunctionItem/interface.ts @@ -0,0 +1,6 @@ +import { IEditorAIToolsVO } from "@illa-public/public-types" + +export interface IModalFunctionItemProps extends IEditorAIToolsVO { + handleSelected: (checked: boolean, aiToolID: string) => void + checked: boolean +} diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/modules/ModalFunctionItem/style.ts b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/modules/ModalFunctionItem/style.ts new file mode 100644 index 00000000..32397d0f --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/modules/ModalFunctionItem/style.ts @@ -0,0 +1,44 @@ +import { css } from "@emotion/react" +import { getColor } from "@illa-public/color-scheme" + +export const functionItemContainerStyle = css` + display: flex; + align-items: center; + gap: 16px; + padding: 16px 24px; + cursor: pointer; + border-bottom: 1px solid ${getColor("grayBlue", "08")}; +` + +export const functionInfoStyle = css` + flex: 1; + display: flex; + flex-direction: column; + overflow: hidden; +` + +const baseTextOverflowStyle = css` + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +` + +export const functionNameStyle = css` + display: flex; + align-items: center; + font-size: 14px; + font-weight: 500; + line-height: 22px; + color: ${getColor("grayBlue", "02")}; + ${baseTextOverflowStyle}; +` + +export const functionDescStyle = css` + display: flex; + align-items: center; + color: ${getColor("grayBlue", "03")}; + font-size: 12px; + font-weight: 400; + line-height: 18px; + ${baseTextOverflowStyle}; +` diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/pc/components/EmptyFunctionContentPC/index.tsx b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/pc/components/EmptyFunctionContentPC/index.tsx new file mode 100644 index 00000000..2240ab02 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/pc/components/EmptyFunctionContentPC/index.tsx @@ -0,0 +1,29 @@ +import Icon from "@ant-design/icons" +import { Button } from "antd" +import { FC } from "react" +import { useTranslation } from "react-i18next" +import { AddIcon } from "@illa-public/icon" +import EmptyTeamIcon from "@/assets/workspace/emptyTeam.svg?react" +import { IEmptyFunctionContentPCProps } from "./interface" +import { containerStyle, emptyIconStyle } from "./style" + +const EmptyFunctionContentPC: FC = ({ + handleClickCreate, +}) => { + const { t } = useTranslation() + return ( +
+ {t("editor.action.form.title.general.no_function")} + + +
+ ) +} + +export default EmptyFunctionContentPC diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/pc/components/EmptyFunctionContentPC/interface.ts b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/pc/components/EmptyFunctionContentPC/interface.ts new file mode 100644 index 00000000..fb30d9a2 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/pc/components/EmptyFunctionContentPC/interface.ts @@ -0,0 +1,3 @@ +export interface IEmptyFunctionContentPCProps { + handleClickCreate: () => void +} diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/pc/components/EmptyFunctionContentPC/style.ts b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/pc/components/EmptyFunctionContentPC/style.ts new file mode 100644 index 00000000..05dc6ff8 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/pc/components/EmptyFunctionContentPC/style.ts @@ -0,0 +1,18 @@ +import { css } from "@emotion/react" + +export const containerStyle = css` + width: 100%; + height: 332px; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 16px; +` + +export const emptyIconStyle = css` + font-size: 80px; + width: 80px; + height: 80px; + border-radius: 50%; +` diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/pc/components/IntegrationModal/index.tsx b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/pc/components/IntegrationModal/index.tsx new file mode 100644 index 00000000..35f2e492 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/pc/components/IntegrationModal/index.tsx @@ -0,0 +1,43 @@ +import { Modal } from "antd" +import { FC } from "react" +import { useFormContext } from "react-hook-form" +import { useTranslation } from "react-i18next" +import { useSelector } from "react-redux" +import { TIntegrationType } from "@illa-public/public-types" +import { IntegrationTypeSelector } from "@/Modules/Integration/IntegrationSelector" +import { IAgentForm } from "@/page/WorkSpace/AI/AIAgent/interface" +import { getCurrentTabID } from "@/redux/ui/recentTab/selector" +import { CREATE_FUNCTION_FROM_SINGLE } from "@/utils/routeHelper" +import { useNavigateToCreateFunction } from "@/utils/routeHelper/hook" +import { IIntegrationModalProps } from "./interface" + +const IntegrationModal: FC = ({ + integrationVisible, + onCancel, +}) => { + const { t } = useTranslation() + const navigateToCreateFunction = useNavigateToCreateFunction() + const { getValues } = useFormContext() + const currentTabID = useSelector(getCurrentTabID) + const handleSelect = (functionType: TIntegrationType) => { + const from = !!getValues("aiAgentID") + ? CREATE_FUNCTION_FROM_SINGLE.EDIT_TIPIS + : CREATE_FUNCTION_FROM_SINGLE.CREATE_TIPIS + navigateToCreateFunction(functionType, from, currentTabID) + } + + return ( + + + + ) +} + +export default IntegrationModal diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/pc/components/IntegrationModal/interface.ts b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/pc/components/IntegrationModal/interface.ts new file mode 100644 index 00000000..87e56bb5 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/pc/components/IntegrationModal/interface.ts @@ -0,0 +1,4 @@ +export interface IIntegrationModalProps { + integrationVisible: boolean + onCancel: () => void +} diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/pc/components/SelectModal/index.tsx b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/pc/components/SelectModal/index.tsx new file mode 100644 index 00000000..91995da8 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/pc/components/SelectModal/index.tsx @@ -0,0 +1,62 @@ +import { Modal } from "antd" +import { FC } from "react" +import { useTranslation } from "react-i18next" +import { useGetAllAIToolsListQuery } from "@/redux/services/aiToolsAPI" +import { useGetCurrentTeamInfo } from "@/utils/team" +import EmptyFunctionContentPC from "../EmptyFunctionContentPC" +import SelectModalContentPC from "../SelectModalContentPC" +import { ISelectModalProps } from "./interface" +import { titleStyle } from "./style" + +const SelectModal: FC = ({ + selectModalVisible, + onCancel, + fieldAiTools, + handleClickCreate, + handleValueChange, +}) => { + const { t } = useTranslation() + const teamInfo = useGetCurrentTeamInfo()! + const { data, isLoading } = useGetAllAIToolsListQuery(teamInfo.id) + + if (isLoading) return null + return ( + + {t("editor.action.form.title.general.add_functions")} + + } + styles={{ + content: { + padding: 0, + }, + header: { + margin: 0, + }, + footer: { + margin: 0, + }, + }} + > + {Array.isArray(data?.aiToolList) && data?.aiToolList.length > 0 ? ( + + ) : ( + + )} + + ) +} + +export default SelectModal diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/pc/components/SelectModal/interface.ts b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/pc/components/SelectModal/interface.ts new file mode 100644 index 00000000..e73bf662 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/pc/components/SelectModal/interface.ts @@ -0,0 +1,9 @@ +import { IEditorAIToolsVO } from "@illa-public/public-types" + +export interface ISelectModalProps { + selectModalVisible: boolean + onCancel: () => void + fieldAiTools: IEditorAIToolsVO[] + handleClickCreate: () => void + handleValueChange: (values: IEditorAIToolsVO[]) => void +} diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/pc/components/SelectModal/style.ts b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/pc/components/SelectModal/style.ts new file mode 100644 index 00000000..61f24a51 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/pc/components/SelectModal/style.ts @@ -0,0 +1,11 @@ +import { css } from "@emotion/react" +import { getColor } from "@illa-public/color-scheme" + +export const titleStyle = css` + display: flex; + padding: 24px 24px 18px 24px; + font-size: 16px; + font-weight: 600; + line-height: 24px; + color: ${getColor("grayBlue", "02")}; +` diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/pc/components/SelectModalContentPC/index.tsx b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/pc/components/SelectModalContentPC/index.tsx new file mode 100644 index 00000000..5ed208b9 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/pc/components/SelectModalContentPC/index.tsx @@ -0,0 +1,76 @@ +import Icon from "@ant-design/icons" +import { Button } from "antd" +import { FC, useMemo, useState } from "react" +import { useTranslation } from "react-i18next" +import { AddIcon } from "@illa-public/icon" +import { IEditorAIToolsVO } from "@illa-public/public-types" +import BlackButton from "@/components/BlackButton" +import ModalFunctionItem from "../../../modules/ModalFunctionItem" +import { ISelectModalContentPCProps } from "./interface" +import { + actionContainerStyle, + itemsContainerStyle, + modalContentContainerStyle, +} from "./style" + +const SelectModalContentPC: FC = ({ + onCancel, + onConfirm, + functions, + fieldFunctions = [], + handleClickCreate, +}) => { + const { t } = useTranslation() + const [selectedItems, setSelectedItems] = + useState(fieldFunctions) + + const selectIDs = useMemo(() => { + return selectedItems.map((item) => item.aiToolID) + }, [selectedItems]) + + const handleOnConfirm = () => { + onCancel() + onConfirm(selectedItems) + } + + const handleSelected = (checked: boolean, aiToolID: string) => { + if (checked) { + const functionItem = functions.find((item) => item.aiToolID === aiToolID) + !!functionItem && setSelectedItems((prev) => [...prev, functionItem]) + } else { + setSelectedItems((prev) => + prev.filter((item) => item.aiToolID !== aiToolID), + ) + } + } + return ( +
+
+ {functions.map((item) => ( + + ))} +
+
+ + + {t("editor.action.form.button.general.confirm")}{" "} + {selectIDs.length > 0 ? `(${selectIDs.length})` : ""} + +
+
+ ) +} + +export default SelectModalContentPC diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/pc/components/SelectModalContentPC/interface.ts b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/pc/components/SelectModalContentPC/interface.ts new file mode 100644 index 00000000..815b53dc --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/pc/components/SelectModalContentPC/interface.ts @@ -0,0 +1,9 @@ +import { IEditorAIToolsVO } from "@illa-public/public-types" + +export interface ISelectModalContentPCProps { + onCancel: () => void + onConfirm: (value: IEditorAIToolsVO[]) => void + handleClickCreate: () => void + functions: IEditorAIToolsVO[] + fieldFunctions: IEditorAIToolsVO[] +} diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/pc/components/SelectModalContentPC/style.ts b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/pc/components/SelectModalContentPC/style.ts new file mode 100644 index 00000000..aa002cf3 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/pc/components/SelectModalContentPC/style.ts @@ -0,0 +1,22 @@ +import { css } from "@emotion/react" + +export const modalContentContainerStyle = css` + width: 100%; + display: flex; + flex-direction: column; +` + +export const itemsContainerStyle = css` + width: 100%; + flex: 1; + overflow-y: auto; + max-height: 400px; +` + +export const actionContainerStyle = css` + width: 100%; + display: flex; + padding: 24px; + gap: 8px; + flex: none; +` diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/pc/index.tsx b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/pc/index.tsx new file mode 100644 index 00000000..4632d928 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/pc/index.tsx @@ -0,0 +1,126 @@ +import { Typography } from "antd" +import { FC, memo, useContext, useState } from "react" +import { + Controller, + useController, + useFormContext, + useWatch, +} from "react-hook-form" +import { Trans, useTranslation } from "react-i18next" +import { IEditorAIToolsVO } from "@illa-public/public-types" +import { TipisTrack } from "@illa-public/track-utils" +import LayoutBlock from "@/Layout/Form/LayoutBlock" +import { PreviewChatUseContext } from "@/components/PreviewChat/PreviewChatUseContext" +import { IAgentForm } from "../../../interface" +import { FUNCTION_LEARN_MORE_LINK } from "../constants" +import AddToolsButton from "../modules/AddToolsButton" +import EditorFunctionItem from "../modules/EditorFunctionItem" +import IntegrationModal from "./components/IntegrationModal" +import SelectModal from "./components/SelectModal" +import { containerStyle, functionContainerStyle } from "./style" + +const FunctionsEditorPC: FC = memo(() => { + const { t } = useTranslation() + + const { control, getValues } = useFormContext() + const [selectModalVisible, setSelectModalVisible] = useState(false) + const [integrationVisible, setIntegrationVisible] = useState(false) + const { useTo } = useContext(PreviewChatUseContext) + const { + field: { onChange }, + } = useController({ + control, + name: "aiTools", + }) + + const [fieldAiTools] = useWatch({ + control, + name: ["aiTools"], + }) + + const handleValueChange = (values: IEditorAIToolsVO[]) => { + TipisTrack.track("click_add_function_entry", { + parameter1: useTo, + }) + onChange(values) + } + + const handleRemoveFunction = (aiToolID: string) => { + const aiTools = getValues("aiTools") + onChange(aiTools.filter((item) => item.aiToolID !== aiToolID)) + } + + const handleClickCreate = () => { + TipisTrack.track("tipi_add_function_create") + setSelectModalVisible(false) + setIntegrationVisible(true) + } + + const handleOpenSelectModal = async () => { + setSelectModalVisible(true) + } + + return ( + <> + ( + , + ]} + /> + } + > +
+
+ {field.value?.map((item) => ( + + ))} +
+ +
+
+ )} + /> + {selectModalVisible && ( + setSelectModalVisible(false)} + fieldAiTools={fieldAiTools} + handleClickCreate={handleClickCreate} + handleValueChange={handleValueChange} + /> + )} + + {integrationVisible && ( + setIntegrationVisible(false)} + /> + )} + + ) +}) + +FunctionsEditorPC.displayName = "FunctionsEditorPC" + +export default FunctionsEditorPC diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/pc/style.ts b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/pc/style.ts new file mode 100644 index 00000000..9116b7e2 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/FunctionEditor/pc/style.ts @@ -0,0 +1,14 @@ +import { css } from "@emotion/react" + +export const containerStyle = css` + width: 100%; + padding-bottom: 8px; +` + +export const functionContainerStyle = css` + width: 100%; + padding-bottom: 8px; + gap: 16px; + display: flex; + flex-direction: column; +` diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/KnowledgeEditor/components/KnowledgeUpload/index.tsx b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/KnowledgeEditor/components/KnowledgeUpload/index.tsx index b71378ef..99a49ad6 100644 --- a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/KnowledgeEditor/components/KnowledgeUpload/index.tsx +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/KnowledgeEditor/components/KnowledgeUpload/index.tsx @@ -299,14 +299,6 @@ const KnowledgeUpload: FC = ({

- {/* */} { values={field.value} /> {errors.knowledge?.message && ( - + )} )} diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/PromptEditor/index.tsx b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/PromptEditor/index.tsx index 0488c4ff..23b4cf88 100644 --- a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/PromptEditor/index.tsx +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/PromptEditor/index.tsx @@ -1,10 +1,9 @@ import { FC, memo } from "react" import { Controller, useFormContext, useFormState } from "react-hook-form" import { useTranslation } from "react-i18next" -import { CodeEditor } from "@illa-public/code-editor" +import { CodeEditor } from "@illa-public/code-editor-new" import LayoutBlock from "@/Layout/Form/LayoutBlock" import { IAgentForm, SCROLL_ID } from "../../interface" -import { codeEditorErrorStyle } from "./style" const PromptEditor: FC = memo(() => { const { t } = useTranslation() @@ -35,12 +34,16 @@ const PromptEditor: FC = memo(() => {
diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/PromptEditor/style.ts b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/PromptEditor/style.ts deleted file mode 100644 index 85bca74d..00000000 --- a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/PromptEditor/style.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { css } from "@emotion/react" -import { getColor } from "@illa-public/color-scheme" - -export const codeEditorErrorStyle = (isError: boolean) => { - let style - if (isError) { - style = css` - .cm-editor, - .cm-editor:hover, - .cm-editor.cm-focused { - border-color: ${getColor("red", "03")}!important; - } - ` - } - return style -} diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/ScheduleEditor/components/RowContainer/index.tsx b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/ScheduleEditor/components/RowContainer/index.tsx new file mode 100644 index 00000000..c113235f --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/ScheduleEditor/components/RowContainer/index.tsx @@ -0,0 +1,15 @@ +import { FC } from "react" +import { IRowContainerProps } from "./interface" +import { RowContainerStyle, labelStyle } from "./style" + +const RowContainer: FC = (props) => { + const { labelName, children, enabled } = props + return ( +
+ {labelName && {labelName}} + {children} +
+ ) +} + +export default RowContainer diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/ScheduleEditor/components/RowContainer/interface.ts b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/ScheduleEditor/components/RowContainer/interface.ts new file mode 100644 index 00000000..97958079 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/ScheduleEditor/components/RowContainer/interface.ts @@ -0,0 +1,7 @@ +import { ReactNode } from "react" + +export interface IRowContainerProps { + labelName?: string + children: ReactNode + enabled: boolean +} diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/ScheduleEditor/components/RowContainer/style.ts b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/ScheduleEditor/components/RowContainer/style.ts new file mode 100644 index 00000000..cf9523bb --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/ScheduleEditor/components/RowContainer/style.ts @@ -0,0 +1,28 @@ +import { css } from "@emotion/react" +import { getColor } from "@illa-public/color-scheme" +import { applyMobileStyle } from "@illa-public/utils" + +const basLayoutContainerStyle = css` + display: flex; + padding: 8px 16px; + width: 100%; +` + +export const RowContainerStyle = css` + ${basLayoutContainerStyle}; + justify-content: space-between; + align-items: center; + gap: 16px; +` + +export const labelStyle = (enabled: boolean) => css` + font-size: 14px; + color: ${enabled ? getColor("grayBlue", "02") : getColor("grayBlue", "04")}; + line-height: 22px; + font-weight: 500; + white-space: nowrap; + width: 200px; + ${applyMobileStyle(css` + width: auto; + `)} +` diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/ScheduleEditor/constants.ts b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/ScheduleEditor/constants.ts new file mode 100644 index 00000000..472c3d72 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/ScheduleEditor/constants.ts @@ -0,0 +1,4518 @@ +import i18next from "i18next" +import { SCHEDULE_TYPES } from "@illa-public/public-types" +import { ILLADayjs } from "@illa-public/utils" +import i18n from "@/i18n" + +export const TIMEZONES = [ + { + name: "Pacific/Niue", + alternativeName: "Niue Time", + group: ["Pacific/Niue"], + continentCode: "OC", + continentName: "Oceania", + countryName: "Niue", + countryCode: "NU", + mainCities: ["Alofi"], + rawOffsetInMinutes: -660, + abbreviation: "NUT", + rawFormat: "-11:00 Niue Time - Alofi", + }, + { + name: "Pacific/Midway", + alternativeName: "Samoa Time", + group: ["Pacific/Midway"], + continentCode: "OC", + continentName: "Oceania", + countryName: "United States Minor Outlying Islands", + countryCode: "UM", + mainCities: ["Midway"], + rawOffsetInMinutes: -660, + abbreviation: "SST", + rawFormat: "-11:00 Samoa Time - Midway", + }, + { + name: "Pacific/Pago_Pago", + alternativeName: "Samoa Time", + group: ["Pacific/Pago_Pago", "Pacific/Samoa", "US/Samoa"], + continentCode: "OC", + continentName: "Oceania", + countryName: "American Samoa", + countryCode: "AS", + mainCities: ["Pago Pago"], + rawOffsetInMinutes: -660, + abbreviation: "SST", + rawFormat: "-11:00 Samoa Time - Pago Pago", + }, + { + name: "Pacific/Rarotonga", + alternativeName: "Cook Islands Time", + group: ["Pacific/Rarotonga"], + continentCode: "OC", + continentName: "Oceania", + countryName: "Cook Islands", + countryCode: "CK", + mainCities: ["Avarua"], + rawOffsetInMinutes: -600, + abbreviation: "CKT", + rawFormat: "-10:00 Cook Islands Time - Avarua", + }, + { + name: "America/Adak", + alternativeName: "Hawaii-Aleutian Time", + group: ["America/Adak", "America/Atka", "US/Aleutian"], + continentCode: "NA", + continentName: "North America", + countryName: "United States", + countryCode: "US", + mainCities: ["Adak"], + rawOffsetInMinutes: -600, + abbreviation: "HAST", + rawFormat: "-10:00 Hawaii-Aleutian Time - Adak", + }, + { + name: "Pacific/Honolulu", + alternativeName: "Hawaii-Aleutian Time", + group: ["Pacific/Honolulu", "Pacific/Johnston", "US/Hawaii"], + continentCode: "NA", + continentName: "North America", + countryName: "United States", + countryCode: "US", + mainCities: ["Honolulu", "East Honolulu", "Pearl City", "Hilo"], + rawOffsetInMinutes: -600, + abbreviation: "HAST", + rawFormat: + "-10:00 Hawaii-Aleutian Time - Honolulu, East Honolulu, Pearl City, Hilo", + }, + { + name: "Pacific/Tahiti", + alternativeName: "Tahiti Time", + group: ["Pacific/Tahiti"], + continentCode: "OC", + continentName: "Oceania", + countryName: "French Polynesia", + countryCode: "PF", + mainCities: ["Faaa", "Papeete", "Punaauia"], + rawOffsetInMinutes: -600, + abbreviation: "TAHT", + rawFormat: "-10:00 Tahiti Time - Faaa, Papeete, Punaauia", + }, + { + name: "Pacific/Marquesas", + alternativeName: "Marquesas Time", + group: ["Pacific/Marquesas"], + continentCode: "OC", + continentName: "Oceania", + countryName: "French Polynesia", + countryCode: "PF", + mainCities: ["Marquesas"], + rawOffsetInMinutes: -570, + abbreviation: "MART", + rawFormat: "-09:30 Marquesas Time - Marquesas", + }, + { + name: "America/Anchorage", + alternativeName: "Alaska Time", + group: [ + "America/Anchorage", + "America/Juneau", + "America/Metlakatla", + "America/Nome", + "America/Sitka", + "America/Yakutat", + "US/Alaska", + ], + continentCode: "NA", + continentName: "North America", + countryName: "United States", + countryCode: "US", + mainCities: ["Anchorage", "Juneau", "Fairbanks", "Eagle River"], + rawOffsetInMinutes: -540, + abbreviation: "AKST", + rawFormat: "-09:00 Alaska Time - Anchorage, Juneau, Fairbanks, Eagle River", + }, + { + name: "Pacific/Gambier", + alternativeName: "Gambier Time", + group: ["Pacific/Gambier"], + continentCode: "OC", + continentName: "Oceania", + countryName: "French Polynesia", + countryCode: "PF", + mainCities: ["Gambier"], + rawOffsetInMinutes: -540, + abbreviation: "GAMT", + rawFormat: "-09:00 Gambier Time - Gambier", + }, + { + name: "America/Los_Angeles", + alternativeName: "Pacific Time", + group: ["America/Los_Angeles", "US/Pacific"], + continentCode: "NA", + continentName: "North America", + countryName: "United States", + countryCode: "US", + mainCities: ["Los Angeles", "San Diego", "San Jose", "San Francisco"], + rawOffsetInMinutes: -480, + abbreviation: "PST", + rawFormat: + "-08:00 Pacific Time - Los Angeles, San Diego, San Jose, San Francisco", + }, + { + name: "America/Tijuana", + alternativeName: "Pacific Time", + group: [ + "America/Tijuana", + "America/Ensenada", + "America/Santa_Isabel", + "Mexico/BajaNorte", + ], + continentCode: "NA", + continentName: "North America", + countryName: "Mexico", + countryCode: "MX", + mainCities: ["Tijuana", "Mexicali", "Ensenada", "Rosarito"], + rawOffsetInMinutes: -480, + abbreviation: "PST", + rawFormat: "-08:00 Pacific Time - Tijuana, Mexicali, Ensenada, Rosarito", + }, + { + name: "America/Vancouver", + alternativeName: "Pacific Time", + group: ["America/Vancouver", "Canada/Pacific"], + continentCode: "NA", + continentName: "North America", + countryName: "Canada", + countryCode: "CA", + mainCities: ["Vancouver", "Surrey", "Okanagan", "Victoria"], + rawOffsetInMinutes: -480, + abbreviation: "PST", + rawFormat: "-08:00 Pacific Time - Vancouver, Surrey, Okanagan, Victoria", + }, + { + name: "Pacific/Pitcairn", + alternativeName: "Pitcairn Time", + group: ["Pacific/Pitcairn"], + continentCode: "OC", + continentName: "Oceania", + countryName: "Pitcairn", + countryCode: "PN", + mainCities: ["Adamstown"], + rawOffsetInMinutes: -480, + abbreviation: "PST", + rawFormat: "-08:00 Pitcairn Time - Adamstown", + }, + { + name: "America/Hermosillo", + alternativeName: "Mexican Pacific Time", + group: ["America/Hermosillo"], + continentCode: "NA", + continentName: "North America", + countryName: "Mexico", + countryCode: "MX", + mainCities: [ + "Hermosillo", + "Ciudad Obregón", + "Nogales", + "San Luis Río Colorado", + ], + rawOffsetInMinutes: -420, + abbreviation: "GMT-7", + rawFormat: + "-07:00 Mexican Pacific Time - Hermosillo, Ciudad Obregón, Nogales, San Luis Río Colorado", + }, + { + name: "America/Edmonton", + alternativeName: "Mountain Time", + group: [ + "America/Cambridge_Bay", + "America/Edmonton", + "America/Inuvik", + "America/Yellowknife", + "Canada/Mountain", + ], + continentCode: "NA", + continentName: "North America", + countryName: "Canada", + countryCode: "CA", + mainCities: ["Calgary", "Edmonton", "Red Deer", "Sherwood Park"], + rawOffsetInMinutes: -420, + abbreviation: "MST", + rawFormat: + "-07:00 Mountain Time - Calgary, Edmonton, Red Deer, Sherwood Park", + }, + { + name: "America/Ojinaga", + alternativeName: "Mountain Time", + group: [ + "America/Chihuahua", + "America/Mazatlan", + "America/Ojinaga", + "Mexico/BajaSur", + ], + continentCode: "NA", + continentName: "North America", + countryName: "Mexico", + countryCode: "MX", + mainCities: ["Ciudad Juárez", "Chihuahua", "Culiacán", "Mazatlán"], + rawOffsetInMinutes: -420, + abbreviation: "MST", + rawFormat: + "-07:00 Mountain Time - Ciudad Juárez, Chihuahua, Culiacán, Mazatlán", + }, + { + name: "America/Denver", + alternativeName: "Mountain Time", + group: [ + "America/Boise", + "America/Denver", + "America/Shiprock", + "Navajo", + "US/Mountain", + ], + continentCode: "NA", + continentName: "North America", + countryName: "United States", + countryCode: "US", + mainCities: ["Denver", "El Paso", "Albuquerque", "Colorado Springs"], + rawOffsetInMinutes: -420, + abbreviation: "MST", + rawFormat: + "-07:00 Mountain Time - Denver, El Paso, Albuquerque, Colorado Springs", + }, + { + name: "America/Phoenix", + alternativeName: "Mountain Time", + group: ["America/Phoenix", "US/Arizona", "America/Creston"], + continentCode: "NA", + continentName: "North America", + countryName: "United States", + countryCode: "US", + mainCities: ["Phoenix", "Tucson", "Mesa", "Chandler"], + rawOffsetInMinutes: -420, + abbreviation: "MST", + rawFormat: "-07:00 Mountain Time - Phoenix, Tucson, Mesa, Chandler", + }, + { + name: "America/Whitehorse", + alternativeName: "Yukon Time", + group: [ + "America/Creston", + "America/Dawson", + "America/Dawson_Creek", + "America/Fort_Nelson", + "America/Whitehorse", + "Canada/Yukon", + ], + continentCode: "NA", + continentName: "North America", + countryName: "Canada", + countryCode: "CA", + mainCities: ["Whitehorse", "Fort St. John", "Creston", "Dawson"], + rawOffsetInMinutes: -420, + abbreviation: "YT", + rawFormat: "-07:00 Yukon Time - Whitehorse, Fort St. John, Creston, Dawson", + }, + { + name: "America/Belize", + alternativeName: "Central Time", + group: ["America/Belize"], + continentCode: "NA", + continentName: "North America", + countryName: "Belize", + countryCode: "BZ", + mainCities: ["Belize City", "San Ignacio", "San Pedro", "Orange Walk"], + rawOffsetInMinutes: -360, + abbreviation: "CST", + rawFormat: + "-06:00 Central Time - Belize City, San Ignacio, San Pedro, Orange Walk", + }, + { + name: "America/Chicago", + alternativeName: "Central Time", + group: [ + "America/Chicago", + "America/Indiana/Knox", + "America/Indiana/Tell_City", + "America/Menominee", + "America/North_Dakota/Beulah", + "America/North_Dakota/Center", + "America/North_Dakota/New_Salem", + "US/Central", + "America/Knox_IN", + "US/Indiana-Starke", + ], + continentCode: "NA", + continentName: "North America", + countryName: "United States", + countryCode: "US", + mainCities: ["Chicago", "Houston", "San Antonio", "Dallas"], + rawOffsetInMinutes: -360, + abbreviation: "CST", + rawFormat: "-06:00 Central Time - Chicago, Houston, San Antonio, Dallas", + }, + { + name: "America/Guatemala", + alternativeName: "Central Time", + group: ["America/Guatemala"], + continentCode: "NA", + continentName: "North America", + countryName: "Guatemala", + countryCode: "GT", + mainCities: ["Guatemala City", "Mixco", "Villa Nueva", "Petapa"], + rawOffsetInMinutes: -360, + abbreviation: "CST", + rawFormat: + "-06:00 Central Time - Guatemala City, Mixco, Villa Nueva, Petapa", + }, + { + name: "America/Managua", + alternativeName: "Central Time", + group: ["America/Managua"], + continentCode: "NA", + continentName: "North America", + countryName: "Nicaragua", + countryCode: "NI", + mainCities: ["Managua", "León", "Masaya", "Chinandega"], + rawOffsetInMinutes: -360, + abbreviation: "CST", + rawFormat: "-06:00 Central Time - Managua, León, Masaya, Chinandega", + }, + { + name: "America/Mexico_City", + alternativeName: "Central Time", + group: [ + "America/Bahia_Banderas", + "America/Matamoros", + "America/Merida", + "America/Mexico_City", + "America/Monterrey", + "Mexico/General", + ], + continentCode: "NA", + continentName: "North America", + countryName: "Mexico", + countryCode: "MX", + mainCities: [ + "Mexico City", + "Iztapalapa", + "Ecatepec de Morelos", + "Guadalajara", + ], + rawOffsetInMinutes: -360, + abbreviation: "CST", + rawFormat: + "-06:00 Central Time - Mexico City, Iztapalapa, Ecatepec de Morelos, Guadalajara", + }, + { + name: "America/Costa_Rica", + alternativeName: "Central Time", + group: ["America/Costa_Rica"], + continentCode: "NA", + continentName: "North America", + countryName: "Costa Rica", + countryCode: "CR", + mainCities: ["San José", "Limón", "San Francisco", "Alajuela"], + rawOffsetInMinutes: -360, + abbreviation: "CST", + rawFormat: "-06:00 Central Time - San José, Limón, San Francisco, Alajuela", + }, + { + name: "America/El_Salvador", + alternativeName: "Central Time", + group: ["America/El_Salvador"], + continentCode: "NA", + continentName: "North America", + countryName: "El Salvador", + countryCode: "SV", + mainCities: ["San Salvador", "Soyapango", "Santa Ana", "San Miguel"], + rawOffsetInMinutes: -360, + abbreviation: "CST", + rawFormat: + "-06:00 Central Time - San Salvador, Soyapango, Santa Ana, San Miguel", + }, + { + name: "America/Regina", + alternativeName: "Central Time", + group: ["America/Regina", "America/Swift_Current", "Canada/Saskatchewan"], + continentCode: "NA", + continentName: "North America", + countryName: "Canada", + countryCode: "CA", + mainCities: ["Saskatoon", "Regina", "Prince Albert", "Moose Jaw"], + rawOffsetInMinutes: -360, + abbreviation: "CST", + rawFormat: + "-06:00 Central Time - Saskatoon, Regina, Prince Albert, Moose Jaw", + }, + { + name: "America/Tegucigalpa", + alternativeName: "Central Time", + group: ["America/Tegucigalpa"], + continentCode: "NA", + continentName: "North America", + countryName: "Honduras", + countryCode: "HN", + mainCities: ["Tegucigalpa", "San Pedro Sula", "Choloma", "La Ceiba"], + rawOffsetInMinutes: -360, + abbreviation: "CST", + rawFormat: + "-06:00 Central Time - Tegucigalpa, San Pedro Sula, Choloma, La Ceiba", + }, + { + name: "America/Winnipeg", + alternativeName: "Central Time", + group: [ + "America/Rainy_River", + "America/Rankin_Inlet", + "America/Resolute", + "America/Winnipeg", + "Canada/Central", + ], + continentCode: "NA", + continentName: "North America", + countryName: "Canada", + countryCode: "CA", + mainCities: ["Winnipeg", "Brandon", "Steinbach", "Kenora"], + rawOffsetInMinutes: -360, + abbreviation: "CST", + rawFormat: "-06:00 Central Time - Winnipeg, Brandon, Steinbach, Kenora", + }, + { + name: "Pacific/Easter", + alternativeName: "Easter Island Time", + group: ["Pacific/Easter", "Chile/EasterIsland"], + continentCode: "SA", + continentName: "South America", + countryName: "Chile", + countryCode: "CL", + mainCities: ["Easter"], + rawOffsetInMinutes: -360, + abbreviation: "EAST", + rawFormat: "-06:00 Easter Island Time - Easter", + }, + { + name: "Pacific/Galapagos", + alternativeName: "Galapagos Time", + group: ["Pacific/Galapagos"], + continentCode: "SA", + continentName: "South America", + countryName: "Ecuador", + countryCode: "EC", + mainCities: ["Galapagos"], + rawOffsetInMinutes: -360, + abbreviation: "GALT", + rawFormat: "-06:00 Galapagos Time - Galapagos", + }, + { + name: "America/Rio_Branco", + alternativeName: "Acre Time", + group: [ + "America/Eirunepe", + "America/Rio_Branco", + "America/Porto_Acre", + "Brazil/Acre", + ], + continentCode: "SA", + continentName: "South America", + countryName: "Brazil", + countryCode: "BR", + mainCities: ["Rio Branco", "Cruzeiro do Sul", "Sena Madureira", "Eirunepé"], + rawOffsetInMinutes: -300, + abbreviation: "ACT", + rawFormat: + "-05:00 Acre Time - Rio Branco, Cruzeiro do Sul, Sena Madureira, Eirunepé", + }, + { + name: "America/Bogota", + alternativeName: "Colombia Time", + group: ["America/Bogota"], + continentCode: "SA", + continentName: "South America", + countryName: "Colombia", + countryCode: "CO", + mainCities: ["Bogotá", "Cali", "Medellín", "Barranquilla"], + rawOffsetInMinutes: -300, + abbreviation: "COT", + rawFormat: "-05:00 Colombia Time - Bogotá, Cali, Medellín, Barranquilla", + }, + { + name: "America/Havana", + alternativeName: "Cuba Time", + group: ["America/Havana", "Cuba"], + continentCode: "NA", + continentName: "North America", + countryName: "Cuba", + countryCode: "CU", + mainCities: ["Havana", "Santiago de Cuba", "Camagüey", "Holguín"], + rawOffsetInMinutes: -300, + abbreviation: "CST", + rawFormat: "-05:00 Cuba Time - Havana, Santiago de Cuba, Camagüey, Holguín", + }, + { + name: "America/Atikokan", + alternativeName: "Eastern Time", + group: ["America/Atikokan"], + continentCode: "NA", + continentName: "North America", + countryName: "Canada", + countryCode: "CA", + mainCities: ["Atikokan"], + rawOffsetInMinutes: -300, + abbreviation: "EST", + rawFormat: "-05:00 Eastern Time - Atikokan", + }, + { + name: "America/Cancun", + alternativeName: "Eastern Time", + group: ["America/Cancun"], + continentCode: "NA", + continentName: "North America", + countryName: "Mexico", + countryCode: "MX", + mainCities: ["Cancún", "Chetumal", "Playa del Carmen", "Cozumel"], + rawOffsetInMinutes: -300, + abbreviation: "EST", + rawFormat: + "-05:00 Eastern Time - Cancún, Chetumal, Playa del Carmen, Cozumel", + }, + { + name: "America/Grand_Turk", + alternativeName: "Eastern Time", + group: ["America/Grand_Turk"], + continentCode: "NA", + continentName: "North America", + countryName: "Turks and Caicos Islands", + countryCode: "TC", + mainCities: ["Cockburn Town"], + rawOffsetInMinutes: -300, + abbreviation: "EST", + rawFormat: "-05:00 Eastern Time - Cockburn Town", + }, + { + name: "America/Cayman", + alternativeName: "Eastern Time", + group: ["America/Cayman"], + continentCode: "NA", + continentName: "North America", + countryName: "Cayman Islands", + countryCode: "KY", + mainCities: ["George Town"], + rawOffsetInMinutes: -300, + abbreviation: "EST", + rawFormat: "-05:00 Eastern Time - George Town", + }, + { + name: "America/Jamaica", + alternativeName: "Eastern Time", + group: ["America/Jamaica", "Jamaica"], + continentCode: "NA", + continentName: "North America", + countryName: "Jamaica", + countryCode: "JM", + mainCities: ["Kingston", "New Kingston", "Spanish Town", "Portmore"], + rawOffsetInMinutes: -300, + abbreviation: "EST", + rawFormat: + "-05:00 Eastern Time - Kingston, New Kingston, Spanish Town, Portmore", + }, + { + name: "America/Nassau", + alternativeName: "Eastern Time", + group: ["America/Nassau"], + continentCode: "NA", + continentName: "North America", + countryName: "Bahamas", + countryCode: "BS", + mainCities: ["Nassau", "Lucaya", "Freeport"], + rawOffsetInMinutes: -300, + abbreviation: "EST", + rawFormat: "-05:00 Eastern Time - Nassau, Lucaya, Freeport", + }, + { + name: "America/New_York", + alternativeName: "Eastern Time", + group: [ + "America/Detroit", + "America/Indiana/Indianapolis", + "America/Indiana/Marengo", + "America/Indiana/Petersburg", + "America/Indiana/Vevay", + "America/Indiana/Vincennes", + "America/Indiana/Winamac", + "America/Kentucky/Louisville", + "America/Kentucky/Monticello", + "America/New_York", + "US/Michigan", + "America/Fort_Wayne", + "America/Indianapolis", + "US/East-Indiana", + "America/Louisville", + "US/Eastern", + ], + continentCode: "NA", + continentName: "North America", + countryName: "United States", + countryCode: "US", + mainCities: ["New York City", "Brooklyn", "Queens", "Philadelphia"], + rawOffsetInMinutes: -300, + abbreviation: "EST", + rawFormat: + "-05:00 Eastern Time - New York City, Brooklyn, Queens, Philadelphia", + }, + { + name: "America/Panama", + alternativeName: "Eastern Time", + group: ["America/Panama", "America/Coral_Harbour"], + continentCode: "NA", + continentName: "North America", + countryName: "Panama", + countryCode: "PA", + mainCities: ["Panamá", "San Miguelito", "Juan Díaz", "David"], + rawOffsetInMinutes: -300, + abbreviation: "EST", + rawFormat: "-05:00 Eastern Time - Panamá, San Miguelito, Juan Díaz, David", + }, + { + name: "America/Port-au-Prince", + alternativeName: "Eastern Time", + group: ["America/Port-au-Prince"], + continentCode: "NA", + continentName: "North America", + countryName: "Haiti", + countryCode: "HT", + mainCities: ["Port-au-Prince", "Carrefour", "Delmas 73", "Pétionville"], + rawOffsetInMinutes: -300, + abbreviation: "EST", + rawFormat: + "-05:00 Eastern Time - Port-au-Prince, Carrefour, Delmas 73, Pétionville", + }, + { + name: "America/Toronto", + alternativeName: "Eastern Time", + group: [ + "America/Iqaluit", + "America/Nipigon", + "America/Pangnirtung", + "America/Thunder_Bay", + "America/Toronto", + "America/Montreal", + "Canada/Eastern", + ], + continentCode: "NA", + continentName: "North America", + countryName: "Canada", + countryCode: "CA", + mainCities: ["Toronto", "Montréal", "Ottawa", "Mississauga"], + rawOffsetInMinutes: -300, + abbreviation: "EST", + rawFormat: "-05:00 Eastern Time - Toronto, Montréal, Ottawa, Mississauga", + }, + { + name: "America/Guayaquil", + alternativeName: "Ecuador Time", + group: ["America/Guayaquil"], + continentCode: "SA", + continentName: "South America", + countryName: "Ecuador", + countryCode: "EC", + mainCities: [ + "Guayaquil", + "Quito", + "Cuenca", + "Santo Domingo de los Colorados", + ], + rawOffsetInMinutes: -300, + abbreviation: "ECT", + rawFormat: + "-05:00 Ecuador Time - Guayaquil, Quito, Cuenca, Santo Domingo de los Colorados", + }, + { + name: "America/Lima", + alternativeName: "Peru Time", + group: ["America/Lima"], + continentCode: "SA", + continentName: "South America", + countryName: "Peru", + countryCode: "PE", + mainCities: ["Lima", "Arequipa", "Callao", "Trujillo"], + rawOffsetInMinutes: -300, + abbreviation: "PET", + rawFormat: "-05:00 Peru Time - Lima, Arequipa, Callao, Trujillo", + }, + { + name: "America/Manaus", + alternativeName: "Amazon Time", + group: [ + "America/Boa_Vista", + "America/Campo_Grande", + "America/Cuiaba", + "America/Manaus", + "America/Porto_Velho", + "Brazil/West", + ], + continentCode: "SA", + continentName: "South America", + countryName: "Brazil", + countryCode: "BR", + mainCities: ["Manaus", "Campo Grande", "Cuiabá", "Porto Velho"], + rawOffsetInMinutes: -240, + abbreviation: "AMT", + rawFormat: "-04:00 Amazon Time - Manaus, Campo Grande, Cuiabá, Porto Velho", + }, + { + name: "America/St_Kitts", + alternativeName: "Atlantic Time", + group: ["America/St_Kitts"], + continentCode: "NA", + continentName: "North America", + countryName: "Saint Kitts and Nevis", + countryCode: "KN", + mainCities: ["Basseterre"], + rawOffsetInMinutes: -240, + abbreviation: "AST", + rawFormat: "-04:00 Atlantic Time - Basseterre", + }, + { + name: "America/Blanc-Sablon", + alternativeName: "Atlantic Time", + group: ["America/Blanc-Sablon"], + continentCode: "NA", + continentName: "North America", + countryName: "Canada", + countryCode: "CA", + mainCities: ["Blanc-Sablon"], + rawOffsetInMinutes: -240, + abbreviation: "AST", + rawFormat: "-04:00 Atlantic Time - Blanc-Sablon", + }, + { + name: "America/Montserrat", + alternativeName: "Atlantic Time", + group: ["America/Montserrat"], + continentCode: "NA", + continentName: "North America", + countryName: "Montserrat", + countryCode: "MS", + mainCities: ["Brades", "Plymouth"], + rawOffsetInMinutes: -240, + abbreviation: "AST", + rawFormat: "-04:00 Atlantic Time - Brades, Plymouth", + }, + { + name: "America/Barbados", + alternativeName: "Atlantic Time", + group: ["America/Barbados"], + continentCode: "NA", + continentName: "North America", + countryName: "Barbados", + countryCode: "BB", + mainCities: ["Bridgetown"], + rawOffsetInMinutes: -240, + abbreviation: "AST", + rawFormat: "-04:00 Atlantic Time - Bridgetown", + }, + { + name: "America/St_Lucia", + alternativeName: "Atlantic Time", + group: ["America/St_Lucia"], + continentCode: "NA", + continentName: "North America", + countryName: "Saint Lucia", + countryCode: "LC", + mainCities: ["Castries"], + rawOffsetInMinutes: -240, + abbreviation: "AST", + rawFormat: "-04:00 Atlantic Time - Castries", + }, + { + name: "America/Port_of_Spain", + alternativeName: "Atlantic Time", + group: ["America/Port_of_Spain"], + continentCode: "NA", + continentName: "North America", + countryName: "Trinidad and Tobago", + countryCode: "TT", + mainCities: ["Chaguanas", "Mon Repos", "San Fernando", "Port of Spain"], + rawOffsetInMinutes: -240, + abbreviation: "AST", + rawFormat: + "-04:00 Atlantic Time - Chaguanas, Mon Repos, San Fernando, Port of Spain", + }, + { + name: "America/Martinique", + alternativeName: "Atlantic Time", + group: ["America/Martinique"], + continentCode: "NA", + continentName: "North America", + countryName: "Martinique", + countryCode: "MQ", + mainCities: ["Fort-de-France", "Le Lamentin", "Le Robert", "Sainte-Marie"], + rawOffsetInMinutes: -240, + abbreviation: "AST", + rawFormat: + "-04:00 Atlantic Time - Fort-de-France, Le Lamentin, Le Robert, Sainte-Marie", + }, + { + name: "America/St_Barthelemy", + alternativeName: "Atlantic Time", + group: ["America/St_Barthelemy"], + continentCode: "NA", + continentName: "North America", + countryName: "Saint Barthelemy", + countryCode: "BL", + mainCities: ["Gustavia"], + rawOffsetInMinutes: -240, + abbreviation: "AST", + rawFormat: "-04:00 Atlantic Time - Gustavia", + }, + { + name: "America/Halifax", + alternativeName: "Atlantic Time", + group: [ + "America/Glace_Bay", + "America/Goose_Bay", + "America/Halifax", + "America/Moncton", + "Canada/Atlantic", + ], + continentCode: "NA", + continentName: "North America", + countryName: "Canada", + countryCode: "CA", + mainCities: ["Halifax", "Moncton", "Sydney", "Dartmouth"], + rawOffsetInMinutes: -240, + abbreviation: "AST", + rawFormat: "-04:00 Atlantic Time - Halifax, Moncton, Sydney, Dartmouth", + }, + { + name: "Atlantic/Bermuda", + alternativeName: "Atlantic Time", + group: ["Atlantic/Bermuda"], + continentCode: "NA", + continentName: "North America", + countryName: "Bermuda", + countryCode: "BM", + mainCities: ["Hamilton"], + rawOffsetInMinutes: -240, + abbreviation: "AST", + rawFormat: "-04:00 Atlantic Time - Hamilton", + }, + { + name: "America/St_Vincent", + alternativeName: "Atlantic Time", + group: ["America/St_Vincent"], + continentCode: "NA", + continentName: "North America", + countryName: "Saint Vincent and the Grenadines", + countryCode: "VC", + mainCities: ["Kingstown", "Kingstown Park"], + rawOffsetInMinutes: -240, + abbreviation: "AST", + rawFormat: "-04:00 Atlantic Time - Kingstown, Kingstown Park", + }, + { + name: "America/Kralendijk", + alternativeName: "Atlantic Time", + group: ["America/Kralendijk"], + continentCode: "NA", + continentName: "North America", + countryName: "Bonaire, Saint Eustatius and Saba ", + countryCode: "BQ", + mainCities: ["Kralendijk"], + rawOffsetInMinutes: -240, + abbreviation: "AST", + rawFormat: "-04:00 Atlantic Time - Kralendijk", + }, + { + name: "America/Guadeloupe", + alternativeName: "Atlantic Time", + group: ["America/Guadeloupe"], + continentCode: "NA", + continentName: "North America", + countryName: "Guadeloupe", + countryCode: "GP", + mainCities: ["Les Abymes", "Baie-Mahault", "Le Gosier", "Petit-Bourg"], + rawOffsetInMinutes: -240, + abbreviation: "AST", + rawFormat: + "-04:00 Atlantic Time - Les Abymes, Baie-Mahault, Le Gosier, Petit-Bourg", + }, + { + name: "America/Marigot", + alternativeName: "Atlantic Time", + group: ["America/Marigot"], + continentCode: "NA", + continentName: "North America", + countryName: "Saint Martin", + countryCode: "MF", + mainCities: ["Marigot"], + rawOffsetInMinutes: -240, + abbreviation: "AST", + rawFormat: "-04:00 Atlantic Time - Marigot", + }, + { + name: "America/Aruba", + alternativeName: "Atlantic Time", + group: ["America/Aruba"], + continentCode: "NA", + continentName: "North America", + countryName: "Aruba", + countryCode: "AW", + mainCities: ["Oranjestad", "Tanki Leendert", "San Nicolas"], + rawOffsetInMinutes: -240, + abbreviation: "AST", + rawFormat: "-04:00 Atlantic Time - Oranjestad, Tanki Leendert, San Nicolas", + }, + { + name: "America/Lower_Princes", + alternativeName: "Atlantic Time", + group: ["America/Lower_Princes"], + continentCode: "NA", + continentName: "North America", + countryName: "Sint Maarten", + countryCode: "SX", + mainCities: ["Philipsburg"], + rawOffsetInMinutes: -240, + abbreviation: "AST", + rawFormat: "-04:00 Atlantic Time - Philipsburg", + }, + { + name: "America/Tortola", + alternativeName: "Atlantic Time", + group: ["America/Tortola"], + continentCode: "NA", + continentName: "North America", + countryName: "British Virgin Islands", + countryCode: "VG", + mainCities: ["Road Town"], + rawOffsetInMinutes: -240, + abbreviation: "AST", + rawFormat: "-04:00 Atlantic Time - Road Town", + }, + { + name: "America/Dominica", + alternativeName: "Atlantic Time", + group: ["America/Dominica"], + continentCode: "NA", + continentName: "North America", + countryName: "Dominica", + countryCode: "DM", + mainCities: ["Roseau"], + rawOffsetInMinutes: -240, + abbreviation: "AST", + rawFormat: "-04:00 Atlantic Time - Roseau", + }, + { + name: "America/St_Thomas", + alternativeName: "Atlantic Time", + group: ["America/St_Thomas"], + continentCode: "NA", + continentName: "North America", + countryName: "U.S. Virgin Islands", + countryCode: "VI", + mainCities: ["Saint Croix", "Charlotte Amalie"], + rawOffsetInMinutes: -240, + abbreviation: "AST", + rawFormat: "-04:00 Atlantic Time - Saint Croix, Charlotte Amalie", + }, + { + name: "America/Grenada", + alternativeName: "Atlantic Time", + group: ["America/Grenada"], + continentCode: "NA", + continentName: "North America", + countryName: "Grenada", + countryCode: "GD", + mainCities: ["Saint George's"], + rawOffsetInMinutes: -240, + abbreviation: "AST", + rawFormat: "-04:00 Atlantic Time - Saint George's", + }, + { + name: "America/Antigua", + alternativeName: "Atlantic Time", + group: ["America/Antigua"], + continentCode: "NA", + continentName: "North America", + countryName: "Antigua and Barbuda", + countryCode: "AG", + mainCities: ["Saint John’s"], + rawOffsetInMinutes: -240, + abbreviation: "AST", + rawFormat: "-04:00 Atlantic Time - Saint John’s", + }, + { + name: "America/Puerto_Rico", + alternativeName: "Atlantic Time", + group: ["America/Puerto_Rico", "America/Virgin"], + continentCode: "NA", + continentName: "North America", + countryName: "Puerto Rico", + countryCode: "PR", + mainCities: ["San Juan", "Bayamón", "Carolina", "Ponce"], + rawOffsetInMinutes: -240, + abbreviation: "AST", + rawFormat: "-04:00 Atlantic Time - San Juan, Bayamón, Carolina, Ponce", + }, + { + name: "America/Santo_Domingo", + alternativeName: "Atlantic Time", + group: ["America/Santo_Domingo"], + continentCode: "NA", + continentName: "North America", + countryName: "Dominican Republic", + countryCode: "DO", + mainCities: [ + "Santo Domingo", + "Santiago de los Caballeros", + "Santo Domingo Oeste", + "Santo Domingo Este", + ], + rawOffsetInMinutes: -240, + abbreviation: "AST", + rawFormat: + "-04:00 Atlantic Time - Santo Domingo, Santiago de los Caballeros, Santo Domingo Oeste, Santo Domingo Este", + }, + { + name: "America/Anguilla", + alternativeName: "Atlantic Time", + group: ["America/Anguilla"], + continentCode: "NA", + continentName: "North America", + countryName: "Anguilla", + countryCode: "AI", + mainCities: ["The Valley"], + rawOffsetInMinutes: -240, + abbreviation: "AST", + rawFormat: "-04:00 Atlantic Time - The Valley", + }, + { + name: "America/Thule", + alternativeName: "Atlantic Time", + group: ["America/Thule"], + continentCode: "NA", + continentName: "North America", + countryName: "Greenland", + countryCode: "GL", + mainCities: ["Thule"], + rawOffsetInMinutes: -240, + abbreviation: "AST", + rawFormat: "-04:00 Atlantic Time - Thule", + }, + { + name: "America/Curacao", + alternativeName: "Atlantic Time", + group: ["America/Curacao"], + continentCode: "NA", + continentName: "North America", + countryName: "Curacao", + countryCode: "CW", + mainCities: ["Willemstad"], + rawOffsetInMinutes: -240, + abbreviation: "AST", + rawFormat: "-04:00 Atlantic Time - Willemstad", + }, + { + name: "America/La_Paz", + alternativeName: "Bolivia Time", + group: ["America/La_Paz"], + continentCode: "SA", + continentName: "South America", + countryName: "Bolivia", + countryCode: "BO", + mainCities: ["La Paz", "Santa Cruz de la Sierra", "Cochabamba", "Sucre"], + rawOffsetInMinutes: -240, + abbreviation: "BOT", + rawFormat: + "-04:00 Bolivia Time - La Paz, Santa Cruz de la Sierra, Cochabamba, Sucre", + }, + { + name: "America/Santiago", + alternativeName: "Chile Time", + group: ["America/Santiago", "Chile/Continental"], + continentCode: "SA", + continentName: "South America", + countryName: "Chile", + countryCode: "CL", + mainCities: ["Santiago", "Puente Alto", "Antofagasta", "Viña del Mar"], + rawOffsetInMinutes: -240, + abbreviation: "CLT", + rawFormat: + "-04:00 Chile Time - Santiago, Puente Alto, Antofagasta, Viña del Mar", + }, + { + name: "America/Guyana", + alternativeName: "Guyana Time", + group: ["America/Guyana"], + continentCode: "SA", + continentName: "South America", + countryName: "Guyana", + countryCode: "GY", + mainCities: ["Georgetown", "Linden", "New Amsterdam"], + rawOffsetInMinutes: -240, + abbreviation: "GYT", + rawFormat: "-04:00 Guyana Time - Georgetown, Linden, New Amsterdam", + }, + { + name: "America/Asuncion", + alternativeName: "Paraguay Time", + group: ["America/Asuncion"], + continentCode: "SA", + continentName: "South America", + countryName: "Paraguay", + countryCode: "PY", + mainCities: ["Asunción", "Ciudad del Este", "San Lorenzo", "Capiatá"], + rawOffsetInMinutes: -240, + abbreviation: "PYT", + rawFormat: + "-04:00 Paraguay Time - Asunción, Ciudad del Este, San Lorenzo, Capiatá", + }, + { + name: "America/Caracas", + alternativeName: "Venezuela Time", + group: ["America/Caracas"], + continentCode: "SA", + continentName: "South America", + countryName: "Venezuela", + countryCode: "VE", + mainCities: ["Caracas", "Maracaibo", "Maracay", "Valencia"], + rawOffsetInMinutes: -240, + abbreviation: "VET", + rawFormat: "-04:00 Venezuela Time - Caracas, Maracaibo, Maracay, Valencia", + }, + { + name: "America/St_Johns", + alternativeName: "Newfoundland Time", + group: ["America/St_Johns", "Canada/Newfoundland"], + continentCode: "NA", + continentName: "North America", + countryName: "Canada", + countryCode: "CA", + mainCities: [ + "St. John's", + "Mount Pearl", + "Corner Brook", + "Conception Bay South", + ], + rawOffsetInMinutes: -210, + abbreviation: "NST", + rawFormat: + "-03:30 Newfoundland Time - St. John's, Mount Pearl, Corner Brook, Conception Bay South", + }, + { + name: "America/Argentina/Buenos_Aires", + alternativeName: "Argentina Time", + group: [ + "America/Argentina/Buenos_Aires", + "America/Argentina/Catamarca", + "America/Argentina/Cordoba", + "America/Argentina/Jujuy", + "America/Argentina/La_Rioja", + "America/Argentina/Mendoza", + "America/Argentina/Rio_Gallegos", + "America/Argentina/Salta", + "America/Argentina/San_Juan", + "America/Argentina/San_Luis", + "America/Argentina/Tucuman", + "America/Argentina/Ushuaia", + "America/Buenos_Aires", + "America/Argentina/ComodRivadavia", + "America/Catamarca", + "America/Cordoba", + "America/Rosario", + "America/Jujuy", + "America/Mendoza", + ], + continentCode: "SA", + continentName: "South America", + countryName: "Argentina", + countryCode: "AR", + mainCities: ["Buenos Aires", "Córdoba", "Rosario", "Mendoza"], + rawOffsetInMinutes: -180, + abbreviation: "ART", + rawFormat: + "-03:00 Argentina Time - Buenos Aires, Córdoba, Rosario, Mendoza", + }, + { + name: "America/Sao_Paulo", + alternativeName: "Brasilia Time", + group: [ + "America/Araguaina", + "America/Bahia", + "America/Belem", + "America/Fortaleza", + "America/Maceio", + "America/Recife", + "America/Santarem", + "America/Sao_Paulo", + "Brazil/East", + ], + continentCode: "SA", + continentName: "South America", + countryName: "Brazil", + countryCode: "BR", + mainCities: ["São Paulo", "Rio de Janeiro", "Salvador", "Fortaleza"], + rawOffsetInMinutes: -180, + abbreviation: "BRT", + rawFormat: + "-03:00 Brasilia Time - São Paulo, Rio de Janeiro, Salvador, Fortaleza", + }, + { + name: "Antarctica/Palmer", + alternativeName: "Chile Time", + group: ["Antarctica/Palmer", "Antarctica/Rothera"], + continentCode: "AN", + continentName: "Antarctica", + countryName: "Antarctica", + countryCode: "AQ", + mainCities: ["Palmer", "Rothera"], + rawOffsetInMinutes: -180, + abbreviation: "CLT", + rawFormat: "-03:00 Chile Time - Palmer, Rothera", + }, + { + name: "America/Punta_Arenas", + alternativeName: "Chile Time", + group: ["America/Punta_Arenas"], + continentCode: "SA", + continentName: "South America", + countryName: "Chile", + countryCode: "CL", + mainCities: ["Punta Arenas", "Puerto Natales"], + rawOffsetInMinutes: -180, + abbreviation: "CLT", + rawFormat: "-03:00 Chile Time - Punta Arenas, Puerto Natales", + }, + { + name: "Atlantic/Stanley", + alternativeName: "Falkland Islands Time", + group: ["Atlantic/Stanley"], + continentCode: "SA", + continentName: "South America", + countryName: "Falkland Islands", + countryCode: "FK", + mainCities: ["Stanley"], + rawOffsetInMinutes: -180, + abbreviation: "FKST", + rawFormat: "-03:00 Falkland Islands Time - Stanley", + }, + { + name: "America/Cayenne", + alternativeName: "French Guiana Time", + group: ["America/Cayenne"], + continentCode: "SA", + continentName: "South America", + countryName: "French Guiana", + countryCode: "GF", + mainCities: ["Cayenne", "Matoury", "Saint-Laurent-du-Maroni", "Kourou"], + rawOffsetInMinutes: -180, + abbreviation: "GFT", + rawFormat: + "-03:00 French Guiana Time - Cayenne, Matoury, Saint-Laurent-du-Maroni, Kourou", + }, + { + name: "America/Miquelon", + alternativeName: "St. Pierre & Miquelon Time", + group: ["America/Miquelon"], + continentCode: "NA", + continentName: "North America", + countryName: "Saint Pierre and Miquelon", + countryCode: "PM", + mainCities: ["Saint-Pierre"], + rawOffsetInMinutes: -180, + abbreviation: "PM", + rawFormat: "-03:00 St. Pierre & Miquelon Time - Saint-Pierre", + }, + { + name: "America/Paramaribo", + alternativeName: "Suriname Time", + group: ["America/Paramaribo"], + continentCode: "SA", + continentName: "South America", + countryName: "Suriname", + countryCode: "SR", + mainCities: ["Paramaribo", "Lelydorp"], + rawOffsetInMinutes: -180, + abbreviation: "SRT", + rawFormat: "-03:00 Suriname Time - Paramaribo, Lelydorp", + }, + { + name: "America/Montevideo", + alternativeName: "Uruguay Time", + group: ["America/Montevideo"], + continentCode: "SA", + continentName: "South America", + countryName: "Uruguay", + countryCode: "UY", + mainCities: ["Montevideo", "Salto", "Paysandú", "Las Piedras"], + rawOffsetInMinutes: -180, + abbreviation: "UYT", + rawFormat: "-03:00 Uruguay Time - Montevideo, Salto, Paysandú, Las Piedras", + }, + { + name: "America/Nuuk", + alternativeName: "West Greenland Time", + group: ["America/Nuuk", "America/Godthab"], + continentCode: "NA", + continentName: "North America", + countryName: "Greenland", + countryCode: "GL", + mainCities: ["Nuuk"], + rawOffsetInMinutes: -180, + abbreviation: "WGT", + rawFormat: "-03:00 West Greenland Time - Nuuk", + }, + { + name: "America/Noronha", + alternativeName: "Fernando de Noronha Time", + group: ["America/Noronha", "Brazil/DeNoronha"], + continentCode: "SA", + continentName: "South America", + countryName: "Brazil", + countryCode: "BR", + mainCities: ["Noronha"], + rawOffsetInMinutes: -120, + abbreviation: "FNT", + rawFormat: "-02:00 Fernando de Noronha Time - Noronha", + }, + { + name: "Atlantic/South_Georgia", + alternativeName: "South Georgia Time", + group: ["Atlantic/South_Georgia"], + continentCode: "AN", + continentName: "Antarctica", + countryName: "South Georgia and the South Sandwich Islands", + countryCode: "GS", + mainCities: ["Grytviken"], + rawOffsetInMinutes: -120, + abbreviation: "GST", + rawFormat: "-02:00 South Georgia Time - Grytviken", + }, + { + name: "Atlantic/Azores", + alternativeName: "Azores Time", + group: ["Atlantic/Azores"], + continentCode: "EU", + continentName: "Europe", + countryName: "Portugal", + countryCode: "PT", + mainCities: ["Ponta Delgada"], + rawOffsetInMinutes: -60, + abbreviation: "AZOT", + rawFormat: "-01:00 Azores Time - Ponta Delgada", + }, + { + name: "Atlantic/Cape_Verde", + alternativeName: "Cape Verde Time", + group: ["Atlantic/Cape_Verde"], + continentCode: "AF", + continentName: "Africa", + countryName: "Cabo Verde", + countryCode: "CV", + mainCities: ["Praia", "Mindelo", "Santa Maria", "Cova Figueira"], + rawOffsetInMinutes: -60, + abbreviation: "CVT", + rawFormat: + "-01:00 Cape Verde Time - Praia, Mindelo, Santa Maria, Cova Figueira", + }, + { + name: "America/Scoresbysund", + alternativeName: "East Greenland Time", + group: ["America/Scoresbysund"], + continentCode: "NA", + continentName: "North America", + countryName: "Greenland", + countryCode: "GL", + mainCities: ["Scoresbysund"], + rawOffsetInMinutes: -60, + abbreviation: "EGT", + rawFormat: "-01:00 East Greenland Time - Scoresbysund", + }, + { + name: "Africa/Abidjan", + alternativeName: "Greenwich Mean Time", + group: ["Africa/Abidjan", "Africa/Timbuktu"], + continentCode: "AF", + continentName: "Africa", + countryName: "Ivory Coast", + countryCode: "CI", + mainCities: ["Abidjan", "Abobo", "Bouaké", "Daloa"], + rawOffsetInMinutes: 0, + abbreviation: "GMT", + rawFormat: "+00:00 Greenwich Mean Time - Abidjan, Abobo, Bouaké, Daloa", + }, + { + name: "Africa/Accra", + alternativeName: "Greenwich Mean Time", + group: ["Africa/Accra"], + continentCode: "AF", + continentName: "Africa", + countryName: "Ghana", + countryCode: "GH", + mainCities: ["Accra", "Kumasi", "Tamale", "Takoradi"], + rawOffsetInMinutes: 0, + abbreviation: "GMT", + rawFormat: "+00:00 Greenwich Mean Time - Accra, Kumasi, Tamale, Takoradi", + }, + { + name: "Africa/Bamako", + alternativeName: "Greenwich Mean Time", + group: ["Africa/Bamako"], + continentCode: "AF", + continentName: "Africa", + countryName: "Mali", + countryCode: "ML", + mainCities: ["Bamako", "Ségou", "Sikasso", "Mopti"], + rawOffsetInMinutes: 0, + abbreviation: "GMT", + rawFormat: "+00:00 Greenwich Mean Time - Bamako, Ségou, Sikasso, Mopti", + }, + { + name: "Africa/Bissau", + alternativeName: "Greenwich Mean Time", + group: ["Africa/Bissau"], + continentCode: "AF", + continentName: "Africa", + countryName: "Guinea-Bissau", + countryCode: "GW", + mainCities: ["Bissau", "Bafatá"], + rawOffsetInMinutes: 0, + abbreviation: "GMT", + rawFormat: "+00:00 Greenwich Mean Time - Bissau, Bafatá", + }, + { + name: "Africa/Conakry", + alternativeName: "Greenwich Mean Time", + group: ["Africa/Conakry"], + continentCode: "AF", + continentName: "Africa", + countryName: "Guinea", + countryCode: "GN", + mainCities: ["Camayenne", "Conakry", "Nzérékoré", "Kindia"], + rawOffsetInMinutes: 0, + abbreviation: "GMT", + rawFormat: + "+00:00 Greenwich Mean Time - Camayenne, Conakry, Nzérékoré, Kindia", + }, + { + name: "Africa/Dakar", + alternativeName: "Greenwich Mean Time", + group: ["Africa/Dakar"], + continentCode: "AF", + continentName: "Africa", + countryName: "Senegal", + countryCode: "SN", + mainCities: ["Dakar", "Pikine", "Touba", "Thiès"], + rawOffsetInMinutes: 0, + abbreviation: "GMT", + rawFormat: "+00:00 Greenwich Mean Time - Dakar, Pikine, Touba, Thiès", + }, + { + name: "America/Danmarkshavn", + alternativeName: "Greenwich Mean Time", + group: ["America/Danmarkshavn"], + continentCode: "NA", + continentName: "North America", + countryName: "Greenland", + countryCode: "GL", + mainCities: ["Danmarkshavn"], + rawOffsetInMinutes: 0, + abbreviation: "GMT", + rawFormat: "+00:00 Greenwich Mean Time - Danmarkshavn", + }, + { + name: "Europe/Isle_of_Man", + alternativeName: "Greenwich Mean Time", + group: ["Europe/Isle_of_Man"], + continentCode: "EU", + continentName: "Europe", + countryName: "Isle of Man", + countryCode: "IM", + mainCities: ["Douglas"], + rawOffsetInMinutes: 0, + abbreviation: "GMT", + rawFormat: "+00:00 Greenwich Mean Time - Douglas", + }, + { + name: "Europe/Dublin", + alternativeName: "Greenwich Mean Time", + group: ["Europe/Dublin", "Eire"], + continentCode: "EU", + continentName: "Europe", + countryName: "Ireland", + countryCode: "IE", + mainCities: ["Dublin", "Cork", "Luimneach", "Gaillimh"], + rawOffsetInMinutes: 0, + abbreviation: "GMT", + rawFormat: "+00:00 Greenwich Mean Time - Dublin, Cork, Luimneach, Gaillimh", + }, + { + name: "Africa/Freetown", + alternativeName: "Greenwich Mean Time", + group: ["Africa/Freetown"], + continentCode: "AF", + continentName: "Africa", + countryName: "Sierra Leone", + countryCode: "SL", + mainCities: ["Freetown", "Bo", "Kenema", "Koidu"], + rawOffsetInMinutes: 0, + abbreviation: "GMT", + rawFormat: "+00:00 Greenwich Mean Time - Freetown, Bo, Kenema, Koidu", + }, + { + name: "Atlantic/St_Helena", + alternativeName: "Greenwich Mean Time", + group: ["Atlantic/St_Helena"], + continentCode: "AF", + continentName: "Africa", + countryName: "Saint Helena", + countryCode: "SH", + mainCities: ["Jamestown"], + rawOffsetInMinutes: 0, + abbreviation: "GMT", + rawFormat: "+00:00 Greenwich Mean Time - Jamestown", + }, + { + name: "Africa/Lome", + alternativeName: "Greenwich Mean Time", + group: ["Africa/Lome"], + continentCode: "AF", + continentName: "Africa", + countryName: "Togo", + countryCode: "TG", + mainCities: ["Lomé", "Sokodé", "Kara", "Atakpamé"], + rawOffsetInMinutes: 0, + abbreviation: "GMT", + rawFormat: "+00:00 Greenwich Mean Time - Lomé, Sokodé, Kara, Atakpamé", + }, + { + name: "Europe/London", + alternativeName: "Greenwich Mean Time", + group: ["Europe/London", "Europe/Belfast", "GB", "GB-Eire"], + continentCode: "EU", + continentName: "Europe", + countryName: "United Kingdom", + countryCode: "GB", + mainCities: ["London", "Birmingham", "Liverpool", "Sheffield"], + rawOffsetInMinutes: 0, + abbreviation: "GMT", + rawFormat: + "+00:00 Greenwich Mean Time - London, Birmingham, Liverpool, Sheffield", + }, + { + name: "Africa/Monrovia", + alternativeName: "Greenwich Mean Time", + group: ["Africa/Monrovia"], + continentCode: "AF", + continentName: "Africa", + countryName: "Liberia", + countryCode: "LR", + mainCities: ["Monrovia", "Gbarnga", "Kakata", "Bensonville"], + rawOffsetInMinutes: 0, + abbreviation: "GMT", + rawFormat: + "+00:00 Greenwich Mean Time - Monrovia, Gbarnga, Kakata, Bensonville", + }, + { + name: "Africa/Nouakchott", + alternativeName: "Greenwich Mean Time", + group: ["Africa/Nouakchott"], + continentCode: "AF", + continentName: "Africa", + countryName: "Mauritania", + countryCode: "MR", + mainCities: ["Nouakchott", "Nouadhibou", "Néma", "Kaédi"], + rawOffsetInMinutes: 0, + abbreviation: "GMT", + rawFormat: + "+00:00 Greenwich Mean Time - Nouakchott, Nouadhibou, Néma, Kaédi", + }, + { + name: "Africa/Ouagadougou", + alternativeName: "Greenwich Mean Time", + group: ["Africa/Ouagadougou"], + continentCode: "AF", + continentName: "Africa", + countryName: "Burkina Faso", + countryCode: "BF", + mainCities: ["Ouagadougou", "Bobo-Dioulasso", "Koudougou", "Ouahigouya"], + rawOffsetInMinutes: 0, + abbreviation: "GMT", + rawFormat: + "+00:00 Greenwich Mean Time - Ouagadougou, Bobo-Dioulasso, Koudougou, Ouahigouya", + }, + { + name: "Atlantic/Reykjavik", + alternativeName: "Greenwich Mean Time", + group: ["Atlantic/Reykjavik", "Iceland"], + continentCode: "EU", + continentName: "Europe", + countryName: "Iceland", + countryCode: "IS", + mainCities: ["Reykjavík", "Kópavogur", "Hafnarfjörður", "Akureyri"], + rawOffsetInMinutes: 0, + abbreviation: "GMT", + rawFormat: + "+00:00 Greenwich Mean Time - Reykjavík, Kópavogur, Hafnarfjörður, Akureyri", + }, + { + name: "Europe/Jersey", + alternativeName: "Greenwich Mean Time", + group: ["Europe/Jersey"], + continentCode: "EU", + continentName: "Europe", + countryName: "Jersey", + countryCode: "JE", + mainCities: ["Saint Helier"], + rawOffsetInMinutes: 0, + abbreviation: "GMT", + rawFormat: "+00:00 Greenwich Mean Time - Saint Helier", + }, + { + name: "Europe/Guernsey", + alternativeName: "Greenwich Mean Time", + group: ["Europe/Guernsey"], + continentCode: "EU", + continentName: "Europe", + countryName: "Guernsey", + countryCode: "GG", + mainCities: ["Saint Peter Port"], + rawOffsetInMinutes: 0, + abbreviation: "GMT", + rawFormat: "+00:00 Greenwich Mean Time - Saint Peter Port", + }, + { + name: "Africa/Banjul", + alternativeName: "Greenwich Mean Time", + group: ["Africa/Banjul"], + continentCode: "AF", + continentName: "Africa", + countryName: "Gambia", + countryCode: "GM", + mainCities: ["Serekunda", "Brikama", "Bakau", "Banjul"], + rawOffsetInMinutes: 0, + abbreviation: "GMT", + rawFormat: "+00:00 Greenwich Mean Time - Serekunda, Brikama, Bakau, Banjul", + }, + { + name: "Africa/Sao_Tome", + alternativeName: "Greenwich Mean Time", + group: ["Africa/Sao_Tome"], + continentCode: "AF", + continentName: "Africa", + countryName: "Sao Tome and Principe", + countryCode: "ST", + mainCities: ["São Tomé"], + rawOffsetInMinutes: 0, + abbreviation: "GMT", + rawFormat: "+00:00 Greenwich Mean Time - São Tomé", + }, + { + name: "Antarctica/Troll", + alternativeName: "Greenwich Mean Time", + group: ["Antarctica/Troll"], + continentCode: "AN", + continentName: "Antarctica", + countryName: "Antarctica", + countryCode: "AQ", + mainCities: ["Troll"], + rawOffsetInMinutes: 0, + abbreviation: "GMT", + rawFormat: "+00:00 Greenwich Mean Time - Troll", + }, + { + name: "Africa/Casablanca", + alternativeName: "Western European Time", + group: ["Africa/Casablanca"], + continentCode: "AF", + continentName: "Africa", + countryName: "Morocco", + countryCode: "MA", + mainCities: ["Casablanca", "Rabat", "Fès", "Sale"], + rawOffsetInMinutes: 0, + abbreviation: "WET", + rawFormat: "+00:00 Western European Time - Casablanca, Rabat, Fès, Sale", + }, + { + name: "Africa/El_Aaiun", + alternativeName: "Western European Time", + group: ["Africa/El_Aaiun"], + continentCode: "AF", + continentName: "Africa", + countryName: "Western Sahara", + countryCode: "EH", + mainCities: ["Laayoune", "Dakhla"], + rawOffsetInMinutes: 0, + abbreviation: "WET", + rawFormat: "+00:00 Western European Time - Laayoune, Dakhla", + }, + { + name: "Atlantic/Canary", + alternativeName: "Western European Time", + group: ["Atlantic/Canary"], + continentCode: "EU", + continentName: "Europe", + countryName: "Spain", + countryCode: "ES", + mainCities: [ + "Las Palmas de Gran Canaria", + "Santa Cruz de Tenerife", + "La Laguna", + "Telde", + ], + rawOffsetInMinutes: 0, + abbreviation: "WET", + rawFormat: + "+00:00 Western European Time - Las Palmas de Gran Canaria, Santa Cruz de Tenerife, La Laguna, Telde", + }, + { + name: "Europe/Lisbon", + alternativeName: "Western European Time", + group: ["Atlantic/Madeira", "Europe/Lisbon", "Portugal"], + continentCode: "EU", + continentName: "Europe", + countryName: "Portugal", + countryCode: "PT", + mainCities: ["Lisbon", "Porto", "Amadora", "Braga"], + rawOffsetInMinutes: 0, + abbreviation: "WET", + rawFormat: "+00:00 Western European Time - Lisbon, Porto, Amadora, Braga", + }, + { + name: "Atlantic/Faroe", + alternativeName: "Western European Time", + group: ["Atlantic/Faroe", "Atlantic/Faeroe"], + continentCode: "EU", + continentName: "Europe", + countryName: "Faroe Islands", + countryCode: "FO", + mainCities: ["Tórshavn"], + rawOffsetInMinutes: 0, + abbreviation: "WET", + rawFormat: "+00:00 Western European Time - Tórshavn", + }, + { + name: "Africa/Windhoek", + alternativeName: "Central Africa Time", + group: ["Africa/Windhoek"], + continentCode: "AF", + continentName: "Africa", + countryName: "Namibia", + countryCode: "NA", + mainCities: ["Windhoek", "Rundu", "Walvis Bay", "Oshakati"], + rawOffsetInMinutes: 60, + abbreviation: "CAT", + rawFormat: + "+01:00 Central Africa Time - Windhoek, Rundu, Walvis Bay, Oshakati", + }, + { + name: "Africa/Algiers", + alternativeName: "Central European Time", + group: ["Africa/Algiers"], + continentCode: "AF", + continentName: "Africa", + countryName: "Algeria", + countryCode: "DZ", + mainCities: ["Algiers", "Boumerdas", "Oran", "Tébessa"], + rawOffsetInMinutes: 60, + abbreviation: "CET", + rawFormat: + "+01:00 Central European Time - Algiers, Boumerdas, Oran, Tébessa", + }, + { + name: "Europe/Amsterdam", + alternativeName: "Central European Time", + group: ["Europe/Amsterdam"], + continentCode: "EU", + continentName: "Europe", + countryName: "Netherlands", + countryCode: "NL", + mainCities: ["Amsterdam", "Rotterdam", "The Hague", "Utrecht"], + rawOffsetInMinutes: 60, + abbreviation: "CET", + rawFormat: + "+01:00 Central European Time - Amsterdam, Rotterdam, The Hague, Utrecht", + }, + { + name: "Europe/Andorra", + alternativeName: "Central European Time", + group: ["Europe/Andorra"], + continentCode: "EU", + continentName: "Europe", + countryName: "Andorra", + countryCode: "AD", + mainCities: ["Andorra la Vella", "les Escaldes"], + rawOffsetInMinutes: 60, + abbreviation: "CET", + rawFormat: "+01:00 Central European Time - Andorra la Vella, les Escaldes", + }, + { + name: "Europe/Belgrade", + alternativeName: "Central European Time", + group: ["Europe/Belgrade"], + continentCode: "EU", + continentName: "Europe", + countryName: "Serbia", + countryCode: "RS", + mainCities: ["Belgrade", "Niš", "Novi Sad", "Zemun"], + rawOffsetInMinutes: 60, + abbreviation: "CET", + rawFormat: "+01:00 Central European Time - Belgrade, Niš, Novi Sad, Zemun", + }, + { + name: "Europe/Berlin", + alternativeName: "Central European Time", + group: ["Europe/Berlin", "Europe/Busingen"], + continentCode: "EU", + continentName: "Europe", + countryName: "Germany", + countryCode: "DE", + mainCities: ["Berlin", "Hamburg", "Munich", "Köln"], + rawOffsetInMinutes: 60, + abbreviation: "CET", + rawFormat: "+01:00 Central European Time - Berlin, Hamburg, Munich, Köln", + }, + { + name: "Europe/Malta", + alternativeName: "Central European Time", + group: ["Europe/Malta"], + continentCode: "EU", + continentName: "Europe", + countryName: "Malta", + countryCode: "MT", + mainCities: ["Birkirkara", "Qormi", "Mosta", "Żabbar"], + rawOffsetInMinutes: 60, + abbreviation: "CET", + rawFormat: + "+01:00 Central European Time - Birkirkara, Qormi, Mosta, Żabbar", + }, + { + name: "Europe/Bratislava", + alternativeName: "Central European Time", + group: ["Europe/Bratislava"], + continentCode: "EU", + continentName: "Europe", + countryName: "Slovakia", + countryCode: "SK", + mainCities: ["Bratislava", "Košice", "Prešov", "Nitra"], + rawOffsetInMinutes: 60, + abbreviation: "CET", + rawFormat: + "+01:00 Central European Time - Bratislava, Košice, Prešov, Nitra", + }, + { + name: "Europe/Brussels", + alternativeName: "Central European Time", + group: ["Europe/Brussels"], + continentCode: "EU", + continentName: "Europe", + countryName: "Belgium", + countryCode: "BE", + mainCities: ["Brussels", "Antwerpen", "Gent", "Charleroi"], + rawOffsetInMinutes: 60, + abbreviation: "CET", + rawFormat: + "+01:00 Central European Time - Brussels, Antwerpen, Gent, Charleroi", + }, + { + name: "Europe/Budapest", + alternativeName: "Central European Time", + group: ["Europe/Budapest"], + continentCode: "EU", + continentName: "Europe", + countryName: "Hungary", + countryCode: "HU", + mainCities: ["Budapest", "Debrecen", "Miskolc", "Szeged"], + rawOffsetInMinutes: 60, + abbreviation: "CET", + rawFormat: + "+01:00 Central European Time - Budapest, Debrecen, Miskolc, Szeged", + }, + { + name: "Europe/Copenhagen", + alternativeName: "Central European Time", + group: ["Europe/Copenhagen"], + continentCode: "EU", + continentName: "Europe", + countryName: "Denmark", + countryCode: "DK", + mainCities: ["Copenhagen", "Århus", "Odense", "Aalborg"], + rawOffsetInMinutes: 60, + abbreviation: "CET", + rawFormat: + "+01:00 Central European Time - Copenhagen, Århus, Odense, Aalborg", + }, + { + name: "Europe/Gibraltar", + alternativeName: "Central European Time", + group: ["Europe/Gibraltar"], + continentCode: "EU", + continentName: "Europe", + countryName: "Gibraltar", + countryCode: "GI", + mainCities: ["Gibraltar"], + rawOffsetInMinutes: 60, + abbreviation: "CET", + rawFormat: "+01:00 Central European Time - Gibraltar", + }, + { + name: "Europe/Ljubljana", + alternativeName: "Central European Time", + group: ["Europe/Ljubljana"], + continentCode: "EU", + continentName: "Europe", + countryName: "Slovenia", + countryCode: "SI", + mainCities: ["Ljubljana", "Maribor", "Celje", "Kranj"], + rawOffsetInMinutes: 60, + abbreviation: "CET", + rawFormat: + "+01:00 Central European Time - Ljubljana, Maribor, Celje, Kranj", + }, + { + name: "Arctic/Longyearbyen", + alternativeName: "Central European Time", + group: ["Arctic/Longyearbyen"], + continentCode: "EU", + continentName: "Europe", + countryName: "Svalbard and Jan Mayen", + countryCode: "SJ", + mainCities: ["Longyearbyen"], + rawOffsetInMinutes: 60, + abbreviation: "CET", + rawFormat: "+01:00 Central European Time - Longyearbyen", + }, + { + name: "Europe/Luxembourg", + alternativeName: "Central European Time", + group: ["Europe/Luxembourg"], + continentCode: "EU", + continentName: "Europe", + countryName: "Luxembourg", + countryCode: "LU", + mainCities: ["Luxembourg", "Esch-sur-Alzette", "Dudelange"], + rawOffsetInMinutes: 60, + abbreviation: "CET", + rawFormat: + "+01:00 Central European Time - Luxembourg, Esch-sur-Alzette, Dudelange", + }, + { + name: "Europe/Madrid", + alternativeName: "Central European Time", + group: ["Africa/Ceuta", "Europe/Madrid"], + continentCode: "EU", + continentName: "Europe", + countryName: "Spain", + countryCode: "ES", + mainCities: ["Madrid", "Barcelona", "Valencia", "Sevilla"], + rawOffsetInMinutes: 60, + abbreviation: "CET", + rawFormat: + "+01:00 Central European Time - Madrid, Barcelona, Valencia, Sevilla", + }, + { + name: "Europe/Monaco", + alternativeName: "Central European Time", + group: ["Europe/Monaco"], + continentCode: "EU", + continentName: "Europe", + countryName: "Monaco", + countryCode: "MC", + mainCities: ["Monaco", "Monte-Carlo"], + rawOffsetInMinutes: 60, + abbreviation: "CET", + rawFormat: "+01:00 Central European Time - Monaco, Monte-Carlo", + }, + { + name: "Europe/Oslo", + alternativeName: "Central European Time", + group: ["Europe/Oslo", "Atlantic/Jan_Mayen"], + continentCode: "EU", + continentName: "Europe", + countryName: "Norway", + countryCode: "NO", + mainCities: ["Oslo", "Bergen", "Trondheim", "Stavanger"], + rawOffsetInMinutes: 60, + abbreviation: "CET", + rawFormat: + "+01:00 Central European Time - Oslo, Bergen, Trondheim, Stavanger", + }, + { + name: "Europe/Paris", + alternativeName: "Central European Time", + group: ["Europe/Paris"], + continentCode: "EU", + continentName: "Europe", + countryName: "France", + countryCode: "FR", + mainCities: ["Paris", "Marseille", "Lyon", "Toulouse"], + rawOffsetInMinutes: 60, + abbreviation: "CET", + rawFormat: + "+01:00 Central European Time - Paris, Marseille, Lyon, Toulouse", + }, + { + name: "Europe/Podgorica", + alternativeName: "Central European Time", + group: ["Europe/Podgorica"], + continentCode: "EU", + continentName: "Europe", + countryName: "Montenegro", + countryCode: "ME", + mainCities: ["Podgorica", "Nikšić", "Herceg Novi", "Pljevlja"], + rawOffsetInMinutes: 60, + abbreviation: "CET", + rawFormat: + "+01:00 Central European Time - Podgorica, Nikšić, Herceg Novi, Pljevlja", + }, + { + name: "Europe/Prague", + alternativeName: "Central European Time", + group: ["Europe/Prague"], + continentCode: "EU", + continentName: "Europe", + countryName: "Czechia", + countryCode: "CZ", + mainCities: ["Prague", "Brno", "Ostrava", "Pilsen"], + rawOffsetInMinutes: 60, + abbreviation: "CET", + rawFormat: "+01:00 Central European Time - Prague, Brno, Ostrava, Pilsen", + }, + { + name: "Europe/Rome", + alternativeName: "Central European Time", + group: ["Europe/Rome"], + continentCode: "EU", + continentName: "Europe", + countryName: "Italy", + countryCode: "IT", + mainCities: ["Rome", "Milan", "Naples", "Turin"], + rawOffsetInMinutes: 60, + abbreviation: "CET", + rawFormat: "+01:00 Central European Time - Rome, Milan, Naples, Turin", + }, + { + name: "Europe/San_Marino", + alternativeName: "Central European Time", + group: ["Europe/San_Marino"], + continentCode: "EU", + continentName: "Europe", + countryName: "San Marino", + countryCode: "SM", + mainCities: ["San Marino"], + rawOffsetInMinutes: 60, + abbreviation: "CET", + rawFormat: "+01:00 Central European Time - San Marino", + }, + { + name: "Europe/Sarajevo", + alternativeName: "Central European Time", + group: ["Europe/Sarajevo"], + continentCode: "EU", + continentName: "Europe", + countryName: "Bosnia and Herzegovina", + countryCode: "BA", + mainCities: ["Sarajevo", "Banja Luka", "Zenica", "Tuzla"], + rawOffsetInMinutes: 60, + abbreviation: "CET", + rawFormat: + "+01:00 Central European Time - Sarajevo, Banja Luka, Zenica, Tuzla", + }, + { + name: "Europe/Skopje", + alternativeName: "Central European Time", + group: ["Europe/Skopje"], + continentCode: "EU", + continentName: "Europe", + countryName: "North Macedonia", + countryCode: "MK", + mainCities: ["Skopje", "Bitola", "Kumanovo", "Prilep"], + rawOffsetInMinutes: 60, + abbreviation: "CET", + rawFormat: + "+01:00 Central European Time - Skopje, Bitola, Kumanovo, Prilep", + }, + { + name: "Europe/Stockholm", + alternativeName: "Central European Time", + group: ["Europe/Stockholm"], + continentCode: "EU", + continentName: "Europe", + countryName: "Sweden", + countryCode: "SE", + mainCities: ["Stockholm", "Göteborg", "Malmö", "Uppsala"], + rawOffsetInMinutes: 60, + abbreviation: "CET", + rawFormat: + "+01:00 Central European Time - Stockholm, Göteborg, Malmö, Uppsala", + }, + { + name: "Europe/Tirane", + alternativeName: "Central European Time", + group: ["Europe/Tirane"], + continentCode: "EU", + continentName: "Europe", + countryName: "Albania", + countryCode: "AL", + mainCities: ["Tirana", "Durrës", "Elbasan", "Vlorë"], + rawOffsetInMinutes: 60, + abbreviation: "CET", + rawFormat: "+01:00 Central European Time - Tirana, Durrës, Elbasan, Vlorë", + }, + { + name: "Africa/Tunis", + alternativeName: "Central European Time", + group: ["Africa/Tunis"], + continentCode: "AF", + continentName: "Africa", + countryName: "Tunisia", + countryCode: "TN", + mainCities: ["Tunis", "Sfax", "Sousse", "Kairouan"], + rawOffsetInMinutes: 60, + abbreviation: "CET", + rawFormat: "+01:00 Central European Time - Tunis, Sfax, Sousse, Kairouan", + }, + { + name: "Europe/Vaduz", + alternativeName: "Central European Time", + group: ["Europe/Vaduz"], + continentCode: "EU", + continentName: "Europe", + countryName: "Liechtenstein", + countryCode: "LI", + mainCities: ["Vaduz"], + rawOffsetInMinutes: 60, + abbreviation: "CET", + rawFormat: "+01:00 Central European Time - Vaduz", + }, + { + name: "Europe/Vatican", + alternativeName: "Central European Time", + group: ["Europe/Vatican"], + continentCode: "EU", + continentName: "Europe", + countryName: "Vatican", + countryCode: "VA", + mainCities: ["Vatican City"], + rawOffsetInMinutes: 60, + abbreviation: "CET", + rawFormat: "+01:00 Central European Time - Vatican City", + }, + { + name: "Europe/Vienna", + alternativeName: "Central European Time", + group: ["Europe/Vienna"], + continentCode: "EU", + continentName: "Europe", + countryName: "Austria", + countryCode: "AT", + mainCities: ["Vienna", "Graz", "Linz", "Favoriten"], + rawOffsetInMinutes: 60, + abbreviation: "CET", + rawFormat: "+01:00 Central European Time - Vienna, Graz, Linz, Favoriten", + }, + { + name: "Europe/Warsaw", + alternativeName: "Central European Time", + group: ["Europe/Warsaw", "Poland"], + continentCode: "EU", + continentName: "Europe", + countryName: "Poland", + countryCode: "PL", + mainCities: ["Warsaw", "Łódź", "Kraków", "Wrocław"], + rawOffsetInMinutes: 60, + abbreviation: "CET", + rawFormat: "+01:00 Central European Time - Warsaw, Łódź, Kraków, Wrocław", + }, + { + name: "Europe/Zagreb", + alternativeName: "Central European Time", + group: ["Europe/Zagreb"], + continentCode: "EU", + continentName: "Europe", + countryName: "Croatia", + countryCode: "HR", + mainCities: ["Zagreb", "Split", "Rijeka", "Osijek"], + rawOffsetInMinutes: 60, + abbreviation: "CET", + rawFormat: "+01:00 Central European Time - Zagreb, Split, Rijeka, Osijek", + }, + { + name: "Europe/Zurich", + alternativeName: "Central European Time", + group: ["Europe/Zurich", "Europe/Busingen"], + continentCode: "EU", + continentName: "Europe", + countryName: "Switzerland", + countryCode: "CH", + mainCities: ["Zürich", "Genève", "Basel", "Lausanne"], + rawOffsetInMinutes: 60, + abbreviation: "CET", + rawFormat: "+01:00 Central European Time - Zürich, Genève, Basel, Lausanne", + }, + { + name: "Africa/Bangui", + alternativeName: "West Africa Time", + group: ["Africa/Bangui"], + continentCode: "AF", + continentName: "Africa", + countryName: "Central African Republic", + countryCode: "CF", + mainCities: ["Bangui", "Bimbo", "Mbaïki", "Berbérati"], + rawOffsetInMinutes: 60, + abbreviation: "WAT", + rawFormat: "+01:00 West Africa Time - Bangui, Bimbo, Mbaïki, Berbérati", + }, + { + name: "Africa/Malabo", + alternativeName: "West Africa Time", + group: ["Africa/Malabo"], + continentCode: "AF", + continentName: "Africa", + countryName: "Equatorial Guinea", + countryCode: "GQ", + mainCities: ["Bata", "Malabo", "Ebebiyin"], + rawOffsetInMinutes: 60, + abbreviation: "WAT", + rawFormat: "+01:00 West Africa Time - Bata, Malabo, Ebebiyin", + }, + { + name: "Africa/Brazzaville", + alternativeName: "West Africa Time", + group: ["Africa/Brazzaville"], + continentCode: "AF", + continentName: "Africa", + countryName: "Republic of the Congo", + countryCode: "CG", + mainCities: ["Brazzaville", "Pointe-Noire", "Dolisie", "Kayes"], + rawOffsetInMinutes: 60, + abbreviation: "WAT", + rawFormat: + "+01:00 West Africa Time - Brazzaville, Pointe-Noire, Dolisie, Kayes", + }, + { + name: "Africa/Porto-Novo", + alternativeName: "West Africa Time", + group: ["Africa/Porto-Novo"], + continentCode: "AF", + continentName: "Africa", + countryName: "Benin", + countryCode: "BJ", + mainCities: ["Cotonou", "Abomey-Calavi", "Djougou", "Porto-Novo"], + rawOffsetInMinutes: 60, + abbreviation: "WAT", + rawFormat: + "+01:00 West Africa Time - Cotonou, Abomey-Calavi, Djougou, Porto-Novo", + }, + { + name: "Africa/Douala", + alternativeName: "West Africa Time", + group: ["Africa/Douala"], + continentCode: "AF", + continentName: "Africa", + countryName: "Cameroon", + countryCode: "CM", + mainCities: ["Douala", "Yaoundé", "Garoua", "Kousséri"], + rawOffsetInMinutes: 60, + abbreviation: "WAT", + rawFormat: "+01:00 West Africa Time - Douala, Yaoundé, Garoua, Kousséri", + }, + { + name: "Africa/Kinshasa", + alternativeName: "West Africa Time", + group: ["Africa/Kinshasa"], + continentCode: "AF", + continentName: "Africa", + countryName: "Democratic Republic of the Congo", + countryCode: "CD", + mainCities: ["Kinshasa", "Masina", "Kikwit", "Mbandaka"], + rawOffsetInMinutes: 60, + abbreviation: "WAT", + rawFormat: "+01:00 West Africa Time - Kinshasa, Masina, Kikwit, Mbandaka", + }, + { + name: "Africa/Lagos", + alternativeName: "West Africa Time", + group: ["Africa/Lagos"], + continentCode: "AF", + continentName: "Africa", + countryName: "Nigeria", + countryCode: "NG", + mainCities: ["Lagos", "Kano", "Ibadan", "Port Harcourt"], + rawOffsetInMinutes: 60, + abbreviation: "WAT", + rawFormat: "+01:00 West Africa Time - Lagos, Kano, Ibadan, Port Harcourt", + }, + { + name: "Africa/Libreville", + alternativeName: "West Africa Time", + group: ["Africa/Libreville"], + continentCode: "AF", + continentName: "Africa", + countryName: "Gabon", + countryCode: "GA", + mainCities: ["Libreville", "Port-Gentil", "Franceville", "Oyem"], + rawOffsetInMinutes: 60, + abbreviation: "WAT", + rawFormat: + "+01:00 West Africa Time - Libreville, Port-Gentil, Franceville, Oyem", + }, + { + name: "Africa/Luanda", + alternativeName: "West Africa Time", + group: ["Africa/Luanda"], + continentCode: "AF", + continentName: "Africa", + countryName: "Angola", + countryCode: "AO", + mainCities: ["Luanda", "N’dalatando", "Huambo", "Lobito"], + rawOffsetInMinutes: 60, + abbreviation: "WAT", + rawFormat: "+01:00 West Africa Time - Luanda, N’dalatando, Huambo, Lobito", + }, + { + name: "Africa/Ndjamena", + alternativeName: "West Africa Time", + group: ["Africa/Ndjamena"], + continentCode: "AF", + continentName: "Africa", + countryName: "Chad", + countryCode: "TD", + mainCities: ["N'Djamena", "Moundou", "Sarh", "Abéché"], + rawOffsetInMinutes: 60, + abbreviation: "WAT", + rawFormat: "+01:00 West Africa Time - N'Djamena, Moundou, Sarh, Abéché", + }, + { + name: "Africa/Niamey", + alternativeName: "West Africa Time", + group: ["Africa/Niamey"], + continentCode: "AF", + continentName: "Africa", + countryName: "Niger", + countryCode: "NE", + mainCities: ["Niamey", "Zinder", "Maradi", "Agadez"], + rawOffsetInMinutes: 60, + abbreviation: "WAT", + rawFormat: "+01:00 West Africa Time - Niamey, Zinder, Maradi, Agadez", + }, + { + name: "Africa/Bujumbura", + alternativeName: "Central Africa Time", + group: ["Africa/Bujumbura"], + continentCode: "AF", + continentName: "Africa", + countryName: "Burundi", + countryCode: "BI", + mainCities: ["Bujumbura", "Muyinga", "Gitega", "Ruyigi"], + rawOffsetInMinutes: 120, + abbreviation: "CAT", + rawFormat: + "+02:00 Central Africa Time - Bujumbura, Muyinga, Gitega, Ruyigi", + }, + { + name: "Africa/Gaborone", + alternativeName: "Central Africa Time", + group: ["Africa/Gaborone"], + continentCode: "AF", + continentName: "Africa", + countryName: "Botswana", + countryCode: "BW", + mainCities: ["Gaborone", "Francistown", "Molepolole", "Selebi-Phikwe"], + rawOffsetInMinutes: 120, + abbreviation: "CAT", + rawFormat: + "+02:00 Central Africa Time - Gaborone, Francistown, Molepolole, Selebi-Phikwe", + }, + { + name: "Africa/Harare", + alternativeName: "Central Africa Time", + group: ["Africa/Harare"], + continentCode: "AF", + continentName: "Africa", + countryName: "Zimbabwe", + countryCode: "ZW", + mainCities: ["Harare", "Bulawayo", "Chitungwiza", "Mutare"], + rawOffsetInMinutes: 120, + abbreviation: "CAT", + rawFormat: + "+02:00 Central Africa Time - Harare, Bulawayo, Chitungwiza, Mutare", + }, + { + name: "Africa/Juba", + alternativeName: "Central Africa Time", + group: ["Africa/Juba"], + continentCode: "AF", + continentName: "Africa", + countryName: "South Sudan", + countryCode: "SS", + mainCities: ["Juba", "Winejok", "Yei", "Malakal"], + rawOffsetInMinutes: 120, + abbreviation: "CAT", + rawFormat: "+02:00 Central Africa Time - Juba, Winejok, Yei, Malakal", + }, + { + name: "Africa/Khartoum", + alternativeName: "Central Africa Time", + group: ["Africa/Khartoum"], + continentCode: "AF", + continentName: "Africa", + countryName: "Sudan", + countryCode: "SD", + mainCities: ["Khartoum", "Omdurman", "Nyala", "Port Sudan"], + rawOffsetInMinutes: 120, + abbreviation: "CAT", + rawFormat: + "+02:00 Central Africa Time - Khartoum, Omdurman, Nyala, Port Sudan", + }, + { + name: "Africa/Kigali", + alternativeName: "Central Africa Time", + group: ["Africa/Kigali"], + continentCode: "AF", + continentName: "Africa", + countryName: "Rwanda", + countryCode: "RW", + mainCities: ["Kigali", "Gisenyi", "Butare", "Gitarama"], + rawOffsetInMinutes: 120, + abbreviation: "CAT", + rawFormat: "+02:00 Central Africa Time - Kigali, Gisenyi, Butare, Gitarama", + }, + { + name: "Africa/Blantyre", + alternativeName: "Central Africa Time", + group: ["Africa/Blantyre"], + continentCode: "AF", + continentName: "Africa", + countryName: "Malawi", + countryCode: "MW", + mainCities: ["Lilongwe", "Blantyre", "Mzuzu", "Zomba"], + rawOffsetInMinutes: 120, + abbreviation: "CAT", + rawFormat: "+02:00 Central Africa Time - Lilongwe, Blantyre, Mzuzu, Zomba", + }, + { + name: "Africa/Lubumbashi", + alternativeName: "Central Africa Time", + group: ["Africa/Lubumbashi"], + continentCode: "AF", + continentName: "Africa", + countryName: "Democratic Republic of the Congo", + countryCode: "CD", + mainCities: ["Lubumbashi", "Mbuji-Mayi", "Kisangani", "Kananga"], + rawOffsetInMinutes: 120, + abbreviation: "CAT", + rawFormat: + "+02:00 Central Africa Time - Lubumbashi, Mbuji-Mayi, Kisangani, Kananga", + }, + { + name: "Africa/Lusaka", + alternativeName: "Central Africa Time", + group: ["Africa/Lusaka"], + continentCode: "AF", + continentName: "Africa", + countryName: "Zambia", + countryCode: "ZM", + mainCities: ["Lusaka", "Kitwe", "Ndola", "Kabwe"], + rawOffsetInMinutes: 120, + abbreviation: "CAT", + rawFormat: "+02:00 Central Africa Time - Lusaka, Kitwe, Ndola, Kabwe", + }, + { + name: "Africa/Maputo", + alternativeName: "Central Africa Time", + group: ["Africa/Maputo"], + continentCode: "AF", + continentName: "Africa", + countryName: "Mozambique", + countryCode: "MZ", + mainCities: ["Maputo", "Matola", "Beira", "Nampula"], + rawOffsetInMinutes: 120, + abbreviation: "CAT", + rawFormat: "+02:00 Central Africa Time - Maputo, Matola, Beira, Nampula", + }, + { + name: "Asia/Damascus", + alternativeName: "Eastern European Time", + group: ["Asia/Damascus"], + continentCode: "AS", + continentName: "Asia", + countryName: "Syria", + countryCode: "SY", + mainCities: ["Aleppo", "Damascus", "Homs", "Ḩamāh"], + rawOffsetInMinutes: 120, + abbreviation: "EET", + rawFormat: "+02:00 Eastern European Time - Aleppo, Damascus, Homs, Ḩamāh", + }, + { + name: "Asia/Amman", + alternativeName: "Eastern European Time", + group: ["Asia/Amman"], + continentCode: "AS", + continentName: "Asia", + countryName: "Jordan", + countryCode: "JO", + mainCities: ["Amman", "Zarqa", "Irbid", "Russeifa"], + rawOffsetInMinutes: 120, + abbreviation: "EET", + rawFormat: "+02:00 Eastern European Time - Amman, Zarqa, Irbid, Russeifa", + }, + { + name: "Europe/Athens", + alternativeName: "Eastern European Time", + group: ["Europe/Athens"], + continentCode: "EU", + continentName: "Europe", + countryName: "Greece", + countryCode: "GR", + mainCities: ["Athens", "Thessaloníki", "Pátra", "Piraeus"], + rawOffsetInMinutes: 120, + abbreviation: "EET", + rawFormat: + "+02:00 Eastern European Time - Athens, Thessaloníki, Pátra, Piraeus", + }, + { + name: "Asia/Beirut", + alternativeName: "Eastern European Time", + group: ["Asia/Beirut"], + continentCode: "AS", + continentName: "Asia", + countryName: "Lebanon", + countryCode: "LB", + mainCities: ["Beirut", "Ra’s Bayrūt", "Tripoli", "Sidon"], + rawOffsetInMinutes: 120, + abbreviation: "EET", + rawFormat: + "+02:00 Eastern European Time - Beirut, Ra’s Bayrūt, Tripoli, Sidon", + }, + { + name: "Europe/Bucharest", + alternativeName: "Eastern European Time", + group: ["Europe/Bucharest"], + continentCode: "EU", + continentName: "Europe", + countryName: "Romania", + countryCode: "RO", + mainCities: ["Bucharest", "Sector 3", "Sector 6", "Sector 2"], + rawOffsetInMinutes: 120, + abbreviation: "EET", + rawFormat: + "+02:00 Eastern European Time - Bucharest, Sector 3, Sector 6, Sector 2", + }, + { + name: "Africa/Cairo", + alternativeName: "Eastern European Time", + group: ["Africa/Cairo", "Egypt"], + continentCode: "AF", + continentName: "Africa", + countryName: "Egypt", + countryCode: "EG", + mainCities: ["Cairo", "Alexandria", "Giza", "Port Said"], + rawOffsetInMinutes: 120, + abbreviation: "EET", + rawFormat: + "+02:00 Eastern European Time - Cairo, Alexandria, Giza, Port Said", + }, + { + name: "Europe/Chisinau", + alternativeName: "Eastern European Time", + group: ["Europe/Chisinau", "Europe/Tiraspol"], + continentCode: "EU", + continentName: "Europe", + countryName: "Moldova", + countryCode: "MD", + mainCities: ["Chisinau", "Tiraspol", "Bălţi", "Bender"], + rawOffsetInMinutes: 120, + abbreviation: "EET", + rawFormat: + "+02:00 Eastern European Time - Chisinau, Tiraspol, Bălţi, Bender", + }, + { + name: "Asia/Hebron", + alternativeName: "Eastern European Time", + group: ["Asia/Gaza", "Asia/Hebron"], + continentCode: "AS", + continentName: "Asia", + countryName: "Palestinian Territory", + countryCode: "PS", + mainCities: ["East Jerusalem", "Gaza", "Khān Yūnis", "Jabālyā"], + rawOffsetInMinutes: 120, + abbreviation: "EET", + rawFormat: + "+02:00 Eastern European Time - East Jerusalem, Gaza, Khān Yūnis, Jabālyā", + }, + { + name: "Europe/Helsinki", + alternativeName: "Eastern European Time", + group: ["Europe/Helsinki"], + continentCode: "EU", + continentName: "Europe", + countryName: "Finland", + countryCode: "FI", + mainCities: ["Helsinki", "Espoo", "Tampere", "Vantaa"], + rawOffsetInMinutes: 120, + abbreviation: "EET", + rawFormat: + "+02:00 Eastern European Time - Helsinki, Espoo, Tampere, Vantaa", + }, + { + name: "Europe/Kaliningrad", + alternativeName: "Eastern European Time", + group: ["Europe/Kaliningrad"], + continentCode: "EU", + continentName: "Europe", + countryName: "Russia", + countryCode: "RU", + mainCities: ["Kaliningrad", "Chernyakhovsk", "Sovetsk", "Baltiysk"], + rawOffsetInMinutes: 120, + abbreviation: "EET", + rawFormat: + "+02:00 Eastern European Time - Kaliningrad, Chernyakhovsk, Sovetsk, Baltiysk", + }, + { + name: "Europe/Kiev", + alternativeName: "Eastern European Time", + group: ["Europe/Kiev", "Europe/Uzhgorod", "Europe/Zaporozhye"], + continentCode: "EU", + continentName: "Europe", + countryName: "Ukraine", + countryCode: "UA", + mainCities: ["Kyiv", "Kharkiv", "Donetsk", "Odessa"], + rawOffsetInMinutes: 120, + abbreviation: "EET", + rawFormat: "+02:00 Eastern European Time - Kyiv, Kharkiv, Donetsk, Odessa", + }, + { + name: "Europe/Mariehamn", + alternativeName: "Eastern European Time", + group: ["Europe/Mariehamn"], + continentCode: "EU", + continentName: "Europe", + countryName: "Aland Islands", + countryCode: "AX", + mainCities: ["Mariehamn"], + rawOffsetInMinutes: 120, + abbreviation: "EET", + rawFormat: "+02:00 Eastern European Time - Mariehamn", + }, + { + name: "Asia/Nicosia", + alternativeName: "Eastern European Time", + group: ["Asia/Famagusta", "Asia/Nicosia", "Europe/Nicosia"], + continentCode: "EU", + continentName: "Europe", + countryName: "Cyprus", + countryCode: "CY", + mainCities: ["Nicosia", "Limassol", "Larnaca", "Stróvolos"], + rawOffsetInMinutes: 120, + abbreviation: "EET", + rawFormat: + "+02:00 Eastern European Time - Nicosia, Limassol, Larnaca, Stróvolos", + }, + { + name: "Europe/Riga", + alternativeName: "Eastern European Time", + group: ["Europe/Riga"], + continentCode: "EU", + continentName: "Europe", + countryName: "Latvia", + countryCode: "LV", + mainCities: ["Riga", "Daugavpils", "Liepāja", "Jelgava"], + rawOffsetInMinutes: 120, + abbreviation: "EET", + rawFormat: + "+02:00 Eastern European Time - Riga, Daugavpils, Liepāja, Jelgava", + }, + { + name: "Europe/Sofia", + alternativeName: "Eastern European Time", + group: ["Europe/Sofia"], + continentCode: "EU", + continentName: "Europe", + countryName: "Bulgaria", + countryCode: "BG", + mainCities: ["Sofia", "Plovdiv", "Varna", "Burgas"], + rawOffsetInMinutes: 120, + abbreviation: "EET", + rawFormat: "+02:00 Eastern European Time - Sofia, Plovdiv, Varna, Burgas", + }, + { + name: "Europe/Tallinn", + alternativeName: "Eastern European Time", + group: ["Europe/Tallinn"], + continentCode: "EU", + continentName: "Europe", + countryName: "Estonia", + countryCode: "EE", + mainCities: ["Tallinn", "Tartu", "Narva", "Kohtla-Järve"], + rawOffsetInMinutes: 120, + abbreviation: "EET", + rawFormat: + "+02:00 Eastern European Time - Tallinn, Tartu, Narva, Kohtla-Järve", + }, + { + name: "Africa/Tripoli", + alternativeName: "Eastern European Time", + group: ["Africa/Tripoli", "Libya"], + continentCode: "AF", + continentName: "Africa", + countryName: "Libya", + countryCode: "LY", + mainCities: ["Tripoli", "Benghazi", "Mişrātah", "Tarhuna"], + rawOffsetInMinutes: 120, + abbreviation: "EET", + rawFormat: + "+02:00 Eastern European Time - Tripoli, Benghazi, Mişrātah, Tarhuna", + }, + { + name: "Europe/Vilnius", + alternativeName: "Eastern European Time", + group: ["Europe/Vilnius"], + continentCode: "EU", + continentName: "Europe", + countryName: "Lithuania", + countryCode: "LT", + mainCities: ["Vilnius", "Kaunas", "Klaipėda", "Šiauliai"], + rawOffsetInMinutes: 120, + abbreviation: "EET", + rawFormat: + "+02:00 Eastern European Time - Vilnius, Kaunas, Klaipėda, Šiauliai", + }, + { + name: "Asia/Jerusalem", + alternativeName: "Israel Time", + group: ["Asia/Jerusalem", "Asia/Tel_Aviv", "Israel"], + continentCode: "AS", + continentName: "Asia", + countryName: "Israel", + countryCode: "IL", + mainCities: ["Jerusalem", "Tel Aviv", "West Jerusalem", "Haifa"], + rawOffsetInMinutes: 120, + abbreviation: "IST", + rawFormat: + "+02:00 Israel Time - Jerusalem, Tel Aviv, West Jerusalem, Haifa", + }, + { + name: "Africa/Johannesburg", + alternativeName: "South Africa Time", + group: ["Africa/Johannesburg"], + continentCode: "AF", + continentName: "Africa", + countryName: "South Africa", + countryCode: "ZA", + mainCities: ["Cape Town", "Durban", "Johannesburg", "Soweto"], + rawOffsetInMinutes: 120, + abbreviation: "SAST", + rawFormat: + "+02:00 South Africa Time - Cape Town, Durban, Johannesburg, Soweto", + }, + { + name: "Africa/Mbabane", + alternativeName: "South Africa Time", + group: ["Africa/Mbabane"], + continentCode: "AF", + continentName: "Africa", + countryName: "Eswatini", + countryCode: "SZ", + mainCities: ["Manzini", "Mbabane", "Lobamba"], + rawOffsetInMinutes: 120, + abbreviation: "SAST", + rawFormat: "+02:00 South Africa Time - Manzini, Mbabane, Lobamba", + }, + { + name: "Africa/Maseru", + alternativeName: "South Africa Time", + group: ["Africa/Maseru"], + continentCode: "AF", + continentName: "Africa", + countryName: "Lesotho", + countryCode: "LS", + mainCities: ["Maseru", "Mafeteng", "Leribe", "Maputsoe"], + rawOffsetInMinutes: 120, + abbreviation: "SAST", + rawFormat: "+02:00 South Africa Time - Maseru, Mafeteng, Leribe, Maputsoe", + }, + { + name: "Asia/Kuwait", + alternativeName: "Arabian Time", + group: ["Asia/Kuwait"], + continentCode: "AS", + continentName: "Asia", + countryName: "Kuwait", + countryCode: "KW", + mainCities: ["Al Aḩmadī", "Ḩawallī", "As Sālimīyah", "Şabāḩ as Sālim"], + rawOffsetInMinutes: 180, + abbreviation: "AST", + rawFormat: + "+03:00 Arabian Time - Al Aḩmadī, Ḩawallī, As Sālimīyah, Şabāḩ as Sālim", + }, + { + name: "Asia/Baghdad", + alternativeName: "Arabian Time", + group: ["Asia/Baghdad"], + continentCode: "AS", + continentName: "Asia", + countryName: "Iraq", + countryCode: "IQ", + mainCities: [ + "Baghdad", + "Basrah", + "Al Mawşil al Jadīdah", + "Al Başrah al Qadīmah", + ], + rawOffsetInMinutes: 180, + abbreviation: "AST", + rawFormat: + "+03:00 Arabian Time - Baghdad, Basrah, Al Mawşil al Jadīdah, Al Başrah al Qadīmah", + }, + { + name: "Asia/Qatar", + alternativeName: "Arabian Time", + group: ["Asia/Qatar"], + continentCode: "AS", + continentName: "Asia", + countryName: "Qatar", + countryCode: "QA", + mainCities: ["Doha", "Ar Rayyān", "Umm Şalāl Muḩammad", "Al Wakrah"], + rawOffsetInMinutes: 180, + abbreviation: "AST", + rawFormat: + "+03:00 Arabian Time - Doha, Ar Rayyān, Umm Şalāl Muḩammad, Al Wakrah", + }, + { + name: "Asia/Bahrain", + alternativeName: "Arabian Time", + group: ["Asia/Bahrain"], + continentCode: "AS", + continentName: "Asia", + countryName: "Bahrain", + countryCode: "BH", + mainCities: ["Manama", "Al Muharraq", "Ar Rifā‘", "Dār Kulayb"], + rawOffsetInMinutes: 180, + abbreviation: "AST", + rawFormat: + "+03:00 Arabian Time - Manama, Al Muharraq, Ar Rifā‘, Dār Kulayb", + }, + { + name: "Asia/Riyadh", + alternativeName: "Arabian Time", + group: ["Asia/Riyadh"], + continentCode: "AS", + continentName: "Asia", + countryName: "Saudi Arabia", + countryCode: "SA", + mainCities: ["Riyadh", "Jeddah", "Mecca", "Medina"], + rawOffsetInMinutes: 180, + abbreviation: "AST", + rawFormat: "+03:00 Arabian Time - Riyadh, Jeddah, Mecca, Medina", + }, + { + name: "Asia/Aden", + alternativeName: "Arabian Time", + group: ["Asia/Aden"], + continentCode: "AS", + continentName: "Asia", + countryName: "Yemen", + countryCode: "YE", + mainCities: ["Sanaa", "Al Ḩudaydah", "Taiz", "Aden"], + rawOffsetInMinutes: 180, + abbreviation: "AST", + rawFormat: "+03:00 Arabian Time - Sanaa, Al Ḩudaydah, Taiz, Aden", + }, + { + name: "Africa/Addis_Ababa", + alternativeName: "East Africa Time", + group: ["Africa/Addis_Ababa"], + continentCode: "AF", + continentName: "Africa", + countryName: "Ethiopia", + countryCode: "ET", + mainCities: ["Addis Ababa", "Dire Dawa", "Mek'ele", "Nazrēt"], + rawOffsetInMinutes: 180, + abbreviation: "EAT", + rawFormat: + "+03:00 East Africa Time - Addis Ababa, Dire Dawa, Mek'ele, Nazrēt", + }, + { + name: "Indian/Antananarivo", + alternativeName: "East Africa Time", + group: ["Indian/Antananarivo"], + continentCode: "AF", + continentName: "Africa", + countryName: "Madagascar", + countryCode: "MG", + mainCities: ["Antananarivo", "Toamasina", "Antsirabe", "Fianarantsoa"], + rawOffsetInMinutes: 180, + abbreviation: "EAT", + rawFormat: + "+03:00 East Africa Time - Antananarivo, Toamasina, Antsirabe, Fianarantsoa", + }, + { + name: "Africa/Asmara", + alternativeName: "East Africa Time", + group: ["Africa/Asmara"], + continentCode: "AF", + continentName: "Africa", + countryName: "Eritrea", + countryCode: "ER", + mainCities: ["Asmara", "Keren", "Massawa", "Assab"], + rawOffsetInMinutes: 180, + abbreviation: "EAT", + rawFormat: "+03:00 East Africa Time - Asmara, Keren, Massawa, Assab", + }, + { + name: "Africa/Dar_es_Salaam", + alternativeName: "East Africa Time", + group: ["Africa/Dar_es_Salaam"], + continentCode: "AF", + continentName: "Africa", + countryName: "Tanzania", + countryCode: "TZ", + mainCities: ["Dar es Salaam", "Mwanza", "Zanzibar", "Arusha"], + rawOffsetInMinutes: 180, + abbreviation: "EAT", + rawFormat: + "+03:00 East Africa Time - Dar es Salaam, Mwanza, Zanzibar, Arusha", + }, + { + name: "Africa/Djibouti", + alternativeName: "East Africa Time", + group: ["Africa/Djibouti"], + continentCode: "AF", + continentName: "Africa", + countryName: "Djibouti", + countryCode: "DJ", + mainCities: ["Djibouti", "'Ali Sabieh", "Tadjourah", "Obock"], + rawOffsetInMinutes: 180, + abbreviation: "EAT", + rawFormat: + "+03:00 East Africa Time - Djibouti, 'Ali Sabieh, Tadjourah, Obock", + }, + { + name: "Africa/Kampala", + alternativeName: "East Africa Time", + group: ["Africa/Kampala"], + continentCode: "AF", + continentName: "Africa", + countryName: "Uganda", + countryCode: "UG", + mainCities: ["Kampala", "Gulu", "Lira", "Mbarara"], + rawOffsetInMinutes: 180, + abbreviation: "EAT", + rawFormat: "+03:00 East Africa Time - Kampala, Gulu, Lira, Mbarara", + }, + { + name: "Indian/Mayotte", + alternativeName: "East Africa Time", + group: ["Indian/Mayotte"], + continentCode: "AF", + continentName: "Africa", + countryName: "Mayotte", + countryCode: "YT", + mainCities: ["Mamoudzou", "Koungou", "Dzaoudzi"], + rawOffsetInMinutes: 180, + abbreviation: "EAT", + rawFormat: "+03:00 East Africa Time - Mamoudzou, Koungou, Dzaoudzi", + }, + { + name: "Africa/Mogadishu", + alternativeName: "East Africa Time", + group: ["Africa/Mogadishu"], + continentCode: "AF", + continentName: "Africa", + countryName: "Somalia", + countryCode: "SO", + mainCities: ["Mogadishu", "Hargeysa", "Berbera", "Kismayo"], + rawOffsetInMinutes: 180, + abbreviation: "EAT", + rawFormat: + "+03:00 East Africa Time - Mogadishu, Hargeysa, Berbera, Kismayo", + }, + { + name: "Indian/Comoro", + alternativeName: "East Africa Time", + group: ["Indian/Comoro"], + continentCode: "AF", + continentName: "Africa", + countryName: "Comoros", + countryCode: "KM", + mainCities: ["Moroni", "Moutsamoudou"], + rawOffsetInMinutes: 180, + abbreviation: "EAT", + rawFormat: "+03:00 East Africa Time - Moroni, Moutsamoudou", + }, + { + name: "Africa/Nairobi", + alternativeName: "East Africa Time", + group: ["Africa/Nairobi", "Africa/Asmera"], + continentCode: "AF", + continentName: "Africa", + countryName: "Kenya", + countryCode: "KE", + mainCities: ["Nairobi", "Mombasa", "Ruiru", "Kikuyu"], + rawOffsetInMinutes: 180, + abbreviation: "EAT", + rawFormat: "+03:00 East Africa Time - Nairobi, Mombasa, Ruiru, Kikuyu", + }, + { + name: "Europe/Minsk", + alternativeName: "Moscow Time", + group: ["Europe/Minsk"], + continentCode: "EU", + continentName: "Europe", + countryName: "Belarus", + countryCode: "BY", + mainCities: ["Minsk", "Homyel'", "Mahilyow", "Vitebsk"], + rawOffsetInMinutes: 180, + abbreviation: "MSK", + rawFormat: "+03:00 Moscow Time - Minsk, Homyel', Mahilyow, Vitebsk", + }, + { + name: "Europe/Moscow", + alternativeName: "Moscow Time", + group: ["Europe/Kirov", "Europe/Moscow", "Europe/Volgograd", "W-SU"], + continentCode: "EU", + continentName: "Europe", + countryName: "Russia", + countryCode: "RU", + mainCities: ["Moscow", "Saint Petersburg", "Nizhniy Novgorod", "Kazan"], + rawOffsetInMinutes: 180, + abbreviation: "MSK", + rawFormat: + "+03:00 Moscow Time - Moscow, Saint Petersburg, Nizhniy Novgorod, Kazan", + }, + { + name: "Europe/Simferopol", + alternativeName: "Moscow Time", + group: ["Europe/Simferopol"], + continentCode: "EU", + continentName: "Europe", + countryName: "Ukraine", + countryCode: "UA", + mainCities: ["Sevastopol", "Simferopol", "Kerch", "Yevpatoriya"], + rawOffsetInMinutes: 180, + abbreviation: "MSK", + rawFormat: + "+03:00 Moscow Time - Sevastopol, Simferopol, Kerch, Yevpatoriya", + }, + { + name: "Antarctica/Syowa", + alternativeName: "Syowa Time", + group: ["Antarctica/Syowa"], + continentCode: "AN", + continentName: "Antarctica", + countryName: "Antarctica", + countryCode: "AQ", + mainCities: ["Syowa"], + rawOffsetInMinutes: 180, + abbreviation: "SYOT", + rawFormat: "+03:00 Syowa Time - Syowa", + }, + { + name: "Europe/Istanbul", + alternativeName: "Turkey Time", + group: ["Europe/Istanbul", "Turkey", "Asia/Istanbul"], + continentCode: "AS", + continentName: "Asia", + countryName: "Turkey", + countryCode: "TR", + mainCities: ["Istanbul", "Ankara", "İzmir", "Bursa"], + rawOffsetInMinutes: 180, + abbreviation: "TRT", + rawFormat: "+03:00 Turkey Time - Istanbul, Ankara, İzmir, Bursa", + }, + { + name: "Asia/Tehran", + alternativeName: "Iran Time", + group: ["Asia/Tehran", "Iran"], + continentCode: "AS", + continentName: "Asia", + countryName: "Iran", + countryCode: "IR", + mainCities: ["Tehran", "Mashhad", "Isfahan", "Karaj"], + rawOffsetInMinutes: 210, + abbreviation: "IRST", + rawFormat: "+03:30 Iran Time - Tehran, Mashhad, Isfahan, Karaj", + }, + { + name: "Asia/Yerevan", + alternativeName: "Armenia Time", + group: ["Asia/Yerevan"], + continentCode: "AS", + continentName: "Asia", + countryName: "Armenia", + countryCode: "AM", + mainCities: ["Yerevan", "Gyumri", "Vanadzor", "Vagharshapat"], + rawOffsetInMinutes: 240, + abbreviation: "AMT", + rawFormat: "+04:00 Armenia Time - Yerevan, Gyumri, Vanadzor, Vagharshapat", + }, + { + name: "Asia/Baku", + alternativeName: "Azerbaijan Time", + group: ["Asia/Baku"], + continentCode: "AS", + continentName: "Asia", + countryName: "Azerbaijan", + countryCode: "AZ", + mainCities: ["Baku", "Ganja", "Sumqayıt", "Lankaran"], + rawOffsetInMinutes: 240, + abbreviation: "AZT", + rawFormat: "+04:00 Azerbaijan Time - Baku, Ganja, Sumqayıt, Lankaran", + }, + { + name: "Asia/Tbilisi", + alternativeName: "Georgia Time", + group: ["Asia/Tbilisi"], + continentCode: "AS", + continentName: "Asia", + countryName: "Georgia", + countryCode: "GE", + mainCities: ["Tbilisi", "Kutaisi", "Batumi", "Sokhumi"], + rawOffsetInMinutes: 240, + abbreviation: "GET", + rawFormat: "+04:00 Georgia Time - Tbilisi, Kutaisi, Batumi, Sokhumi", + }, + { + name: "Asia/Dubai", + alternativeName: "Gulf Time", + group: ["Asia/Dubai"], + continentCode: "AS", + continentName: "Asia", + countryName: "United Arab Emirates", + countryCode: "AE", + mainCities: ["Dubai", "Sharjah", "Abu Dhabi", "Ajman City"], + rawOffsetInMinutes: 240, + abbreviation: "GST", + rawFormat: "+04:00 Gulf Time - Dubai, Sharjah, Abu Dhabi, Ajman City", + }, + { + name: "Asia/Muscat", + alternativeName: "Gulf Time", + group: ["Asia/Muscat"], + continentCode: "AS", + continentName: "Asia", + countryName: "Oman", + countryCode: "OM", + mainCities: ["Muscat", "Seeb", "Şalālah", "Bawshar"], + rawOffsetInMinutes: 240, + abbreviation: "GST", + rawFormat: "+04:00 Gulf Time - Muscat, Seeb, Şalālah, Bawshar", + }, + { + name: "Indian/Mauritius", + alternativeName: "Mauritius Time", + group: ["Indian/Mauritius"], + continentCode: "AF", + continentName: "Africa", + countryName: "Mauritius", + countryCode: "MU", + mainCities: ["Port Louis", "Beau Bassin-Rose Hill", "Vacoas", "Curepipe"], + rawOffsetInMinutes: 240, + abbreviation: "MUT", + rawFormat: + "+04:00 Mauritius Time - Port Louis, Beau Bassin-Rose Hill, Vacoas, Curepipe", + }, + { + name: "Indian/Reunion", + alternativeName: "Réunion Time", + group: ["Indian/Reunion"], + continentCode: "AF", + continentName: "Africa", + countryName: "Reunion", + countryCode: "RE", + mainCities: ["Saint-Denis", "Saint-Paul", "Saint-Pierre", "Le Tampon"], + rawOffsetInMinutes: 240, + abbreviation: "RET", + rawFormat: + "+04:00 Réunion Time - Saint-Denis, Saint-Paul, Saint-Pierre, Le Tampon", + }, + { + name: "Europe/Samara", + alternativeName: "Samara Time", + group: [ + "Europe/Astrakhan", + "Europe/Samara", + "Europe/Saratov", + "Europe/Ulyanovsk", + ], + continentCode: "EU", + continentName: "Europe", + countryName: "Russia", + countryCode: "RU", + mainCities: ["Samara", "Saratov", "Tolyatti", "Ulyanovsk"], + rawOffsetInMinutes: 240, + abbreviation: "SAMT", + rawFormat: "+04:00 Samara Time - Samara, Saratov, Tolyatti, Ulyanovsk", + }, + { + name: "Indian/Mahe", + alternativeName: "Seychelles Time", + group: ["Indian/Mahe"], + continentCode: "AF", + continentName: "Africa", + countryName: "Seychelles", + countryCode: "SC", + mainCities: ["Victoria"], + rawOffsetInMinutes: 240, + abbreviation: "SCT", + rawFormat: "+04:00 Seychelles Time - Victoria", + }, + { + name: "Asia/Kabul", + alternativeName: "Afghanistan Time", + group: ["Asia/Kabul"], + continentCode: "AS", + continentName: "Asia", + countryName: "Afghanistan", + countryCode: "AF", + mainCities: ["Kabul", "Kandahār", "Mazār-e Sharīf", "Herāt"], + rawOffsetInMinutes: 270, + abbreviation: "AFT", + rawFormat: + "+04:30 Afghanistan Time - Kabul, Kandahār, Mazār-e Sharīf, Herāt", + }, + { + name: "Indian/Kerguelen", + alternativeName: "French Southern & Antarctic Time", + group: ["Indian/Kerguelen"], + continentCode: "AN", + continentName: "Antarctica", + countryName: "French Southern Territories", + countryCode: "TF", + mainCities: ["Port-aux-Français"], + rawOffsetInMinutes: 300, + abbreviation: "FSAT", + rawFormat: "+05:00 French Southern & Antarctic Time - Port-aux-Français", + }, + { + name: "Indian/Maldives", + alternativeName: "Maldives Time", + group: ["Indian/Maldives"], + continentCode: "AS", + continentName: "Asia", + countryName: "Maldives", + countryCode: "MV", + mainCities: ["Male"], + rawOffsetInMinutes: 300, + abbreviation: "MVT", + rawFormat: "+05:00 Maldives Time - Male", + }, + { + name: "Antarctica/Mawson", + alternativeName: "Mawson Time", + group: ["Antarctica/Mawson"], + continentCode: "AN", + continentName: "Antarctica", + countryName: "Antarctica", + countryCode: "AQ", + mainCities: ["Mawson"], + rawOffsetInMinutes: 300, + abbreviation: "MAWT", + rawFormat: "+05:00 Mawson Time - Mawson", + }, + { + name: "Asia/Karachi", + alternativeName: "Pakistan Time", + group: ["Asia/Karachi"], + continentCode: "AS", + continentName: "Asia", + countryName: "Pakistan", + countryCode: "PK", + mainCities: ["Karachi", "Lahore", "Faisalabad", "Rawalpindi"], + rawOffsetInMinutes: 300, + abbreviation: "PKT", + rawFormat: "+05:00 Pakistan Time - Karachi, Lahore, Faisalabad, Rawalpindi", + }, + { + name: "Asia/Dushanbe", + alternativeName: "Tajikistan Time", + group: ["Asia/Dushanbe"], + continentCode: "AS", + continentName: "Asia", + countryName: "Tajikistan", + countryCode: "TJ", + mainCities: ["Dushanbe", "Khujand", "Kŭlob", "Bokhtar"], + rawOffsetInMinutes: 300, + abbreviation: "TJT", + rawFormat: "+05:00 Tajikistan Time - Dushanbe, Khujand, Kŭlob, Bokhtar", + }, + { + name: "Asia/Ashgabat", + alternativeName: "Turkmenistan Time", + group: ["Asia/Ashgabat", "Asia/Ashkhabad"], + continentCode: "AS", + continentName: "Asia", + countryName: "Turkmenistan", + countryCode: "TM", + mainCities: ["Ashgabat", "Türkmenabat", "Daşoguz", "Mary"], + rawOffsetInMinutes: 300, + abbreviation: "TMT", + rawFormat: + "+05:00 Turkmenistan Time - Ashgabat, Türkmenabat, Daşoguz, Mary", + }, + { + name: "Asia/Tashkent", + alternativeName: "Uzbekistan Time", + group: ["Asia/Samarkand", "Asia/Tashkent"], + continentCode: "AS", + continentName: "Asia", + countryName: "Uzbekistan", + countryCode: "UZ", + mainCities: ["Tashkent", "Namangan", "Samarkand", "Andijon"], + rawOffsetInMinutes: 300, + abbreviation: "UZT", + rawFormat: + "+05:00 Uzbekistan Time - Tashkent, Namangan, Samarkand, Andijon", + }, + { + name: "Asia/Qyzylorda", + alternativeName: "West Kazakhstan Time", + group: [ + "Asia/Aqtau", + "Asia/Aqtobe", + "Asia/Atyrau", + "Asia/Oral", + "Asia/Qyzylorda", + ], + continentCode: "AS", + continentName: "Asia", + countryName: "Kazakhstan", + countryCode: "KZ", + mainCities: ["Kyzylorda", "Aktobe", "Oral", "Atyrau"], + rawOffsetInMinutes: 300, + abbreviation: "AQTT", + rawFormat: "+05:00 West Kazakhstan Time - Kyzylorda, Aktobe, Oral, Atyrau", + }, + { + name: "Asia/Yekaterinburg", + alternativeName: "Yekaterinburg Time", + group: ["Asia/Yekaterinburg"], + continentCode: "EU", + continentName: "Europe", + countryName: "Russia", + countryCode: "RU", + mainCities: ["Yekaterinburg", "Chelyabinsk", "Ufa", "Perm"], + rawOffsetInMinutes: 300, + abbreviation: "YEKT", + rawFormat: + "+05:00 Yekaterinburg Time - Yekaterinburg, Chelyabinsk, Ufa, Perm", + }, + { + name: "Asia/Colombo", + alternativeName: "India Time", + group: ["Asia/Colombo"], + continentCode: "AS", + continentName: "Asia", + countryName: "Sri Lanka", + countryCode: "LK", + mainCities: ["Colombo", "Dehiwala-Mount Lavinia", "Maharagama", "Jaffna"], + rawOffsetInMinutes: 330, + abbreviation: "IST", + rawFormat: + "+05:30 India Time - Colombo, Dehiwala-Mount Lavinia, Maharagama, Jaffna", + }, + { + name: "Asia/Kolkata", + alternativeName: "India Time", + group: ["Asia/Kolkata", "Asia/Calcutta"], + continentCode: "AS", + continentName: "Asia", + countryName: "India", + countryCode: "IN", + mainCities: ["Mumbai", "Delhi", "Bengaluru", "Hyderabad"], + rawOffsetInMinutes: 330, + abbreviation: "IST", + rawFormat: "+05:30 India Time - Mumbai, Delhi, Bengaluru, Hyderabad", + }, + { + name: "Asia/Kathmandu", + alternativeName: "Nepal Time", + group: ["Asia/Kathmandu", "Asia/Katmandu"], + continentCode: "AS", + continentName: "Asia", + countryName: "Nepal", + countryCode: "NP", + mainCities: ["Kathmandu", "Pokhara", "Pātan", "Biratnagar"], + rawOffsetInMinutes: 345, + abbreviation: "NPT", + rawFormat: "+05:45 Nepal Time - Kathmandu, Pokhara, Pātan, Biratnagar", + }, + { + name: "Asia/Dhaka", + alternativeName: "Bangladesh Time", + group: ["Asia/Dhaka", "Asia/Dacca"], + continentCode: "AS", + continentName: "Asia", + countryName: "Bangladesh", + countryCode: "BD", + mainCities: ["Dhaka", "Chattogram", "Khulna", "Rājshāhi"], + rawOffsetInMinutes: 360, + abbreviation: "BST", + rawFormat: "+06:00 Bangladesh Time - Dhaka, Chattogram, Khulna, Rājshāhi", + }, + { + name: "Asia/Thimphu", + alternativeName: "Bhutan Time", + group: ["Asia/Thimphu", "Asia/Thimbu"], + continentCode: "AS", + continentName: "Asia", + countryName: "Bhutan", + countryCode: "BT", + mainCities: ["Thimphu", "Punākha", "Tsirang", "Phuntsholing"], + rawOffsetInMinutes: 360, + abbreviation: "BTT", + rawFormat: "+06:00 Bhutan Time - Thimphu, Punākha, Tsirang, Phuntsholing", + }, + { + name: "Asia/Urumqi", + alternativeName: "China Time", + group: ["Asia/Urumqi", "Asia/Kashgar"], + continentCode: "AS", + continentName: "Asia", + countryName: "China", + countryCode: "CN", + mainCities: ["Ürümqi", "Shihezi", "Korla", "Aksu"], + rawOffsetInMinutes: 360, + abbreviation: "CST", + rawFormat: "+06:00 China Time - Ürümqi, Shihezi, Korla, Aksu", + }, + { + name: "Asia/Almaty", + alternativeName: "East Kazakhstan Time", + group: ["Asia/Almaty", "Asia/Qostanay"], + continentCode: "AS", + continentName: "Asia", + countryName: "Kazakhstan", + countryCode: "KZ", + mainCities: ["Almaty", "Karagandy", "Shymkent", "Taraz"], + rawOffsetInMinutes: 360, + abbreviation: "ALMT", + rawFormat: + "+06:00 East Kazakhstan Time - Almaty, Karagandy, Shymkent, Taraz", + }, + { + name: "Indian/Chagos", + alternativeName: "Indian Ocean Time", + group: ["Indian/Chagos"], + continentCode: "AS", + continentName: "Asia", + countryName: "British Indian Ocean Territory", + countryCode: "IO", + mainCities: ["Chagos"], + rawOffsetInMinutes: 360, + abbreviation: "IOT", + rawFormat: "+06:00 Indian Ocean Time - Chagos", + }, + { + name: "Asia/Bishkek", + alternativeName: "Kyrgyzstan Time", + group: ["Asia/Bishkek"], + continentCode: "AS", + continentName: "Asia", + countryName: "Kyrgyzstan", + countryCode: "KG", + mainCities: ["Bishkek", "Osh", "Jalal-Abad", "Karakol"], + rawOffsetInMinutes: 360, + abbreviation: "KGT", + rawFormat: "+06:00 Kyrgyzstan Time - Bishkek, Osh, Jalal-Abad, Karakol", + }, + { + name: "Asia/Omsk", + alternativeName: "Omsk Time", + group: ["Asia/Omsk"], + continentCode: "EU", + continentName: "Europe", + countryName: "Russia", + countryCode: "RU", + mainCities: ["Omsk", "Tara", "Kalachinsk"], + rawOffsetInMinutes: 360, + abbreviation: "OMST", + rawFormat: "+06:00 Omsk Time - Omsk, Tara, Kalachinsk", + }, + { + name: "Antarctica/Vostok", + alternativeName: "Vostok Time", + group: ["Antarctica/Vostok"], + continentCode: "AN", + continentName: "Antarctica", + countryName: "Antarctica", + countryCode: "AQ", + mainCities: ["Vostok"], + rawOffsetInMinutes: 360, + abbreviation: "VOST", + rawFormat: "+06:00 Vostok Time - Vostok", + }, + { + name: "Indian/Cocos", + alternativeName: "Cocos Islands Time", + group: ["Indian/Cocos"], + continentCode: "AS", + continentName: "Asia", + countryName: "Cocos Islands", + countryCode: "CC", + mainCities: ["West Island"], + rawOffsetInMinutes: 390, + abbreviation: "CCT", + rawFormat: "+06:30 Cocos Islands Time - West Island", + }, + { + name: "Asia/Yangon", + alternativeName: "Myanmar Time", + group: ["Asia/Yangon", "Asia/Rangoon"], + continentCode: "AS", + continentName: "Asia", + countryName: "Myanmar", + countryCode: "MM", + mainCities: ["Yangon", "Mandalay", "Nay Pyi Taw", "Mawlamyine"], + rawOffsetInMinutes: 390, + abbreviation: "MMT", + rawFormat: + "+06:30 Myanmar Time - Yangon, Mandalay, Nay Pyi Taw, Mawlamyine", + }, + { + name: "Indian/Christmas", + alternativeName: "Christmas Island Time", + group: ["Indian/Christmas"], + continentCode: "OC", + continentName: "Oceania", + countryName: "Christmas Island", + countryCode: "CX", + mainCities: ["Flying Fish Cove"], + rawOffsetInMinutes: 420, + abbreviation: "CXT", + rawFormat: "+07:00 Christmas Island Time - Flying Fish Cove", + }, + { + name: "Antarctica/Davis", + alternativeName: "Davis Time", + group: ["Antarctica/Davis"], + continentCode: "AN", + continentName: "Antarctica", + countryName: "Antarctica", + countryCode: "AQ", + mainCities: ["Davis"], + rawOffsetInMinutes: 420, + abbreviation: "DAVT", + rawFormat: "+07:00 Davis Time - Davis", + }, + { + name: "Asia/Hovd", + alternativeName: "Hovd Time", + group: ["Asia/Hovd"], + continentCode: "AS", + continentName: "Asia", + countryName: "Mongolia", + countryCode: "MN", + mainCities: ["Khovd", "Ölgii", "Ulaangom", "Uliastay"], + rawOffsetInMinutes: 420, + abbreviation: "HOVT", + rawFormat: "+07:00 Hovd Time - Khovd, Ölgii, Ulaangom, Uliastay", + }, + { + name: "Asia/Bangkok", + alternativeName: "Indochina Time", + group: ["Asia/Bangkok"], + continentCode: "AS", + continentName: "Asia", + countryName: "Thailand", + countryCode: "TH", + mainCities: ["Bangkok", "Samut Prakan", "Mueang Nonthaburi", "Udon Thani"], + rawOffsetInMinutes: 420, + abbreviation: "ICT", + rawFormat: + "+07:00 Indochina Time - Bangkok, Samut Prakan, Mueang Nonthaburi, Udon Thani", + }, + { + name: "Asia/Ho_Chi_Minh", + alternativeName: "Indochina Time", + group: ["Asia/Ho_Chi_Minh", "Asia/Saigon"], + continentCode: "AS", + continentName: "Asia", + countryName: "Vietnam", + countryCode: "VN", + mainCities: ["Ho Chi Minh City", "Da Nang", "Biên Hòa", "Cần Thơ"], + rawOffsetInMinutes: 420, + abbreviation: "ICT", + rawFormat: + "+07:00 Indochina Time - Ho Chi Minh City, Da Nang, Biên Hòa, Cần Thơ", + }, + { + name: "Asia/Phnom_Penh", + alternativeName: "Indochina Time", + group: ["Asia/Phnom_Penh"], + continentCode: "AS", + continentName: "Asia", + countryName: "Cambodia", + countryCode: "KH", + mainCities: ["Phnom Penh", "Takeo", "Sihanoukville", "Battambang"], + rawOffsetInMinutes: 420, + abbreviation: "ICT", + rawFormat: + "+07:00 Indochina Time - Phnom Penh, Takeo, Sihanoukville, Battambang", + }, + { + name: "Asia/Vientiane", + alternativeName: "Indochina Time", + group: ["Asia/Vientiane"], + continentCode: "AS", + continentName: "Asia", + countryName: "Laos", + countryCode: "LA", + mainCities: ["Vientiane", "Pakse", "Thakhèk", "Savannakhet"], + rawOffsetInMinutes: 420, + abbreviation: "ICT", + rawFormat: "+07:00 Indochina Time - Vientiane, Pakse, Thakhèk, Savannakhet", + }, + { + name: "Asia/Novosibirsk", + alternativeName: "Novosibirsk Time", + group: [ + "Asia/Barnaul", + "Asia/Krasnoyarsk", + "Asia/Novokuznetsk", + "Asia/Novosibirsk", + "Asia/Tomsk", + ], + continentCode: "EU", + continentName: "Europe", + countryName: "Russia", + countryCode: "RU", + mainCities: ["Novosibirsk", "Krasnoyarsk", "Barnaul", "Novokuznetsk"], + rawOffsetInMinutes: 420, + abbreviation: "NOVT", + rawFormat: + "+07:00 Novosibirsk Time - Novosibirsk, Krasnoyarsk, Barnaul, Novokuznetsk", + }, + { + name: "Asia/Jakarta", + alternativeName: "Western Indonesia Time", + group: ["Asia/Jakarta", "Asia/Pontianak"], + continentCode: "AS", + continentName: "Asia", + countryName: "Indonesia", + countryCode: "ID", + mainCities: ["Jakarta", "Surabaya", "Medan", "Bandung"], + rawOffsetInMinutes: 420, + abbreviation: "WIB", + rawFormat: + "+07:00 Western Indonesia Time - Jakarta, Surabaya, Medan, Bandung", + }, + { + name: "Australia/Perth", + alternativeName: "Australian Western Time", + group: ["Australia/Perth", "Australia/West"], + continentCode: "OC", + continentName: "Oceania", + countryName: "Australia", + countryCode: "AU", + mainCities: ["Perth", "Rockingham", "Mandurah", "Bunbury"], + rawOffsetInMinutes: 480, + abbreviation: "AWST", + rawFormat: + "+08:00 Australian Western Time - Perth, Rockingham, Mandurah, Bunbury", + }, + { + name: "Asia/Brunei", + alternativeName: "Brunei Darussalam Time", + group: ["Asia/Brunei"], + continentCode: "AS", + continentName: "Asia", + countryName: "Brunei", + countryCode: "BN", + mainCities: ["Bandar Seri Begawan", "Kuala Belait", "Seria", "Tutong"], + rawOffsetInMinutes: 480, + abbreviation: "BNT", + rawFormat: + "+08:00 Brunei Darussalam Time - Bandar Seri Begawan, Kuala Belait, Seria, Tutong", + }, + { + name: "Asia/Makassar", + alternativeName: "Central Indonesia Time", + group: ["Asia/Makassar", "Asia/Ujung_Pandang"], + continentCode: "AS", + continentName: "Asia", + countryName: "Indonesia", + countryCode: "ID", + mainCities: ["Makassar", "Denpasar", "Banjarmasin", "Manado"], + rawOffsetInMinutes: 480, + abbreviation: "WITA", + rawFormat: + "+08:00 Central Indonesia Time - Makassar, Denpasar, Banjarmasin, Manado", + }, + { + name: "Asia/Macau", + alternativeName: "China Time", + group: ["Asia/Macau", "Asia/Macao"], + continentCode: "AS", + continentName: "Asia", + countryName: "Macao", + countryCode: "MO", + mainCities: ["Macau"], + rawOffsetInMinutes: 480, + abbreviation: "CST", + rawFormat: "+08:00 China Time - Macau", + }, + { + name: "Asia/Shanghai", + alternativeName: "China Time", + group: [ + "Asia/Shanghai", + "Asia/Chongqing", + "Asia/Chungking", + "Asia/Harbin", + "PRC", + ], + continentCode: "AS", + continentName: "Asia", + countryName: "China", + countryCode: "CN", + mainCities: ["Shanghai", "Beijing", "Shenzhen", "Guangzhou"], + rawOffsetInMinutes: 480, + abbreviation: "CST", + rawFormat: "+08:00 China Time - Shanghai, Beijing, Shenzhen, Guangzhou", + }, + { + name: "Asia/Hong_Kong", + alternativeName: "Hong Kong Time", + group: ["Asia/Hong_Kong", "Hongkong"], + continentCode: "AS", + continentName: "Asia", + countryName: "Hong Kong", + countryCode: "HK", + mainCities: ["Hong Kong", "Kowloon", "Tsuen Wan", "Yuen Long Kau Hui"], + rawOffsetInMinutes: 480, + abbreviation: "HKT", + rawFormat: + "+08:00 Hong Kong Time - Hong Kong, Kowloon, Tsuen Wan, Yuen Long Kau Hui", + }, + { + name: "Asia/Irkutsk", + alternativeName: "Irkutsk Time", + group: ["Asia/Irkutsk"], + continentCode: "EU", + continentName: "Europe", + countryName: "Russia", + countryCode: "RU", + mainCities: ["Irkutsk", "Ulan-Ude", "Bratsk", "Angarsk"], + rawOffsetInMinutes: 480, + abbreviation: "IRKT", + rawFormat: "+08:00 Irkutsk Time - Irkutsk, Ulan-Ude, Bratsk, Angarsk", + }, + { + name: "Asia/Kuala_Lumpur", + alternativeName: "Malaysia Time", + group: ["Asia/Kuala_Lumpur", "Asia/Kuching"], + continentCode: "AS", + continentName: "Asia", + countryName: "Malaysia", + countryCode: "MY", + mainCities: ["Kota Bharu", "Kuala Lumpur", "Klang", "Kampung Baru Subang"], + rawOffsetInMinutes: 480, + abbreviation: "MYT", + rawFormat: + "+08:00 Malaysia Time - Kota Bharu, Kuala Lumpur, Klang, Kampung Baru Subang", + }, + { + name: "Asia/Manila", + alternativeName: "Philippine Time", + group: ["Asia/Manila"], + continentCode: "AS", + continentName: "Asia", + countryName: "Philippines", + countryCode: "PH", + mainCities: ["Quezon City", "Manila", "Caloocan City", "Budta"], + rawOffsetInMinutes: 480, + abbreviation: "PHT", + rawFormat: + "+08:00 Philippine Time - Quezon City, Manila, Caloocan City, Budta", + }, + { + name: "Asia/Singapore", + alternativeName: "Singapore Time", + group: ["Asia/Singapore", "Singapore"], + continentCode: "AS", + continentName: "Asia", + countryName: "Singapore", + countryCode: "SG", + mainCities: ["Singapore", "Woodlands", "Marine Parade"], + rawOffsetInMinutes: 480, + abbreviation: "SGT", + rawFormat: "+08:00 Singapore Time - Singapore, Woodlands, Marine Parade", + }, + { + name: "Asia/Taipei", + alternativeName: "Taipei Time", + group: ["Asia/Taipei", "ROC"], + continentCode: "AS", + continentName: "Asia", + countryName: "Taiwan", + countryCode: "TW", + mainCities: ["Taipei", "Kaohsiung", "Taichung", "Tainan"], + rawOffsetInMinutes: 480, + abbreviation: "TWT", + rawFormat: "+08:00 Taipei Time - Taipei, Kaohsiung, Taichung, Tainan", + }, + { + name: "Asia/Ulaanbaatar", + alternativeName: "Ulaanbaatar Time", + group: ["Asia/Choibalsan", "Asia/Ulaanbaatar", "Asia/Ulan_Bator"], + continentCode: "AS", + continentName: "Asia", + countryName: "Mongolia", + countryCode: "MN", + mainCities: ["Ulan Bator", "Erdenet", "Darhan", "Hovd"], + rawOffsetInMinutes: 480, + abbreviation: "ULAT", + rawFormat: "+08:00 Ulaanbaatar Time - Ulan Bator, Erdenet, Darhan, Hovd", + }, + { + name: "Australia/Eucla", + alternativeName: "Australian Central Western Time", + group: ["Australia/Eucla"], + continentCode: "OC", + continentName: "Oceania", + countryName: "Australia", + countryCode: "AU", + mainCities: ["Eucla"], + rawOffsetInMinutes: 525, + abbreviation: "ACWST", + rawFormat: "+08:45 Australian Central Western Time - Eucla", + }, + { + name: "Asia/Dili", + alternativeName: "East Timor Time", + group: ["Asia/Dili"], + continentCode: "OC", + continentName: "Oceania", + countryName: "Timor Leste", + countryCode: "TL", + mainCities: ["Dili", "Maliana", "Suai", "Likisá"], + rawOffsetInMinutes: 540, + abbreviation: "TLT", + rawFormat: "+09:00 East Timor Time - Dili, Maliana, Suai, Likisá", + }, + { + name: "Asia/Jayapura", + alternativeName: "Eastern Indonesia Time", + group: ["Asia/Jayapura"], + continentCode: "AS", + continentName: "Asia", + countryName: "Indonesia", + countryCode: "ID", + mainCities: ["Ambon", "Jayapura", "Sorong", "Ternate"], + rawOffsetInMinutes: 540, + abbreviation: "WIT", + rawFormat: + "+09:00 Eastern Indonesia Time - Ambon, Jayapura, Sorong, Ternate", + }, + { + name: "Asia/Tokyo", + alternativeName: "Japan Time", + group: ["Asia/Tokyo", "Japan"], + continentCode: "AS", + continentName: "Asia", + countryName: "Japan", + countryCode: "JP", + mainCities: ["Tokyo", "Yokohama", "Osaka", "Nagoya"], + rawOffsetInMinutes: 540, + abbreviation: "JST", + rawFormat: "+09:00 Japan Time - Tokyo, Yokohama, Osaka, Nagoya", + }, + { + name: "Asia/Pyongyang", + alternativeName: "Korean Time", + group: ["Asia/Pyongyang"], + continentCode: "AS", + continentName: "Asia", + countryName: "North Korea", + countryCode: "KP", + mainCities: ["Pyongyang", "Hamhŭng", "Namp’o", "Sunch’ŏn"], + rawOffsetInMinutes: 540, + abbreviation: "KST", + rawFormat: "+09:00 Korean Time - Pyongyang, Hamhŭng, Namp’o, Sunch’ŏn", + }, + { + name: "Asia/Seoul", + alternativeName: "Korean Time", + group: ["Asia/Seoul", "ROK"], + continentCode: "AS", + continentName: "Asia", + countryName: "South Korea", + countryCode: "KR", + mainCities: ["Seoul", "Busan", "Incheon", "Daegu"], + rawOffsetInMinutes: 540, + abbreviation: "KST", + rawFormat: "+09:00 Korean Time - Seoul, Busan, Incheon, Daegu", + }, + { + name: "Pacific/Palau", + alternativeName: "Palau Time", + group: ["Pacific/Palau"], + continentCode: "OC", + continentName: "Oceania", + countryName: "Palau", + countryCode: "PW", + mainCities: ["Ngerulmud"], + rawOffsetInMinutes: 540, + abbreviation: "PWT", + rawFormat: "+09:00 Palau Time - Ngerulmud", + }, + { + name: "Asia/Chita", + alternativeName: "Yakutsk Time", + group: ["Asia/Chita", "Asia/Khandyga", "Asia/Yakutsk"], + continentCode: "EU", + continentName: "Europe", + countryName: "Russia", + countryCode: "RU", + mainCities: ["Chita", "Yakutsk", "Blagoveshchensk", "Belogorsk"], + rawOffsetInMinutes: 540, + abbreviation: "YAKT", + rawFormat: + "+09:00 Yakutsk Time - Chita, Yakutsk, Blagoveshchensk, Belogorsk", + }, + { + name: "Australia/Adelaide", + alternativeName: "Australian Central Time", + group: [ + "Australia/Adelaide", + "Australia/Broken_Hill", + "Australia/South", + "Australia/Yancowinna", + ], + continentCode: "OC", + continentName: "Oceania", + countryName: "Australia", + countryCode: "AU", + mainCities: [ + "Adelaide", + "Adelaide Hills", + "Mount Gambier", + "Morphett Vale", + ], + rawOffsetInMinutes: 570, + abbreviation: "ACST", + rawFormat: + "+09:30 Australian Central Time - Adelaide, Adelaide Hills, Mount Gambier, Morphett Vale", + }, + { + name: "Australia/Darwin", + alternativeName: "Australian Central Time", + group: ["Australia/Darwin", "Australia/North"], + continentCode: "OC", + continentName: "Oceania", + countryName: "Australia", + countryCode: "AU", + mainCities: ["Darwin", "Alice Springs", "Palmerston"], + rawOffsetInMinutes: 570, + abbreviation: "ACST", + rawFormat: + "+09:30 Australian Central Time - Darwin, Alice Springs, Palmerston", + }, + { + name: "Australia/Brisbane", + alternativeName: "Australian Eastern Time", + group: ["Australia/Brisbane", "Australia/Lindeman", "Australia/Queensland"], + continentCode: "OC", + continentName: "Oceania", + countryName: "Australia", + countryCode: "AU", + mainCities: ["Brisbane", "Gold Coast", "Logan City", "Townsville"], + rawOffsetInMinutes: 600, + abbreviation: "AEST", + rawFormat: + "+10:00 Australian Eastern Time - Brisbane, Gold Coast, Logan City, Townsville", + }, + { + name: "Australia/Sydney", + alternativeName: "Australian Eastern Time", + group: [ + "Antarctica/Macquarie", + "Australia/Hobart", + "Australia/Melbourne", + "Australia/Sydney", + "Australia/Currie", + "Australia/Tasmania", + "Australia/Victoria", + "Australia/ACT", + "Australia/Canberra", + "Australia/NSW", + ], + continentCode: "OC", + continentName: "Oceania", + countryName: "Australia", + countryCode: "AU", + mainCities: ["Sydney", "Melbourne", "Canberra", "Newcastle"], + rawOffsetInMinutes: 600, + abbreviation: "AEST", + rawFormat: + "+10:00 Australian Eastern Time - Sydney, Melbourne, Canberra, Newcastle", + }, + { + name: "Pacific/Guam", + alternativeName: "Chamorro Time", + group: ["Pacific/Guam"], + continentCode: "OC", + continentName: "Oceania", + countryName: "Guam", + countryCode: "GU", + mainCities: [ + "Dededo Village", + "Yigo Village", + "Tamuning-Tumon-Harmon Village", + "Tamuning", + ], + rawOffsetInMinutes: 600, + abbreviation: "ChST", + rawFormat: + "+10:00 Chamorro Time - Dededo Village, Yigo Village, Tamuning-Tumon-Harmon Village, Tamuning", + }, + { + name: "Pacific/Saipan", + alternativeName: "Chamorro Time", + group: ["Pacific/Saipan"], + continentCode: "OC", + continentName: "Oceania", + countryName: "Northern Mariana Islands", + countryCode: "MP", + mainCities: ["Saipan"], + rawOffsetInMinutes: 600, + abbreviation: "ChST", + rawFormat: "+10:00 Chamorro Time - Saipan", + }, + { + name: "Pacific/Chuuk", + alternativeName: "Chuuk Time", + group: ["Pacific/Chuuk", "Pacific/Truk", "Pacific/Yap"], + continentCode: "OC", + continentName: "Oceania", + countryName: "Micronesia", + countryCode: "FM", + mainCities: ["Chuuk"], + rawOffsetInMinutes: 600, + abbreviation: "CHUT", + rawFormat: "+10:00 Chuuk Time - Chuuk", + }, + { + name: "Antarctica/DumontDUrville", + alternativeName: "Dumont-d’Urville Time", + group: ["Antarctica/DumontDUrville"], + continentCode: "AN", + continentName: "Antarctica", + countryName: "Antarctica", + countryCode: "AQ", + mainCities: ["DumontDUrville"], + rawOffsetInMinutes: 600, + abbreviation: "DDUT", + rawFormat: "+10:00 Dumont-d’Urville Time - DumontDUrville", + }, + { + name: "Pacific/Port_Moresby", + alternativeName: "Papua New Guinea Time", + group: ["Pacific/Port_Moresby"], + continentCode: "OC", + continentName: "Oceania", + countryName: "Papua New Guinea", + countryCode: "PG", + mainCities: ["Port Moresby", "Lae", "Mount Hagen", "Popondetta"], + rawOffsetInMinutes: 600, + abbreviation: "PGT", + rawFormat: + "+10:00 Papua New Guinea Time - Port Moresby, Lae, Mount Hagen, Popondetta", + }, + { + name: "Asia/Vladivostok", + alternativeName: "Vladivostok Time", + group: ["Asia/Ust-Nera", "Asia/Vladivostok"], + continentCode: "EU", + continentName: "Europe", + countryName: "Russia", + countryCode: "RU", + mainCities: [ + "Vladivostok", + "Khabarovsk", + "Khabarovsk Vtoroy", + "Komsomolsk-on-Amur", + ], + rawOffsetInMinutes: 600, + abbreviation: "VLAT", + rawFormat: + "+10:00 Vladivostok Time - Vladivostok, Khabarovsk, Khabarovsk Vtoroy, Komsomolsk-on-Amur", + }, + { + name: "Australia/Lord_Howe", + alternativeName: "Lord Howe Time", + group: ["Australia/Lord_Howe", "Australia/LHI"], + continentCode: "OC", + continentName: "Oceania", + countryName: "Australia", + countryCode: "AU", + mainCities: ["Lord Howe"], + rawOffsetInMinutes: 630, + abbreviation: "LHST", + rawFormat: "+10:30 Lord Howe Time - Lord Howe", + }, + { + name: "Pacific/Bougainville", + alternativeName: "Bougainville Time", + group: ["Pacific/Bougainville"], + continentCode: "OC", + continentName: "Oceania", + countryName: "Papua New Guinea", + countryCode: "PG", + mainCities: ["Arawa"], + rawOffsetInMinutes: 660, + abbreviation: "BST", + rawFormat: "+11:00 Bougainville Time - Arawa", + }, + { + name: "Antarctica/Casey", + alternativeName: "Casey Time", + group: ["Antarctica/Casey"], + continentCode: "AN", + continentName: "Antarctica", + countryName: "Antarctica", + countryCode: "AQ", + mainCities: ["Casey"], + rawOffsetInMinutes: 660, + abbreviation: "CAST", + rawFormat: "+11:00 Casey Time - Casey", + }, + { + name: "Pacific/Kosrae", + alternativeName: "Kosrae Time", + group: ["Pacific/Kosrae", "Pacific/Pohnpei", "Pacific/Ponape"], + continentCode: "OC", + continentName: "Oceania", + countryName: "Micronesia", + countryCode: "FM", + mainCities: ["Kosrae", "Palikir - National Government Center"], + rawOffsetInMinutes: 660, + abbreviation: "KOST", + rawFormat: + "+11:00 Kosrae Time - Kosrae, Palikir - National Government Center", + }, + { + name: "Pacific/Noumea", + alternativeName: "New Caledonia Time", + group: ["Pacific/Noumea"], + continentCode: "OC", + continentName: "Oceania", + countryName: "New Caledonia", + countryCode: "NC", + mainCities: ["Nouméa", "Mont-Dore", "Dumbéa"], + rawOffsetInMinutes: 660, + abbreviation: "NCT", + rawFormat: "+11:00 New Caledonia Time - Nouméa, Mont-Dore, Dumbéa", + }, + { + name: "Pacific/Norfolk", + alternativeName: "Norfolk Island Time", + group: ["Pacific/Norfolk"], + continentCode: "OC", + continentName: "Oceania", + countryName: "Norfolk Island", + countryCode: "NF", + mainCities: ["Kingston"], + rawOffsetInMinutes: 660, + abbreviation: "NFT", + rawFormat: "+11:00 Norfolk Island Time - Kingston", + }, + { + name: "Asia/Sakhalin", + alternativeName: "Sakhalin Time", + group: ["Asia/Magadan", "Asia/Sakhalin", "Asia/Srednekolymsk"], + continentCode: "EU", + continentName: "Europe", + countryName: "Russia", + countryCode: "RU", + mainCities: ["Yuzhno-Sakhalinsk", "Magadan", "Korsakov", "Kholmsk"], + rawOffsetInMinutes: 660, + abbreviation: "SAKT", + rawFormat: + "+11:00 Sakhalin Time - Yuzhno-Sakhalinsk, Magadan, Korsakov, Kholmsk", + }, + { + name: "Pacific/Guadalcanal", + alternativeName: "Solomon Islands Time", + group: ["Pacific/Guadalcanal"], + continentCode: "OC", + continentName: "Oceania", + countryName: "Solomon Islands", + countryCode: "SB", + mainCities: ["Honiara"], + rawOffsetInMinutes: 660, + abbreviation: "SBT", + rawFormat: "+11:00 Solomon Islands Time - Honiara", + }, + { + name: "Pacific/Efate", + alternativeName: "Vanuatu Time", + group: ["Pacific/Efate"], + continentCode: "OC", + continentName: "Oceania", + countryName: "Vanuatu", + countryCode: "VU", + mainCities: ["Port-Vila"], + rawOffsetInMinutes: 660, + abbreviation: "VUT", + rawFormat: "+11:00 Vanuatu Time - Port-Vila", + }, + { + name: "Pacific/Fiji", + alternativeName: "Fiji Time", + group: ["Pacific/Fiji"], + continentCode: "OC", + continentName: "Oceania", + countryName: "Fiji", + countryCode: "FJ", + mainCities: ["Suva", "Lautoka", "Nadi", "Labasa"], + rawOffsetInMinutes: 720, + abbreviation: "FJT", + rawFormat: "+12:00 Fiji Time - Suva, Lautoka, Nadi, Labasa", + }, + { + name: "Pacific/Tarawa", + alternativeName: "Gilbert Islands Time", + group: ["Pacific/Tarawa"], + continentCode: "OC", + continentName: "Oceania", + countryName: "Kiribati", + countryCode: "KI", + mainCities: ["Tarawa"], + rawOffsetInMinutes: 720, + abbreviation: "GILT", + rawFormat: "+12:00 Gilbert Islands Time - Tarawa", + }, + { + name: "Pacific/Majuro", + alternativeName: "Marshall Islands Time", + group: ["Pacific/Kwajalein", "Pacific/Majuro", "Kwajalein"], + continentCode: "OC", + continentName: "Oceania", + countryName: "Marshall Islands", + countryCode: "MH", + mainCities: ["Majuro", "Kwajalein", "RMI Capitol"], + rawOffsetInMinutes: 720, + abbreviation: "MHT", + rawFormat: "+12:00 Marshall Islands Time - Majuro, Kwajalein, RMI Capitol", + }, + { + name: "Pacific/Nauru", + alternativeName: "Nauru Time", + group: ["Pacific/Nauru"], + continentCode: "OC", + continentName: "Oceania", + countryName: "Nauru", + countryCode: "NR", + mainCities: ["Yaren"], + rawOffsetInMinutes: 720, + abbreviation: "NRT", + rawFormat: "+12:00 Nauru Time - Yaren", + }, + { + name: "Pacific/Auckland", + alternativeName: "New Zealand Time", + group: ["Pacific/Auckland", "Antarctica/South_Pole", "NZ"], + continentCode: "OC", + continentName: "Oceania", + countryName: "New Zealand", + countryCode: "NZ", + mainCities: ["Auckland", "Wellington", "Christchurch", "Manukau City"], + rawOffsetInMinutes: 720, + abbreviation: "NZST", + rawFormat: + "+12:00 New Zealand Time - Auckland, Wellington, Christchurch, Manukau City", + }, + { + name: "Antarctica/McMurdo", + alternativeName: "New Zealand Time", + group: ["Antarctica/McMurdo"], + continentCode: "AN", + continentName: "Antarctica", + countryName: "Antarctica", + countryCode: "AQ", + mainCities: ["McMurdo"], + rawOffsetInMinutes: 720, + abbreviation: "NZST", + rawFormat: "+12:00 New Zealand Time - McMurdo", + }, + { + name: "Asia/Kamchatka", + alternativeName: "Petropavlovsk-Kamchatski Time", + group: ["Asia/Anadyr", "Asia/Kamchatka"], + continentCode: "EU", + continentName: "Europe", + countryName: "Russia", + countryCode: "RU", + mainCities: [ + "Petropavlovsk-Kamchatsky", + "Yelizovo", + "Vilyuchinsk", + "Anadyr", + ], + rawOffsetInMinutes: 720, + abbreviation: "PETT", + rawFormat: + "+12:00 Petropavlovsk-Kamchatski Time - Petropavlovsk-Kamchatsky, Yelizovo, Vilyuchinsk, Anadyr", + }, + { + name: "Pacific/Funafuti", + alternativeName: "Tuvalu Time", + group: ["Pacific/Funafuti"], + continentCode: "OC", + continentName: "Oceania", + countryName: "Tuvalu", + countryCode: "TV", + mainCities: ["Funafuti"], + rawOffsetInMinutes: 720, + abbreviation: "TVT", + rawFormat: "+12:00 Tuvalu Time - Funafuti", + }, + { + name: "Pacific/Wake", + alternativeName: "Wake Island Time", + group: ["Pacific/Wake"], + continentCode: "OC", + continentName: "Oceania", + countryName: "United States Minor Outlying Islands", + countryCode: "UM", + mainCities: ["Wake"], + rawOffsetInMinutes: 720, + abbreviation: "WAKT", + rawFormat: "+12:00 Wake Island Time - Wake", + }, + { + name: "Pacific/Wallis", + alternativeName: "Wallis & Futuna Time", + group: ["Pacific/Wallis"], + continentCode: "OC", + continentName: "Oceania", + countryName: "Wallis and Futuna", + countryCode: "WF", + mainCities: ["Mata-Utu"], + rawOffsetInMinutes: 720, + abbreviation: "WFT", + rawFormat: "+12:00 Wallis & Futuna Time - Mata-Utu", + }, + { + name: "Pacific/Chatham", + alternativeName: "Chatham Time", + group: ["Pacific/Chatham", "NZ-CHAT"], + continentCode: "OC", + continentName: "Oceania", + countryName: "New Zealand", + countryCode: "NZ", + mainCities: ["Chatham"], + rawOffsetInMinutes: 765, + abbreviation: "CHAST", + rawFormat: "+12:45 Chatham Time - Chatham", + }, + { + name: "Pacific/Apia", + alternativeName: "Apia Time", + group: ["Pacific/Apia"], + continentCode: "OC", + continentName: "Oceania", + countryName: "Samoa", + countryCode: "WS", + mainCities: ["Apia"], + rawOffsetInMinutes: 780, + abbreviation: "WST", + rawFormat: "+13:00 Apia Time - Apia", + }, + { + name: "Pacific/Kanton", + alternativeName: "Phoenix Islands Time", + group: ["Pacific/Kanton", "Pacific/Enderbury"], + continentCode: "OC", + continentName: "Oceania", + countryName: "Kiribati", + countryCode: "KI", + mainCities: ["Kanton"], + rawOffsetInMinutes: 780, + abbreviation: "PHOT", + rawFormat: "+13:00 Phoenix Islands Time - Kanton", + }, + { + name: "Pacific/Fakaofo", + alternativeName: "Tokelau Time", + group: ["Pacific/Fakaofo"], + continentCode: "OC", + continentName: "Oceania", + countryName: "Tokelau", + countryCode: "TK", + mainCities: ["Fakaofo"], + rawOffsetInMinutes: 780, + abbreviation: "TKT", + rawFormat: "+13:00 Tokelau Time - Fakaofo", + }, + { + name: "Pacific/Tongatapu", + alternativeName: "Tonga Time", + group: ["Pacific/Tongatapu"], + continentCode: "OC", + continentName: "Oceania", + countryName: "Tonga", + countryCode: "TO", + mainCities: ["Nuku‘alofa"], + rawOffsetInMinutes: 780, + abbreviation: "TOT", + rawFormat: "+13:00 Tonga Time - Nuku‘alofa", + }, + { + name: "Pacific/Kiritimati", + alternativeName: "Line Islands Time", + group: ["Pacific/Kiritimati"], + continentCode: "OC", + continentName: "Oceania", + countryName: "Kiribati", + countryCode: "KI", + mainCities: ["Kiritimati"], + rawOffsetInMinutes: 840, + abbreviation: "LINT", + rawFormat: "+14:00 Line Islands Time - Kiritimati", + }, +] + +export const timezoneOptions = [ + { + label: "UTC", + value: "Etc/UTC", + }, + { + label: i18next.t("flow.editor.trigger.timezone.local"), + value: ILLADayjs.tz.guess(), + }, +].concat( + ...TIMEZONES.map((timezone) => ({ + label: `${timezone.abbreviation} - ${timezone.mainCities + .slice(0, 2) + .join(", ")}`, + value: timezone.name, + })).filter((timezone) => timezone.value !== ILLADayjs.tz.guess()), +) + +export const SCHEDULE_TYPE_OPTIONS = [ + { + label: i18n.t("flow.editor.trigger.schedule.every_hour"), + value: SCHEDULE_TYPES.EVERY_HOUR, + }, + { + label: i18n.t("flow.editor.trigger.schedule.every_day"), + value: SCHEDULE_TYPES.EVERY_DAY, + }, + { + label: i18n.t("flow.editor.trigger.schedule.every_week"), + value: SCHEDULE_TYPES.EVERY_WEEK, + }, + { + label: i18n.t("flow.editor.trigger.schedule.every_mont"), + value: SCHEDULE_TYPES.EVERY_MONTH, + }, + { + label: i18n.t("flow.editor.trigger.schedule.every_year"), + value: SCHEDULE_TYPES.EVERY_YEAR, + }, +] diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/ScheduleEditor/index.tsx b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/ScheduleEditor/index.tsx new file mode 100644 index 00000000..220ae504 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/ScheduleEditor/index.tsx @@ -0,0 +1,142 @@ +import { Select } from "antd" +import { FC, memo, useCallback, useEffect, useRef } from "react" +import { Controller, useFormContext, useWatch } from "react-hook-form" +import { useTranslation } from "react-i18next" +import { SCHEDULE_TYPES } from "@illa-public/public-types" +import LayoutBlock from "@/Layout/Form/LayoutBlock" +import BlackSwitch from "@/components/BlackSwitch" +import { IAgentForm } from "../../interface" +import RowContainer from "./components/RowContainer" +import { SCHEDULE_TYPE_OPTIONS, timezoneOptions } from "./constants" +import { SCHEDULE_TYPE_MAP_SETTER } from "./module/ScheduleRule" +import { scheduleContainerStyle, scheduleInputsContainerStyle } from "./style" +import { getInitScheduleOptions } from "./utils" + +const ScheduleEditor: FC = memo(() => { + const { t } = useTranslation() + const containerRef = useRef(null) + + const { control } = useFormContext() + + const [schedules, triggerIsActive] = useWatch({ + control: control, + name: ["triggerConfig.schedule", "triggerIsActive"], + }) + + const getScheduleTypeSetter = useCallback((type: SCHEDULE_TYPES) => { + return SCHEDULE_TYPE_MAP_SETTER[type] + }, []) + + const getUpdateScheduleConfig = (v: SCHEDULE_TYPES) => { + const initOptions = getInitScheduleOptions(v) + return { + type: v, + options: initOptions, + } + } + + useEffect(() => { + if (triggerIsActive && containerRef.current) { + containerRef.current.scrollIntoView({ + block: "end", + }) + } + }, [triggerIsActive]) + + if (!Array.isArray(schedules) || schedules.length === 0) { + return null + } + return ( + } + /> + } + > +
+ {triggerIsActive && + schedules.map((_, i) => ( +
+ ( + + { + const scheduleConfig = getUpdateScheduleConfig(v) + field.onChange(scheduleConfig) + }} + disabled={!triggerIsActive} + /> + + )} + /> + + { + const ScheduleTypeSetter = getScheduleTypeSetter( + field.value.type, + ) + return ( + { + field.onChange({ + type: field.value.type, + options: { + ...field.value.options, + ...value, + }, + }) + }} + enabled={triggerIsActive} + /> + ) + }} + /> +
+ ))} +
+
+ ) +}) + +ScheduleEditor.displayName = "ScheduleEditor" + +export default ScheduleEditor diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/ScheduleEditor/module/IntervalSetter/index.tsx b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/ScheduleEditor/module/IntervalSetter/index.tsx new file mode 100644 index 00000000..9b6486c0 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/ScheduleEditor/module/IntervalSetter/index.tsx @@ -0,0 +1,45 @@ +import { InputNumber } from "antd" +import { FC, useMemo } from "react" +import { useTranslation } from "react-i18next" +import { SCHEDULE_TYPES } from "@illa-public/public-types" +import { IntervalSetterProps } from "./interface" +import { intervalContainerStyle, labelStyle } from "./style" + +const IntervalSetter: FC = (props) => { + const { scheduleType, interval, handleUpdateIScheduleOptions, enabled } = + props + const { t } = useTranslation() + const suffix = useMemo(() => { + switch (scheduleType) { + case SCHEDULE_TYPES.EVERY_YEAR: + return t("flow.editor.trigger.schedule.year_plural") + case SCHEDULE_TYPES.EVERY_MONTH: + return t("flow.editor.trigger.schedule.month_plural") + case SCHEDULE_TYPES.EVERY_WEEK: + return t("flow.editor.trigger.schedule.week_plural") + case SCHEDULE_TYPES.EVERY_DAY: + return t("flow.editor.trigger.schedule.day_plural") + case SCHEDULE_TYPES.EVERY_HOUR: + return t("flow.editor.trigger.schedule.hour_plural") + } + }, [scheduleType, t]) + return ( +
+ {t("flow.editor.trigger.schedule.every")} + { + v !== null && handleUpdateIScheduleOptions({ interval: v }) + }} + disabled={!enabled} + /> + {suffix} +
+ ) +} + +export default IntervalSetter diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/ScheduleEditor/module/IntervalSetter/interface.ts b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/ScheduleEditor/module/IntervalSetter/interface.ts new file mode 100644 index 00000000..7deb2621 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/ScheduleEditor/module/IntervalSetter/interface.ts @@ -0,0 +1,8 @@ +import { IScheduleOptions, SCHEDULE_TYPES } from "@illa-public/public-types" + +export interface IntervalSetterProps { + scheduleType: SCHEDULE_TYPES + interval: number | undefined + handleUpdateIScheduleOptions: (value: IScheduleOptions) => void + enabled: boolean +} diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/ScheduleEditor/module/IntervalSetter/style.ts b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/ScheduleEditor/module/IntervalSetter/style.ts new file mode 100644 index 00000000..13a23a63 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/ScheduleEditor/module/IntervalSetter/style.ts @@ -0,0 +1,16 @@ +import { css } from "@emotion/react" +import { getColor } from "@illa-public/color-scheme" + +export const intervalContainerStyle = (enabled: boolean) => css` + display: flex; + width: 206px; + align-items: center; + gap: 8px; + color: ${enabled ? getColor("grayBlue", "02") : getColor("grayBlue", "04")}; +` + +export const labelStyle = css` + font-size: 12px; + font-weight: 400; + line-height: 22px; +` diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/ScheduleEditor/module/ScheduleRule/DaySchedule.tsx b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/ScheduleEditor/module/ScheduleRule/DaySchedule.tsx new file mode 100644 index 00000000..4796540d --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/ScheduleEditor/module/ScheduleRule/DaySchedule.tsx @@ -0,0 +1,62 @@ +import { TimePicker } from "antd" +import dayjs, { Dayjs } from "dayjs" +import { FC } from "react" +import { useTranslation } from "react-i18next" +import { SCHEDULE_TYPES } from "@illa-public/public-types" +import RowContainer from "../../components/RowContainer" +import IntervalSetter from "../IntervalSetter" +import { IScheduleRuleProps } from "./interface" + +const DayScheduleSetter: FC = (props) => { + const { options, handleUpdateIScheduleOptions, enabled } = props + const { t } = useTranslation() + + const times = `${options.hour}:${options.minute}` + + const handleChange = (v: Dayjs) => { + if (!v) { + handleUpdateIScheduleOptions({ + hour: 0, + minute: 0, + }) + } else { + handleUpdateIScheduleOptions({ + hour: v.get("hour"), + minute: v.get("minute"), + }) + } + } + + return ( + <> + + + + + + + + ) +} + +export default DayScheduleSetter diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/ScheduleEditor/module/ScheduleRule/HourSchedule.tsx b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/ScheduleEditor/module/ScheduleRule/HourSchedule.tsx new file mode 100644 index 00000000..70fbd3aa --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/ScheduleEditor/module/ScheduleRule/HourSchedule.tsx @@ -0,0 +1,49 @@ +import { Select } from "antd" +import { FC } from "react" +import { useTranslation } from "react-i18next" +import { SCHEDULE_TYPES } from "@illa-public/public-types" +import { MINUTE_OPTIONS } from "@/config/constants/schedule" +import RowContainer from "../../components/RowContainer" +import IntervalSetter from "../IntervalSetter" +import { IScheduleRuleProps } from "./interface" + +const HourScheduleSetter: FC = (props) => { + const { options, handleUpdateIScheduleOptions, enabled } = props + const { t } = useTranslation() + + return ( + <> + + { + handleUpdateIScheduleOptions({ + dayOfMonth: v, + }) + }} + disabled={!enabled} + /> + + + + + + + + + + ) +} + +export default MonthScheduleSetter diff --git a/apps/agent/src/page/WorkSpace/AI/AIAgent/components/ScheduleEditor/module/ScheduleRule/WeekSchedule.tsx b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/ScheduleEditor/module/ScheduleRule/WeekSchedule.tsx new file mode 100644 index 00000000..b8451d38 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/AI/AIAgent/components/ScheduleEditor/module/ScheduleRule/WeekSchedule.tsx @@ -0,0 +1,82 @@ +import { Select, TimePicker } from "antd" +import dayjs, { Dayjs } from "dayjs" +import { FC } from "react" +import { useTranslation } from "react-i18next" +import { SCHEDULE_TYPES } from "@illa-public/public-types" +import { DAY_OF_WEEK_OPTIONS } from "@/config/constants/schedule" +import RowContainer from "../../components/RowContainer" +import IntervalSetter from "../IntervalSetter" +import { IScheduleRuleProps } from "./interface" + +const WeekScheduleSetter: FC = (props) => { + const { options, handleUpdateIScheduleOptions, enabled } = props + const { t } = useTranslation() + + const times = `${options.hour}:${options.minute}` + + const handleChange = (v: Dayjs) => { + if (!v) { + handleUpdateIScheduleOptions({ + hour: 0, + minute: 0, + }) + } else { + handleUpdateIScheduleOptions({ + hour: v.get("hour"), + minute: v.get("minute"), + }) + } + } + + return ( + <> + + { + handleUpdateIScheduleOptions({ + month: v as number, + dayOfMonth: "1", + }) + }} + /> + + + + - - )} - /> - ) -} - -export default ActionTypeSelect diff --git a/apps/agent/src/page/WorkSpace/Function/Edit/modules/ConfigureAPIPanel/components/BodyEditor/index.tsx b/apps/agent/src/page/WorkSpace/Function/Edit/modules/ConfigureAPIPanel/components/BodyEditor/index.tsx deleted file mode 100644 index b32da95a..00000000 --- a/apps/agent/src/page/WorkSpace/Function/Edit/modules/ConfigureAPIPanel/components/BodyEditor/index.tsx +++ /dev/null @@ -1,271 +0,0 @@ -// import { Select } from "antd" -// import { FC } from "react" -// import { Controller, useFormContext, useWatch } from "react-hook-form" -// import { useTranslation } from "react-i18next" -// import { RestAPIRawBodyInitial } from "@illa-public/public-configs" -// import { -// IAIFunctionRawBody, -// IAIFunctionResource, -// RestAPIBodyType, -// RestAPIRawBody, -// RestAPIRawBodyType, -// } from "@illa-public/public-types" -// import { Params } from "@illa-public/record-editor" -// import ColumnLayoutContainer from "@/Layout/AIFunction/FormLayoutContainer/columnLayoutContainer" -// import { CodeEditor } from "@/components/CodeEditor" -// import { CODE_LANG } from "@/components/CodeEditor/CodeMirror/extensions/interface" -// import { RecordEditor } from "@/components/CodeMirrorRecordEditor" -// import FormDataEditor from "../FormDataEditor" -// import { bodySelectorStyle } from "./style" - -// const RestAPIBodyEditor: FC = () => { -// const { control } = useFormContext>() -// const { t } = useTranslation() -// const [bodyType, body] = useWatch({ -// control, -// name: ["content.bodyType", "content.body"], -// }) - -// let mode: CODE_LANG = CODE_LANG.JAVASCRIPT -// if (bodyType === "raw") { -// switch ((body as RestAPIRawBody).type) { -// case "text": -// mode = CODE_LANG.JAVASCRIPT -// break -// case "json": -// mode = CODE_LANG.JSON -// break -// case "xml": -// mode = CODE_LANG.XML -// break -// case "javascript": -// mode = CODE_LANG.JAVASCRIPT -// break -// case "html": -// mode = CODE_LANG.HTML -// break -// } -// } - -// const handleActionTypeChange = (value: string) => { -// let newBody = null -// switch (value) { -// case "none": -// newBody = null -// break -// case "x-www-form-urlencoded": -// newBody = [{ key: "", value: "" }] as Params[] -// break -// case "form-data": -// newBody = [{ key: "", type: "", value: "" }] as Params[] -// break -// case "raw": -// newBody = RestAPIRawBodyInitial -// break -// case "binary": -// newBody = "" -// break -// } -// handleUpdateActionContent( -// { -// bodyType: value as RestAPIBodyType, -// body: newBody, -// }, -// flowActionID, -// ) -// } - -// return ( -// <> -// -//
-// ( -// { -// // handleUpdateActionContent( -// // { -// // body: { -// // ...(actionContent.body as RestAPIRawBody), -// // type: value as RestAPIRawBodyType, -// // }, -// // }, -// // flowActionID, -// // ) -// // }} -// /> -// )} -// /> -// )} -//
-//
-// {bodyType === "form-data" && ( -// -// -// -// )} - -// {bodyType === "x-www-form-urlencoded" && ( -// -// { -// handleUpdateActionContent( -// { -// body: (actionContent.body as Params[]).concat({ -// key: "", -// value: "", -// }), -// }, -// flowActionID, -// ) -// }} -// onChangeKey={(index, key) => { -// const newBody = [...(actionContent.body as Params[])] -// newBody[index] = { -// ...newBody[index], -// key: key, -// } -// handleUpdateActionContent( -// { -// body: newBody, -// }, -// flowActionID, -// ) -// }} -// onChangeValue={(index, _, value) => { -// const newBody = [...(actionContent.body as Params[])] -// newBody[index] = { -// ...newBody[index], -// value: value, -// } -// handleUpdateActionContent( -// { -// body: newBody, -// }, -// flowActionID, -// ) -// }} -// onDelete={(index) => { -// const newBody = [...(actionContent.body as Params[])].filter( -// (_, i) => i !== index, -// ) - -// handleUpdateActionContent( -// { -// body: newBody, -// }, -// flowActionID, -// ) -// }} -// label={""} -// /> -// -// )} - -// {(bodyType === "binary" || bodyType === "raw") && ( -// -// { -// if (bodyType === "raw") { -// handleUpdateActionContent( -// { -// body: { -// ...(actionContent.body as RestAPIRawBody), -// content: value, -// }, -// }, -// flowActionID, -// ) -// } else { -// handleUpdateActionContent({ body: value }, flowActionID) -// } -// }} -// canExpand -// /> -// -// )} -// -// ) -// } - -// RestAPIBodyEditor.displayName = "RestAPIBodyEditor" - -// export default RestAPIBodyEditor diff --git a/apps/agent/src/page/WorkSpace/Function/Edit/modules/ConfigureAPIPanel/components/Cookies/index.tsx b/apps/agent/src/page/WorkSpace/Function/Edit/modules/ConfigureAPIPanel/components/Cookies/index.tsx deleted file mode 100644 index 6c8dd909..00000000 --- a/apps/agent/src/page/WorkSpace/Function/Edit/modules/ConfigureAPIPanel/components/Cookies/index.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import { FC } from "react" -import { Controller, useFormContext } from "react-hook-form" -import { useTranslation } from "react-i18next" -import { IAIFunctionResource } from "@illa-public/public-types" -import ColumnLayoutContainer from "@/Layout/AIFunction/FormLayoutContainer/columnLayoutContainer" -import { RecordEditor } from "@/components/CodeMirrorRecordEditor" - -const CookiesInput: FC = () => { - const { t } = useTranslation() - - const methods = useFormContext() - - return ( - ( - - { - const newCookies = [...field.value].concat({ - key: "", - value: "", - }) - field.onChange(newCookies) - }} - onChangeKey={(index, key) => { - const newCookies = [...field.value] - newCookies[index] = { - ...newCookies[index], - key: key, - } - field.onChange(newCookies) - }} - onChangeValue={(index, _, value) => { - const newCookies = [...field.value] - newCookies[index] = { - ...newCookies[index], - value: value, - } - field.onChange(newCookies) - }} - onDelete={(index) => { - const newCookies = [...field.value].filter((_, i) => i !== index) - field.onChange(newCookies) - }} - label={""} - /> - - )} - /> - ) -} - -export default CookiesInput diff --git a/apps/agent/src/page/WorkSpace/Function/Edit/modules/ConfigureAPIPanel/components/FormDataEditor/index.tsx b/apps/agent/src/page/WorkSpace/Function/Edit/modules/ConfigureAPIPanel/components/FormDataEditor/index.tsx deleted file mode 100644 index 3c86727c..00000000 --- a/apps/agent/src/page/WorkSpace/Function/Edit/modules/ConfigureAPIPanel/components/FormDataEditor/index.tsx +++ /dev/null @@ -1,91 +0,0 @@ -// import { Select } from "antd" -// import { FC } from "react" -// import { useTranslation } from "react-i18next" -// import { Params } from "@illa-public/record-editor" -// import { CodeEditor } from "@/components/CodeEditor" -// import { CODE_LANG } from "@/components/CodeEditor/CodeMirror/extensions/interface" -// import { -// formDataEditorContainerStyle, -// keyEditorStyle, -// valueEditorStyle, -// } from "./style" - -// const FormDataEditor: FC = (props) => { -// const { t } = useTranslation() -// const { -// flowActionID, -// actionContent, -// handleUpdateActionContent, -// calcContext, -// } = props - -// const handleUpdateFormDataValue = ( -// index: number, -// value: string, -// key: string, -// ) => { -// const newBody = [...(actionContent.body as Params[])] -// newBody[index] = { -// ...newBody[index], -// [key]: value, -// } -// handleUpdateActionContent({ body: newBody }, flowActionID) -// } - -// return (actionContent.body as Params[]).map((param, index) => { -// return ( -//
-// handleUpdateFormDataValue(index, val, "key")} -// lang={CODE_LANG.JAVASCRIPT} -// placeholder="key" -// wrapperCss={keyEditorStyle} -// completionOptions={calcContext} -// /> -// , - }, - { - field: "required", - headerName: "Required", - type: "boolean", - editable: true, - }, - { - field: "description", - headerName: "Description", - type: "string", - width: 240, - editable: true, - renderEditCell: () => , - }, - { - field: "type", - headerName: "Type", - type: "singleSelect", - editable: true, - valueOptions: [ - E_VARIABLE_TYPE.STRING, - E_VARIABLE_TYPE.BOOLEAN, - E_VARIABLE_TYPE.NUMBER, - E_VARIABLE_TYPE.OBJECT, - E_VARIABLE_TYPE.ARRAY, - ], - }, - { - field: "actions", - headerName: "", - type: "actions", - cellClassName: "actions", - align: "right", - getActions: ({ id, row }) => { - const commonButton = [ - +
+
+
{content}
+
+
+ ) +} + +export default CopyPanel diff --git a/apps/agent/src/page/WorkSpace/Function/components/CopyPanel/interface.ts b/apps/agent/src/page/WorkSpace/Function/components/CopyPanel/interface.ts new file mode 100644 index 00000000..07320ba7 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/components/CopyPanel/interface.ts @@ -0,0 +1,11 @@ +import { ReactNode } from "react" + +export interface ICopyPanelProps { + title: string + copyButtonProps?: { + text?: string + disabled?: boolean + } + content: ReactNode + onClickCopyButton: () => void +} diff --git a/apps/agent/src/page/WorkSpace/Function/components/CopyPanel/style.ts b/apps/agent/src/page/WorkSpace/Function/components/CopyPanel/style.ts new file mode 100644 index 00000000..ed7ff87a --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/components/CopyPanel/style.ts @@ -0,0 +1,36 @@ +import { css } from "@emotion/react" +import { getColor } from "@illa-public/color-scheme" + +export const copyPanelStyle = css` + display: flex; + flex-direction: column; + border-radius: 12px; + border: 1px solid ${getColor("grayBlue", "08")}; + overflow: hidden; +` + +export const copyPanelHeaderStyle = css` + padding: 8px 16px; + display: flex; + justify-content: space-between; + align-items: center; + border-bottom: 1px solid ${getColor("grayBlue", "08")}; + background-color: #fafafa; +` +export const headerTextStyle = css` + font-size: 12px; + font-weight: 400; + line-height: normal; + color: ${getColor("grayBlue", "02")}; +` + +export const contentContainerStyle = css` + padding: 16px; + background-color: #fafafa; +` + +export const contentTextStyle = css` + color: ${getColor("grayBlue", "02")}; + font-size: 12px; + font-weight: 400; +` diff --git a/apps/agent/src/page/WorkSpace/Function/components/EditField/AvatarUploader/index.tsx b/apps/agent/src/page/WorkSpace/Function/components/EditField/AvatarUploader/index.tsx new file mode 100644 index 00000000..347ad959 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/components/EditField/AvatarUploader/index.tsx @@ -0,0 +1,84 @@ +import Icon from "@ant-design/icons" +import { ConfigProvider, GetProp, Image, Upload, UploadProps } from "antd" +import ImgCrop from "antd-img-crop" +import { FC, memo } from "react" +import { Controller, useFormContext } from "react-hook-form" +import { useTranslation } from "react-i18next" +import { PlusIcon } from "@illa-public/icon" +import LayoutBlock from "@/Layout/Function/LayoutBlock" +import { IFunctionForm } from "../../../interface" +import { customUploadStyle, uploadContentContainerStyle } from "./style" +import { useBeforeUploadAvatar } from "./utils" + +type FileType = Parameters>[0] + +const getBase64 = (img: FileType, callback: (url: string) => void) => { + const reader = new FileReader() + reader.addEventListener("load", () => callback(reader.result as string)) + reader.readAsDataURL(img) +} + +const AvatarUploader: FC = memo(() => { + const { t } = useTranslation() + const { control } = useFormContext() + const beforeUpload = useBeforeUploadAvatar() + + return ( + ( + + + { + getBase64(v as FileType, (url) => { + field.onChange(url) + }) + }} + beforeCrop={beforeUpload} + cropShape="round" + > + { + field.onChange("") + }} + customRequest={() => {}} + > + {field.value ? ( + , + }} + /> + ) : ( + + )} + + + + + )} + /> + ) +}) + +AvatarUploader.displayName = "AvatarUploader" + +export default AvatarUploader diff --git a/apps/agent/src/page/WorkSpace/Function/components/EditField/AvatarUploader/style.ts b/apps/agent/src/page/WorkSpace/Function/components/EditField/AvatarUploader/style.ts new file mode 100644 index 00000000..81d16bc2 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/components/EditField/AvatarUploader/style.ts @@ -0,0 +1,48 @@ +import { css } from "@emotion/react" +import { getColor } from "@illa-public/color-scheme" + +export const descContainerStyle = css` + cursor: pointer; + display: inline-flex; + align-items: center; +` + +export const descTextStyle = css` + margin-left: 4px; + font-size: 14px; + font-style: normal; + font-weight: 500; + line-height: 22px; + background: linear-gradient(90deg, #853dff 0%, #e13eff 100%); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +` + +export const avatarMaskContainerStyle = css` + display: flex; + align-items: center; + justify-content: center; + gap: 8px; + width: 100%; + height: 100%; +` + +export const uploadContentContainerStyle = css` + color: ${getColor("grayBlue", "04")}; + display: inline-flex; + flex-direction: column; + align-items: center; + border-radius: 12px; + padding: 1px; + + .ant-image-mask { + border-radius: 12px; + inset: 1px; + } +` + +export const customUploadStyle = css` + .ant-image { + flex: none; + } +` diff --git a/apps/agent/src/page/WorkSpace/Function/components/EditField/AvatarUploader/utils.ts b/apps/agent/src/page/WorkSpace/Function/components/EditField/AvatarUploader/utils.ts new file mode 100644 index 00000000..8fcb9bde --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/components/EditField/AvatarUploader/utils.ts @@ -0,0 +1,38 @@ +import { App, GetProp, UploadProps } from "antd" +import { useCallback } from "react" +import { useFormContext } from "react-hook-form" +import { useTranslation } from "react-i18next" +import { TipisTrack } from "@illa-public/track-utils" + +export const useBeforeUploadAvatar = () => { + const { message } = App.useApp() + const { t } = useTranslation() + const { getValues } = useFormContext() + + const beforeUpload = useCallback( + (file: Parameters>[0]) => { + TipisTrack.track("click_upload_tipi_icon_entry", { + parameter1: getValues("aiAgentID") ? "edit" : "create", + }) + const isJpgOrPng = + file.type === "image/jpeg" || + file.type === "image/png" || + file.type === "image/jpg" + if (!isJpgOrPng) { + message.error(t("homepage.edit_tipi.icon.type")) + } + const isLt2M = file.size / 1024 / 1024 < 2 + if (!isLt2M) { + TipisTrack.track("upload_tipi_icon_over_size", { + parameter1: getValues("aiAgentID") ? "edit" : "create", + parameter3: file.size, + }) + message.error(t("homepage.edit_tipi.icon.size")) + } + return isJpgOrPng && isLt2M + }, + [getValues, message, t], + ) + + return beforeUpload +} diff --git a/apps/agent/src/page/WorkSpace/Function/Edit/modules/EditPanel/components/DescriptionEditor/index.tsx b/apps/agent/src/page/WorkSpace/Function/components/EditField/DescriptionEditor/index.tsx similarity index 54% rename from apps/agent/src/page/WorkSpace/Function/Edit/modules/EditPanel/components/DescriptionEditor/index.tsx rename to apps/agent/src/page/WorkSpace/Function/components/EditField/DescriptionEditor/index.tsx index 94da42d0..cf1eda71 100644 --- a/apps/agent/src/page/WorkSpace/Function/Edit/modules/EditPanel/components/DescriptionEditor/index.tsx +++ b/apps/agent/src/page/WorkSpace/Function/components/EditField/DescriptionEditor/index.tsx @@ -1,17 +1,14 @@ import { Input } from "antd" import { FC, memo } from "react" -import { Controller, useFormContext, useFormState } from "react-hook-form" +import { Controller, useFormContext } from "react-hook-form" import { useTranslation } from "react-i18next" import { ErrorText } from "@/Layout/Form/ErrorText" -import LayoutBlock from "@/Layout/Form/LayoutBlock" -import { IAgentForm } from "@/page/WorkSpace/AI/AIAgent/interface" +import LayoutBlock from "@/Layout/Function/LayoutBlock" +import { IFunctionForm } from "../../../interface" const DescriptionEditor: FC = memo(() => { const { t } = useTranslation() - const { control } = useFormContext() - const { errors } = useFormState({ - control: control, - }) + const { control } = useFormContext() return ( { control={control} rules={{ required: t("editor.ai-agent.validation_blank.description"), - maxLength: { value: 160, message: t("editor.ai-agent.length_invalid.description"), }, }} shouldUnregister={false} - render={({ field }) => ( - + render={({ field, fieldState }) => ( + - {errors.description?.message && ( - - )} + )} /> diff --git a/apps/agent/src/page/WorkSpace/Function/Edit/modules/EditPanel/components/DescriptionEditor/style.ts b/apps/agent/src/page/WorkSpace/Function/components/EditField/DescriptionEditor/style.ts similarity index 100% rename from apps/agent/src/page/WorkSpace/Function/Edit/modules/EditPanel/components/DescriptionEditor/style.ts rename to apps/agent/src/page/WorkSpace/Function/components/EditField/DescriptionEditor/style.ts diff --git a/apps/agent/src/page/WorkSpace/Function/components/EditField/IntegrationEditor/index.tsx b/apps/agent/src/page/WorkSpace/Function/components/EditField/IntegrationEditor/index.tsx new file mode 100644 index 00000000..31ff575a --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/components/EditField/IntegrationEditor/index.tsx @@ -0,0 +1,180 @@ +import Icon from "@ant-design/icons" +import { Button } from "antd" +import { memo, useState } from "react" +import { Controller, useFormContext, useWatch } from "react-hook-form" +import { useTranslation } from "react-i18next" +import { + DownIcon, + INTEGRATION_TYPE_MAP_ICON, + PenIcon, + PlusIcon, +} from "@illa-public/icon" +import { TipisTrack } from "@illa-public/track-utils" +import { ErrorText } from "@/Layout/Form/ErrorText" +import LayoutBlock from "@/Layout/Function/LayoutBlock" +import IntegrationSelectorModal from "@/Modules/Integration/CreateOrSelectIntegration/modal" +import { SELECT_INTEGRATION_STEP } from "@/Modules/Integration/CreateOrSelectIntegration/modules/SelectAndCreate/interface" +import { useAppDispatch } from "@/redux/hooks" +import { integrationAPI } from "@/redux/services/integrationAPI" +import { CREATE_INTEGRATION_EVENT } from "@/utils/eventEmitter/constants" +import { IntegrationEventEmitter } from "@/utils/function" +import { useGetCurrentTeamInfo } from "@/utils/team" +import { IFunctionForm } from "../../../interface" +import { + buttonStyle, + downIconContainerStyle, + iconContainerStyle, + integrationContainerStyle, + integrationIconStyle, + integrationNameAndIconStyle, + integrationNameStyle, + outerIntegrationContainerStyle, +} from "./style" + +const IntegrationEditor = memo(() => { + const { t } = useTranslation() + const { control } = useFormContext() + + const [integrationType, aiToolID] = useWatch({ + control, + name: ["resourceType", "aiToolID"], + }) + + const currentTeamInfo = useGetCurrentTeamInfo()! + const dispatch = useAppDispatch() + + const [createOrSelectModalShow, setCreateOrSelectModalShow] = useState(false) + + const IntegrationIcon = INTEGRATION_TYPE_MAP_ICON[integrationType] + + return ( + <> + ( + + {!field.value ? ( + <> + + + ) : ( +
+
{ + IntegrationEventEmitter.emit( + CREATE_INTEGRATION_EVENT.CHANGE_MODAL_STEP, + SELECT_INTEGRATION_STEP.SELECT_OR_CREATE, + ) + TipisTrack.track("function_change_integration", { + parameter1: aiToolID + ? "edit_function" + : "create_function", + parameter2: integrationType, + }) + setCreateOrSelectModalShow(true) + }} + > +
+ {IntegrationIcon ? ( + + ) : ( +
+ )} +

{field.value.resourceName}

+
+ +
+
+
+
{ + TipisTrack.track("function_edit_integration", { + parameter1: aiToolID + ? "edit_function" + : "create_function", + parameter2: integrationType, + }) + IntegrationEventEmitter.emit( + CREATE_INTEGRATION_EVENT.CHANGE_MODAL_STEP, + SELECT_INTEGRATION_STEP.EDIT, + ) + setCreateOrSelectModalShow(true) + }} + > +
+ +
+
+
+ )} + + + { + TipisTrack.track("integration_save", { + parameter1: aiToolID ? "edit_function" : "create_function", + parameter2: integrationType, + }) + try { + const integrationList = await dispatch( + integrationAPI.endpoints.getIntegrationList.initiate( + currentTeamInfo.id!, + ), + ).unwrap() + const targetIntegration = integrationList.find( + (integration) => integration.resourceID === integrationID, + ) + if (targetIntegration) { + field.onChange({ + resourceID: targetIntegration.resourceID, + resourceName: targetIntegration.resourceName, + }) + setCreateOrSelectModalShow(false) + } + } catch {} + }} + integrationID={field.value?.resourceID ?? ""} + /> + + )} + /> + + ) +}) + +IntegrationEditor.displayName = "IntegrationEditor" + +export default IntegrationEditor diff --git a/apps/agent/src/page/WorkSpace/Function/components/EditField/IntegrationEditor/style.ts b/apps/agent/src/page/WorkSpace/Function/components/EditField/IntegrationEditor/style.ts new file mode 100644 index 00000000..4f6c4b52 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/components/EditField/IntegrationEditor/style.ts @@ -0,0 +1,95 @@ +import { css } from "@emotion/react" +import { getColor } from "@illa-public/color-scheme" + +export const descContainerStyle = css` + cursor: pointer; + display: inline-flex; + align-items: center; +` + +export const descTextStyle = css` + margin-left: 4px; + font-size: 14px; + font-style: normal; + font-weight: 500; + line-height: 22px; + background: linear-gradient(90deg, #853dff 0%, #e13eff 100%); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +` + +export const outerIntegrationContainerStyle = css` + display: flex; + align-items: center; + width: 100%; +` + +export const integrationContainerStyle = css` + width: calc(100% - 42px); + padding: 7px 16px; + display: flex; + justify-content: space-between; + align-items: center; + border-radius: 12px 0px 0px 12px; + border: 1px solid ${getColor("grayBlue", "08")}; + cursor: pointer; + :hover { + background-color: ${getColor("grayBlue", "09")}; + } +` + +export const downIconContainerStyle = css` + width: 24px; + height: 24px; + flex: none; + display: flex; + align-items: center; + justify-content: center; +` + +export const buttonStyle = css` + cursor: pointer; + flex: none; + padding: 7px; + border-radius: 0px 12px 12px 0px; + border: 1px solid ${getColor("grayBlue", "08")}; + margin: -1px; + :hover { + background-color: ${getColor("grayBlue", "09")}; + } +` + +export const iconContainerStyle = css` + padding: 5px; + display: flex; + align-items: center; + justify-content: center; + svg { + flex: none; + } +` + +export const integrationNameAndIconStyle = css` + display: flex; + gap: 8px; + width: 100%; +` + +export const integrationIconStyle = css` + width: 24px; + height: 24px; + font-size: 24px; + flex: none; +` + +export const integrationNameStyle = css` + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + color: ${getColor("grayBlue", "02")}; + font-size: 14px; + font-weight: 500; + line-height: 22px; + max-width: calc(100% - 100px); +` diff --git a/apps/agent/src/page/WorkSpace/Function/Edit/modules/EditPanel/components/NameEditor/index.tsx b/apps/agent/src/page/WorkSpace/Function/components/EditField/NameEditor/index.tsx similarity index 50% rename from apps/agent/src/page/WorkSpace/Function/Edit/modules/EditPanel/components/NameEditor/index.tsx rename to apps/agent/src/page/WorkSpace/Function/components/EditField/NameEditor/index.tsx index f8f7fc3d..a10d990b 100644 --- a/apps/agent/src/page/WorkSpace/Function/Edit/modules/EditPanel/components/NameEditor/index.tsx +++ b/apps/agent/src/page/WorkSpace/Function/components/EditField/NameEditor/index.tsx @@ -1,34 +1,42 @@ import { Input } from "antd" import { FC, memo } from "react" -import { Controller, useFormContext, useFormState } from "react-hook-form" +import { Controller, useFormContext } from "react-hook-form" import { useTranslation } from "react-i18next" -import { IAIFunctionResource } from "@illa-public/public-types" import { ErrorText } from "@/Layout/Form/ErrorText" -import LayoutBlock from "@/Layout/Form/LayoutBlock" +import LayoutBlock from "@/Layout/Function/LayoutBlock" +import { IFunctionForm } from "../../../interface" const NameEditor: FC = memo(() => { const { t } = useTranslation() - const methods = useFormContext() - - const { errors } = useFormState({ - control: methods.control, - }) + const methods = useFormContext() return ( { + if (value.startsWith("_sys")) { + return t("function.edit.configure.name.validate") + } + return true + }, }} shouldUnregister={false} - render={({ field }) => ( + render={({ field, fieldState }) => ( { const value = e.target.value @@ -36,9 +44,7 @@ const NameEditor: FC = memo(() => { // setInRoomUsers(updateLocalName(value, inRoomUsers)) }} /> - {errors.resourceName?.message && ( - - )} + )} /> diff --git a/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/CreateVariableButton/index.tsx b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/CreateVariableButton/index.tsx new file mode 100644 index 00000000..430c3095 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/CreateVariableButton/index.tsx @@ -0,0 +1,43 @@ +import Icon from "@ant-design/icons" +import { Button } from "antd" +import { FC, useState } from "react" +import { useTranslation } from "react-i18next" +import { PlusIcon } from "@illa-public/icon" +import VariableModalContent from "../VariableContent" +import { ICreateVariableButtonProps } from "./interface" + +const CreateVariableButton: FC = (props) => { + const { + addedIndex, + buttonProps: { type, size, block, hiddenButton }, + } = props + const { t } = useTranslation() + const [showCreateModal, setShowCreateModal] = useState(false) + + const handleClickNewButton = () => { + setShowCreateModal(true) + } + + return ( + <> + {!hiddenButton && ( + + )} + + + ) +} + +export default CreateVariableButton diff --git a/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/CreateVariableButton/interface.ts b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/CreateVariableButton/interface.ts new file mode 100644 index 00000000..e277a0ac --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/CreateVariableButton/interface.ts @@ -0,0 +1,11 @@ +import { ButtonProps } from "antd" + +export interface ICreateVariableButtonProps { + addedIndex: number + buttonProps: { + type?: ButtonProps["type"] + size?: ButtonProps["size"] + block?: ButtonProps["block"] + hiddenButton?: boolean + } +} diff --git a/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/DescriptionEditor/index.tsx b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/DescriptionEditor/index.tsx new file mode 100644 index 00000000..e33d0ce2 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/DescriptionEditor/index.tsx @@ -0,0 +1,44 @@ +import { Input } from "antd" +import { FC } from "react" +import { Controller, useFormContext } from "react-hook-form" +import { useTranslation } from "react-i18next" +import { IVariables } from "@illa-public/public-types" +import LabelWithController from "@/Layout/Function/LabelWithController" + +const DescriptionEditor: FC = () => { + const { control } = useFormContext() + const { t } = useTranslation() + + return ( + { + return ( + + + + ) + }} + /> + ) +} + +export default DescriptionEditor diff --git a/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/EnumOptionsEditor/index.tsx b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/EnumOptionsEditor/index.tsx new file mode 100644 index 00000000..de5451cc --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/EnumOptionsEditor/index.tsx @@ -0,0 +1,87 @@ +import Icon from "@ant-design/icons" +import { Button, Input } from "antd" +import { FC } from "react" +import { Controller, useFormContext } from "react-hook-form" +import { useTranslation } from "react-i18next" +import { CloseIcon, PlusIcon } from "@illa-public/icon" +import { IVariables } from "@illa-public/public-types" +import LabelWithController from "@/Layout/Function/LabelWithController" +import { + deleteIconStyle, + enumOptionItemContainerStyle, + enumOptionsEditorContainerStyle, + subTitleStyle, +} from "./style" + +const EnumOptionsEditor: FC = () => { + const { control } = useFormContext() + + const { t } = useTranslation() + + return ( + { + if (value.length === 0) { + return t("function.edit.variable_modal.error.options") + } + return true + }, + }} + render={({ field, fieldState }) => { + return ( + +
+

+ {t("function.edit.variable_modal.label.options")} +

+ {field.value.map((value, valueIndex) => ( +
+ { + const newValue = e.target.value + field.onChange( + field.value.map((v, i) => + i === valueIndex ? newValue : v, + ), + ) + }} + /> +
+ ))} +
+ +
+
+
+ ) + }} + /> + ) +} + +export default EnumOptionsEditor diff --git a/apps/agent/src/components/CodeEditor/ModalCodeMirror/style.ts b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/EnumOptionsEditor/style.ts similarity index 51% rename from apps/agent/src/components/CodeEditor/ModalCodeMirror/style.ts rename to apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/EnumOptionsEditor/style.ts index c9f5f0f4..10aff5e4 100644 --- a/apps/agent/src/components/CodeEditor/ModalCodeMirror/style.ts +++ b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/EnumOptionsEditor/style.ts @@ -1,28 +1,25 @@ import { css } from "@emotion/react" import { getColor } from "@illa-public/color-scheme" -export const descriptionStyle = css` - font-size: 14px; - color: ${getColor("grayBlue", "04")}; - font-weight: 400; - line-height: 22px; - margin: 0; +export const enumOptionsEditorContainerStyle = css` + width: 100%; + display: flex; + flex-direction: column; + gap: 8px; ` -export const applyCodeMirrorWrapperStyle = css` +export const enumOptionItemContainerStyle = css` + display: flex; width: 100%; - height: 100%; ` -export const saveButtonStyle = css` - position: absolute; - right: 16px; +export const subTitleStyle = css` + color: ${getColor("grayBlue", "04")}; + font-size: 14px; + font-weight: 400; + line-height: 22px; ` -export const contentWrapperStyle = css` - width: 100%; - height: 100%; - display: flex; - flex-direction: column; - gap: 16px; +export const deleteIconStyle = css` + flex: none; ` diff --git a/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/IsEnumEditor/index.tsx b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/IsEnumEditor/index.tsx new file mode 100644 index 00000000..ccae05bf --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/IsEnumEditor/index.tsx @@ -0,0 +1,60 @@ +import { Switch } from "antd" +import { FC } from "react" +import { + Controller, + useController, + useFormContext, + useWatch, +} from "react-hook-form" +import { useTranslation } from "react-i18next" +import { IVariables } from "@illa-public/public-types" +import LabelWithController from "@/Layout/Function/LabelWithController" +import { CANT_ENUM_TYPE } from "../config" +import { containerStyle } from "./style" + +const IsEnumEditor: FC = () => { + const { control } = useFormContext() + + const { t } = useTranslation() + + const type = useWatch({ + control, + name: "type", + }) + + const enumValuesController = useController({ + control, + name: "enum", + }) + + const isDisabled = CANT_ENUM_TYPE.includes(type) + + return ( + { + return ( + +
+ { + if (!checked) { + enumValuesController.field.onChange([]) + } + field.onChange(checked) + }} + /> +
+
+ ) + }} + /> + ) +} + +export default IsEnumEditor diff --git a/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/IsEnumEditor/style.ts b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/IsEnumEditor/style.ts new file mode 100644 index 00000000..ae734f97 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/IsEnumEditor/style.ts @@ -0,0 +1,5 @@ +import { css } from "@emotion/react" + +export const containerStyle = css` + padding: 9px 0; +` diff --git a/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NameEditor/index.tsx b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NameEditor/index.tsx new file mode 100644 index 00000000..59ad0696 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NameEditor/index.tsx @@ -0,0 +1,46 @@ +import { Input } from "antd" +import { FC } from "react" +import { Controller, useFormContext } from "react-hook-form" +import { useTranslation } from "react-i18next" +import { IVariables } from "@illa-public/public-types" +import LabelWithController from "@/Layout/Function/LabelWithController" + +const NameEditor: FC = () => { + const { control } = useFormContext() + const { t } = useTranslation() + + return ( + { + return ( + + + + ) + }} + /> + ) +} + +export default NameEditor diff --git a/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/components/ActionColumn/index.tsx b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/components/ActionColumn/index.tsx new file mode 100644 index 00000000..45f59e38 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/components/ActionColumn/index.tsx @@ -0,0 +1,28 @@ +import Icon from "@ant-design/icons" +import { Button } from "antd" +import { FC } from "react" +import { DeleteOutlineIcon, PenIcon } from "@illa-public/icon" +import { useVariableToCompletionOption } from "@/utils/function/hook" +import { + actionContainerStyle, + listItemContainerStyle, + placeholderStyle, +} from "./style" + +const ActionColumn: FC = () => { + const options = useVariableToCompletionOption() + + return ( +
+
+ {options.map((_, i) => ( +
+
+ ))} +
+ ) +} + +export default ActionColumn diff --git a/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/components/ActionColumn/style.ts b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/components/ActionColumn/style.ts new file mode 100644 index 00000000..00bd35dd --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/components/ActionColumn/style.ts @@ -0,0 +1,22 @@ +import { css } from "@emotion/react" + +export const actionContainerStyle = css` + width: auto; + flex: none; + display: flex; + flex-direction: column; +` + +export const listItemContainerStyle = css` + width: 100%; + padding: 5px 0; + overflow: hidden; + display: flex; + align-items: center; + gap: 8px; + height: 32px; +` + +export const placeholderStyle = css` + height: 32px; +` diff --git a/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/components/DescriptionColumn/index.tsx b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/components/DescriptionColumn/index.tsx new file mode 100644 index 00000000..0a6a6fcb --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/components/DescriptionColumn/index.tsx @@ -0,0 +1,30 @@ +import { FC } from "react" +import { useTranslation } from "react-i18next" +import { useVariableToCompletionOption } from "@/utils/function/hook" +import HeaderField from "../HeaderField" +import { + descriptionContainerStyle, + descriptionTextStyle, + listItemContainerStyle, +} from "./style" + +const DescriptionColumn: FC = () => { + const { t } = useTranslation() + + const options = useVariableToCompletionOption() + + return ( +
+ + {options.map((item, i) => ( +
+

{item.description}

+
+ ))} +
+ ) +} + +export default DescriptionColumn diff --git a/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/components/DescriptionColumn/style.ts b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/components/DescriptionColumn/style.ts new file mode 100644 index 00000000..1bded005 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/components/DescriptionColumn/style.ts @@ -0,0 +1,27 @@ +import { css } from "@emotion/react" +import { getColor } from "@illa-public/color-scheme" + +export const descriptionContainerStyle = css` + width: 100%; + display: flex; + flex-direction: column; +` + +export const listItemContainerStyle = css` + width: 100%; + padding: 5px 0; + overflow: hidden; + height: 32px; + display: flex; + align-items: center; +` + +export const descriptionTextStyle = css` + color: ${getColor("grayBlue", "03")}; + font-size: 12px; + font-weight: 400; + line-height: 20px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +` diff --git a/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/components/HeaderField/index.tsx b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/components/HeaderField/index.tsx new file mode 100644 index 00000000..513a8af5 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/components/HeaderField/index.tsx @@ -0,0 +1,14 @@ +import { FC } from "react" +import { IHeaderFieldProps } from "./interface" +import { headerFieldContainerStyle, headerTextStyle } from "./style" + +const HeaderField: FC = (props) => { + const { title } = props + return ( +
+

{title}

+
+ ) +} + +export default HeaderField diff --git a/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/components/HeaderField/interface.ts b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/components/HeaderField/interface.ts new file mode 100644 index 00000000..c7be498e --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/components/HeaderField/interface.ts @@ -0,0 +1,3 @@ +export interface IHeaderFieldProps { + title: string +} diff --git a/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/components/HeaderField/style.ts b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/components/HeaderField/style.ts new file mode 100644 index 00000000..5d7ab9dc --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/components/HeaderField/style.ts @@ -0,0 +1,14 @@ +import { css } from "@emotion/react" +import { getColor } from "@illa-public/color-scheme" + +export const headerFieldContainerStyle = css` + width: 100%; + padding: 5px 0; + height: 32px; +` +export const headerTextStyle = css` + color: ${getColor("grayBlue", "02")}; + font-size: 14px; + font-weight: 500; + line-height: 22px; +` diff --git a/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/components/RequiredColumn/index.tsx b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/components/RequiredColumn/index.tsx new file mode 100644 index 00000000..574296ba --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/components/RequiredColumn/index.tsx @@ -0,0 +1,37 @@ +import { FC } from "react" +import { useTranslation } from "react-i18next" +import { ErrorIcon, SuccessIcon } from "@illa-public/icon" +import { useVariableToCompletionOption } from "@/utils/function/hook" +import HeaderField from "../HeaderField" +import { + descriptionContainerStyle, + errorIconStyle, + listItemContainerStyle, + successIconStyle, +} from "./style" + +const getRequiredIcon = (required: boolean) => { + return required ? ( + + ) : ( + + ) +} + +const RequiredColumn: FC = () => { + const options = useVariableToCompletionOption() + + const { t } = useTranslation() + return ( +
+ + {options.map((item, i) => ( +
+ {getRequiredIcon(!!item.required)} +
+ ))} +
+ ) +} + +export default RequiredColumn diff --git a/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/components/RequiredColumn/style.ts b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/components/RequiredColumn/style.ts new file mode 100644 index 00000000..1482b014 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/components/RequiredColumn/style.ts @@ -0,0 +1,26 @@ +import { css } from "@emotion/react" +import { getColor } from "@illa-public/color-scheme" + +export const descriptionContainerStyle = css` + width: 60px; + flex: none; + display: flex; + flex-direction: column; +` + +export const listItemContainerStyle = css` + width: 100%; + padding: 5px 0; + overflow: hidden; + height: 32px; + display: flex; + align-items: center; +` + +export const successIconStyle = css` + color: ${getColor("green", "03")}; +` + +export const errorIconStyle = css` + color: ${getColor("grayBlue", "04")}; +` diff --git a/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/components/TypeColumn/index.tsx b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/components/TypeColumn/index.tsx new file mode 100644 index 00000000..c26deede --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/components/TypeColumn/index.tsx @@ -0,0 +1,27 @@ +import { FC } from "react" +import { useTranslation } from "react-i18next" +import { useVariableToCompletionOption } from "@/utils/function/hook" +import HeaderField from "../HeaderField" +import { + listItemContainerStyle, + typeContainerStyle, + typeTextStyle, +} from "./style" + +const TypeColumn: FC = () => { + const { t } = useTranslation() + const options = useVariableToCompletionOption() + + return ( +
+ + {options.map((item, i) => ( +
+

{item.originType}

+
+ ))} +
+ ) +} + +export default TypeColumn diff --git a/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/components/TypeColumn/style.ts b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/components/TypeColumn/style.ts new file mode 100644 index 00000000..bd4638cf --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/components/TypeColumn/style.ts @@ -0,0 +1,28 @@ +import { css } from "@emotion/react" +import { getColor } from "@illa-public/color-scheme" + +export const typeContainerStyle = css` + width: auto; + flex: none; + display: flex; + flex-direction: column; +` + +export const listItemContainerStyle = css` + width: 100%; + padding: 5px 0; + overflow: hidden; + height: 32px; + display: flex; + align-items: center; +` + +export const typeTextStyle = css` + color: ${getColor("grayBlue", "03")}; + font-size: 12px; + font-weight: 400; + line-height: 20px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +` diff --git a/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/components/VariableAndAddColumn/index.tsx b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/components/VariableAndAddColumn/index.tsx new file mode 100644 index 00000000..352a624d --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/components/VariableAndAddColumn/index.tsx @@ -0,0 +1,46 @@ +import Icon from "@ant-design/icons" +import { Button } from "antd" +import { FC } from "react" +import { useTranslation } from "react-i18next" +import { PlusIcon } from "@illa-public/icon" +import { useVariableToCompletionOption } from "@/utils/function/hook" +import HeaderField from "../HeaderField" +import { + addColumnContainerStyle, + listItemContainerStyle, + placeholderStyle, + variableNameAndAddColumnStyle, + variableNameContainerStyle, + variableNameStyle, +} from "./style" + +const VariableAndAddColumn: FC = () => { + const { t } = useTranslation() + + const options = useVariableToCompletionOption() + + return ( +
+
+
+ {options.map((des, i) => ( +
+
+ ))} +
+
+ + {options.map((item, i) => ( +
+

{item.key}

+
+ ))} +
+
+ ) +} + +export default VariableAndAddColumn diff --git a/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/components/VariableAndAddColumn/style.ts b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/components/VariableAndAddColumn/style.ts new file mode 100644 index 00000000..b499c128 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/components/VariableAndAddColumn/style.ts @@ -0,0 +1,45 @@ +import { css } from "@emotion/react" +import { getColor } from "@illa-public/color-scheme" + +export const variableNameContainerStyle = css` + width: calc(100% - 32px); + display: flex; + flex-direction: column; +` + +export const addColumnContainerStyle = css` + width: 32px; + display: flex; + flex-direction: column; + flex: none; +` + +export const listItemContainerStyle = (level: number = 0) => css` + width: 100%; + padding: 5px 0; + overflow: hidden; + height: 32px; + display: flex; + align-items: center; + padding-left: ${level * 16}px; +` + +export const variableNameStyle = css` + color: ${getColor("grayBlue", "02")}; + font-size: 12px; + font-weight: 400; + line-height: 20px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +` + +export const variableNameAndAddColumnStyle = css` + width: 100%; + display: flex; + overflow: hidden; +` + +export const placeholderStyle = css` + height: 32px; +` diff --git a/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/index.tsx b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/index.tsx new file mode 100644 index 00000000..ea2ed7c5 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/index.tsx @@ -0,0 +1,21 @@ +import { FC } from "react" +import ActionColumn from "./components/ActionColumn" +import DescriptionColumn from "./components/DescriptionColumn" +import RequiredColumn from "./components/RequiredColumn" +import TypeColumn from "./components/TypeColumn" +import VariableAndAddColumn from "./components/VariableAndAddColumn" +import { variableListContainerStyle } from "./style" + +const NewVariableList: FC = () => { + return ( +
+ + + + + +
+ ) +} + +export default NewVariableList diff --git a/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/style.ts b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/style.ts new file mode 100644 index 00000000..0dfe3767 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/NewVariableList/style.ts @@ -0,0 +1,11 @@ +import { css } from "@emotion/react" +import { getColor } from "@illa-public/color-scheme" + +export const variableListContainerStyle = css` + width: 100%; + padding: 8px; + border: 1px solid ${getColor("grayBlue", "08")}; + border-radius: 12px; + display: flex; + gap: 0px 16px; +` diff --git a/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/RequiredEditor/index.tsx b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/RequiredEditor/index.tsx new file mode 100644 index 00000000..e17c0a99 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/RequiredEditor/index.tsx @@ -0,0 +1,33 @@ +import { Switch } from "antd" +import { FC } from "react" +import { Controller, useFormContext } from "react-hook-form" +import { useTranslation } from "react-i18next" +import { IVariables } from "@illa-public/public-types" +import LabelWithController from "@/Layout/Function/LabelWithController" +import { containerStyle } from "./style" + +const RequiredEditor: FC = () => { + const { control } = useFormContext() + + const { t } = useTranslation() + + return ( + { + return ( + +
+ +
+
+ ) + }} + /> + ) +} + +export default RequiredEditor diff --git a/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/RequiredEditor/style.ts b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/RequiredEditor/style.ts new file mode 100644 index 00000000..ae734f97 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/RequiredEditor/style.ts @@ -0,0 +1,5 @@ +import { css } from "@emotion/react" + +export const containerStyle = css` + padding: 9px 0; +` diff --git a/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/TypeEditor/index.tsx b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/TypeEditor/index.tsx new file mode 100644 index 00000000..30ad485c --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/components/EditField/VariableEditor/components/TypeEditor/index.tsx @@ -0,0 +1,54 @@ +import { Select } from "antd" +import { FC } from "react" +import { Controller, useController, useFormContext } from "react-hook-form" +import { useTranslation } from "react-i18next" +import { IVariables } from "@illa-public/public-types" +import LabelWithController from "@/Layout/Function/LabelWithController" +import { CANT_ENUM_TYPE, VARIABLE_TYPE_OPTIONS } from "../config" + +const TypeEditor: FC = () => { + const { control } = useFormContext() + + const { t } = useTranslation() + + const enumValuesController = useController({ + control, + name: "enum", + }) + const isEnumController = useController({ + control, + name: "isEnum", + }) + + return ( + { + return ( + + + + )} + /> + ) + })} +
+
+ + {t("function.edit.test.button.test_connection")} + +
+ + ) +} + +export default TestValueModal diff --git a/apps/agent/src/page/WorkSpace/Function/components/TestValueInputModal/interface.ts b/apps/agent/src/page/WorkSpace/Function/components/TestValueInputModal/interface.ts new file mode 100644 index 00000000..a3863d2d --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/components/TestValueInputModal/interface.ts @@ -0,0 +1,4 @@ +export interface ITestValueModalProps { + open: boolean + changeOpen: (open: boolean) => void +} diff --git a/apps/agent/src/page/WorkSpace/Function/components/TestValueInputModal/style.ts b/apps/agent/src/page/WorkSpace/Function/components/TestValueInputModal/style.ts new file mode 100644 index 00000000..f2ff716d --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/components/TestValueInputModal/style.ts @@ -0,0 +1,18 @@ +import { css } from "@emotion/react" + +export const customModalStyle = css` + .ant-modal-title { + text-align: center; + } +` + +export const variableContentStyle = css` + max-height: 800px; + min-height: 384px; + overflow: hidden; + overflow-y: auto; +` + +export const footerContainerStyle = css` + padding-top: 24px; +` diff --git a/apps/agent/src/page/WorkSpace/Function/create.tsx b/apps/agent/src/page/WorkSpace/Function/create.tsx new file mode 100644 index 00000000..58b9104e --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/create.tsx @@ -0,0 +1,155 @@ +import { App } from "antd" +import { FC, useCallback, useEffect } from "react" +import { FormProvider, useForm, useWatch } from "react-hook-form" +import { useTranslation } from "react-i18next" +import { useBeforeUnload, useParams } from "react-router-dom" +import { getFunctionInitDataByType } from "@illa-public/public-configs" +import { IBaseFunction, TIntegrationType } from "@illa-public/public-types" +import { TipisTrack } from "@illa-public/track-utils" +import { getCurrentId } from "@illa-public/user-data" +import WorkspacePCHeaderLayout from "@/Layout/Workspace/pc/components/Header" +import { useCreateAIToolMutation } from "@/redux/services/aiToolsAPI" +import store from "@/redux/store" +import { getRecentTabInfos } from "@/redux/ui/recentTab/selector" +import { useGetIconURL, useOpenTipsWhenSubmit } from "@/utils/function/hook" +import { + getFormDataByTabID, + setFormDataByTabID, +} from "@/utils/localForage/formData" +import { CREATE_FUNCTION_ID } from "@/utils/recentTabs/constants" +import { useAddCreateFunction } from "@/utils/recentTabs/hook" +import { useGetCurrentTeamInfo } from "@/utils/team" +import TestRunResult from "./components/TestRunResult" +import { IFunctionForm } from "./interface" +import DocPanel from "./modules/DocPanel" +import EditPanel from "./modules/EditPanel" +import HeaderTools from "./modules/HeaderTools" +import { contentContainerStyle, formStyle } from "./style" + +const CreateFunction: FC = () => { + const { functionType } = useParams() + const { message } = App.useApp() + const { t } = useTranslation() + + const INITConfig = getFunctionInitDataByType(functionType as TIntegrationType) + const createFunctionTab = useAddCreateFunction() + const currentTeamInfo = useGetCurrentTeamInfo()! + const openTips = useOpenTipsWhenSubmit() + + const methods = useForm({ + defaultValues: INITConfig, + mode: "onChange", + }) + + const [createAITool] = useCreateAIToolMutation() + + const getIconURL = useGetIconURL() + + useEffect(() => { + if (functionType) { + createFunctionTab(functionType) + } + }, [createFunctionTab, functionType]) + + const { control, reset } = methods + + const values = useWatch({ + control, + }) + + const setUiHistoryFormData = useCallback(async () => { + const tabID = CREATE_FUNCTION_ID + const teamID = getCurrentId(store.getState())! + const historyTabs = getRecentTabInfos(store.getState()) + const currentTab = historyTabs.find((tab) => tab.tabID === tabID) + if (!currentTab) return + const formData = await getFormDataByTabID(teamID, tabID) + + if (formData) { + await setFormDataByTabID(teamID, tabID, { + ...formData, + ...values, + }) + } else { + await setFormDataByTabID(teamID, tabID, values) + } + }, [values]) + + const createFunctionWhenSubmit = async (data: IFunctionForm) => { + TipisTrack.track("create_function", { + parameter1: "edit_function", + parameter2: data.resourceType, + }) + const icon = data.config.icon + + const aiTool: IBaseFunction = { + config: { + ...data.config, + icon: icon ? icon : "", + }, + content: data.content, + description: data.description, + name: data.name, + parameters: data.parameters, + resourceType: data.resourceType, + resourceID: data.integrationInfo.resourceID, + actionOperation: data.actionOperation, + } + try { + const iconURL = await getIconURL(aiTool.config.icon) + + const serverData = await createAITool({ + teamID: currentTeamInfo?.id, + aiTool: { + ...aiTool, + config: { + ...aiTool.config, + icon: iconURL, + }, + }, + }).unwrap() + await openTips(serverData) + } catch (e) { + message.error(t("function.edit.message.failed_to_create")) + } + } + + useEffect(() => { + const getHistoryDataAndSetFormData = async () => { + const tabID = CREATE_FUNCTION_ID + const teamID = getCurrentId(store.getState())! + const formData = await getFormDataByTabID(teamID, tabID) + if (formData) { + reset(formData) + } + } + getHistoryDataAndSetFormData() + }, [reset]) + + useBeforeUnload(setUiHistoryFormData) + + useEffect(() => { + setUiHistoryFormData() + }, [setUiHistoryFormData]) + + return ( + +
+ } + /> +
+ + + +
+ +
+ ) +} + +export default CreateFunction diff --git a/apps/agent/src/page/WorkSpace/Function/edit.tsx b/apps/agent/src/page/WorkSpace/Function/edit.tsx new file mode 100644 index 00000000..c117abe6 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/edit.tsx @@ -0,0 +1,234 @@ +import { App } from "antd" +import { FC, useCallback, useEffect, useState } from "react" +import { FormProvider, useForm, useWatch } from "react-hook-form" +import { useTranslation } from "react-i18next" +import { useBeforeUnload, useParams } from "react-router-dom" +import { IBaseFunction } from "@illa-public/public-types" +import { TipisTrack } from "@illa-public/track-utils" +import { getCurrentId } from "@illa-public/user-data" +import WorkspacePCHeaderLayout from "@/Layout/Workspace/pc/components/Header" +import FullSectionLoading from "@/components/FullSectionLoading" +import { + useGetAIToolByIDQuery, + useUpdateAIToolByIDMutation, +} from "@/redux/services/aiToolsAPI" +import { useGetIntegrationListQuery } from "@/redux/services/integrationAPI" +import store from "@/redux/store" +import { TAB_TYPE } from "@/redux/ui/recentTab/interface" +import { getRecentTabInfos } from "@/redux/ui/recentTab/selector" +import { useGetIconURL, useOpenTipsWhenSubmit } from "@/utils/function/hook" +import { + getFormDataByTabID, + setFormDataByTabID, +} from "@/utils/localForage/formData" +import { useAddOrUpdateEditFunctionTab } from "@/utils/recentTabs/hook" +import { useGetCurrentTeamInfo } from "@/utils/team" +import TestRunResult from "./components/TestRunResult" +import { IEditFunctionProps, IFunctionForm } from "./interface" +import DocPanel from "./modules/DocPanel" +import EditPanel from "./modules/EditPanel" +import EmptyDetail from "./modules/Empty" +import HeaderTools from "./modules/HeaderTools" +import { contentContainerStyle, formStyle } from "./style" + +const EditFunctionDataProvider: FC = () => { + const { functionID } = useParams() + + const currentTeamInfo = useGetCurrentTeamInfo()! + + const [cacheData, setCacheData] = useState( + undefined, + ) + + const { + data: detailData, + isLoading: isDetailLoading, + isError: isDetailError, + } = useGetAIToolByIDQuery({ + teamID: currentTeamInfo.id, + aiToolID: functionID as string, + }) + + const { + data: integrationList, + isLoading: isListLoading, + isError: isListError, + } = useGetIntegrationListQuery(currentTeamInfo.id) + + const formattedData: IFunctionForm | undefined = detailData + ? { + ...detailData, + integrationInfo: { + resourceID: + integrationList?.find( + (item) => item.resourceID === detailData.resourceID, + )?.resourceID || "-1", + resourceName: + integrationList?.find( + (item) => item.resourceID === detailData.resourceID, + )?.resourceName || "", + }, + parameters: detailData.parameters || [], + content: detailData.content || {}, + } + : undefined + + const addOrUpdateFunctionTab = useAddOrUpdateEditFunctionTab() + + useEffect(() => { + if (detailData) { + addOrUpdateFunctionTab({ + functionName: detailData.name, + functionID: detailData.aiToolID, + }) + } + }, [addOrUpdateFunctionTab, detailData]) + + useEffect(() => { + const getHistoryDataAndSetFormData = async () => { + if (!functionID) return + const historyTabs = getRecentTabInfos(store.getState()) + const currentTab = historyTabs.find( + (tab) => + tab.cacheID === functionID && tab.tabType === TAB_TYPE.EDIT_FUNCTION, + ) + if (!currentTab) return + const teamID = getCurrentId(store.getState())! + const formData = (await getFormDataByTabID(teamID, currentTab.tabID)) as + | IFunctionForm + | undefined + + if (formData) { + setCacheData(formData) + } + } + getHistoryDataAndSetFormData() + }, [functionID]) + + if (isDetailError || isListError) + return + if (isListLoading || isDetailLoading) return + + return formattedData ? ( + + ) : null +} + +const EditFunction: FC = ({ originData, cacheData }) => { + const { functionID } = useParams() + const currentTeamInfo = useGetCurrentTeamInfo()! + + const [updateAITool] = useUpdateAIToolByIDMutation() + + const getIconURL = useGetIconURL() + const openTips = useOpenTipsWhenSubmit() + + const { t } = useTranslation() + + const { message } = App.useApp() + + const methods = useForm({ + defaultValues: originData, + mode: "onChange", + }) + + const values = useWatch({ + control: methods.control, + }) + + const setUiHistoryFormData = useCallback(async () => { + if (!functionID) return + const historyTabs = getRecentTabInfos(store.getState()) + const currentTab = historyTabs.find((tab) => tab.cacheID === functionID) + if (!currentTab) return + const formData = await getFormDataByTabID( + currentTeamInfo.id, + currentTab.tabID, + ) + if (formData) { + await setFormDataByTabID(currentTeamInfo.id!, currentTab.tabID, { + ...formData, + ...values, + }) + } else { + await setFormDataByTabID(currentTeamInfo.id!, currentTab.tabID, { + ...values, + }) + } + }, [currentTeamInfo.id, functionID, values]) + + const updateFunctionWhenSubmit = async (data: IFunctionForm) => { + TipisTrack.track("function_save", { + parameter1: "edit_function", + parameter2: data.resourceType, + }) + const icon = data.config.icon + + const aiTool: IBaseFunction = { + config: { + ...data.config, + icon: icon ? icon : "", + }, + content: data.content, + description: data.description, + name: data.name, + parameters: data.parameters, + resourceType: data.resourceType, + resourceID: data.integrationInfo.resourceID, + actionOperation: data.actionOperation, + } + try { + const iconURL = await getIconURL(aiTool.config.icon) + + const serverData = await updateAITool({ + teamID: currentTeamInfo?.id, + aiToolID: functionID as string, + aiTool: { + ...aiTool, + config: { + ...aiTool.config, + icon: iconURL, + }, + }, + }).unwrap() + await openTips(serverData, "edit") + } catch (e) { + message.error(t("function.edit.message.failed_to_update")) + } + } + + useEffect(() => { + if (cacheData) { + methods.reset(cacheData, { + keepDefaultValues: true, + }) + } + }, [cacheData, methods]) + + useBeforeUnload(setUiHistoryFormData) + + useEffect(() => { + setUiHistoryFormData() + }, [setUiHistoryFormData]) + + return ( + +
+ } + /> +
+ + + +
+ +
+ ) +} + +export default EditFunctionDataProvider diff --git a/apps/agent/src/page/WorkSpace/Function/interface.ts b/apps/agent/src/page/WorkSpace/Function/interface.ts new file mode 100644 index 00000000..32508e6e --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/interface.ts @@ -0,0 +1,28 @@ +import { + IFunctionInterface, + ITencentCosFunction, +} from "@illa-public/public-types" + +export interface IIntegrationInfo { + resourceID: string + resourceName: string +} + +export interface ITencentCosFunctionForm + extends Omit { + aiToolID: string + integrationInfo: IIntegrationInfo +} + +export interface ILarkBotFunctionForm + extends Omit { + aiToolID: string + integrationInfo: IIntegrationInfo +} + +export type IFunctionForm = ITencentCosFunctionForm | ILarkBotFunctionForm + +export interface IEditFunctionProps { + originData: IFunctionForm + cacheData: IFunctionForm | undefined +} diff --git a/apps/agent/src/page/WorkSpace/Function/modules/DocPanel/index.tsx b/apps/agent/src/page/WorkSpace/Function/modules/DocPanel/index.tsx new file mode 100644 index 00000000..edaad3b9 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/modules/DocPanel/index.tsx @@ -0,0 +1,106 @@ +import Icon from "@ant-design/icons" +import { Button, Skeleton } from "antd" +import { FC } from "react" +import { useController, useFormContext, useWatch } from "react-hook-form" +import { useTranslation } from "react-i18next" +import { DocsIcon } from "@illa-public/icon" +import { useGetWhiteListIPQuery } from "@/redux/services/peripheralAPI" +import { useCopyToClipboard } from "@/utils/copyToClipboard" +import CopyPanel from "../../components/CopyPanel" +import { IFunctionForm } from "../../interface" +import { blockStyle, descStyle, docPanelStyle, titleStyle } from "./style" +import { INTEGRATION_TYPE_MAP_DOC } from "./utils" + +const DocPanel: FC = () => { + const { t } = useTranslation() + const { data, isLoading } = useGetWhiteListIPQuery() + const copyToClipboard = useCopyToClipboard() + + const { control } = useFormContext() + const [integrationType, functionName] = useWatch({ + control, + name: ["resourceType", "name"], + }) + + const { fieldState } = useController({ + control, + name: "name", + }) + + const isNameInvalid = fieldState.invalid + + const finalFunctionName = functionName + ? isNameInvalid + ? "functionName" + : functionName + : "functionName" + + const onClickCopyPrompt = () => { + copyToClipboard( + t("function.edit.right_panel.example_prompt", { + functionName: finalFunctionName, + }), + ) + } + + const onClickCopyIP = () => { + if (!data) return + copyToClipboard(data.resources.join("\n")) + } + + const openDocs = () => { + window.open(INTEGRATION_TYPE_MAP_DOC[integrationType], "_blank") + } + + return ( +
+ +
+

{t("function.edit.right_panel.add_to_tipi")}

+
+
+

{t("function.edit.right_panel.write_in_prompt")}

+

{t("function.edit.right_panel.for_example")}

+ +
+
+

{t("function.edit.right_panel.allowlist")}

+

{t("function.edit.right_panel.for_example")}

+ + ) : ( + data?.resources.map((ip) =>

{ip}

) + ) + } + /> +
+
+ ) +} + +export default DocPanel diff --git a/apps/agent/src/page/WorkSpace/Function/modules/DocPanel/style.ts b/apps/agent/src/page/WorkSpace/Function/modules/DocPanel/style.ts new file mode 100644 index 00000000..6a4681ca --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/modules/DocPanel/style.ts @@ -0,0 +1,31 @@ +import { css } from "@emotion/react" +import { getColor } from "@illa-public/color-scheme" + +export const docPanelStyle = css` + width: 400px; + flex: none; + display: flex; + flex-direction: column; + gap: 24px; + padding: 8px 24px; +` + +export const blockStyle = css` + display: flex; + gap: 8px; + flex-direction: column; +` + +export const titleStyle = css` + color: ${getColor("grayBlue", "02")}; + font-size: 14px; + font-weight: 500; + line-height: 22px; +` + +export const descStyle = css` + color: ${getColor("grayBlue", "03")}; + font-size: 12px; + font-weight: 400; + line-height: 20px; +` diff --git a/apps/agent/src/page/WorkSpace/Function/modules/DocPanel/utils.ts b/apps/agent/src/page/WorkSpace/Function/modules/DocPanel/utils.ts new file mode 100644 index 00000000..1a808384 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/modules/DocPanel/utils.ts @@ -0,0 +1,6 @@ +import { TIntegrationType } from "@illa-public/public-types" + +export const INTEGRATION_TYPE_MAP_DOC: Record = { + tencentcos: "https://help.tipis.ai/en/articles/9250274-tencent-cloud", + larkbot: "https://help.tipis.ai/en/articles/9250277-lark", +} diff --git a/apps/agent/src/page/WorkSpace/Function/modules/EditPanel/index.tsx b/apps/agent/src/page/WorkSpace/Function/modules/EditPanel/index.tsx new file mode 100644 index 00000000..426435b2 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/modules/EditPanel/index.tsx @@ -0,0 +1,41 @@ +import { FC } from "react" +import { useFormContext, useWatch } from "react-hook-form" +import AvatarUploader from "../../components/EditField/AvatarUploader" +import DescriptionEditor from "../../components/EditField/DescriptionEditor" +import IntegrationEditor from "../../components/EditField/IntegrationEditor" +import NameEditor from "../../components/EditField/NameEditor" +import { IFunctionForm } from "../../interface" +// import VariableEditor from "../../components/EditField/VariableEditor" +import EventEditor from "../EventEditor" +import { + basicContainerStyle, + dividerStyle, + editPanelContainerStyle, +} from "./style" + +const EditPanel: FC = () => { + const { control } = useFormContext() + + const integrationInfo = useWatch({ + control, + name: "integrationInfo", + }) + + return ( +
+
+ + + +
+
+
+ + {/* {!!integrationID && } */} + {!!integrationInfo && } +
+
+ ) +} + +export default EditPanel diff --git a/apps/agent/src/page/WorkSpace/Function/modules/EditPanel/style.ts b/apps/agent/src/page/WorkSpace/Function/modules/EditPanel/style.ts new file mode 100644 index 00000000..9e67aeca --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/modules/EditPanel/style.ts @@ -0,0 +1,25 @@ +import { css } from "@emotion/react" +import { getColor } from "@illa-public/color-scheme" + +export const editPanelContainerStyle = css` + width: 100%; + display: flex; + flex-direction: column; + gap: 8px; + overflow: hidden; + overflow-y: auto; +` + +export const basicContainerStyle = css` + width: 100%; + padding: 0 24px; + display: flex; + flex-direction: column; + gap: 8px; +` + +export const dividerStyle = css` + height: 1px; + width: 100%; + background-color: ${getColor("grayBlue", "08")}; +` diff --git a/apps/agent/src/page/WorkSpace/Function/modules/Empty/index.tsx b/apps/agent/src/page/WorkSpace/Function/modules/Empty/index.tsx new file mode 100644 index 00000000..d13eaa68 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/modules/Empty/index.tsx @@ -0,0 +1,47 @@ +import { Button } from "antd" +import { FC, useState } from "react" +import { useTranslation } from "react-i18next" +import NotHasTipIcon from "@/assets/workspace/not-has-tipi.svg?react" +import { DEFAULT_CHAT_ID } from "@/redux/ui/recentTab/state" +import { useRemoveRecentTabByCacheIDReducer } from "@/utils/recentTabs/baseHook" +import { useNavigateToNewChat } from "@/utils/routeHelper/hook" +import { IEmptyDetailProps } from "./interface" +import { + emptyOuterContainerStyle, + emptyTipisContainerStyle, + emptyTipisTipTextStyle, +} from "./style" + +const EmptyDetail: FC = (props) => { + const { functionID } = props + const { t } = useTranslation() + const [isLoading, setIsLoading] = useState(false) + + const navigateToDefaultChat = useNavigateToNewChat() + const removeAllRecentTabsByTipisID = useRemoveRecentTabByCacheIDReducer() + + const handleClickedButton = async () => { + setIsLoading(true) + + await removeAllRecentTabsByTipisID(functionID) + + await navigateToDefaultChat(DEFAULT_CHAT_ID) + setIsLoading(false) + } + + return ( +
+
+ +

+ {t("homepage.function_dashboard.deleted")} +

+ +
+
+ ) +} + +export default EmptyDetail diff --git a/apps/agent/src/page/WorkSpace/Function/modules/Empty/interface.ts b/apps/agent/src/page/WorkSpace/Function/modules/Empty/interface.ts new file mode 100644 index 00000000..21b55d0c --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/modules/Empty/interface.ts @@ -0,0 +1,3 @@ +export interface IEmptyDetailProps { + functionID: string +} diff --git a/apps/agent/src/page/WorkSpace/Function/modules/Empty/style.ts b/apps/agent/src/page/WorkSpace/Function/modules/Empty/style.ts new file mode 100644 index 00000000..76a34a75 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/modules/Empty/style.ts @@ -0,0 +1,24 @@ +import { css } from "@emotion/react" +import { getColor } from "@illa-public/color-scheme" + +export const emptyTipisContainerStyle = css` + display: flex; + flex-direction: column; + align-items: center; + gap: 16px; +` + +export const emptyTipisTipTextStyle = css` + color: ${getColor("grayBlue", "02")}; + font-size: 14px; + font-weight: 500; + line-height: 22px; +` + +export const emptyOuterContainerStyle = css` + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; +` diff --git a/apps/agent/src/page/WorkSpace/Function/modules/EventEditor/components/labelWithEditor/index.tsx b/apps/agent/src/page/WorkSpace/Function/modules/EventEditor/components/labelWithEditor/index.tsx new file mode 100644 index 00000000..5d56b6a1 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/modules/EventEditor/components/labelWithEditor/index.tsx @@ -0,0 +1,30 @@ +import { memo } from "react" +import { LabelWithEditorProps } from "./interface" +import { + descriptionStyle, + labelStyle, + labelWithEditorLabelContainerStyle, + outerContainerStyle, +} from "./style" + +const LabelWithEditor = memo((props: LabelWithEditorProps) => { + const { children, label, description } = props + return ( +
+
+

{label}

+ {children} +
+ {description && ( +
+
+
{description}
+
+ )} +
+ ) +}) + +LabelWithEditor.displayName = "LabelWithEditor" + +export default LabelWithEditor diff --git a/apps/agent/src/page/WorkSpace/Function/modules/EventEditor/components/labelWithEditor/interface.ts b/apps/agent/src/page/WorkSpace/Function/modules/EventEditor/components/labelWithEditor/interface.ts new file mode 100644 index 00000000..cecb2f0b --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/modules/EventEditor/components/labelWithEditor/interface.ts @@ -0,0 +1,7 @@ +import { ReactNode } from "react" + +export interface LabelWithEditorProps { + children: ReactNode + label: string + description?: string +} diff --git a/apps/agent/src/page/WorkSpace/Function/modules/EventEditor/components/labelWithEditor/style.ts b/apps/agent/src/page/WorkSpace/Function/modules/EventEditor/components/labelWithEditor/style.ts new file mode 100644 index 00000000..455d77de --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/modules/EventEditor/components/labelWithEditor/style.ts @@ -0,0 +1,37 @@ +import { css } from "@emotion/react" +import { getColor } from "@illa-public/color-scheme" + +export const outerContainerStyle = css` + width: 100%; + display: flex; + flex-direction: column; + gap: 8px; +` + +export const labelWithEditorLabelContainerStyle = css` + width: 100%; + display: flex; + gap: 16px; + align-items: center; +` + +export const labelStyle = css` + font-size: 12px; + color: ${getColor("grayBlue", "02")}; + font-weight: 500; + line-height: 20px; + width: 120px; + flex: none; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + text-align: right; +` + +export const descriptionStyle = css` + width: 100%; + color: ${getColor("grayBlue", "03")}; + font-size: 12px; + font-weight: 400; + line-height: 130%; +` diff --git a/apps/agent/src/page/WorkSpace/Function/modules/EventEditor/index.tsx b/apps/agent/src/page/WorkSpace/Function/modules/EventEditor/index.tsx new file mode 100644 index 00000000..ae5d8028 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/modules/EventEditor/index.tsx @@ -0,0 +1,39 @@ +import { FC, Suspense, lazy } from "react" +import { useFormContext, useWatch } from "react-hook-form" +import { useTranslation } from "react-i18next" +import { TIntegrationType } from "@illa-public/public-types" +import LayoutBlock from "@/Layout/Form/LayoutBlock" +import { IFunctionForm } from "../../interface" + +const tencentCos = lazy(() => import("./panels/tencentCos")) + +const getEventEditorByIntegrationType = (integrationType: TIntegrationType) => { + switch (integrationType) { + case "tencentcos": + return tencentCos + case "larkbot": + return null + } +} + +const EventEditor: FC = () => { + const { t } = useTranslation() + const { control } = useFormContext() + const integrationType = useWatch({ + control, + name: "resourceType", + }) + const EventEditorComponent = getEventEditorByIntegrationType(integrationType) + return EventEditorComponent ? ( + + + + + + ) : null +} + +export default EventEditor diff --git a/apps/agent/src/page/WorkSpace/Function/modules/EventEditor/panels/tencentCos/components/ActionTypeEditor/index.tsx b/apps/agent/src/page/WorkSpace/Function/modules/EventEditor/panels/tencentCos/components/ActionTypeEditor/index.tsx new file mode 100644 index 00000000..47261cae --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/modules/EventEditor/panels/tencentCos/components/ActionTypeEditor/index.tsx @@ -0,0 +1,50 @@ +import { Select } from "antd" +import { memo } from "react" +import { Controller, useFormContext } from "react-hook-form" +import { useTranslation } from "react-i18next" +import { + // FUNCTION_ACTION_TYPE, + ITencentCosFunction, + TENCENT_COS_ACTION_OPERATION, +} from "@illa-public/public-types" +import LabelWithEditor from "../../../../components/labelWithEditor" + +const ActionTypeEditor = memo(() => { + const { control } = useFormContext() + + const { t } = useTranslation() + + const actionTypeOptions = [ + { + label: t("editor.action.form.label.tx.action_type.list"), + value: TENCENT_COS_ACTION_OPERATION.TENCENT_COS_LIST, + }, + { + label: t("editor.action.form.option.tx.action_type.download"), + value: TENCENT_COS_ACTION_OPERATION.TENCENT_COS_DOWNLOAD, + }, + ] + + return ( + + { + return ( + + }} + /> + + ) +} + +export default VersionIDEditor diff --git a/apps/agent/src/page/WorkSpace/Function/modules/EventEditor/panels/tencentCos/index.tsx b/apps/agent/src/page/WorkSpace/Function/modules/EventEditor/panels/tencentCos/index.tsx new file mode 100644 index 00000000..00b7e21d --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/modules/EventEditor/panels/tencentCos/index.tsx @@ -0,0 +1,42 @@ +import { FC } from "react" +// import { useFormContext, useWatch } from "react-hook-form" +// import { +// FUNCTION_ACTION_TYPE, +// IFunctionInterface, +// } from "@illa-public/public-types" +import ActionTypeEditor from "./components/ActionTypeEditor" +// import DelimiterEditor from "./components/DelimiterEditor" +// import MaxKeysEditor from "./components/MaxKeysEditor" +// import ObjectNameEditor from "./components/ObjectNameEditor" +// import PrefixEditor from "./components/PrefixEditor" +// import VersionIDEditor from "./components/VersionIDEditor" +import { tencentCosContainerStyle } from "./style" + +const TencentCosEventEditor: FC = () => { + // const { control } = useFormContext() + // const actionType = useWatch({ + // control, + // name: "content.actionType", + // }) + + return ( +
+ + {/* {actionType === FUNCTION_ACTION_TYPE.LIST && ( + <> + + + + + )} + {actionType === FUNCTION_ACTION_TYPE.GET_DOWNLOAD_URL && ( + <> + + + + )} */} +
+ ) +} + +export default TencentCosEventEditor diff --git a/apps/agent/src/page/WorkSpace/Function/Edit/context/FormContext/style.ts b/apps/agent/src/page/WorkSpace/Function/modules/EventEditor/panels/tencentCos/style.ts similarity index 56% rename from apps/agent/src/page/WorkSpace/Function/Edit/context/FormContext/style.ts rename to apps/agent/src/page/WorkSpace/Function/modules/EventEditor/panels/tencentCos/style.ts index 31671131..3f5cabda 100644 --- a/apps/agent/src/page/WorkSpace/Function/Edit/context/FormContext/style.ts +++ b/apps/agent/src/page/WorkSpace/Function/modules/EventEditor/panels/tencentCos/style.ts @@ -1,8 +1,9 @@ import { css } from "@emotion/react" -export const formStyle = css` - display: flex; +export const tencentCosContainerStyle = css` width: 100%; - height: 100%; + display: flex; flex-direction: column; + gap: 16px; + padding: 8px 0; ` diff --git a/apps/agent/src/page/WorkSpace/Function/modules/HeaderTools/index.tsx b/apps/agent/src/page/WorkSpace/Function/modules/HeaderTools/index.tsx new file mode 100644 index 00000000..58b71c2d --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/modules/HeaderTools/index.tsx @@ -0,0 +1,15 @@ +import { FC } from "react" +import PublishButton from "../../components/PublishButton" +import TestFunctionButton from "../../components/TestFunctionButton" +import { headerToolsContainerStyle } from "./style" + +const HeaderTools: FC = () => { + return ( +
+ + +
+ ) +} + +export default HeaderTools diff --git a/apps/agent/src/page/WorkSpace/Function/Edit/modules/ConfigureAPIPanel/components/BodyEditor/style.ts b/apps/agent/src/page/WorkSpace/Function/modules/HeaderTools/style.ts similarity index 56% rename from apps/agent/src/page/WorkSpace/Function/Edit/modules/ConfigureAPIPanel/components/BodyEditor/style.ts rename to apps/agent/src/page/WorkSpace/Function/modules/HeaderTools/style.ts index 3b05c31a..ff045d34 100644 --- a/apps/agent/src/page/WorkSpace/Function/Edit/modules/ConfigureAPIPanel/components/BodyEditor/style.ts +++ b/apps/agent/src/page/WorkSpace/Function/modules/HeaderTools/style.ts @@ -1,7 +1,7 @@ import { css } from "@emotion/react" -export const bodySelectorStyle = css` +export const headerToolsContainerStyle = css` display: flex; align-items: center; - flex-direction: row; + gap: 8px; ` diff --git a/apps/agent/src/page/WorkSpace/Function/style.ts b/apps/agent/src/page/WorkSpace/Function/style.ts new file mode 100644 index 00000000..d1c7e361 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/Function/style.ts @@ -0,0 +1,27 @@ +import { css } from "@emotion/react" +import { getColor } from "@illa-public/color-scheme" + +export const contentContainerStyle = css` + width: 100%; + height: 100%; + border-top: 1px solid ${getColor("grayBlue", "08")}; + overflow: hidden; + overflow-x: auto; + display: flex; + position: relative; +` + +export const leftPlaceContentStyle = css` + min-width: 240px; + max-width: 400px; + display: flex; + padding: 8px 24px; + width: 240px; +` + +export const formStyle = css` + display: flex; + width: 100%; + height: 100%; + flex-direction: column; +` diff --git a/apps/agent/src/page/WorkSpace/FunctionDashboard/components/TeamCardList/index.tsx b/apps/agent/src/page/WorkSpace/FunctionDashboard/components/TeamCardList/index.tsx new file mode 100644 index 00000000..7a741a72 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/FunctionDashboard/components/TeamCardList/index.tsx @@ -0,0 +1,81 @@ +import { List } from "antd" +import Fuse from "fuse.js" +import { FC, useContext } from "react" +import { TipisTrack } from "@illa-public/track-utils" +import FullSectionLoading from "@/components/FullSectionLoading" +import TeamNoData from "@/components/TeamNoData" +import { useGetAllAIToolsListQuery } from "@/redux/services/aiToolsAPI" +import { canShowCreateFunction } from "@/utils/UIHelper/functions" +import { useGetCurrentTeamInfo } from "@/utils/team" +import { FunctionDashBoardUIStateContext } from "../../context/functionDashboard" +import { FunctionDashboardContext } from "../../pc/context" +import { ITeamCardListProps } from "./interface" + +const TeamCardList: FC = (props) => { + const { RenderItem } = props + const currentTeamInfo = useGetCurrentTeamInfo()! + + const { changeCreateFunctionModal } = useContext(FunctionDashboardContext) + + const { dashboardUIState } = useContext(FunctionDashBoardUIStateContext) + const { search } = dashboardUIState + + const { data, isLoading } = useGetAllAIToolsListQuery(currentTeamInfo.id) + + const handleClickCreateTipis = () => { + TipisTrack.track("click_create_function_entry", { + parameter1: "dashboard_create", + }) + changeCreateFunctionModal(true) + } + + const fuseSearch = new Fuse(data?.aiToolList ?? [], { + keys: ["name", "description"], + }).search(search ?? "") + + const searchResult = search + ? fuseSearch.length > 0 + ? fuseSearch.map((s) => s.item) + : [] + : data?.aiToolList ?? [] + + if (isLoading) { + return + } + + if (searchResult.length === 0) { + return ( + + ) + } + + return ( + ( + + )} + /> + ) +} + +export default TeamCardList diff --git a/apps/agent/src/page/WorkSpace/FunctionDashboard/components/TeamCardList/interface.ts b/apps/agent/src/page/WorkSpace/FunctionDashboard/components/TeamCardList/interface.ts new file mode 100644 index 00000000..2aa9a49a --- /dev/null +++ b/apps/agent/src/page/WorkSpace/FunctionDashboard/components/TeamCardList/interface.ts @@ -0,0 +1,15 @@ +import { ComponentType } from "react" +import { TIntegrationType } from "@illa-public/public-types" + +export interface ITeamCardListItemProps { + icon: string + title: string + publishToMarketplace: boolean + description: string + id: string + type: TIntegrationType +} + +export interface ITeamCardListProps { + RenderItem: ComponentType +} diff --git a/apps/agent/src/page/WorkSpace/FunctionDashboard/context/functionDashboard.tsx b/apps/agent/src/page/WorkSpace/FunctionDashboard/context/functionDashboard.tsx new file mode 100644 index 00000000..244dc5cd --- /dev/null +++ b/apps/agent/src/page/WorkSpace/FunctionDashboard/context/functionDashboard.tsx @@ -0,0 +1,63 @@ +import { + Dispatch, + FC, + ReactNode, + createContext, + useEffect, + useReducer, +} from "react" +import { useSelector } from "react-redux" +import { getCurrentId } from "@illa-public/user-data" +import { getCacheUIState } from "@/utils/localForage/uiState" +import { EXPLORE_FUNCTION_ID } from "@/utils/recentTabs/constants" +import { + FUNCTION_DASHBOARD_UI_STATE_ACTION_TYPE, + IFunctionDashBoardUIState, + TFunctionDashboardUIStateAction, +} from "./interface" +import { INIT_FUNCTION_DASHBOARD_UI_STATE, reducer } from "./reducer" + +interface IFunctionDashboardUIInject { + dashboardUIState: IFunctionDashBoardUIState + dispatch: Dispatch +} + +interface IFunctionDashBoardUIStateProviderProps { + children: ReactNode +} + +export const FunctionDashBoardUIStateContext = createContext( + {} as IFunctionDashboardUIInject, +) + +export const FunctionDashboardUIStateProvider: FC< + IFunctionDashBoardUIStateProviderProps +> = ({ children }) => { + const currentTeamID = useSelector(getCurrentId) + const [dashboardUIState, dispatch] = useReducer( + reducer, + INIT_FUNCTION_DASHBOARD_UI_STATE, + ) + + useEffect(() => { + const setDefaultUIState = async () => { + const uiState = await getCacheUIState(currentTeamID!, EXPLORE_FUNCTION_ID) + dispatch({ + type: FUNCTION_DASHBOARD_UI_STATE_ACTION_TYPE.SET_UI_STATE, + payload: + (uiState as IFunctionDashBoardUIState) ?? + INIT_FUNCTION_DASHBOARD_UI_STATE, + }) + } + + setDefaultUIState() + }, [currentTeamID]) + + return ( + + {children} + + ) +} diff --git a/apps/agent/src/page/WorkSpace/FunctionDashboard/context/interface.ts b/apps/agent/src/page/WorkSpace/FunctionDashboard/context/interface.ts new file mode 100644 index 00000000..1cbf6a63 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/FunctionDashboard/context/interface.ts @@ -0,0 +1,27 @@ +export interface IFunctionDashBoardUIState { + search: string | undefined +} + +export enum FUNCTION_DASHBOARD_UI_STATE_ACTION_TYPE { + SET_SEARCH = "SET_SEARCH", + SET_UI_STATE = "SET_UI_STATE", +} + +export interface IFunctionDashBoardUIStateBaseAction { + type: FUNCTION_DASHBOARD_UI_STATE_ACTION_TYPE + payload: T +} + +export interface ISetSearchAction + extends IFunctionDashBoardUIStateBaseAction { + type: FUNCTION_DASHBOARD_UI_STATE_ACTION_TYPE.SET_SEARCH +} + +export interface ISetUIStateAction + extends IFunctionDashBoardUIStateBaseAction { + type: FUNCTION_DASHBOARD_UI_STATE_ACTION_TYPE.SET_UI_STATE +} + +export type TFunctionDashboardUIStateAction = + | ISetSearchAction + | ISetUIStateAction diff --git a/apps/agent/src/page/WorkSpace/FunctionDashboard/context/reducer.ts b/apps/agent/src/page/WorkSpace/FunctionDashboard/context/reducer.ts new file mode 100644 index 00000000..dabc9489 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/FunctionDashboard/context/reducer.ts @@ -0,0 +1,38 @@ +import { getCurrentId } from "@illa-public/user-data" +import store from "@/redux/store" +import { setCacheUIState } from "@/utils/localForage/uiState" +import { EXPLORE_FUNCTION_ID } from "@/utils/recentTabs/constants" +import { + FUNCTION_DASHBOARD_UI_STATE_ACTION_TYPE, + IFunctionDashBoardUIState, + TFunctionDashboardUIStateAction, +} from "./interface" + +export const INIT_FUNCTION_DASHBOARD_UI_STATE: IFunctionDashBoardUIState = { + search: undefined, +} + +export const reducer = ( + state: IFunctionDashBoardUIState, + action: TFunctionDashboardUIStateAction, +): IFunctionDashBoardUIState => { + const currentTeamID = getCurrentId(store.getState()) + let newState = { ...state } + switch (action.type) { + case FUNCTION_DASHBOARD_UI_STATE_ACTION_TYPE.SET_UI_STATE: { + newState = { + ...action.payload, + } + break + } + case FUNCTION_DASHBOARD_UI_STATE_ACTION_TYPE.SET_SEARCH: { + newState = { + ...state, + search: action.payload, + } + break + } + } + setCacheUIState(currentTeamID!, EXPLORE_FUNCTION_ID, newState) + return newState +} diff --git a/apps/agent/src/page/WorkSpace/FunctionDashboard/index.tsx b/apps/agent/src/page/WorkSpace/FunctionDashboard/index.tsx new file mode 100644 index 00000000..580eb8f0 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/FunctionDashboard/index.tsx @@ -0,0 +1,26 @@ +import { FC, lazy, useEffect } from "react" +import { LayoutAutoChange } from "@illa-public/layout-auto-change" +import { useAddExploreFunctionsTab } from "@/utils/recentTabs/hook" +import { FunctionDashboardUIStateProvider } from "./context/functionDashboard" + +const FunctionsPCDashboard = lazy(() => import("./pc")) +const FunctionsMobileDashboard = lazy(() => import("./mobile")) + +const FunctionsDashboard: FC = () => { + const addExploreFunctionTab = useAddExploreFunctionsTab() + + useEffect(() => { + addExploreFunctionTab() + }, [addExploreFunctionTab]) + + return ( + + } + mobilePage={} + /> + + ) +} + +export default FunctionsDashboard diff --git a/apps/agent/src/page/WorkSpace/FunctionDashboard/mobile/components/TeamCardListItem/index.tsx b/apps/agent/src/page/WorkSpace/FunctionDashboard/mobile/components/TeamCardListItem/index.tsx new file mode 100644 index 00000000..ba6a20c8 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/FunctionDashboard/mobile/components/TeamCardListItem/index.tsx @@ -0,0 +1,36 @@ +import { ConfigProvider, List, Tag } from "antd" +import { FC } from "react" +import MobileTeamCard from "@/components/TeamCard/mobile" +import { ITeamCardListItemProps } from "../../../components/TeamCardList/interface" + +const MobileTeamCardListItem: FC = (props) => { + const { icon, title, description, publishToMarketplace } = props + + const tags = publishToMarketplace ? ( + Marketplace + ) : undefined + + return ( + + + + + + ) +} + +export default MobileTeamCardListItem diff --git a/apps/agent/src/page/WorkSpace/FunctionDashboard/mobile/index.tsx b/apps/agent/src/page/WorkSpace/FunctionDashboard/mobile/index.tsx new file mode 100644 index 00000000..d4a447ed --- /dev/null +++ b/apps/agent/src/page/WorkSpace/FunctionDashboard/mobile/index.tsx @@ -0,0 +1,38 @@ +import { Tabs } from "antd" +import { FC } from "react" +import { useTranslation } from "react-i18next" +import MobileFirstPageLayout from "@/Layout/Workspace/mobile/module/FistPageLayout" +import DashboardContent from "./modules/DashboardContent" +import { + functionMobileDashboardContainerStyle, + tabsContainerStyle, +} from "./style" + +const FunctionsMobileDashboard: FC = () => { + const { t } = useTranslation() + + return ( +
+ } + > +
+ , + }, + ]} + style={{ height: "100%" }} + activeKey="team" + /> +
+
+
+ ) +} + +export default FunctionsMobileDashboard diff --git a/apps/agent/src/page/WorkSpace/FunctionDashboard/mobile/modules/DashboardContent/index.tsx b/apps/agent/src/page/WorkSpace/FunctionDashboard/mobile/modules/DashboardContent/index.tsx new file mode 100644 index 00000000..4b8bde2e --- /dev/null +++ b/apps/agent/src/page/WorkSpace/FunctionDashboard/mobile/modules/DashboardContent/index.tsx @@ -0,0 +1,36 @@ +import Icon from "@ant-design/icons" +import { Input } from "antd" +import { FC } from "react" +import { SearchIcon } from "@illa-public/icon" +import TeamCardList from "../../../components/TeamCardList" +import { useSearchFunctionDashboard } from "../../../utils" +import MobileTeamCardListItem from "../../components/TeamCardListItem" +import { + cardListContainerStyle, + dashboardContentStyle, + searchInputStyle, +} from "./style" + +const DashboardContent: FC = () => { + const { searchValue, handleChangeSearchValue } = useSearchFunctionDashboard() + + return ( +
+
+ } + size="large" + value={searchValue} + onChange={handleChangeSearchValue} + /> +
+ +
+ +
+
+ ) +} + +export default DashboardContent diff --git a/apps/agent/src/page/WorkSpace/FunctionDashboard/mobile/modules/DashboardContent/style.ts b/apps/agent/src/page/WorkSpace/FunctionDashboard/mobile/modules/DashboardContent/style.ts new file mode 100644 index 00000000..a5619b96 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/FunctionDashboard/mobile/modules/DashboardContent/style.ts @@ -0,0 +1,23 @@ +import { css } from "@emotion/react" + +export const dashboardContentStyle = css` + display: flex; + flex-direction: column; + width: 100%; + height: 100%; + overflow: hidden; + gap: 16px; +` + +export const cardListContainerStyle = css` + width: 100%; + height: 100%; + overflow-y: auto; + overflow-x: hidden; + padding: 0 20px; +` + +export const searchInputStyle = css` + width: 100%; + padding: 0 20px; +` diff --git a/apps/agent/src/page/WorkSpace/FunctionDashboard/mobile/style.ts b/apps/agent/src/page/WorkSpace/FunctionDashboard/mobile/style.ts new file mode 100644 index 00000000..52b3a7da --- /dev/null +++ b/apps/agent/src/page/WorkSpace/FunctionDashboard/mobile/style.ts @@ -0,0 +1,22 @@ +import { css } from "@emotion/react" + +export const tabsContainerStyle = css` + width: 100%; + height: 100%; + overflow: hidden; + .ant-tabs-nav { + padding: 0 20px; + } + .ant-tabs-content-holder, + .ant-tabs-content, + .ant-tabs-tabpane { + height: 100%; + } +` + +export const functionMobileDashboardContainerStyle = css` + width: 100%; + height: 100%; + display: flex; + flex-direction: column; +` diff --git a/apps/agent/src/page/WorkSpace/FunctionDashboard/pc/components/HeaderTools/index.tsx b/apps/agent/src/page/WorkSpace/FunctionDashboard/pc/components/HeaderTools/index.tsx index 183cc2c4..65f86c2f 100644 --- a/apps/agent/src/page/WorkSpace/FunctionDashboard/pc/components/HeaderTools/index.tsx +++ b/apps/agent/src/page/WorkSpace/FunctionDashboard/pc/components/HeaderTools/index.tsx @@ -1,29 +1,44 @@ import Icon from "@ant-design/icons" import { Button, Input } from "antd" -import { FC } from "react" +import { FC, useContext } from "react" import { PlusIcon, SearchIcon } from "@illa-public/icon" -import { useCreateFunction } from "@/utils/recentTabs/hook" +import { TipisTrack } from "@illa-public/track-utils" +import { useSearchFunctionDashboard } from "../../../utils" +import { FunctionDashboardContext } from "../../context" import { headerToolsContainerStyle } from "./style" const HeaderTools: FC = () => { - const createFunction = useCreateFunction() + const { changeCreateFunctionModal } = useContext(FunctionDashboardContext) + const { searchValue, handleChangeSearchValue } = useSearchFunctionDashboard() + + const handleClickCreateFunction = () => { + TipisTrack.track("click_create_function_entry", { + parameter1: "dashboard_create", + }) + + changeCreateFunctionModal(true) + } return ( -
- } - size="large" - /> - -
+ <> +
+ } + size="large" + onChange={handleChangeSearchValue} + value={searchValue} + /> + +
+ ) } diff --git a/apps/agent/src/page/WorkSpace/FunctionDashboard/pc/components/TeamCardList/Item/index.tsx b/apps/agent/src/page/WorkSpace/FunctionDashboard/pc/components/TeamCardList/Item/index.tsx deleted file mode 100644 index 7581bc1b..00000000 --- a/apps/agent/src/page/WorkSpace/FunctionDashboard/pc/components/TeamCardList/Item/index.tsx +++ /dev/null @@ -1,62 +0,0 @@ -import Icon from "@ant-design/icons" -import { Button, List, Tag } from "antd" -import { FC, MouseEventHandler } from "react" -import { useNavigate } from "react-router-dom" -import { MoreIcon, PenIcon, PlayFillIcon } from "@illa-public/icon" -import PCTeamCard from "@/components/TeamCard/pc" -import { ITeamCardListItemProps } from "./interface" - -const TeamCardListItem: FC = (props) => { - const { icon, title, description, id, publishToMarketplace } = props - - const tags = publishToMarketplace ? ( - Marketplace - ) : undefined - - const navigate = useNavigate() - - const onClickCard = () => {} - - const onClickEditButton: MouseEventHandler = (e) => { - e.stopPropagation() - navigate(`edit/${id}`) - } - - const onClickRunButton: MouseEventHandler = (e) => { - e.stopPropagation() - navigate(`run/${id}`) - } - - return ( - - } />} - editButton={ - <> - - - - } - /> - - ) -} - -export default TeamCardListItem diff --git a/apps/agent/src/page/WorkSpace/FunctionDashboard/pc/components/TeamCardList/Item/interface.ts b/apps/agent/src/page/WorkSpace/FunctionDashboard/pc/components/TeamCardList/Item/interface.ts deleted file mode 100644 index 7a895d71..00000000 --- a/apps/agent/src/page/WorkSpace/FunctionDashboard/pc/components/TeamCardList/Item/interface.ts +++ /dev/null @@ -1,7 +0,0 @@ -export interface ITeamCardListItemProps { - icon: string - title: string - publishToMarketplace: boolean - description: string - id: string -} diff --git a/apps/agent/src/page/WorkSpace/FunctionDashboard/pc/components/TeamCardList/index.tsx b/apps/agent/src/page/WorkSpace/FunctionDashboard/pc/components/TeamCardList/index.tsx deleted file mode 100644 index b37eb6bb..00000000 --- a/apps/agent/src/page/WorkSpace/FunctionDashboard/pc/components/TeamCardList/index.tsx +++ /dev/null @@ -1,123 +0,0 @@ -import { List } from "antd" -import { FC } from "react" -import TeamCardListItem from "./Item" - -const mockData = [ - { - id: "1", - title: "Team 1", - icon: "https://via.placeholder.com/150", - description: "This is a team", - tags: ["tag1", "tag2"], - }, - { - id: "2", - title: "Team 2", - icon: "https://via.placeholder.com/150", - description: "This is a team", - tags: ["tag1", "tag2"], - }, - { - id: "3", - title: "Team 3", - icon: "https://via.placeholder.com/150", - description: "This is a team", - tags: ["tag1", "tag2"], - }, - { - id: "4", - title: "Team 4", - icon: "https://via.placeholder.com/150", - description: "This is a team", - tags: ["tag1", "tag2"], - }, - { - id: "5", - - title: "Team 5", - icon: "https://via.placeholder.com/150", - description: "This is a team", - tags: ["tag1", "tag2"], - }, - { - id: "6", - - title: "Team 6", - icon: "https://via.placeholder.com/150", - description: "This is a team", - tags: ["tag1", "tag2"], - }, - { - id: "7", - - title: "Team 7", - icon: "https://via.placeholder.com/150", - description: "This is a team", - tags: ["tag1", "tag2"], - }, - { - id: "8", - - title: "Team 8", - icon: "https://via.placeholder.com/150", - description: "This is a team", - tags: ["tag1", "tag2"], - }, - { - id: "9", - - title: "Team 9", - icon: "https://via.placeholder.com/150", - description: "This is a team", - tags: ["tag1", "tag2"], - }, -] - -const TeamCardList: FC = () => { - return ( - ( - - // - // } /> - // } - // editButton={ - // <> - // - // - // - // } - // /> - // - )} - /> - ) -} - -export default TeamCardList diff --git a/apps/agent/src/page/WorkSpace/FunctionDashboard/pc/components/TeamCardListItem/index.tsx b/apps/agent/src/page/WorkSpace/FunctionDashboard/pc/components/TeamCardListItem/index.tsx new file mode 100644 index 00000000..b56240f7 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/FunctionDashboard/pc/components/TeamCardListItem/index.tsx @@ -0,0 +1,158 @@ +import Icon from "@ant-design/icons" +import { App, Button, Dropdown, List, MenuProps, Tag } from "antd" +import { FC, MouseEventHandler, useMemo, useState } from "react" +import { useTranslation } from "react-i18next" +import { CopyIcon, DeleteIcon, MoreIcon, PenIcon } from "@illa-public/icon" +import { TipisTrack } from "@illa-public/track-utils" +import PCTeamCard from "@/components/TeamCard/pc" +import { + useDeleteAIToolByIDMutation, + useDuplicateAIToolByIDMutation, +} from "@/redux/services/aiToolsAPI" +import { canShowCreateFunction } from "@/utils/UIHelper/functions" +import { canShownCreateTipi } from "@/utils/UIHelper/tipis" +import { useNavigateToEditFunction } from "@/utils/routeHelper/hook" +import { useGetCurrentTeamInfo } from "@/utils/team" +import { ITeamCardListItemProps } from "../../../components/TeamCardList/interface" + +const TeamCardListItem: FC = (props) => { + const { icon, title, description, id, publishToMarketplace, type } = props + const { modal, message } = App.useApp() + + const { t } = useTranslation() + const currentTeamInfo = useGetCurrentTeamInfo()! + + const [duplicateAIToolByID] = useDuplicateAIToolByIDMutation() + const [deleteAIToolByID] = useDeleteAIToolByIDMutation() + const navigateToEditFunction = useNavigateToEditFunction() + + const [isMoreActionDropdownOpen, setIsMoreActionDropdownOpen] = + useState(false) + + const tags = publishToMarketplace ? ( + Marketplace + ) : undefined + + const menuItems: MenuProps["items"] = useMemo(() => { + const originMenuItems: MenuProps["items"] = [] + if (canShowCreateFunction(currentTeamInfo)) { + originMenuItems.push({ + label: t("dashboard.common.duplicate"), + key: "duplicate", + icon: , + }) + } + + if (canShownCreateTipi(currentTeamInfo)) { + originMenuItems.push({ + label: t("dashboard.common.delete"), + key: "delete", + danger: true, + icon: , + }) + } + return originMenuItems + }, [currentTeamInfo, t]) + + const onClickMenuItem: MenuProps["onClick"] = async ({ key, domEvent }) => { + domEvent.stopPropagation() + switch (key) { + case "duplicate": { + try { + await duplicateAIToolByID({ + teamID: currentTeamInfo.id, + aiToolID: id, + }).unwrap() + } catch { + message.error({ + content: t("dashboard.app.duplicate_fail"), + }) + } + break + } + + case "delete": { + modal.confirm({ + title: t("dashboard.common.delete_title"), + content: t("dashboard.common.delete_content"), + cancelText: t("dashboard.common.delete_cancel_text"), + okText: t("dashboard.common.delete_ok_text"), + okButtonProps: { + type: "primary", + danger: true, + }, + onOk: () => { + deleteAIToolByID({ + teamID: currentTeamInfo.id, + aiToolID: id, + }) + }, + }) + break + } + default: + break + } + } + + const onClickEditButton: MouseEventHandler = async (e) => { + e.stopPropagation() + TipisTrack.track("click_function_card_edit", { + parameter1: "dashboard_edit", + parameter2: type, + }) + + await navigateToEditFunction({ + functionName: title, + functionID: id, + }) + } + + const onClickMoreAction: MouseEventHandler = (e) => { + e.stopPropagation() + setIsMoreActionDropdownOpen(true) + } + + return ( + + 0 && ( + + + + } + /> + + ) +} + +export default TeamCardListItem diff --git a/apps/agent/src/page/WorkSpace/FunctionDashboard/pc/components/TeamCardListItem/interface.ts b/apps/agent/src/page/WorkSpace/FunctionDashboard/pc/components/TeamCardListItem/interface.ts new file mode 100644 index 00000000..e69de29b diff --git a/apps/agent/src/page/WorkSpace/FunctionDashboard/pc/context/index.tsx b/apps/agent/src/page/WorkSpace/FunctionDashboard/pc/context/index.tsx new file mode 100644 index 00000000..c6fa61dd --- /dev/null +++ b/apps/agent/src/page/WorkSpace/FunctionDashboard/pc/context/index.tsx @@ -0,0 +1,5 @@ +import { createContext } from "react" +import { IFunctionDashboardContext } from "./interface" + +export const FunctionDashboardContext = + createContext({} as IFunctionDashboardContext) diff --git a/apps/agent/src/page/WorkSpace/FunctionDashboard/pc/context/interface.ts b/apps/agent/src/page/WorkSpace/FunctionDashboard/pc/context/interface.ts new file mode 100644 index 00000000..8e57fad3 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/FunctionDashboard/pc/context/interface.ts @@ -0,0 +1,4 @@ +export interface IFunctionDashboardContext { + isCreateFunctionModalOpen: boolean + changeCreateFunctionModal: (isOpen: boolean) => void +} diff --git a/apps/agent/src/page/WorkSpace/FunctionDashboard/pc/index.tsx b/apps/agent/src/page/WorkSpace/FunctionDashboard/pc/index.tsx index 2f3a3a2e..ac8ebd15 100644 --- a/apps/agent/src/page/WorkSpace/FunctionDashboard/pc/index.tsx +++ b/apps/agent/src/page/WorkSpace/FunctionDashboard/pc/index.tsx @@ -1,36 +1,66 @@ -import { Tabs } from "antd" -import { FC } from "react" +import { Modal, Tabs } from "antd" +import { FC, useState } from "react" import { useTranslation } from "react-i18next" import WorkspacePCHeaderLayout from "@/Layout/Workspace/pc/components/Header" +import { IntegrationTypeSelector } from "@/Modules/Integration/IntegrationSelector" +import { useNavigateToCreateFunction } from "@/utils/routeHelper/hook" +import TeamCardList from "../components/TeamCardList" import HeaderTools from "./components/HeaderTools" -import TeamCardList from "./components/TeamCardList" -import { tabsContainerStyle } from "./style" +import TeamCardListItem from "./components/TeamCardListItem" +import { FunctionDashboardContext } from "./context" +import { + cardListContainerStyle, + functionPCDashboardContainerStyle, + tabsContainerStyle, +} from "./style" const FunctionPCDashboard: FC = () => { const { t } = useTranslation() + const navigateToCreateFunction = useNavigateToCreateFunction() + const [canShowModal, setShowModal] = useState(false) return ( - <> - } - /> -
- , - }, - { - label: t("homepage.function_dashboard.tab.official"), - key: "official", - children: "Official", - }, - ]} + +
+ } /> +
+ + +
+ ), + }, + ]} + activeKey="team" + style={{ height: "100%" }} + /> +
- + { + setShowModal(false) + }} + > + + + ) } diff --git a/apps/agent/src/page/WorkSpace/FunctionDashboard/pc/style.ts b/apps/agent/src/page/WorkSpace/FunctionDashboard/pc/style.ts index 3db57853..8387712b 100644 --- a/apps/agent/src/page/WorkSpace/FunctionDashboard/pc/style.ts +++ b/apps/agent/src/page/WorkSpace/FunctionDashboard/pc/style.ts @@ -2,5 +2,28 @@ import { css } from "@emotion/react" export const tabsContainerStyle = css` width: 100%; + height: 100%; + overflow: hidden; +` + +export const functionPCDashboardContainerStyle = css` + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + & .ant-tabs-nav-wrap { + padding: 0 24px; + } + & .ant-tabs-content, + & .ant-tabs-tabpane-active { + height: 100%; + } +` + +export const cardListContainerStyle = css` + width: 100%; + height: 100%; + overflow-y: auto; + overflow-x: hidden; padding: 0 24px; ` diff --git a/apps/agent/src/page/WorkSpace/FunctionDashboard/utils.ts b/apps/agent/src/page/WorkSpace/FunctionDashboard/utils.ts new file mode 100644 index 00000000..171baf12 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/FunctionDashboard/utils.ts @@ -0,0 +1,58 @@ +import { debounce } from "lodash-es" +import { + ChangeEvent, + useCallback, + useContext, + useEffect, + useMemo, + useRef, + useState, +} from "react" +import { FunctionDashBoardUIStateContext } from "./context/functionDashboard" +import { FUNCTION_DASHBOARD_UI_STATE_ACTION_TYPE } from "./context/interface" + +export const useSearchFunctionDashboard = () => { + const { dispatch, dashboardUIState } = useContext( + FunctionDashBoardUIStateContext, + ) + + const { search } = dashboardUIState + const [searchValue, setSearchValue] = useState(search) + const prevSearchRef = useRef(search) + + const handleChange = useCallback( + (e: ChangeEvent) => { + const v = e.target.value + prevSearchRef.current = v + dispatch({ + type: FUNCTION_DASHBOARD_UI_STATE_ACTION_TYPE.SET_SEARCH, + payload: v, + }) + }, + [dispatch], + ) + + useEffect(() => { + if (prevSearchRef.current !== search) { + setSearchValue(search) + prevSearchRef.current = search + } + }, [search]) + + const debounceHandleChange = useMemo(() => { + return debounce(handleChange, 160) + }, [handleChange]) + + const handleChangeSearchValue = useCallback( + (e: ChangeEvent) => { + setSearchValue(e.target.value) + debounceHandleChange(e) + }, + [debounceHandleChange], + ) + + return { + searchValue, + handleChangeSearchValue, + } +} diff --git a/apps/agent/src/page/WorkSpace/TipiDetail/MarketTipiDetail/mobile/index.tsx b/apps/agent/src/page/WorkSpace/TipiDetail/MarketTipiDetail/mobile/index.tsx index 6b9755be..8011be39 100644 --- a/apps/agent/src/page/WorkSpace/TipiDetail/MarketTipiDetail/mobile/index.tsx +++ b/apps/agent/src/page/WorkSpace/TipiDetail/MarketTipiDetail/mobile/index.tsx @@ -20,6 +20,7 @@ import MobileActionGroup from "../../components/ActionGroup/mobile" import Knowledge from "../../components/Knowledge" import Parameters from "../../components/Parameters" import Prompt from "../../components/Prompt" +import Schedule from "../../components/Schedule" import { IMarketTipiDetailProps } from "../interface" import { contentContainerStyle, placeholderDivStyle } from "./style" @@ -110,15 +111,23 @@ const MarketTipiDetailMobile: FC = ({ {aiAgentMarketPlaceInfo?.marketplace?.config.publishConfiguration && ( <> + {!!aiAgentMarketPlaceInfo.aiAgent.triggerIsActive && ( + + )} - {aiAgentMarketPlaceInfo?.aiAgent?.variables && ( - - )} + {Array.isArray(aiAgentMarketPlaceInfo?.aiAgent?.variables) && + aiAgentMarketPlaceInfo?.aiAgent?.variables.length > 0 && ( + + )} {Array.isArray(aiAgentMarketPlaceInfo?.aiAgent?.knowledge) && aiAgentMarketPlaceInfo?.aiAgent?.knowledge.length > 0 && ( = ({ @@ -99,6 +100,13 @@ const MarketTipiDetailPC: FC = ({ {aiAgentMarketPlaceInfo?.marketplace?.config.publishConfiguration && ( <> + {!!aiAgentMarketPlaceInfo.aiAgent.triggerIsActive && ( + + )} = ({ /> {aiAgentMarketPlaceInfo.marketplace.config.publishConfiguration && ( <> + {!!aiAgentMarketPlaceInfo.aiAgent.triggerIsActive && ( + + )} = ({ /> {aiAgentMarketPlaceInfo.marketplace.config.publishConfiguration && ( <> + {!!aiAgentMarketPlaceInfo.aiAgent.triggerIsActive && ( + + )} = (props) => { margin: "0", }} /> + {!!agentInfo.triggerIsActive && ( + + )} = (props) => { tipisIcon={agentInfo.icon} ownerTeamIdentity={agentInfo.teamIdentifier} /> + {!!agentInfo.triggerIsActive && ( + + )} = (props) => {

Prompt

= ({ schedule }) => { + const { t } = useTranslation() + return ( +
+

{t("editor.ai-agent.label.schedule")}

+
+ {schedule.map((item, i) => ( +
+ + + {getOptionDetail( + item.scheduleConfig.type, + item.scheduleConfig.options, + )} + +
+ ))} +
+
+ ) +} + +export default Schedule diff --git a/apps/agent/src/page/WorkSpace/TipiDetail/components/Schedule/interface.ts b/apps/agent/src/page/WorkSpace/TipiDetail/components/Schedule/interface.ts new file mode 100644 index 00000000..464cd385 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/TipiDetail/components/Schedule/interface.ts @@ -0,0 +1,5 @@ +import { IScheduleVO } from "@illa-public/public-types" + +export interface IScheduleProps { + schedule: IScheduleVO[] +} diff --git a/apps/agent/src/page/WorkSpace/TipiDetail/components/Schedule/style.ts b/apps/agent/src/page/WorkSpace/TipiDetail/components/Schedule/style.ts new file mode 100644 index 00000000..4f70c4d8 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/TipiDetail/components/Schedule/style.ts @@ -0,0 +1,48 @@ +import { css } from "@emotion/react" +import { getColor } from "@illa-public/color-scheme" + +export const scheduleContainerStyle = css` + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; + gap: 8px; + align-self: stretch; +` + +export const labelStyle = css` + color: ${getColor("grayBlue", "02")}; + font-size: 14px; + font-style: normal; + font-weight: 600; + line-height: 22px; +` + +export const scheduleItemContainerStyle = css` + display: flex; + gap: 8px; + width: 100%; + flex-wrap: wrap; +` + +export const scheduleItemStyle = css` + display: flex; + height: 40px; + padding: 9px 16px; + align-items: center; + gap: 8px; + border-radius: 20px; + border: 1px solid ${getColor("grayBlue", "08")}; +` + +export const timeIconStyle = css` + font-size: 16px; +` + +export const scheduleTextStyle = css` + color: ${getColor("grayBlue", "02")}; + font-size: 14px; + font-style: normal; + font-weight: 500; + line-height: 22px; +` diff --git a/apps/agent/src/page/WorkSpace/TipiDetail/components/Schedule/utils.ts b/apps/agent/src/page/WorkSpace/TipiDetail/components/Schedule/utils.ts new file mode 100644 index 00000000..c54e5037 --- /dev/null +++ b/apps/agent/src/page/WorkSpace/TipiDetail/components/Schedule/utils.ts @@ -0,0 +1,66 @@ +import dayjs from "dayjs" +import { IScheduleOptions, SCHEDULE_TYPES } from "@illa-public/public-types" +import { + DAY_OF_MONTH_OPTIONS, + DAY_OF_WEEK_OPTIONS, + MONTH_OPTIONS, +} from "@/config/constants/schedule" +import i18n from "@/i18n" + +export const getFormatTime = (hour: number = 0, minute: number = 0) => { + const times = `${hour}:${minute}` + return dayjs(times, "HH:mm").format("HH:mm") +} + +export const getOptionDetail = ( + type: SCHEDULE_TYPES, + options: IScheduleOptions, +) => { + const atStr = i18n.t("flow.editor.trigger.schedule.at") + const onStr = i18n.t("flow.editor.trigger.schedule.on") + let detail = "" + switch (type) { + case SCHEDULE_TYPES.EVERY_HOUR: { + const time = dayjs(`${options.minute}`, "mm").format("mm") + detail = `${time}, ${i18n.t("flow.editor.trigger.schedule.every_hour")}` + break + } + case SCHEDULE_TYPES.EVERY_DAY: { + const time = getFormatTime(options.hour, options.minute) + detail = `${time}, ${i18n.t("flow.editor.trigger.schedule.every_day")}` + break + } + case SCHEDULE_TYPES.EVERY_WEEK: { + const time = getFormatTime(options.hour, options.minute) + const weekday = DAY_OF_WEEK_OPTIONS.find( + (item) => item.value === options.weekday, + )?.label + + detail = `${time}, ${weekday ? `${onStr} ${weekday}, ` : ""}${i18n.t("flow.editor.trigger.schedule.every_week")}` + break + } + case SCHEDULE_TYPES.EVERY_MONTH: { + const time = getFormatTime(options.hour, options.minute) + const dayOfMonth = DAY_OF_MONTH_OPTIONS.find( + (item) => item.value === options.dayOfMonth, + )?.label + + detail = `${time}, ${dayOfMonth ? `${onStr} ${dayOfMonth}, ` : ""}${i18n.t("flow.editor.trigger.schedule.every_mont")}` + break + } + case SCHEDULE_TYPES.EVERY_YEAR: { + const time = getFormatTime(options.hour, options.minute) + const dayOfMonth = DAY_OF_MONTH_OPTIONS.find( + (item) => item.value === options.dayOfMonth, + )?.label + + const monthOfYear = MONTH_OPTIONS.find( + (item) => item.value === options.month, + )?.label + + detail = `${time}, ${monthOfYear ? `${onStr} ${dayOfMonth} ${monthOfYear}, ` : ""}${i18n.t("flow.editor.trigger.schedule.every_mont")}` + break + } + } + return `${atStr} ${detail}` +} diff --git a/apps/agent/src/page/WorkSpace/TipisDashboard/components/TeamCardList/index.tsx b/apps/agent/src/page/WorkSpace/TipisDashboard/components/TeamCardList/index.tsx index 28a6ed39..48bd93ef 100644 --- a/apps/agent/src/page/WorkSpace/TipisDashboard/components/TeamCardList/index.tsx +++ b/apps/agent/src/page/WorkSpace/TipisDashboard/components/TeamCardList/index.tsx @@ -36,6 +36,16 @@ const TeamCardList: FC = (props) => { navigateToCreateTipis() } + const fuseSearch = new Fuse(data?.aiAgentList ?? [], { + keys: ["name", "description"], + }).search(search ?? "") + + const searchResult = search + ? fuseSearch.length > 0 + ? fuseSearch.map((s) => s.item) + : [] + : data?.aiAgentList ?? [] + if (isLoading) { return } @@ -49,13 +59,6 @@ const TeamCardList: FC = (props) => { ) } - const fuseSearch = new Fuse(data.aiAgentList, { - keys: ["name", "description"], - }).search(search ?? "") - - const searchResult = - fuseSearch.length > 0 ? fuseSearch.map((s) => s.item) : data.aiAgentList - return ( { + const { dispatch, dashboardUIState } = useContext(DashBoardUIStateContext) + const { search } = dashboardUIState + const [searchValue, setSearchValue] = useState(search) + const prevSearchRef = useRef(search) + + const handleChange = useCallback( + (e: ChangeEvent) => { + const v = e.target.value + prevSearchRef.current = v + dispatch({ + type: DASH_BOARD_UI_STATE_ACTION_TYPE.SET_SEARCH, + payload: v, + }) + }, + [dispatch], + ) + + useEffect(() => { + if (prevSearchRef.current !== search) { + setSearchValue(search) + prevSearchRef.current = search + } + }, [search]) + + const debounceHandleChange = useMemo(() => { + return debounce(handleChange, 160) + }, [handleChange]) + + const handleChangeSearchValue = useCallback( + (e: ChangeEvent) => { + setSearchValue(e.target.value) + debounceHandleChange(e) + }, + [debounceHandleChange], + ) + + return { + searchValue, + handleChangeSearchValue, + } +} diff --git a/apps/agent/src/page/WorkSpace/TipisDashboard/mobile/components/MarketCard/style.ts b/apps/agent/src/page/WorkSpace/TipisDashboard/mobile/components/MarketCard/style.ts index 093eefef..e50867b5 100644 --- a/apps/agent/src/page/WorkSpace/TipisDashboard/mobile/components/MarketCard/style.ts +++ b/apps/agent/src/page/WorkSpace/TipisDashboard/mobile/components/MarketCard/style.ts @@ -91,10 +91,12 @@ export const descriptionStyle = css` color: ${getColor("grayBlue", "03")}; font-size: 12px; font-weight: 400; + width: 100%; line-height: 16px; text-overflow: ellipsis; overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3; + word-break: break-all; ` diff --git a/apps/agent/src/page/WorkSpace/TipisDashboard/mobile/modules/DashboardContent/index.tsx b/apps/agent/src/page/WorkSpace/TipisDashboard/mobile/modules/DashboardContent/index.tsx index 5a580645..fe92229c 100644 --- a/apps/agent/src/page/WorkSpace/TipisDashboard/mobile/modules/DashboardContent/index.tsx +++ b/apps/agent/src/page/WorkSpace/TipisDashboard/mobile/modules/DashboardContent/index.tsx @@ -3,6 +3,7 @@ import { Input } from "antd" import { FC } from "react" import { SearchIcon } from "@illa-public/icon" import TeamCardList from "../../../components/TeamCardList" +import { useSearchTipisDashboard } from "../../../hook" import MobileTeamCardListItem from "../../components/TeamCardListItem" import { cardListContainerStyle, @@ -11,6 +12,8 @@ import { } from "./style" const DashboardContent: FC = () => { + const { searchValue, handleChangeSearchValue } = useSearchTipisDashboard() + return (
@@ -18,6 +21,8 @@ const DashboardContent: FC = () => { placeholder="Search" prefix={} size="large" + value={searchValue} + onChange={handleChangeSearchValue} />
diff --git a/apps/agent/src/page/WorkSpace/TipisDashboard/pc/components/HeaderTools/index.tsx b/apps/agent/src/page/WorkSpace/TipisDashboard/pc/components/HeaderTools/index.tsx index 6e79aa24..0bf73bbc 100644 --- a/apps/agent/src/page/WorkSpace/TipisDashboard/pc/components/HeaderTools/index.tsx +++ b/apps/agent/src/page/WorkSpace/TipisDashboard/pc/components/HeaderTools/index.tsx @@ -1,66 +1,20 @@ import Icon from "@ant-design/icons" import { Button, Input } from "antd" import { t } from "i18next" -import { debounce } from "lodash-es" -import { - ChangeEvent, - FC, - useCallback, - useContext, - useEffect, - useMemo, - useRef, - useState, -} from "react" +import { FC } from "react" import { PlusIcon, SearchIcon } from "@illa-public/icon" import { TipisTrack } from "@illa-public/track-utils" import { canShownCreateTipi } from "@/utils/UIHelper/tipis" import { useNavigateToCreateTipis } from "@/utils/routeHelper/hook" import { useGetCurrentTeamInfo } from "@/utils/team" -import { DASH_BOARD_UI_STATE_ACTION_TYPE } from "../../../context/interface" -import { DashBoardUIStateContext } from "../../../context/marketListContext" +import { useSearchTipisDashboard } from "../../../hook" import { headerToolsContainerStyle } from "./style" const HeaderTools: FC = () => { const navigateToCreateTipis = useNavigateToCreateTipis() - const { dispatch, dashboardUIState } = useContext(DashBoardUIStateContext) - const { search } = dashboardUIState - const [searchValue, setSearchValue] = useState(search) - const prevSearchRef = useRef(search) const currentTeamInfo = useGetCurrentTeamInfo() - const handleChange = useCallback( - (e: ChangeEvent) => { - const v = e.target.value - prevSearchRef.current = v - dispatch({ - type: DASH_BOARD_UI_STATE_ACTION_TYPE.SET_SEARCH, - payload: v, - }) - }, - [dispatch], - ) - - useEffect(() => { - if (prevSearchRef.current !== search) { - setSearchValue(search) - prevSearchRef.current = search - } - }, [search]) - - const debounceHandleChange = useMemo(() => { - return debounce(handleChange, 160) - }, [handleChange]) - - const handleChangeSearchValue = useCallback( - (e: ChangeEvent) => { - setSearchValue(e.target.value) - debounceHandleChange(e) - }, - [debounceHandleChange], - ) - const handleClickCreateTIpis = () => { TipisTrack.track("click_create_tipi_entry", { parameter2: "right_corner", @@ -68,6 +22,8 @@ const HeaderTools: FC = () => { navigateToCreateTipis() } + const { searchValue, handleChangeSearchValue } = useSearchTipisDashboard() + return (
() +export const useAppSelector = useSelector.withTypes() diff --git a/apps/agent/src/redux/services/agentAPI/index.ts b/apps/agent/src/redux/services/agentAPI/index.ts index 640b78fa..b5f6509c 100644 --- a/apps/agent/src/redux/services/agentAPI/index.ts +++ b/apps/agent/src/redux/services/agentAPI/index.ts @@ -169,6 +169,20 @@ export const agentAuthAPI = createApi({ data, ), ) + dispatch( + agentAuthAPI.util.updateQueryData( + "getAIAgentListByPage", + { teamID }, + (draft) => { + const targetAgent = draft.aiAgentList?.find( + (agent) => agent.aiAgentID === aiAgentID, + ) + if (targetAgent) { + Object.assign(targetAgent, data) + } + }, + ), + ) } catch {} }, }), @@ -207,17 +221,6 @@ export const agentAuthAPI = createApi({ } catch {} }, }), - generatePromptDescription: builder.mutation< - { payload: string }, - { teamID: string; prompt: string } - >({ - query: ({ teamID, prompt }) => ({ - url: `/teams/${teamID}/aiAgent/generatePromptDescription`, - method: "POST", - timeout: 600000, - body: { prompt: encodeURIComponent(prompt) }, - }), - }), getAgentIconUploadAddress: builder.mutation< { uploadAddress: string }, { teamID: string; base64: string } @@ -307,7 +310,6 @@ export const { useForkAIAgentToTeamMutation, usePutAgentDetailMutation, useCreateAgentMutation, - useGeneratePromptDescriptionMutation, useGetAgentIconUploadAddressMutation, useGetAIAgentListByPageQuery, useDuplicateAIAgentMutation, diff --git a/apps/agent/src/redux/services/aiToolsAPI/index.tsx b/apps/agent/src/redux/services/aiToolsAPI/index.tsx new file mode 100644 index 00000000..624435e6 --- /dev/null +++ b/apps/agent/src/redux/services/aiToolsAPI/index.tsx @@ -0,0 +1,264 @@ +import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react" +import { v4 } from "uuid" +import { + AGENT_REQUEST_PREFIX, + HTTP_REQUEST_PUBLIC_BASE_URL, +} from "@illa-public/illa-net" +import { IBaseFunction, TActionOperation } from "@illa-public/public-types" +import { prepareHeaders } from "@illa-public/user-data" +import { getFileExtensionFromBase64 } from "@/utils/file" +import { + IAIToolDTO, + IAIToolParametersDTO, + IGetAllAIToolsListResponseDTO, +} from "./interface" + +export const aiToolsAPI = createApi({ + reducerPath: "aiToolsAPI", + baseQuery: fetchBaseQuery({ + baseUrl: `${HTTP_REQUEST_PUBLIC_BASE_URL}${AGENT_REQUEST_PREFIX}`, + prepareHeaders, + }), + tagTypes: ["aiTools"], + endpoints: (builder) => ({ + getAIToolByID: builder.query< + IAIToolDTO, + { teamID: string; aiToolID: string } + >({ + query: ({ teamID, aiToolID }) => ({ + url: `/teams/${teamID}/aiTool/${aiToolID}`, + method: "GET", + }), + providesTags: (result, error, arg) => [ + { + type: "aiTools", + id: arg.aiToolID, + }, + ], + }), + getAllAIToolsList: builder.query({ + query: (teamID) => ({ + url: `/teams/${teamID}/aiTool/list/sortBy/updateAt`, + }), + }), + createAITool: builder.mutation< + IAIToolDTO, + { + teamID: string + aiTool: IBaseFunction + } + >({ + query: ({ teamID, aiTool }) => ({ + url: `/teams/${teamID}/aiTool`, + method: "POST", + body: aiTool, + }), + onQueryStarted: async ({ teamID }, { dispatch, queryFulfilled }) => { + try { + const { data } = await queryFulfilled + dispatch( + aiToolsAPI.util.updateQueryData( + "getAllAIToolsList", + teamID, + (draft) => { + const aiToolList = draft.aiToolList || [] + aiToolList.unshift(data) + draft.aiToolList = aiToolList + }, + ), + ) + dispatch( + aiToolsAPI.util.upsertQueryData( + "getAIToolByID", + { + teamID, + aiToolID: data.aiToolID, + }, + data, + ), + ) + } catch {} + }, + }), + updateAIToolByID: builder.mutation< + IAIToolDTO, + { + teamID: string + aiToolID: string + aiTool: IBaseFunction + } + >({ + query: ({ teamID, aiTool, aiToolID }) => ({ + url: `/teams/${teamID}/aiTool/${aiToolID}`, + method: "PUT", + body: aiTool, + }), + onQueryStarted: async ( + { teamID, aiTool, aiToolID }, + { dispatch, queryFulfilled }, + ) => { + const updateListPathResult = dispatch( + aiToolsAPI.util.updateQueryData( + "getAllAIToolsList", + teamID, + (draft) => { + const aiToolList = draft.aiToolList || [] + const targetAITool = aiToolList.find( + (item) => item.aiToolID === aiToolID, + ) + if (targetAITool) { + Object.assign(targetAITool, aiTool) + } + }, + ), + ) + + try { + const { data } = await queryFulfilled + dispatch( + aiToolsAPI.util.upsertQueryData( + "getAIToolByID", + { + teamID, + aiToolID: data.aiToolID, + }, + data, + ), + ) + } catch { + updateListPathResult.undo() + } + }, + }), + deleteAIToolByID: builder.mutation< + void, + { teamID: string; aiToolID: string } + >({ + query: ({ teamID, aiToolID }) => ({ + url: `/teams/${teamID}/aiTool/${aiToolID}`, + method: "DELETE", + }), + onQueryStarted: async ( + { teamID, aiToolID }, + { dispatch, queryFulfilled }, + ) => { + const patchResult = dispatch( + aiToolsAPI.util.updateQueryData( + "getAllAIToolsList", + teamID, + (draft) => { + const aiToolList = draft.aiToolList || [] + const targetAIToolIndex = aiToolList.findIndex( + (item) => item.aiToolID === aiToolID, + ) + if (targetAIToolIndex !== -1) { + aiToolList.splice(targetAIToolIndex, 1) + } + }, + ), + ) + dispatch( + aiToolsAPI.util.invalidateTags([ + { + type: "aiTools", + id: aiToolID, + }, + ]), + ) + try { + await queryFulfilled + } catch { + patchResult.undo() + } + }, + }), + duplicateAIToolByID: builder.mutation< + IAIToolDTO, + { + teamID: string + aiToolID: string + } + >({ + query: ({ teamID, aiToolID }) => ({ + url: `/teams/${teamID}/aiTool/${aiToolID}/duplicate`, + method: "POST", + }), + onQueryStarted: async ({ teamID }, { dispatch, queryFulfilled }) => { + try { + const { data } = await queryFulfilled + dispatch( + aiToolsAPI.util.updateQueryData( + "getAllAIToolsList", + teamID, + (draft) => { + const aiToolList = draft.aiToolList || [] + aiToolList.unshift(data) + draft.aiToolList = aiToolList + }, + ), + ) + dispatch( + aiToolsAPI.util.upsertQueryData( + "getAIToolByID", + { + teamID, + aiToolID: data.aiToolID, + }, + data, + ), + ) + } catch {} + }, + }), + getAIToolIconUploadAddress: builder.mutation< + { uploadAddress: string }, + { teamID: string; base64: string } + >({ + query: ({ teamID, base64 }) => { + const fileName = v4() + const type = getFileExtensionFromBase64(base64) + return { + url: `/teams/${teamID}/aiTool/icon/uploadAddress/fileName/${fileName}.${type}`, + method: "GET", + } + }, + }), + + testRunAITools: builder.mutation< + { + data: unknown + }, + { + teamID: string + testData: { + resourceID: string + resourceType: string + actionOperation: TActionOperation + parameters: IAIToolParametersDTO[] + content: unknown + context: Record + } + } + >({ + query: ({ teamID, testData }) => ({ + url: `/teams/${teamID}/aiTool/testRun`, + method: "POST", + body: { + ...testData, + context: testData.context || {}, + }, + }), + }), + }), +}) + +export const { + useGetAIToolByIDQuery, + useGetAllAIToolsListQuery, + useCreateAIToolMutation, + useDeleteAIToolByIDMutation, + useDuplicateAIToolByIDMutation, + useGetAIToolIconUploadAddressMutation, + useUpdateAIToolByIDMutation, + useTestRunAIToolsMutation, +} = aiToolsAPI diff --git a/apps/agent/src/redux/services/aiToolsAPI/interface.ts b/apps/agent/src/redux/services/aiToolsAPI/interface.ts new file mode 100644 index 00000000..029aa074 --- /dev/null +++ b/apps/agent/src/redux/services/aiToolsAPI/interface.ts @@ -0,0 +1,68 @@ +import { + TActionOperation, + TIntegrationType, + VARIABLE_TYPE, +} from "@illa-public/public-types" + +export enum AI_TOOL_TYPE { + FUNCTION = 1, +} + +export interface IAIToolParametersDTO { + name: string + description: string + type: VARIABLE_TYPE + isEnum: boolean + enum: string[] + required: boolean + children: IAIToolParametersDTO[] +} + +export interface IEditedByDTO { + userID: string + nickname: string + avatar: string + email: string + editedAt: string +} + +export interface IAIToolDTO { + aiToolID: string + uid: string + teamID: string + resourceID: string + resourceType: TIntegrationType + name: string + description: string + toolType: AI_TOOL_TYPE + parameters: IAIToolParametersDTO[] + actionOperation: TActionOperation + config: { + icon: string + } + content: T + publishedToMarketplace: boolean + createBy: string + createAt: string + updatedBy: string + updatedAt: string + editedBy: IEditedByDTO[] +} + +export interface IGetAllAIToolsListResponseDTO { + aiToolList: IAIToolDTO[] + hasMore: boolean +} + +export interface ICreateOrUpdateAIToolRequestDTO { + resourceID: string + resourceType: TIntegrationType + name: string + description: string + toolType: AI_TOOL_TYPE + parameters: IAIToolParametersDTO[] + config: { + icon: string + } + content: T +} diff --git a/apps/agent/src/redux/services/integrationAPI/index.tsx b/apps/agent/src/redux/services/integrationAPI/index.tsx new file mode 100644 index 00000000..3fcbb852 --- /dev/null +++ b/apps/agent/src/redux/services/integrationAPI/index.tsx @@ -0,0 +1,133 @@ +import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react" +import { + HTTP_REQUEST_PUBLIC_BASE_URL, + INTEGRATION_REQUEST_PREFIX, +} from "@illa-public/illa-net" +import { IBaseIntegration } from "@illa-public/public-types" +import { prepareHeaders } from "@illa-public/user-data" +import { IIntegrationDTO } from "./interface" + +export const integrationAPI = createApi({ + reducerPath: "integrationAPI", + baseQuery: fetchBaseQuery({ + baseUrl: `${HTTP_REQUEST_PUBLIC_BASE_URL}${INTEGRATION_REQUEST_PREFIX}`, + prepareHeaders: prepareHeaders, + }), + endpoints: (builder) => ({ + getIntegrationList: builder.query[], string>({ + query: (teamID) => ({ + url: `/teams/${teamID}/resources`, + method: "GET", + }), + }), + updateIntegrationByID: builder.mutation< + IIntegrationDTO, + { + teamID: string + integrationID: string + integrationData: IBaseIntegration + } + >({ + query: ({ teamID, integrationID, integrationData }) => ({ + url: `/teams/${teamID}/resources/${integrationID}`, + method: "PUT", + body: integrationData, + }), + onQueryStarted: async ( + { integrationID, integrationData, teamID }, + { dispatch, queryFulfilled }, + ) => { + const patchResult = dispatch( + integrationAPI.util.updateQueryData( + "getIntegrationList", + teamID, + (draft) => { + const targetIntegration = draft.find( + (integration) => integration.resourceID === integrationID, + ) + if (targetIntegration) { + Object.assign(targetIntegration, integrationData) + } + }, + ), + ) + + try { + await queryFulfilled + } catch { + patchResult.undo() + } + }, + }), + createIntegration: builder.mutation< + IIntegrationDTO, + { + teamID: string + integrationData: IBaseIntegration + } + >({ + query: ({ teamID, integrationData }) => ({ + url: `/teams/${teamID}/resources`, + method: "POST", + body: integrationData, + }), + onQueryStarted: async ({ teamID }, { dispatch, queryFulfilled }) => { + try { + const { data } = await queryFulfilled + dispatch( + integrationAPI.util.updateQueryData( + "getIntegrationList", + teamID, + (draft) => { + draft.unshift(data) + }, + ), + ) + } catch {} + }, + }), + deleteIntegrationByID: builder.mutation< + IIntegrationDTO, + { + teamID: string + integrationID: string + } + >({ + query: ({ teamID, integrationID }) => ({ + url: `/teams/${teamID}/resources/${integrationID}`, + method: "DELETE", + }), + onQueryStarted: async ( + { teamID, integrationID }, + { dispatch, queryFulfilled }, + ) => { + const pathResult = dispatch( + integrationAPI.util.updateQueryData( + "getIntegrationList", + teamID, + (draft) => { + const targetIndex = draft.findIndex( + (integration) => integration.resourceID === integrationID, + ) + if (targetIndex !== -1) { + draft.splice(targetIndex, 1) + } + }, + ), + ) + try { + await queryFulfilled + } catch { + pathResult.undo() + } + }, + }), + }), +}) + +export const { + useCreateIntegrationMutation, + useGetIntegrationListQuery, + useUpdateIntegrationByIDMutation, + useDeleteIntegrationByIDMutation, +} = integrationAPI diff --git a/apps/agent/src/redux/services/integrationAPI/interface.ts b/apps/agent/src/redux/services/integrationAPI/interface.ts new file mode 100644 index 00000000..451974bf --- /dev/null +++ b/apps/agent/src/redux/services/integrationAPI/interface.ts @@ -0,0 +1,12 @@ +import { TIntegrationType } from "@illa-public/public-types" + +export interface IIntegrationDTO { + resourceID: string + resourceName: string + resourceType: TIntegrationType + createdBy: string + updatedBy: string + createdAt: string + updatedAt: string + content: T +} diff --git a/apps/agent/src/redux/services/peripheralAPI/index.tsx b/apps/agent/src/redux/services/peripheralAPI/index.tsx new file mode 100644 index 00000000..70c3c49e --- /dev/null +++ b/apps/agent/src/redux/services/peripheralAPI/index.tsx @@ -0,0 +1,27 @@ +import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react" +import { + HTTP_REQUEST_PUBLIC_BASE_URL, + PERIPHERAL_REQUEST_PREFIX, +} from "@illa-public/illa-net" + +export const peripheralAPI = createApi({ + reducerPath: "peripheralAPI", + baseQuery: fetchBaseQuery({ + baseUrl: `${HTTP_REQUEST_PUBLIC_BASE_URL}${PERIPHERAL_REQUEST_PREFIX}`, + }), + endpoints: (builder) => ({ + getWhiteListIP: builder.query< + { + resources: string[] + }, + void + >({ + query: () => ({ + url: `/meta`, + method: "GET", + }), + }), + }), +}) + +export const { useGetWhiteListIPQuery } = peripheralAPI diff --git a/apps/agent/src/redux/store.ts b/apps/agent/src/redux/store.ts index 515d6b85..a1ebc5dc 100644 --- a/apps/agent/src/redux/store.ts +++ b/apps/agent/src/redux/store.ts @@ -3,9 +3,12 @@ import { setupListeners } from "@reduxjs/toolkit/query" import { authAPI, teamAPI, teamReducer, userAPI } from "@illa-public/user-data" import { rtkQueryErrorLogger } from "./middleware/rtkQuery401ErrorHandler" import { agentAuthAPI } from "./services/agentAPI" +import { aiToolsAPI } from "./services/aiToolsAPI" import { driveAPI } from "./services/driveAPI" import { hashTagApi } from "./services/hashTagApi" +import { integrationAPI } from "./services/integrationAPI" import { marketAPI } from "./services/marketAPI" +import { peripheralAPI } from "./services/peripheralAPI" import { uiReducer } from "./ui/slice" const store = configureStore({ @@ -19,6 +22,9 @@ const store = configureStore({ [userAPI.reducerPath]: userAPI.reducer, [teamAPI.reducerPath]: teamAPI.reducer, [hashTagApi.reducerPath]: hashTagApi.reducer, + [integrationAPI.reducerPath]: integrationAPI.reducer, + [peripheralAPI.reducerPath]: peripheralAPI.reducer, + [aiToolsAPI.reducerPath]: aiToolsAPI.reducer, }, devTools: import.meta.env.ILLA_APP_ENV === "development", middleware: (getDefaultMiddleware) => @@ -30,6 +36,9 @@ const store = configureStore({ userAPI.middleware, teamAPI.middleware, hashTagApi.middleware, + integrationAPI.middleware, + peripheralAPI.middleware, + aiToolsAPI.middleware, rtkQueryErrorLogger, ), }) @@ -38,3 +47,4 @@ setupListeners(store.dispatch) export default store export type RootState = ReturnType +export type AppDispatch = typeof store.dispatch diff --git a/apps/agent/src/redux/ui/recentTab/reducer.ts b/apps/agent/src/redux/ui/recentTab/reducer.ts index 16e378c3..05871a29 100644 --- a/apps/agent/src/redux/ui/recentTab/reducer.ts +++ b/apps/agent/src/redux/ui/recentTab/reducer.ts @@ -1,6 +1,5 @@ import { CaseReducer, PayloadAction } from "@reduxjs/toolkit" import { IRecentTabState, ITabInfo } from "./interface" -import { DEFAULT_CHAT_ID, INIT_TABS } from "./state" export const setRecentTabReducer: CaseReducer< IRecentTabState, @@ -40,7 +39,7 @@ export const deleteRecentTabReducer: CaseReducer< } } -export const deleteRecentTabByTipisIDReducer: CaseReducer< +export const deleteRecentTabByCacheIDReducer: CaseReducer< IRecentTabState, PayloadAction > = (state, action) => { @@ -67,8 +66,8 @@ export const deleteRecentTabByTipisIDReducer: CaseReducer< export const deleteAllRecentTabReducer: CaseReducer = ( state, ) => { - state.tabs = INIT_TABS - state.currentTabID = DEFAULT_CHAT_ID + state.tabs = [] + state.currentTabID = "" } export const updateRecentTabReducer: CaseReducer< diff --git a/apps/agent/src/redux/ui/recentTab/slice.ts b/apps/agent/src/redux/ui/recentTab/slice.ts index c0b11204..1d4dde35 100644 --- a/apps/agent/src/redux/ui/recentTab/slice.ts +++ b/apps/agent/src/redux/ui/recentTab/slice.ts @@ -3,7 +3,7 @@ import { addRecentTabReducer, batchUpdateRecentTabReducer, deleteAllRecentTabReducer, - deleteRecentTabByTipisIDReducer, + deleteRecentTabByCacheIDReducer, deleteRecentTabReducer, setRecentTabReducer, updateCurrentRecentTabIDReducer, @@ -20,7 +20,7 @@ const recentTabSlice = createSlice({ addRecentTabReducer, deleteRecentTabReducer, deleteAllRecentTabReducer, - deleteRecentTabByTipisIDReducer, + deleteRecentTabByCacheIDReducer, updateRecentTabReducer, updateCurrentRecentTabIDReducer, batchUpdateRecentTabReducer, diff --git a/apps/agent/src/redux/ui/recentTab/state.ts b/apps/agent/src/redux/ui/recentTab/state.ts index 534b0fa2..214e32cb 100644 --- a/apps/agent/src/redux/ui/recentTab/state.ts +++ b/apps/agent/src/redux/ui/recentTab/state.ts @@ -1,18 +1,8 @@ -import { IRecentTabState, ITabInfo, TAB_TYPE } from "./interface" +import { IRecentTabState } from "./interface" export const DEFAULT_CHAT_ID = "DEFAULT_CHAT" -export const INIT_TABS: ITabInfo[] = [ - { - tabName: "", - tabIcon: "", - tabType: TAB_TYPE.CHAT, - tabID: DEFAULT_CHAT_ID, - cacheID: DEFAULT_CHAT_ID, - }, -] - export const recentTabInitState: IRecentTabState = { currentTabID: DEFAULT_CHAT_ID, - tabs: INIT_TABS, + tabs: [], } diff --git a/apps/agent/src/router/buildRouter.tsx b/apps/agent/src/router/buildRouter.tsx index af1a9973..2ec25b0f 100644 --- a/apps/agent/src/router/buildRouter.tsx +++ b/apps/agent/src/router/buildRouter.tsx @@ -33,7 +33,12 @@ export const buildRouter = (config: RoutesObjectPro[]) => { if (saveTokenLoader) { return saveTokenLoader } - return originLoader?.(args) || null + + return typeof originLoader === "function" + ? originLoader?.(args) + : typeof originLoader === "boolean" + ? originLoader + : null } ProtectComponent && (newRouteItem.element = ( diff --git a/apps/agent/src/router/config.tsx b/apps/agent/src/router/config.tsx index 42899cef..d584c358 100644 --- a/apps/agent/src/router/config.tsx +++ b/apps/agent/src/router/config.tsx @@ -12,10 +12,14 @@ import Empty from "../page/WorkSpace/Empty" import { buildRouter } from "./buildRouter" import { CHAT_TEMPLATE_PATH, + CREATE_FUNCTION_TEMPLATE_PATH, CREATE_TIPI_TEMPLATE_PATH, + EDIT_FUNCTION_TEMPLATE_PATH, EDIT_TIPI_TEMPLATE_PATH, + FUNCTIONS_DASHBOARD_TEMPLATE_PATH, MARKETPLACE_DETAIL_PATH, RUN_TIPI_TEMPLATE_PATH, + TEAM_IDENTIFIER_TEMPLATE_PATH, TIPIS_DASHBOARD_TEMPLATE_PATH, TIPI_DETAIL_TEMPLATE_PATH, WORKSPACE_LAYOUT_PATH, @@ -23,21 +27,39 @@ import { import { RoutesObjectPro } from "./interface" import { rootLoader } from "./loader/rootLoader" -const RunAgentPage = lazy(() => import("@/page/WorkSpace/AI/AIAgentRun")) -const EditAgentPage = lazy( - () => import("@/page/WorkSpace/AI/AIAgent/editAgent"), -) +/** + * + * @group Tipis page + * + */ +const TipisDashboard = lazy(() => import("@/page/WorkSpace/TipisDashboard")) +const RunTipiPage = lazy(() => import("@/page/WorkSpace/AI/AIAgentRun")) +const EditTipiPage = lazy(() => import("@/page/WorkSpace/AI/AIAgent/editAgent")) const CreateAgentPage = lazy( () => import("@/page/WorkSpace/AI/AIAgent/createAgent"), ) -const TipisDashboard = lazy(() => import("@/page/WorkSpace/TipisDashboard")) -const FunctionDashboard = lazy( - () => import("@/page/WorkSpace/FunctionDashboard/pc"), +const TipiDetailPage = lazy( + () => import("@/page/WorkSpace/TipiDetail/TeamTipiDetail"), +) +const MarketTipiDetailPage = lazy( + () => import("@/page/WorkSpace/TipiDetail/MarketTipiDetail"), ) + +/** + * + * @group User page + * + */ const LoginPage = lazy(() => import("@/page/User/Login")) const RegisterPage = lazy(() => import("@/page/User/Register")) const ForgotPasswordPage = lazy(() => import("@/page/User/ResetPassword")) const OAuth = lazy(() => import("@/page/User/Oauth")) + +/** + * + * @group Setting Account page + * + */ const PersonalSetting = lazy( () => import("@/page/SettingPage/account/personal"), ) @@ -53,18 +75,36 @@ const LinkedSettingPage = lazy( const MobileSettingNavPage = lazy( () => import("@/page/SettingPage/mobileSettingNavPage"), ) + +/** + * + * @group Setting Team Page + * + */ const TeamSetting = lazy(() => import("@/page/SettingPage/team/info")) const TeamBilling = lazy(() => import("@/page/SettingPage/team/billing")) const TeamMembers = lazy(() => import("@/page/SettingPage/team/member")) -const EditFunctionPage = lazy(() => import("@/page/WorkSpace/Function/Edit")) -const ChatPage = lazy(() => import("@/page/WorkSpace/Chat")) -const TipiDetailPage = lazy( - () => import("@/page/WorkSpace/TipiDetail/TeamTipiDetail"), + +/** + * + * @group Function Page + * + */ +const FunctionDashboard = lazy( + () => import("@/page/WorkSpace/FunctionDashboard"), ) -const MarketTipiDetailPage = lazy( - () => import("@/page/WorkSpace/TipiDetail/MarketTipiDetail"), +const EditFunctionPage = lazy(() => import("@/page/WorkSpace/Function/edit")) +const CreateFunctionPage = lazy( + () => import("@/page/WorkSpace/Function/create"), ) +/** + * + * @group Chat Page + * + */ +const ChatPage = lazy(() => import("@/page/WorkSpace/Chat")) + const SubScribeRedirect = lazy( () => import("@/page/SettingPage/subscribedRedirect"), ) @@ -148,7 +188,7 @@ const ILLA_ROUTE_CONFIG: RoutesObjectPro[] = [ accessByMobile: true, children: [ { - path: ":teamIdentifier", + path: TEAM_IDENTIFIER_TEMPLATE_PATH, accessByMobile: true, element: , }, @@ -183,7 +223,7 @@ const ILLA_ROUTE_CONFIG: RoutesObjectPro[] = [ path: EDIT_TIPI_TEMPLATE_PATH, element: ( }> - + ), accessByMobile: true, @@ -210,40 +250,33 @@ const ILLA_ROUTE_CONFIG: RoutesObjectPro[] = [ path: RUN_TIPI_TEMPLATE_PATH, element: ( }> - + ), accessByMobile: true, }, { - path: ":teamIdentifier/functions", + path: FUNCTIONS_DASHBOARD_TEMPLATE_PATH, element: ( }> ), + accessByMobile: true, }, { - path: ":teamIdentifier/function/:functionID/create", - element: ( - }> - - - ), - }, - { - path: ":teamIdentifier/function/:functionID/edit", + path: CREATE_FUNCTION_TEMPLATE_PATH, element: ( }> - + ), }, { - path: ":teamIdentifier/function/:functionID/detail", + path: EDIT_FUNCTION_TEMPLATE_PATH, element: ( }> - + ), }, diff --git a/apps/agent/src/router/constants.ts b/apps/agent/src/router/constants.ts index 230cf1d9..0b21c646 100644 --- a/apps/agent/src/router/constants.ts +++ b/apps/agent/src/router/constants.ts @@ -1,6 +1,9 @@ export const WORKSPACE_LAYOUT_PATH = `/workspace` + export const TEAM_IDENTIFIER_TEMPLATE_PATH = `:teamIdentifier` + export const CHAT_TEMPLATE_PATH = `${TEAM_IDENTIFIER_TEMPLATE_PATH}/chat/:chatID` + export const TIPIS_DASHBOARD_TEMPLATE_PATH = `${TEAM_IDENTIFIER_TEMPLATE_PATH}/tipis` export const TEAM_TIPI_TEMPLATE_PATH = `${TEAM_IDENTIFIER_TEMPLATE_PATH}/tipi` export const CREATE_TIPI_TEMPLATE_PATH = `${TEAM_TIPI_TEMPLATE_PATH}/create` @@ -8,3 +11,8 @@ export const EDIT_TIPI_TEMPLATE_PATH = `${TEAM_TIPI_TEMPLATE_PATH}/:agentID/edit export const RUN_TIPI_TEMPLATE_PATH = `${TEAM_TIPI_TEMPLATE_PATH}/:agentID/run/:tabID` export const TIPI_DETAIL_TEMPLATE_PATH = `${TEAM_TIPI_TEMPLATE_PATH}/:agentID/detail` export const MARKETPLACE_DETAIL_PATH = `${TEAM_IDENTIFIER_TEMPLATE_PATH}/marketTipi/:agentID/detail` + +export const TEAM_FUNCTION_TEMPLATE_PATH = `${TEAM_IDENTIFIER_TEMPLATE_PATH}/function` +export const FUNCTIONS_DASHBOARD_TEMPLATE_PATH = `${TEAM_IDENTIFIER_TEMPLATE_PATH}/functions` +export const EDIT_FUNCTION_TEMPLATE_PATH = `${TEAM_FUNCTION_TEMPLATE_PATH}/:functionID/edit` +export const CREATE_FUNCTION_TEMPLATE_PATH = `${TEAM_FUNCTION_TEMPLATE_PATH}/create/:functionType` diff --git a/apps/agent/src/style.ts b/apps/agent/src/style.ts index edc3928f..bfec2bfe 100644 --- a/apps/agent/src/style.ts +++ b/apps/agent/src/style.ts @@ -1,4 +1,5 @@ import { css } from "@emotion/react" +import { illaCodeMirrorTooltipStyle } from "@illa-public/code-editor-new/CodeMirror/theme" export const globalStyle = css` html, @@ -40,3 +41,12 @@ export const globalStyle = css` box-sizing: border-box; } ` + +export const globalTooltipContainerStyle = css` + ${illaCodeMirrorTooltipStyle()} + > div { + height: 0; + min-height: 0; + max-height: 0; + } +` diff --git a/apps/agent/src/utils/UIHelper/functions.ts b/apps/agent/src/utils/UIHelper/functions.ts new file mode 100644 index 00000000..9ba286d7 --- /dev/null +++ b/apps/agent/src/utils/UIHelper/functions.ts @@ -0,0 +1,8 @@ +import { TeamInfo, USER_ROLE } from "@illa-public/public-types" +import { isBiggerThanTargetRole } from "@illa-public/user-role-utils" + +export const canShowCreateFunction = (teamInfo?: TeamInfo) => { + return ( + teamInfo && isBiggerThanTargetRole(USER_ROLE.VIEWER, teamInfo.myRole, false) + ) +} diff --git a/apps/agent/src/utils/agent/wsUtils.ts b/apps/agent/src/utils/agent/wsUtils.ts index a4683e7f..b100bcd7 100644 --- a/apps/agent/src/utils/agent/wsUtils.ts +++ b/apps/agent/src/utils/agent/wsUtils.ts @@ -1,3 +1,4 @@ +import { klona } from "klona" import { TextSignal } from "@/api/ws/textSignal" import { SEND_MESSAGE_WS_TYPE } from "@/components/PreviewChat/TipisWebscoketContext/interface" import { @@ -180,6 +181,62 @@ export const groupReceivedMessagesForUI = ( return newMessageList } +export const groupRenderReceivedMessageForUI = ( + oldMessage: IGroupMessage | ChatMessage | null, + message: ChatMessage, +) => { + if (!oldMessage || oldMessage.threadID !== message.threadID) { + if (isRequestMessage(message)) { + return { + threadID: message.threadID, + items: [ + { + sender: message.sender, + message: message.message, + threadID: message.threadID, + messageType: message.messageType, + status: MESSAGE_STATUS.ANALYZE_PENDING, + }, + ], + } + } else { + return { + sender: message.sender, + message: message.message, + threadID: message.threadID, + messageType: message.messageType, + } + } + } else { + let copyOldMessage = klona(oldMessage) + if (isNormalMessage(copyOldMessage)) { + if (copyOldMessage.messageType === message.messageType) { + copyOldMessage.message = copyOldMessage.message + message.message + } else { + // compliant not use request type start + copyOldMessage = { + threadID: oldMessage.threadID, + items: [ + { + sender: copyOldMessage.sender, + message: copyOldMessage.message, + threadID: copyOldMessage.threadID, + messageType: copyOldMessage.messageType, + status: isRequestMessage(copyOldMessage) + ? MESSAGE_STATUS.ANALYZE_PENDING + : undefined, + }, + ], + } + handleUpdateMessageList(copyOldMessage as IGroupMessage, message) + } + } else { + handleUpdateMessageList(copyOldMessage, message) + } + return copyOldMessage + } +} + export const getNeedCacheUIMessage = ( messageList: (IGroupMessage | ChatMessage)[], ): (IGroupMessage | ChatMessage)[] => { diff --git a/apps/agent/src/utils/drive/upload.ts b/apps/agent/src/utils/drive/upload.ts index ab89d0df..1499e3e2 100644 --- a/apps/agent/src/utils/drive/upload.ts +++ b/apps/agent/src/utils/drive/upload.ts @@ -2,6 +2,8 @@ import { App } from "antd" import { useTranslation } from "react-i18next" import { useSelector } from "react-redux" import { UPLOAD_FILE_STATUS } from "@illa-public/public-types" +import { useCreditModal } from "@illa-public/upgrade-modal" +import { BILLING_REPORT_FROM } from "@illa-public/upgrade-modal/constants" import { getCurrentId } from "@illa-public/user-data" import { useLazyGetChatUploadAddressQuery, @@ -12,11 +14,13 @@ import { import { uploadFileToObjectStorage } from "@/services/drive" import { FILE_ITEM_DETAIL_STATUS_IN_UI } from "./interface" import { UploadFileStore } from "./store" +import { isGenerateDescWithCreditError } from "./utils" export const useUploadFileToDrive = () => { const { message } = App.useApp() const { t } = useTranslation() const teamID = useSelector(getCurrentId)! + const creditModal = useCreditModal() const [triggerGetChatUploadAddress] = useLazyGetChatUploadAddressQuery() const [triggerGetKnowledgeUploadAddress] = @@ -88,6 +92,10 @@ export const useUploadFileToDrive = () => { store.updateFileDetailInfo(queryID, { status: FILE_ITEM_DETAIL_STATUS_IN_UI.ERROR, }) + isGenerateDescWithCreditError(e) && + creditModal({ + from: BILLING_REPORT_FROM.RUN, + }) message.error(t("editor.inspect.setter_message.uploadfail")) } } @@ -154,6 +162,10 @@ export const useUploadFileToDrive = () => { store.updateFileDetailInfo(queryID, { status: FILE_ITEM_DETAIL_STATUS_IN_UI.ERROR, }) + isGenerateDescWithCreditError(e) && + creditModal({ + from: BILLING_REPORT_FROM.RUN, + }) message.error(t("editor.inspect.setter_message.uploadfail")) } } diff --git a/apps/agent/src/utils/drive/utils.ts b/apps/agent/src/utils/drive/utils.ts index 8c200c09..fa9554f4 100644 --- a/apps/agent/src/utils/drive/utils.ts +++ b/apps/agent/src/utils/drive/utils.ts @@ -1,4 +1,5 @@ import { v4 } from "uuid" +import { ERROR_FLAG, ILLAApiError, isILLAAPiError } from "@illa-public/illa-net" import { IKnowledgeFile } from "@illa-public/public-types" import { ACCEPT_CONTENT_TYPES, @@ -99,3 +100,19 @@ export const getRealFileType = async (file: File, ext: string) => { } } } + +export const isGenerateDescWithCreditError = (e: unknown) => { + if (!isILLAAPiError(e)) return false + const creditPrefix = "generate file description error: " + const message = e.data.errorMessage + try { + if (message.startsWith(creditPrefix)) { + const realError = JSON.parse( + message.split(creditPrefix)[1], + ) as ILLAApiError + return realError.errorFlag === ERROR_FLAG.ERROR_FLAG_INSUFFICIENT_CREDIT + } + } catch (e) { + return false + } +} diff --git a/apps/agent/src/utils/eventEmitter/constants.ts b/apps/agent/src/utils/eventEmitter/constants.ts new file mode 100644 index 00000000..2d33aa9e --- /dev/null +++ b/apps/agent/src/utils/eventEmitter/constants.ts @@ -0,0 +1,8 @@ +export enum FUNCTION_RUN_RESULT_EVENT { + CHANGE_DRAWER_OPEN_STATUS = "functionRunResultEvent:changeDrawerOpenStatus", + SET_RUN_RESULT = "functionRunResultEvent:setRunResult", +} + +export enum CREATE_INTEGRATION_EVENT { + CHANGE_MODAL_STEP = "createIntegrationEvent:changeModalStep", +} diff --git a/apps/agent/src/utils/eventEmitter/index.ts b/apps/agent/src/utils/eventEmitter/index.ts new file mode 100644 index 00000000..17dec54c --- /dev/null +++ b/apps/agent/src/utils/eventEmitter/index.ts @@ -0,0 +1,39 @@ +import { + CREATE_INTEGRATION_EVENT, + FUNCTION_RUN_RESULT_EVENT, +} from "./constants" + +export type TEventEmitterEventType = + | (typeof FUNCTION_RUN_RESULT_EVENT)[keyof typeof FUNCTION_RUN_RESULT_EVENT] + | (typeof CREATE_INTEGRATION_EVENT)[keyof typeof CREATE_INTEGRATION_EVENT] + +class EventEmitter { + private events = new Map() + + on(event: TEventEmitterEventType, listener: Function) { + let listeners = this.events.get(event) + if (!listeners) { + listeners = [] + } + listeners.push(listener) + this.events.set(event, listeners) + } + + emit(event: TEventEmitterEventType, ...args: any[]) { + const listeners = this.events.get(event) + if (listeners) { + listeners.forEach((listener) => listener(...args)) + } + } + + off(event: TEventEmitterEventType, listener: Function) { + let listeners = this.events.get(event) + + if (listeners) { + listeners = listeners.filter((l) => l !== listener) + this.events.set(event, listeners) + } + } +} + +export default EventEmitter diff --git a/apps/agent/src/utils/function/hook.ts b/apps/agent/src/utils/function/hook.ts new file mode 100644 index 00000000..7cac0e42 --- /dev/null +++ b/apps/agent/src/utils/function/hook.ts @@ -0,0 +1,339 @@ +import { App } from "antd" +import { useCallback } from "react" +import { useFormContext, useWatch } from "react-hook-form" +import { useTranslation } from "react-i18next" +import { useSelector } from "react-redux" +import { useNavigate, useSearchParams } from "react-router-dom" +import { DATA_VALUE_TYPE } from "@illa-public/code-editor-new" +import { ICompletionOption } from "@illa-public/code-editor-new/CodeMirror/extensions/interface" +import { DEFAULT_LARK_BOT_PARAMETERS } from "@illa-public/public-configs/function/larkBot" +import { DEFAULT_TENCENT_COS_PARAMETERS } from "@illa-public/public-configs/function/tencentCos" +import { TENCENT_COS_ACTION_OPERATION } from "@illa-public/public-types" +import { IVariables, VARIABLE_TYPE } from "@illa-public/public-types" +import { IFunctionForm } from "@/page/WorkSpace/Function/interface" +import { + useGetAIToolIconUploadAddressMutation, + useTestRunAIToolsMutation, +} from "@/redux/services/aiToolsAPI" +import { IAIToolDTO } from "@/redux/services/aiToolsAPI/interface" +import { getCurrentTabID } from "@/redux/ui/recentTab/selector" +import { TestRunResultEventEmitter } from "." +import { FUNCTION_RUN_RESULT_EVENT } from "../eventEmitter/constants" +import { fetchUploadBase64 } from "../file" +import { + useFindRecentTabByTabID, + useRemoveRecentTabReducer, +} from "../recentTabs/baseHook" +import { CREATE_FUNCTION_ID } from "../recentTabs/constants" +import { + useUpdateCreateToEditFunctionTab, + useUpdateCurrentTabToTipisDashboard, +} from "../recentTabs/hook" +import { + CREATE_FUNCTION_FROM_SINGLE, + CREATE_FUNCTION_FROM_SINGLE_KEY, + CREATE_FUNCTION_FROM_TAB_KEY, + genTabNavigateLink, +} from "../routeHelper" +import { useGetCurrentTeamInfo } from "../team" + +export const useGetParamsListByResourceType = () => { + const { control } = useFormContext() + const [resourceType, actionOperation, parameters] = useWatch({ + control, + name: ["resourceType", "actionOperation", "parameters"], + }) + + switch (resourceType) { + case "tencentcos": { + switch (actionOperation) { + case TENCENT_COS_ACTION_OPERATION.TENCENT_COS_DOWNLOAD: { + return DEFAULT_TENCENT_COS_PARAMETERS + } + default: { + return [] + } + } + } + case "larkbot": { + return DEFAULT_LARK_BOT_PARAMETERS + } + + default: + return parameters + } +} + +type TTransResult = ICompletionOption & { + depth: number + originType: VARIABLE_TYPE + required: boolean + name: string + parentKey: string +} + +function variableToCompletionOption(variable: IVariables): TTransResult[] { + // Define the mapping from VARIABLE_TYPE to DATA_VALUE_TYPE + const typeMapping: { [key in VARIABLE_TYPE]: DATA_VALUE_TYPE } = { + [VARIABLE_TYPE.STRING]: DATA_VALUE_TYPE.STRING, + [VARIABLE_TYPE.INT]: DATA_VALUE_TYPE.NUMBER, + [VARIABLE_TYPE.FLOAT]: DATA_VALUE_TYPE.NUMBER, + [VARIABLE_TYPE.BOOLEAN]: DATA_VALUE_TYPE.BOOLEAN, + [VARIABLE_TYPE.NULL]: DATA_VALUE_TYPE.UNKNOWN, + [VARIABLE_TYPE.OBJECT]: DATA_VALUE_TYPE.OBJECT, + [VARIABLE_TYPE.STRING_ARRAY]: DATA_VALUE_TYPE.ARRAY, + [VARIABLE_TYPE.INTEGER_ARRAY]: DATA_VALUE_TYPE.ARRAY, + [VARIABLE_TYPE.NUMBER_ARRAY]: DATA_VALUE_TYPE.ARRAY, + [VARIABLE_TYPE.BOOLEAN_ARRAY]: DATA_VALUE_TYPE.ARRAY, + [VARIABLE_TYPE.NULL_ARRAY]: DATA_VALUE_TYPE.ARRAY, + [VARIABLE_TYPE.OBJECT_ARRAY]: DATA_VALUE_TYPE.ARRAY, + } + + // Recursive function to handle objects and their children + function mapVariable( + variable: IVariables, + parentKey: string = "", + depth: number = 0, + ): TTransResult[] { + const baseOption: TTransResult = { + key: parentKey ? `${parentKey}.${variable.name}` : variable.name, + name: variable.name, + value: "", + description: variable.description, + type: typeMapping[variable.type], + originType: variable.type, + required: variable.required, + parentKey, + depth, + } + + let options: TTransResult[] = [baseOption] + + if ( + variable.type === VARIABLE_TYPE.OBJECT && + variable.children.length > 0 + ) { + const childOptions = variable.children.flatMap((child) => + mapVariable(child, baseOption.key, depth + 1), + ) + options = options.concat(childOptions) + } + + return options + } + + return mapVariable(variable) +} + +export const useVariableToCompletionOption = () => { + const { control } = useFormContext() + + const variables = useWatch({ + control, + name: "parameters", + }) + + return variables.map((v) => variableToCompletionOption(v)).flat() +} + +export const useTestRunFunction = () => { + const currentTeamInfo = useGetCurrentTeamInfo()! + const parameterList = useGetParamsListByResourceType() + + const { control } = useFormContext() + const [resourceID, resourceType, actionOperation, content] = useWatch({ + control, + name: [ + "integrationInfo.resourceID", + "resourceType", + "actionOperation", + "content", + ], + }) + + const [testRunAITools, { data: runAIToolsData, isLoading, error, isError }] = + useTestRunAIToolsMutation({ + fixedCacheKey: "testRunAITools", + }) + + const onTestRunFunction = async (formData: Record) => { + try { + const data = await testRunAITools({ + teamID: currentTeamInfo?.id, + testData: { + resourceID: resourceID, + resourceType: resourceType, + actionOperation: actionOperation, + parameters: parameterList, + content: content, + context: formData, + }, + }).unwrap() + TestRunResultEventEmitter.emit( + FUNCTION_RUN_RESULT_EVENT.CHANGE_DRAWER_OPEN_STATUS, + true, + ) + + TestRunResultEventEmitter.emit(FUNCTION_RUN_RESULT_EVENT.SET_RUN_RESULT, { + statusCode: 200, + result: JSON.stringify(data.data, null, 2), + }) + } catch (e) { + TestRunResultEventEmitter.emit( + FUNCTION_RUN_RESULT_EVENT.CHANGE_DRAWER_OPEN_STATUS, + true, + ) + TestRunResultEventEmitter.emit(FUNCTION_RUN_RESULT_EVENT.SET_RUN_RESULT, { + statusCode: 400, + result: JSON.stringify(e, null, 2), + }) + } + } + return { + onTestRunFunction, + testResult: runAIToolsData || error, + isLoading, + isError, + } +} + +export const useGetIconURL = () => { + const currentTeamInfo = useGetCurrentTeamInfo()! + + const [getAIToolIconUploadAddress] = useGetAIToolIconUploadAddressMutation() + + const getIconURL = useCallback( + async (iconData: string) => { + const iconURL = new URL(iconData) + if (iconURL.protocol === "data:") { + const { uploadAddress } = await getAIToolIconUploadAddress({ + teamID: currentTeamInfo.id, + base64: iconData, + }).unwrap() + return await fetchUploadBase64(uploadAddress, iconData) + } + if (iconURL.protocol === "http:" || iconURL.protocol === "https:") { + return iconData + } + + return "" + }, + [currentTeamInfo.id, getAIToolIconUploadAddress], + ) + + return getIconURL +} + +export const useOpenTipsWhenSubmit = () => { + const { t } = useTranslation() + const { message, modal } = App.useApp() + + const [searchParams] = useSearchParams() + + const updateCreateToEditFunctionTab = useUpdateCreateToEditFunctionTab() + const updateCurrentTabToTipisDashboard = useUpdateCurrentTabToTipisDashboard() + const removeTab = useRemoveRecentTabReducer() + const findTabByTabID = useFindRecentTabByTabID() + const navigate = useNavigate() + const currentTeamInfo = useGetCurrentTeamInfo()! + const currentTabID = useSelector(getCurrentTabID) + + const openCreateSuccessModal = (serverData: IAIToolDTO) => { + modal.success({ + closable: true, + title: t("function.edit.modal.save.title"), + content: t("function.edit.modal.save.desc"), + okText: t("function.edit.modal.save.button"), + onOk: async () => { + return updateCurrentTabToTipisDashboard({ + tabName: serverData.name, + tabIcon: "", + cacheID: serverData.aiToolID, + }) + }, + onCancel: async () => { + return updateCreateToEditFunctionTab(CREATE_FUNCTION_ID, { + tabName: serverData.name, + tabIcon: "", + cacheID: serverData.aiToolID, + }) + }, + }) + } + + const openUpdateSuccessModal = (serverData: IAIToolDTO) => { + modal.success({ + closable: true, + title: t("function.edit.modal.update.title"), + content: t("function.edit.modal.update.desc"), + okText: t("function.edit.modal.save.button"), + onOk: async () => { + return updateCurrentTabToTipisDashboard({ + tabName: serverData.name, + tabIcon: "", + cacheID: serverData.aiToolID, + }) + }, + }) + } + + const openTipsWhenSubmit = async ( + serverData: IAIToolDTO, + modalType: "create" | "edit" = "create", + ) => { + const defaultAlertMethod = + modalType === "edit" ? openUpdateSuccessModal : openCreateSuccessModal + + const from = searchParams.get( + CREATE_FUNCTION_FROM_SINGLE_KEY, + ) as CREATE_FUNCTION_FROM_SINGLE | null + + const createFromTabID = searchParams.get(CREATE_FUNCTION_FROM_TAB_KEY) + + if (!from || !createFromTabID) { + defaultAlertMethod(serverData) + return + } + + const tabInfo = findTabByTabID(createFromTabID) + + if (!tabInfo) { + defaultAlertMethod(serverData) + return + } + + switch (from) { + case CREATE_FUNCTION_FROM_SINGLE.DASHBOARD: { + defaultAlertMethod(serverData) + return + } + case CREATE_FUNCTION_FROM_SINGLE.EDIT_TIPIS: { + message.success(t("function.edit.message.updated")) + break + } + + case CREATE_FUNCTION_FROM_SINGLE.CREATE_TIPIS: { + message.success(t("function.edit.message.created")) + break + } + } + + const newSearchParams = new URLSearchParams({ + aiToolID: serverData.aiToolID, + aiToolName: serverData.name, + aiToolIcon: serverData.config.icon, + }) + + navigate( + `${genTabNavigateLink( + currentTeamInfo.identifier, + tabInfo.tabType, + tabInfo.cacheID, + tabInfo.tabID, + )}?${newSearchParams.toString()}`, + ) + await removeTab(currentTabID) + } + + return openTipsWhenSubmit +} diff --git a/apps/agent/src/utils/function/index.tsx b/apps/agent/src/utils/function/index.tsx new file mode 100644 index 00000000..df6f10be --- /dev/null +++ b/apps/agent/src/utils/function/index.tsx @@ -0,0 +1,7 @@ +import EventEmitter from "@/utils/eventEmitter" + +export const TestRunResultEventEmitter = new EventEmitter() + +export const IntegrationEventEmitter = new EventEmitter() + +export const CREATE_FUNCTION_GLOBAL_KEY = "CREATE_FUNCTION_GLOBAL" diff --git a/apps/agent/src/utils/localForage/recentTab.ts b/apps/agent/src/utils/localForage/recentTab.ts index 661f19d5..dd1311fd 100644 --- a/apps/agent/src/utils/localForage/recentTab.ts +++ b/apps/agent/src/utils/localForage/recentTab.ts @@ -1,16 +1,15 @@ import { klona } from "klona/json" import { ITabInfo } from "@/redux/ui/recentTab/interface" -import { DEFAULT_CHAT_ID, INIT_TABS } from "@/redux/ui/recentTab/state" +import { DEFAULT_CHAT_ID } from "@/redux/ui/recentTab/state" import { ITeamData } from "./interface" import { getTeamDataByTeamID, setTeamDataByTeamID } from "./teamData" export const getRecentTabs = async (teamID: string) => { const teamData = await getTeamDataByTeamID(teamID) if (!teamData) { - await setRecentTabs(teamID, INIT_TABS) - return INIT_TABS + return [] } - const tabsInfo = teamData.tabsInfo ?? INIT_TABS + const tabsInfo = teamData.tabsInfo ?? [] return tabsInfo } @@ -45,20 +44,20 @@ export const removeRecentTabsAndCacheData = async ( setTeamDataByTeamID(teamID, newTeamData) } -export const removeRecentTabsAndCacheDataByTipisID = async ( +export const removeRecentTabsAndCacheDataByCacheID = async ( teamID: string, - tipisID: string, + cacheID: string, ) => { const teamData = await getTeamDataByTeamID(teamID) if (!teamData) return const tabs = teamData.tabsInfo ?? [] - const targetTabs = tabs.filter((tab) => tab.cacheID === tipisID) + const targetTabs = tabs.filter((tab) => tab.cacheID === cacheID) if (targetTabs.length === 0) return const cacheUIHistory = teamData.uiHistory ?? {} targetTabs.forEach((tab) => { delete cacheUIHistory[tab.tabID] }) - const newTabs = tabs.filter((tab) => tab.cacheID !== tipisID) + const newTabs = tabs.filter((tab) => tab.cacheID !== cacheID) const newTeamData = klona(teamData) newTeamData.tabsInfo = newTabs newTeamData.uiHistory = cacheUIHistory @@ -70,7 +69,7 @@ export const removeAllRecentTabsAndCacheData = async (teamID: string) => { if (!teamData) return const newTeamData = klona(teamData) const defaultCache = teamData.uiHistory?.[DEFAULT_CHAT_ID] ?? {} - newTeamData.tabsInfo = INIT_TABS + newTeamData.tabsInfo = [] newTeamData.uiHistory = { [DEFAULT_CHAT_ID]: defaultCache, } diff --git a/apps/agent/src/utils/recentTabs/baseHook.ts b/apps/agent/src/utils/recentTabs/baseHook.ts index 5c323388..7c9401d5 100644 --- a/apps/agent/src/utils/recentTabs/baseHook.ts +++ b/apps/agent/src/utils/recentTabs/baseHook.ts @@ -13,7 +13,7 @@ import { batchUpdateRecentTabs, removeAllRecentTabsAndCacheData, removeRecentTabsAndCacheData, - removeRecentTabsAndCacheDataByTipisID, + removeRecentTabsAndCacheDataByCacheID, setRecentTabs, } from "../localForage/recentTab" import { getRecentTabInfosAndPinedTabInfos } from "../localForage/teamData" @@ -48,14 +48,14 @@ export const useRemoveRecentTabReducer = () => { return removeRecentTabReducer } -export const useRemoveRecentTabByTipisIDReducer = () => { +export const useRemoveRecentTabByCacheIDReducer = () => { const dispatch = useDispatch() const removeRecentTabReducer = useCallback( - async (tipisID: string) => { + async (cacheID: string) => { const teamID = getCurrentId(store.getState())! - dispatch(recentTabActions.deleteRecentTabByTipisIDReducer(tipisID)) - await removeRecentTabsAndCacheDataByTipisID(teamID, tipisID) + dispatch(recentTabActions.deleteRecentTabByCacheIDReducer(cacheID)) + await removeRecentTabsAndCacheDataByCacheID(teamID, cacheID) }, [dispatch], ) @@ -164,3 +164,15 @@ export const useInitRecentTab = () => { initRecentTab() }, [initRecentTab]) } + +export const useFindRecentTabByTabID = () => { + const recentTabs = useSelector(getRecentTabInfos) + const findRecentTabByID = useCallback( + (tabID: string) => { + return recentTabs.find((tab) => tab.tabID === tabID) + }, + [recentTabs], + ) + + return findRecentTabByID +} diff --git a/apps/agent/src/utils/recentTabs/constants.ts b/apps/agent/src/utils/recentTabs/constants.ts index 3e7d4195..331c2d4b 100644 --- a/apps/agent/src/utils/recentTabs/constants.ts +++ b/apps/agent/src/utils/recentTabs/constants.ts @@ -1,3 +1,4 @@ export const EXPLORE_TIPIS_ID = "explore_tipis" export const CREATE_TIPIS_ID = "create_tipis" export const EXPLORE_FUNCTION_ID = "explore_function" +export const CREATE_FUNCTION_ID = "create_function" diff --git a/apps/agent/src/utils/recentTabs/hook.ts b/apps/agent/src/utils/recentTabs/hook.ts index 0062e4c9..7c5127c5 100644 --- a/apps/agent/src/utils/recentTabs/hook.ts +++ b/apps/agent/src/utils/recentTabs/hook.ts @@ -1,28 +1,32 @@ import { useCallback } from "react" -import { useDispatch } from "react-redux" +import { useDispatch, useSelector } from "react-redux" import { useNavigate } from "react-router-dom" import { v4 } from "uuid" import { getCurrentTeamInfo } from "@illa-public/user-data" import store from "@/redux/store" import { ITabInfo, TAB_TYPE } from "@/redux/ui/recentTab/interface" import { + getCurrentTabID, getExploreFunctionTab, getExploreTipisTab, getRecentTabInfos, } from "@/redux/ui/recentTab/selector" import { recentTabActions } from "@/redux/ui/recentTab/slice" import { - getCreateFunctionPath, + getEditFunctionPath, getEditTipiPath, + getExploreTipisPath, getMarketTipiDetailPath, getRunTipiPath, } from "../routeHelper" import { useAddRecentTabReducer, useBatchUpdateRecentTabReducer, + useRemoveRecentTabReducer, useUpdateRecentTabReducer, } from "./baseHook" import { + CREATE_FUNCTION_ID, CREATE_TIPIS_ID, EXPLORE_FUNCTION_ID, EXPLORE_TIPIS_ID, @@ -440,23 +444,172 @@ export const useAddExploreFunctionsTab = () => { return addExploreTipisTab } -export const useCreateFunction = () => { +export const useAddCreateFunction = () => { + const dispatch = useDispatch() + const addRecentTab = useAddRecentTabReducer() + + const addCreateFunctionTab = useCallback( + async (functionType: string) => { + const historyTabs = getRecentTabInfos(store.getState()) + const createFunctionTab = historyTabs.find( + (tab) => + tab.tabType === TAB_TYPE.CREATE_FUNCTION && + tab.cacheID === functionType, + ) + if (!createFunctionTab) { + const tabsInfo: ITabInfo = { + tabName: "", + tabIcon: "", + tabType: TAB_TYPE.CREATE_FUNCTION, + tabID: CREATE_FUNCTION_ID, + cacheID: functionType, + } + await addRecentTab(tabsInfo) + } else { + dispatch( + recentTabActions.updateCurrentRecentTabIDReducer( + createFunctionTab.tabID, + ), + ) + } + }, + [addRecentTab, dispatch], + ) + + return addCreateFunctionTab +} + +export const useAddOrUpdateEditFunctionTab = () => { + const addRecentTab = useAddRecentTabReducer() + const dispatch = useDispatch() + const batchUpdateRecentTab = useBatchUpdateRecentTabReducer() + + const addOrUpdateEditFunctionTab = useCallback( + async (functionInfo: { functionName: string; functionID: string }) => { + const { functionID, functionName } = functionInfo + const historyTabs = getRecentTabInfos(store.getState()) + const useThisTipTab = historyTabs.filter( + (tab) => tab.cacheID === functionID, + ) + const newTabInfo = { + tabName: functionName, + tabIcon: "", + tabType: TAB_TYPE.EDIT_FUNCTION, + tabID: v4(), + cacheID: functionID, + } + if (useThisTipTab.length > 0) { + const currentTab = useThisTipTab.find( + (tab) => tab.tabType === TAB_TYPE.EDIT_FUNCTION, + ) + + if (currentTab) { + await batchUpdateRecentTab({ + [currentTab.tabID]: { + ...currentTab, + ...newTabInfo, + tabID: currentTab.tabID, + }, + }) + dispatch( + recentTabActions.updateCurrentRecentTabIDReducer(currentTab.tabID), + ) + } else { + await addRecentTab(newTabInfo) + } + } else { + await addRecentTab(newTabInfo) + } + }, + [addRecentTab, batchUpdateRecentTab, dispatch], + ) + + return addOrUpdateEditFunctionTab +} + +export const useUpdateCreateToEditFunctionTab = () => { const navigate = useNavigate() const addRecentTab = useAddRecentTabReducer() + const updateRecentTab = useUpdateRecentTabReducer() + const deleteTab = useRemoveRecentTabReducer() - const createFunction = useCallback(async () => { - const currentTeamInfo = getCurrentTeamInfo(store.getState())! - const tempID = v4() - const tabsInfo: ITabInfo = { - tabName: "", - tabIcon: "", - tabType: TAB_TYPE.CREATE_FUNCTION, - tabID: tempID, - cacheID: tempID, - } - await addRecentTab(tabsInfo) - navigate(getCreateFunctionPath(currentTeamInfo?.identifier, tempID)) - }, [addRecentTab, navigate]) + const changeCreateToEditFunction = useCallback( + async ( + tabID: string, + tabInfo: { + tabName: string + tabIcon: string + cacheID: string + }, + ) => { + const historyTabs = getRecentTabInfos(store.getState()) + const currentTeamInfo = getCurrentTeamInfo(store.getState())! + await deleteTab(tabID) + let currentTab = historyTabs.find( + (tab) => + tab.tabID === tabID && tab.tabType === TAB_TYPE.CREATE_FUNCTION, + ) + if (!currentTab) { + currentTab = { + ...tabInfo, + tabType: TAB_TYPE.EDIT_FUNCTION, + tabID: v4(), + } + await addRecentTab(currentTab) + } else { + await updateRecentTab(tabID, { + ...currentTab, + ...tabInfo, + tabType: TAB_TYPE.EDIT_FUNCTION, + tabID: v4(), + }) + } + + navigate(getEditFunctionPath(currentTeamInfo.identifier, tabInfo.cacheID)) + }, + [addRecentTab, deleteTab, navigate, updateRecentTab], + ) + + return changeCreateToEditFunction +} + +export const useUpdateCurrentTabToTipisDashboard = () => { + const navigate = useNavigate() + const addRecentTab = useAddRecentTabReducer() + const updateRecentTab = useUpdateRecentTabReducer() + const currentTabID = useSelector(getCurrentTabID) + const deleteTab = useRemoveRecentTabReducer() + + const updateCurrentTabToTipisDashboard = useCallback( + async (tabInfo: { tabName: string; tabIcon: string; cacheID: string }) => { + const historyTabs = getRecentTabInfos(store.getState()) + const currentTeamInfo = getCurrentTeamInfo(store.getState())! + await deleteTab(currentTabID) + + let exploreTipisTab = historyTabs.find( + (tab) => tab.tabID === EXPLORE_TIPIS_ID, + ) + + if (!exploreTipisTab) { + exploreTipisTab = { + ...tabInfo, + tabType: TAB_TYPE.EXPLORE_TIPIS, + tabID: EXPLORE_TIPIS_ID, + } + await addRecentTab(exploreTipisTab) + } else { + await updateRecentTab(EXPLORE_TIPIS_ID, { + ...exploreTipisTab, + ...tabInfo, + tabType: TAB_TYPE.EXPLORE_TIPIS, + tabID: EXPLORE_TIPIS_ID, + }) + } + + navigate(getExploreTipisPath(currentTeamInfo.identifier)) + }, + [addRecentTab, currentTabID, deleteTab, navigate, updateRecentTab], + ) - return createFunction + return updateCurrentTabToTipisDashboard } diff --git a/apps/agent/src/utils/routeHelper/hook.ts b/apps/agent/src/utils/routeHelper/hook.ts index 23c11c84..44b6e8c3 100644 --- a/apps/agent/src/utils/routeHelper/hook.ts +++ b/apps/agent/src/utils/routeHelper/hook.ts @@ -2,9 +2,14 @@ import { useCallback } from "react" import { useNavigate } from "react-router-dom" import { useLazyGetTeamsInfoQuery } from "@illa-public/user-data" import { + CREATE_FUNCTION_FROM_SINGLE, + CREATE_FUNCTION_FROM_SINGLE_KEY, + CREATE_FUNCTION_FROM_TAB_KEY, EMPTY_TEAM_PATH, getChatPath, + getCreateFunctionPath, getCreateTipiPath, + getEditFunctionPath, getEditTipiPath, getExploreFunctionsPath, getExploreTipisPath, @@ -14,10 +19,12 @@ import { } from "." import { useAddChatTab, + useAddCreateFunction, useAddCreateTipisTab, useAddExploreFunctionsTab, useAddExploreTipisTab, useAddMarketTipiDetailTab, + useAddOrUpdateEditFunctionTab, useAddOrUpdateEditTipisTab, useAddOrUpdateRunTipisTab, useAddTipisDetailTab, @@ -28,6 +35,12 @@ import { findRecentTeamInfo, useGetCurrentTeamInfo } from "../team" export const NOT_HAS_TEAM_INFO_KEY = "NOT_HAS_TEAM_INFO" export const NOT_HAS_TARGET_TEAM_INFO_KEY = "NOT_HAS_TARGET_TEAM_INFO" +export const useNavigateByTabID = () => { + const navigateByTabID = useCallback(async () => {}, []) + + return navigateByTabID +} + export const useNavigateTargetWorkspace = () => { const navigate = useNavigate() const [getTeamsInfo] = useLazyGetTeamsInfoQuery() @@ -222,3 +235,61 @@ export const useNavigateToExploreFunction = () => { }, [addExploreFunctionTab, currentTeamInfo?.identifier, navigate]) return navigateToExploreTipis } + +export const useNavigateToCreateFunction = () => { + const navigate = useNavigate() + const currentTeamInfo = useGetCurrentTeamInfo() + const addCreateFunctionTab = useAddCreateFunction() + + const navigateToCreteTipis = useCallback( + async ( + functionType: string, + from?: CREATE_FUNCTION_FROM_SINGLE, + tabID?: string, + ) => { + await addCreateFunctionTab(functionType) + if (currentTeamInfo?.identifier) { + const searchParams = new URLSearchParams() + if (from) { + searchParams.append(CREATE_FUNCTION_FROM_SINGLE_KEY, from) + } + if (tabID) { + searchParams.append(CREATE_FUNCTION_FROM_TAB_KEY, tabID) + } + if (!!searchParams.toString()) { + navigate( + `${getCreateFunctionPath(currentTeamInfo?.identifier, functionType)}?${searchParams.toString()}`, + ) + } else { + navigate( + getCreateFunctionPath(currentTeamInfo?.identifier, functionType), + ) + } + } + }, + [addCreateFunctionTab, currentTeamInfo?.identifier, navigate], + ) + return navigateToCreteTipis +} + +export const useNavigateToEditFunction = () => { + const navigate = useNavigate() + const addOrUpdateEditFunctionTab = useAddOrUpdateEditFunctionTab() + const currentTeamInfo = useGetCurrentTeamInfo() + + const navigateToEditTipis = useCallback( + async (functionInfo: { functionName: string; functionID: string }) => { + await addOrUpdateEditFunctionTab(functionInfo) + if (currentTeamInfo?.identifier) { + navigate( + getEditFunctionPath( + currentTeamInfo.identifier, + functionInfo.functionID, + ), + ) + } + }, + [addOrUpdateEditFunctionTab, currentTeamInfo?.identifier, navigate], + ) + return navigateToEditTipis +} diff --git a/apps/agent/src/utils/routeHelper/index.ts b/apps/agent/src/utils/routeHelper/index.ts index 42559e8e..df228929 100644 --- a/apps/agent/src/utils/routeHelper/index.ts +++ b/apps/agent/src/utils/routeHelper/index.ts @@ -1,3 +1,4 @@ +import { TAB_TYPE } from "@/redux/ui/recentTab/interface" import { DEFAULT_CHAT_ID } from "@/redux/ui/recentTab/state" export const getExploreTipisPath = (teamIdentifier: string) => { @@ -44,9 +45,9 @@ export const getChatPath = ( export const getCreateFunctionPath = ( teamIdentifier: string, - functionID: string, + functionType: string, ) => { - return `/workspace/${teamIdentifier}/function/${functionID}/create` + return `/workspace/${teamIdentifier}/function/create/${functionType}` } export const getEditFunctionPath = ( @@ -74,9 +75,51 @@ export const getTeamInfoSetting = (teamIdentifier: string) => { return `/setting/${teamIdentifier}/team-settings` } +export const genTabNavigateLink = ( + teamIdentifier: string = "", + tabType: TAB_TYPE, + cacheID: string, + tabID: string, +) => { + switch (tabType) { + case TAB_TYPE.CREATE_TIPIS: + return getCreateTipiPath(teamIdentifier) + case TAB_TYPE.EDIT_TIPIS: + return getEditTipiPath(teamIdentifier, cacheID) + case TAB_TYPE.RUN_TIPIS: + return `${getRunTipiPath(teamIdentifier, cacheID, tabID)}` + case TAB_TYPE.CHAT: + return getChatPath(teamIdentifier, cacheID) + case TAB_TYPE.CREATE_FUNCTION: + return getCreateFunctionPath(teamIdentifier, cacheID) + case TAB_TYPE.EDIT_FUNCTION: + return getEditFunctionPath(teamIdentifier, cacheID) + case TAB_TYPE.EXPLORE_TIPIS: + return getExploreTipisPath(teamIdentifier) + case TAB_TYPE.EXPLORE_FUNCTION: + return getExploreFunctionsPath(teamIdentifier) + case TAB_TYPE.EXPLORE_TIPIS_DETAIL: + return getTipiDetailPath(teamIdentifier, cacheID) + case TAB_TYPE.EXPLORE_MARKET_TIPIS_DETAIL: + return getMarketTipiDetailPath(teamIdentifier, cacheID) + case TAB_TYPE.EXPLORE_MARKET_FUNCTION_DETAIL: + case TAB_TYPE.EXPLORE_FUNCTION_DETAIL: + return "" + } +} + export const REGISTER_PATH = "/user/register" export const FORGOT_PASSWORD_PATH = "/user/forgotPassword" export const LOGIN_PATH = "/user/login" export const PASSWORD_PATH = "/setting/password" export const LINKED_PATH = "/setting/linked" export const EMPTY_TEAM_PATH = "/empty-workspace" + +export enum CREATE_FUNCTION_FROM_SINGLE { + CREATE_TIPIS = "createTipis", + EDIT_TIPIS = "editTipis", + DASHBOARD = "dashboard", +} + +export const CREATE_FUNCTION_FROM_SINGLE_KEY = "from" +export const CREATE_FUNCTION_FROM_TAB_KEY = "fromTabID" diff --git a/apps/agent/src/utils/sanbox/index.ts b/apps/agent/src/utils/sanbox/index.ts deleted file mode 100644 index 1ec6d20f..00000000 --- a/apps/agent/src/utils/sanbox/index.ts +++ /dev/null @@ -1,115 +0,0 @@ -import { getSnippets } from "@illa-public/dynamic-string/converter" -import { RESULT_TYPES } from "@/components/CodeEditor/CodeMirror/interface" -import { getResultType } from "@/components/CodeEditor/CodeMirror/utils" -import { templateSubstituteDynamicValues } from "./utils" - -type SandboxContext = Record -type ExpressionResult = { value: string; hasError: boolean } - -class Sandbox { - formatValue = (value: unknown) => { - switch (getResultType(value)) { - case RESULT_TYPES.NUMBER: - case RESULT_TYPES.STRING: - return value as string - case RESULT_TYPES.UNDEFINED: - return "undefined" - case RESULT_TYPES.NULL: - return "null" - case RESULT_TYPES.BOOLEAN: - return `${value}` as string - case RESULT_TYPES.ARRAY: - case RESULT_TYPES.OBJECT: - return JSON.stringify(value, null) - } - } - evaluateExpression = (jsCode: string, context: SandboxContext) => { - try { - const proxyContext = new Proxy(context, { - get: (target, prop) => { - if (prop === "window") { - throw new Error("Access to window is not allowed") - } - return Reflect.get(target, prop) ?? Reflect.get(globalThis, prop) - }, - }) - - const func = new Function( - "context", - `with (context) { return ${jsCode}; }`, - ) - return func(proxyContext) - } catch (error) { - throw new Error( - `Error in expression ${jsCode}: ${(error as Error).message}`, - ) - } - } - - getDynamicValue = (originCode: string, context: SandboxContext) => { - const { jsSnippets, stringSnippets } = getSnippets(originCode) - - if (stringSnippets.length) { - const values = jsSnippets.map((jsSnippet, index) => { - if (jsSnippet) { - try { - const value = this.evaluateExpression(jsSnippet, context) - return value - } catch { - return undefined - } - } else { - return stringSnippets[index] - } - }) - if (stringSnippets.length === 1) { - return values[0] - } - return templateSubstituteDynamicValues(originCode, stringSnippets, values) - } - } - - execute(script: string, context: SandboxContext = {}): any { - try { - let evalResult = this.getDynamicValue(script, context) - return { type: getResultType(evalResult), value: evalResult } - } catch (error) { - return { - type: "error", - value: (error as Error).message, - } - } - } - checkRun(script: string, context: SandboxContext = {}): ExpressionResult[] { - const expressionResults: ExpressionResult[] = [] - - const { jsSnippets, stringSnippets } = getSnippets(script) - - if (stringSnippets.length) { - jsSnippets.forEach((jsSnippet, index) => { - if (jsSnippet) { - try { - const value = this.evaluateExpression(jsSnippet, context) - expressionResults.push({ - value: `{{${jsSnippet}}}`, - hasError: false, - }) - return value - } catch { - expressionResults.push({ - value: `{{${jsSnippet}}}`, - hasError: true, - }) - return undefined - } - } else { - return stringSnippets[index] - } - }) - } - - return expressionResults - } -} - -export default new Sandbox() diff --git a/apps/agent/src/utils/sanbox/utils.ts b/apps/agent/src/utils/sanbox/utils.ts deleted file mode 100644 index dd811cda..00000000 --- a/apps/agent/src/utils/sanbox/utils.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { isObject } from "lodash-es" - -export const templateSubstituteDynamicValues = ( - dynamicString: string, - stringSnippets: string[], - values: unknown[], -): string => { - let finalValue = dynamicString - stringSnippets.forEach((b, i) => { - let value = values[i] - if (Array.isArray(value) || isObject(value)) { - value = JSON.stringify(value) - } - try { - if (typeof value === "string" && JSON.parse(value)) { - value = value.replace(/\\([\s\S])|(")/g, "\\$1$2") - } - } catch (e) { - // do nothing - } - finalValue = finalValue.replace(b, `${value}`) - }) - return finalValue -} diff --git a/apps/agent/src/utils/storage/calculateSize.ts b/apps/agent/src/utils/storage/calculateSize.ts deleted file mode 100644 index 8b9c306c..00000000 --- a/apps/agent/src/utils/storage/calculateSize.ts +++ /dev/null @@ -1,8 +0,0 @@ -const units = ["KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"] - -export const getStorageSize = (size: number) => { - const index = size && Math.floor(Math.log(size) / Math.log(1024)) - const unit = units[index] - const value = (size / Math.pow(1024, index)).toFixed(1) - return `${value}${unit}` -} diff --git a/apps/agent/src/vite-env.d.ts b/apps/agent/src/vite-env.d.ts index 9295e594..44bc374f 100644 --- a/apps/agent/src/vite-env.d.ts +++ b/apps/agent/src/vite-env.d.ts @@ -1,6 +1,7 @@ /// interface ImportMetaEnv { readonly ILLA_API_BASE_URL: string + readonly ILLA_PERIPHERAL_API_BASE_URL: string readonly ILLA_CLOUD_URL: string readonly ILLA_MARKET_URL: string readonly ILLA_INSTANCE_ID: string diff --git a/i18next-parser.config.ts b/i18next-parser.config.ts index 2da234c3..fcbb2572 100644 --- a/i18next-parser.config.ts +++ b/i18next-parser.config.ts @@ -1,130 +1,15 @@ export default { - contextSeparator: "_", - // Key separator used in your translation keys - - createOldCatalogs: true, - // Save the \_old files - - defaultNamespace: "translation", - // Default namespace used in your i18next config - - defaultValue: "", - // Default value to give to keys with no value - // You may also specify a function accepting the locale, namespace, key, and value as arguments - - indentation: 2, - // Indentation of the catalog files - + defaultValue: "__NOT_TRANSLATED__", + overwrite: true, keepRemoved: false, - // Keep keys from the catalog that are no longer in code - // You may either specify a boolean to keep or discard all removed keys. - // You may also specify an array of patterns: the keys from the catalog that are no long in the code but match one of the patterns will be kept. - // The patterns are applied to the full key including the namespace, the parent keys and the separators. - keySeparator: false, - // Key separator used in your translation keys - // If you want to use plain english keys, separators such as `.` and `:` will conflict. You might want to set `keySeparator: false` and `namespaceSeparator: false`. That way, `t('Status: Loading...')` will not think that there are a namespace and three separator dots for instance. - - // see below for more details - lexers: { - hbs: ["HandlebarsLexer"], - handlebars: ["HandlebarsLexer"], - - htm: ["HTMLLexer"], - html: ["HTMLLexer"], - - mjs: ["JavascriptLexer"], - js: ["JavascriptLexer"], // if you're writing jsx inside .js files, change this to JsxLexer - ts: ["JavascriptLexer"], - jsx: ["JsxLexer"], - tsx: ["JsxLexer"], - - default: ["JavascriptLexer"], - }, - - lineEnding: "auto", - // Control the line ending. See options at https://github.com/ryanve/eol - locales: ["en-US"], - // An array of the locales in your applications - namespaceSeparator: false, - // Namespace separator used in your translation keys - // If you want to use plain english keys, separators such as `.` and `:` will conflict. You might want to set `keySeparator: false` and `namespaceSeparator: false`. That way, `t('Status: Loading...')` will not think that there are a namespace and three separator dots for instance. - output: "packages/locales/$LOCALE.json", - // Supports $LOCALE and $NAMESPACE injection - // Supports JSON (.json) and YAML (.yml) file formats - // Where to write the locale files relative to process.cwd() - - pluralSeparator: "_", - // Plural separator used in your translation keys - // If you want to use plain english keys, separators such as `_` might conflict. You might want to set `pluralSeparator` to a different string that does not occur in your keys. - // If you don't want to generate keys for plurals (for example, in case you are using ICU format), set `pluralSeparator: false`. - - input: undefined, - // An array of globs that describe where to look for source files - // relative to the location of the configuration file - - sort: false, - // Whether or not to sort the catalog. Can also be a [compareFunction](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#parameters) - - verbose: false, - // Display info about the parsing including some stats - - failOnWarnings: false, - // Exit with an exit code of 1 on warnings - - failOnUpdate: false, - // Exit with an exit code of 1 when translations are updated (for CI purpose) - - customValueTemplate: null, - // If you wish to customize the value output the value as an object, you can set your own format. - // - // - ${defaultValue} is the default value you set in your translation function. - // - ${filePaths} will be expanded to an array that contains the absolute - // file paths where the translations originated in, in case e.g., you need - // to provide translators with context - // - // Any other custom property will be automatically extracted from the 2nd - // argument of your `t()` function or tOptions in - // - // Example: - // For `t('my-key', {maxLength: 150, defaultValue: 'Hello'})` in - // /path/to/your/file.js, - // - // Using the following customValueTemplate: - // - // customValueTemplate: { - // message: "${defaultValue}", - // description: "${maxLength}", - // paths: "${filePaths}", - // } - // - // Will result in the following item being extracted: - // - // "my-key": { - // "message": "Hello", - // "description": 150, - // "paths": ["/path/to/your/file.js"] - // } - - resetDefaultValueLocale: null, - // The locale to compare with default values to determine whether a default value has been changed. - // If this is set and a default value differs from a translation in the specified locale, all entries - // for that key across locales are reset to the default value, and existing translations are moved to - // the `_old` file. - - i18nextOptions: null, - // If you wish to customize options in internally used i18next instance, you can define an object with any - // configuration property supported by i18next (https://www.i18next.com/overview/configuration-options). - // { compatibilityJSON: 'v3' } can be used to generate v3 compatible plurals. - - yamlOptions: null, - // If you wish to customize options for yaml output, you can define an object here. - // Configuration options are here (https://github.com/nodeca/js-yaml#dump-object---options-). - // Example: - // { - // lineWidth: -1, - // } + input: [ + "apps/agent/src/**/*.{ts,tsx}", + "packages/**/*.{ts,tsx}", + "!**/node_modules/**", + ], + sort: true, } diff --git a/package.json b/package.json index 26abc59a..5cdbe0eb 100644 --- a/package.json +++ b/package.json @@ -7,38 +7,39 @@ "lint": "turbo lint", "format": "prettier --write \"**/*.{ts,tsx,md}\"", "prepare": "husky", - "parser:tipis": "i18next 'apps/agent/src/**/*.{ts,tsx}' 'packages/**/*.{ts,tsx}'" + "parser:tipis": "i18next" }, "devDependencies": { - "@commitlint/cli": "^19.0.3", - "@commitlint/config-conventional": "^19.0.3", + "@commitlint/cli": "^19.3.0", + "@commitlint/config-conventional": "^19.2.2", "@trivago/prettier-plugin-sort-imports": "^4.3.0", "@types/node": "^18.18.11", - "@types/react": "^18.2.62", - "@types/react-dom": "^18.2.19", + "@types/react": "^18.2.79", + "@types/react-dom": "^18.2.25", "@vitejs/plugin-basic-ssl": "^1.1.0", "@vitejs/plugin-react-swc": "^3.6.0", "eslint-config-illa": "workspace:*", "husky": "^9.0.11", "i18next-parser": "^8.13.0", - "lint-staged": "^13.2.2", + "lint-staged": "^15.2.2", "prettier": "^3.2.5", "tsconfig": "workspace:*", "turbo": "latest", "typescript": "^5.3.3", - "vite": "^5.1.5", + "vite": "^5.2.10", "vite-plugin-checker": "^0.6.4", "vite-plugin-svgr": "^4.2.0" }, "dependencies": { "@emotion/react": "^11.11.4", - "@emotion/styled": "^11.11.0", + "@emotion/styled": "^11.11.5", "@illa-public/utils": "workspace:^", "react": "^18.2.0", "react-dom": "^18.2.0", - "react-i18next": "^14.0.5", - "i18next": "^23.10.0", - "antd": "^5.15.2", + "react-i18next": "^14.1.1", + "i18next": "^23.11.2", + "antd": "^5.16.4", + "@ant-design/icons": "5.3.6", "dayjs": "^1.11.10" }, "browserslist": [ @@ -54,6 +55,7 @@ "react-i18next": "$react-i18next", "i18next": "$i18next", "antd": "$antd", + "@ant-design/icons": "$@ant-design/icons", "dayjs": "$dayjs", "@emotion/react": "$@emotion/react", "@emotion/styled": "$@emotion/styled" diff --git a/packages b/packages index ff851315..1d3a3751 160000 --- a/packages +++ b/packages @@ -1 +1 @@ -Subproject commit ff851315aa80a1779d16d0aa437e62c07348a0a0 +Subproject commit 1d3a37517fcb9762b97f94fad0785c1fa78a92cf diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1a3a5323..d6b959ef 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,37 +7,41 @@ settings: overrides: react: ^18.2.0 react-dom: ^18.2.0 - '@types/react': ^18.2.62 - '@types/react-dom': ^18.2.19 - react-i18next: ^14.0.5 - i18next: ^23.10.0 - antd: ^5.15.2 + '@types/react': ^18.2.79 + '@types/react-dom': ^18.2.25 + react-i18next: ^14.1.1 + i18next: ^23.11.2 + antd: ^5.16.4 + '@ant-design/icons': 5.3.6 dayjs: ^1.11.10 '@emotion/react': ^11.11.4 - '@emotion/styled': ^11.11.0 + '@emotion/styled': ^11.11.5 importers: .: dependencies: + '@ant-design/icons': + specifier: 5.3.6 + version: 5.3.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@emotion/react': specifier: ^11.11.4 - version: 11.11.4(@types/react@18.2.62)(react@18.2.0) + version: 11.11.4(@types/react@18.2.79)(react@18.2.0) '@emotion/styled': - specifier: ^11.11.0 - version: 11.11.0(@emotion/react@11.11.4)(@types/react@18.2.62)(react@18.2.0) + specifier: ^11.11.5 + version: 11.11.5(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0) '@illa-public/utils': specifier: workspace:^ version: link:packages/utils/public antd: - specifier: ^5.15.2 - version: 5.15.2(react-dom@18.2.0)(react@18.2.0) + specifier: ^5.16.4 + version: 5.16.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) dayjs: specifier: ^1.11.10 version: 1.11.10 i18next: - specifier: ^23.10.0 - version: 23.10.0 + specifier: ^23.11.2 + version: 23.11.2 react: specifier: ^18.2.0 version: 18.2.0 @@ -45,33 +49,33 @@ importers: specifier: ^18.2.0 version: 18.2.0(react@18.2.0) react-i18next: - specifier: ^14.0.5 - version: 14.0.5(i18next@23.10.0)(react-dom@18.2.0)(react@18.2.0) + specifier: ^14.1.1 + version: 14.1.1(i18next@23.11.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) devDependencies: '@commitlint/cli': - specifier: ^19.0.3 - version: 19.0.3(@types/node@18.19.21)(typescript@5.3.3) + specifier: ^19.3.0 + version: 19.3.0(@types/node@18.19.31)(typescript@5.4.5) '@commitlint/config-conventional': - specifier: ^19.0.3 - version: 19.0.3 + specifier: ^19.2.2 + version: 19.2.2 '@trivago/prettier-plugin-sort-imports': specifier: ^4.3.0 version: 4.3.0(prettier@3.2.5) '@types/node': specifier: ^18.18.11 - version: 18.19.21 + version: 18.19.31 '@types/react': - specifier: ^18.2.62 - version: 18.2.62 + specifier: ^18.2.79 + version: 18.2.79 '@types/react-dom': - specifier: ^18.2.19 - version: 18.2.19 + specifier: ^18.2.25 + version: 18.2.25 '@vitejs/plugin-basic-ssl': specifier: ^1.1.0 - version: 1.1.0(vite@5.1.5) + version: 1.1.0(vite@5.2.10(@types/node@18.19.31)(terser@5.30.4)) '@vitejs/plugin-react-swc': specifier: ^3.6.0 - version: 3.6.0(vite@5.1.5) + version: 3.6.0(vite@5.2.10(@types/node@18.19.31)(terser@5.30.4)) eslint-config-illa: specifier: workspace:* version: link:packages/devConfigs/eslint-config-illa @@ -82,8 +86,8 @@ importers: specifier: ^8.13.0 version: 8.13.0 lint-staged: - specifier: ^13.2.2 - version: 13.3.0 + specifier: ^15.2.2 + version: 15.2.2 prettier: specifier: ^3.2.5 version: 3.2.5 @@ -92,73 +96,46 @@ importers: version: link:packages/devConfigs/tsconfig turbo: specifier: latest - version: 1.12.4 + version: 1.13.2 typescript: specifier: ^5.3.3 - version: 5.3.3 + version: 5.4.5 vite: - specifier: ^5.1.5 - version: 5.1.5(@types/node@18.19.21)(terser@5.30.3) + specifier: ^5.2.10 + version: 5.2.10(@types/node@18.19.31)(terser@5.30.4) vite-plugin-checker: specifier: ^0.6.4 - version: 0.6.4(typescript@5.3.3)(vite@5.1.5) + version: 0.6.4(eslint@8.57.0)(meow@13.2.0)(optionator@0.9.3)(typescript@5.4.5)(vite@5.2.10(@types/node@18.19.31)(terser@5.30.4)) vite-plugin-svgr: specifier: ^4.2.0 - version: 4.2.0(typescript@5.3.3)(vite@5.1.5) + version: 4.2.0(rollup@4.16.4)(typescript@5.4.5)(vite@5.2.10(@types/node@18.19.31)(terser@5.30.4)) apps/agent: dependencies: - '@ant-design/icons': - specifier: ^5.3.1 - version: 5.3.1(react-dom@18.2.0)(react@18.2.0) '@atlaskit/pragmatic-drag-and-drop-hitbox': specifier: ^1.0.3 version: 1.0.3 '@atlaskit/pragmatic-drag-and-drop-react-drop-indicator': specifier: ^1.1.0 - version: 1.1.0(@types/react@18.2.62)(react@18.2.0) + version: 1.1.1(@types/react@18.2.79)(react@18.2.0) '@atlaskit/tokens': specifier: ^1.43.0 - version: 1.43.0(react@18.2.0) - '@codemirror/autocomplete': - specifier: ^6.4.0 - version: 6.13.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.25.0)(@lezer/common@1.2.1) - '@codemirror/commands': - specifier: ^6.1.3 - version: 6.3.3 - '@codemirror/lang-javascript': - specifier: ^6.2.1 - version: 6.2.2 - '@codemirror/lang-sql': - specifier: ^6.5.4 - version: 6.6.1(@codemirror/view@6.25.0) - '@codemirror/language': - specifier: ^6.3.2 - version: 6.10.1 - '@codemirror/lint': - specifier: ^6.4.2 - version: 6.5.0 - '@codemirror/search': - specifier: ^6.5.5 - version: 6.5.6 - '@codemirror/state': - specifier: ^6.2.0 - version: 6.4.1 - '@codemirror/view': - specifier: ^6.7.2 - version: 6.25.0 + version: 1.43.1(react@18.2.0) '@illa-public/auth-shown': specifier: workspace:^ version: link:../../packages/components/AuthShown '@illa-public/avatar': specifier: workspace:^ version: link:../../packages/components/Avatar - '@illa-public/code-editor': + '@illa-public/code-editor-new': specifier: workspace:^ - version: link:../../packages/components/CodeEditor + version: link:../../packages/components/NewCodeEditor '@illa-public/color-scheme': specifier: workspace:^ version: link:../../packages/utils/colorScheme + '@illa-public/draggable-modal': + specifier: workspace:* + version: link:../../packages/components/DraggableModal '@illa-public/dynamic-string': specifier: workspace:^ version: link:../../packages/utils/dynamicStringUtils @@ -219,42 +196,33 @@ importers: '@illa-public/utils': specifier: workspace:^ version: link:../../packages/utils/public - '@lezer/common': - specifier: ^1.2.1 - version: 1.2.1 - '@lezer/highlight': - specifier: ^1.2.0 - version: 1.2.0 '@mui/material': specifier: ^5.15.3 - version: 5.15.11(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@types/react@18.2.62)(react-dom@18.2.0)(react@18.2.0) + version: 5.15.15(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@mui/x-data-grid-premium': specifier: ^6.19.6 - version: 6.19.6(@mui/material@5.15.11)(@mui/system@5.15.11)(@types/react@18.2.62)(react-dom@18.2.0)(react@18.2.0) + version: 6.19.11(@mui/material@5.15.15(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@mui/system@5.15.15(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@reduxjs/toolkit': specifier: ^2.2.1 - version: 2.2.1(react-redux@9.1.0)(react@18.2.0) + version: 2.2.3(react-redux@9.1.1(@types/react@18.2.79)(react@18.2.0)(redux@5.0.1))(react@18.2.0) '@sentry/react': specifier: ^7.110.1 - version: 7.110.1(react@18.2.0) + version: 7.112.2(react@18.2.0) '@sentry/vite-plugin': specifier: ^2.16.1 version: 2.16.1 '@tauri-apps/api': specifier: ^1.5.3 - version: 1.5.3 + version: 1.5.4 '@types/tern': specifier: ^0.23.9 version: 0.23.9 - antd: - specifier: ^5.15.2 - version: 5.15.2(react-dom@18.2.0)(react@18.2.0) antd-img-crop: specifier: ^4.21.0 - version: 4.21.0(antd@5.15.2)(react-dom@18.2.0)(react@18.2.0) + version: 4.21.0(antd@5.16.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0) axios: specifier: ^1.6.2 - version: 1.6.7 + version: 1.6.8 chart.js: specifier: ^4.4.2 version: 4.4.2 @@ -269,19 +237,19 @@ importers: version: 0.8.2 framer-motion: specifier: ^11.0.8 - version: 11.0.8(react-dom@18.2.0)(react@18.2.0) + version: 11.1.7(@emotion/is-prop-valid@1.2.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) fuse.js: specifier: ^7.0.0 version: 7.0.0 i18next: - specifier: ^23.10.0 - version: 23.10.0 + specifier: ^23.11.2 + version: 23.11.2 i18next-browser-languagedetector: specifier: ^7.2.0 - version: 7.2.0 + version: 7.2.1 i18next-http-backend: specifier: ^2.5.0 - version: 2.5.0 + version: 2.5.1 klona: specifier: ^2.0.6 version: 2.0.6 @@ -296,49 +264,52 @@ importers: version: 5.12.2 mammoth: specifier: ^1.7.0 - version: 1.7.0 + version: 1.7.1 pdfjs-dist: specifier: 2.16.105 version: 2.16.105 posthog-js: specifier: ^1.116.6 - version: 1.116.6 + version: 1.129.0 qs: specifier: ^6.12.0 - version: 6.12.0 + version: 6.12.1 + re-resizable: + specifier: ^6.9.16 + version: 6.9.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react-chartjs-2: specifier: ^5.2.0 version: 5.2.0(chart.js@4.4.2)(react@18.2.0) react-helmet-async: specifier: ^2.0.4 - version: 2.0.4(react-dom@18.2.0)(react@18.2.0) + version: 2.0.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react-hook-form: specifier: ^7.51.0 - version: 7.51.2(react@18.2.0) + version: 7.51.3(react@18.2.0) react-markdown: specifier: ^8.0.5 - version: 8.0.7(@types/react@18.2.62)(react@18.2.0) + version: 8.0.7(@types/react@18.2.79)(react@18.2.0) react-redux: specifier: ^9.1.0 - version: 9.1.0(@types/react@18.2.62)(react@18.2.0)(redux@5.0.1) + version: 9.1.1(@types/react@18.2.79)(react@18.2.0)(redux@5.0.1) react-rnd: - specifier: ^10.4.1 - version: 10.4.1(react-dom@18.2.0)(react@18.2.0) + specifier: ^10.4.10 + version: 10.4.10(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react-router-dom: specifier: ^6.22.2 - version: 6.22.2(react-dom@18.2.0)(react@18.2.0) + version: 6.23.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react-syntax-highlighter: specifier: ^15.5.0 version: 15.5.0(react@18.2.0) react-use: - specifier: ^17.4.0 - version: 17.5.0(react-dom@18.2.0)(react@18.2.0) + specifier: ^17.5.0 + version: 17.5.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react-use-intercom: specifier: ^5.3.0 - version: 5.3.0(react-dom@18.2.0)(react@18.2.0) + version: 5.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react-use-measure: specifier: ^2.1.1 - version: 2.1.1(react-dom@18.2.0)(react@18.2.0) + version: 2.1.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) remark-breaks: specifier: ^4.0.0 version: 4.0.0 @@ -363,7 +334,7 @@ importers: version: 1.1.3 '@tauri-apps/cli': specifier: ^1.5.11 - version: 1.5.11 + version: 1.5.12 '@types/gtag.js': specifier: ^0.0.18 version: 0.0.18 @@ -372,7 +343,7 @@ importers: version: 4.17.12 '@types/qs': specifier: ^6.9.12 - version: 6.9.12 + version: 6.9.15 '@types/react-syntax-highlighter': specifier: ^15.5.11 version: 15.5.11 @@ -384,7 +355,7 @@ importers: version: 9.0.8 '@vitejs/plugin-legacy': specifier: ^5.3.2 - version: 5.3.2(terser@5.30.3)(vite@5.1.5) + version: 5.3.2(terser@5.30.4)(vite@5.2.10(@types/node@18.19.31)(terser@5.30.4)) cross-env: specifier: ^7.0.3 version: 7.0.3 @@ -393,16 +364,16 @@ importers: version: 3.5.0 rollup-plugin-visualizer: specifier: ^5.12.0 - version: 5.12.0 + version: 5.12.0(rollup@4.16.4) terser: specifier: ^5.30.3 - version: 5.30.3 + version: 5.30.4 packages/components/AuthShown: dependencies: '@emotion/react': specifier: ^11.11.4 - version: 11.11.4(@types/react@18.2.62)(react@18.2.0) + version: 11.11.4(@types/react@18.2.79)(react@18.2.0) '@illa-public/public-types': specifier: workspace:* version: link:../../others/publicTypes @@ -413,11 +384,11 @@ importers: specifier: workspace:* version: link:../../utils/public '@types/react': - specifier: ^18.2.62 - version: 18.2.62 + specifier: ^18.2.79 + version: 18.2.79 '@types/react-dom': - specifier: ^18.2.19 - version: 18.2.19 + specifier: ^18.2.25 + version: 18.2.25 react: specifier: ^18.2.0 version: 18.2.0 @@ -433,7 +404,7 @@ importers: dependencies: '@emotion/react': specifier: ^11.11.4 - version: 11.11.4(@types/react@18.2.62)(react@18.2.0) + version: 11.11.4(@types/react@18.2.79)(react@18.2.0) '@illa-public/color-scheme': specifier: workspace:* version: link:../../utils/colorScheme @@ -441,11 +412,11 @@ importers: specifier: workspace:* version: link:../../utils/public '@types/react': - specifier: ^18.2.62 - version: 18.2.62 + specifier: ^18.2.79 + version: 18.2.79 '@types/react-dom': - specifier: ^18.2.19 - version: 18.2.19 + specifier: ^18.2.25 + version: 18.2.25 react: specifier: ^18.2.0 version: 18.2.0 @@ -457,47 +428,29 @@ importers: specifier: workspace:* version: link:../../devConfigs/tsconfig - packages/components/CodeEditor: + packages/components/DraggableModal: dependencies: - '@codemirror/autocomplete': - specifier: ^6.4.0 - version: 6.13.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.25.0)(@lezer/common@1.2.1) - '@codemirror/commands': - specifier: ^6.1.3 - version: 6.3.3 - '@codemirror/language': - specifier: ^6.3.2 - version: 6.10.1 - '@codemirror/state': - specifier: ^6.2.0 - version: 6.4.1 - '@codemirror/view': - specifier: ^6.7.2 - version: 6.25.0 + '@ant-design/icons': + specifier: 5.3.6 + version: 5.3.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@emotion/react': specifier: ^11.11.4 - version: 11.11.4(@types/react@18.2.62)(react@18.2.0) - '@illa-public/color-scheme': - specifier: workspace:* - version: link:../../utils/colorScheme - '@illa-public/dynamic-string': - specifier: workspace:^ - version: link:../../utils/dynamicStringUtils - '@illa-public/utils': + version: 11.11.4(@types/react@18.2.79)(react@18.2.0) + '@illa-public/icon': specifier: workspace:* - version: link:../../utils/public + version: link:../Icon '@types/react': - specifier: ^18.2.62 - version: 18.2.62 + specifier: ^18.2.79 + version: 18.2.79 '@types/react-dom': - specifier: ^18.2.19 - version: 18.2.19 + specifier: ^18.2.25 + version: 18.2.25 + antd: + specifier: ^5.16.4 + version: 5.16.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) i18next: - specifier: ^23.10.0 - version: 23.10.0 - lodash-es: - specifier: ^4.17.21 - version: 4.17.21 + specifier: ^23.11.2 + version: 23.11.2 react: specifier: ^18.2.0 version: 18.2.0 @@ -505,12 +458,15 @@ importers: specifier: ^18.2.0 version: 18.2.0(react@18.2.0) react-i18next: - specifier: ^14.0.5 - version: 14.0.5(i18next@23.10.0)(react-dom@18.2.0)(react@18.2.0) + specifier: ^14.1.1 + version: 14.1.1(i18next@23.11.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react-rnd: + specifier: ^10.4.10 + version: 10.4.10(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react-use: + specifier: ^17.5.0 + version: 17.5.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) devDependencies: - '@types/lodash-es': - specifier: ^4.17.12 - version: 4.17.12 tsconfig: specifier: workspace:* version: link:../../devConfigs/tsconfig @@ -519,7 +475,7 @@ importers: dependencies: '@emotion/react': specifier: ^11.11.4 - version: 11.11.4(@types/react@18.2.62)(react@18.2.0) + version: 11.11.4(@types/react@18.2.79)(react@18.2.0) '@illa-public/public-types': specifier: workspace:* version: link:../../others/publicTypes @@ -527,11 +483,11 @@ importers: specifier: workspace:* version: link:../../utils/public '@types/react': - specifier: ^18.2.62 - version: 18.2.62 + specifier: ^18.2.79 + version: 18.2.79 '@types/react-dom': - specifier: ^18.2.19 - version: 18.2.19 + specifier: ^18.2.25 + version: 18.2.25 react: specifier: ^18.2.0 version: 18.2.0 @@ -547,16 +503,16 @@ importers: dependencies: '@emotion/react': specifier: ^11.11.4 - version: 11.11.4(@types/react@18.2.62)(react@18.2.0) + version: 11.11.4(@types/react@18.2.79)(react@18.2.0) '@illa-public/color-scheme': specifier: workspace:* version: link:../../utils/colorScheme '@types/react': - specifier: ^18.2.62 - version: 18.2.62 + specifier: ^18.2.79 + version: 18.2.79 '@types/react-dom': - specifier: ^18.2.19 - version: 18.2.19 + specifier: ^18.2.25 + version: 18.2.25 react: specifier: ^18.2.0 version: 18.2.0 @@ -571,11 +527,11 @@ importers: packages/components/InviteModal: dependencies: '@ant-design/icons': - specifier: ^5.3.1 - version: 5.3.1(react-dom@18.2.0)(react@18.2.0) + specifier: 5.3.6 + version: 5.3.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@emotion/react': specifier: ^11.11.4 - version: 11.11.4(@types/react@18.2.62)(react@18.2.0) + version: 11.11.4(@types/react@18.2.79)(react@18.2.0) '@illa-public/auth-shown': specifier: workspace:* version: link:../AuthShown @@ -616,20 +572,20 @@ importers: specifier: workspace:* version: link:../../utils/public '@types/react': - specifier: ^18.2.62 - version: 18.2.62 + specifier: ^18.2.79 + version: 18.2.79 '@types/react-dom': - specifier: ^18.2.19 - version: 18.2.19 + specifier: ^18.2.25 + version: 18.2.25 antd: - specifier: ^5.15.2 - version: 5.15.2(react-dom@18.2.0)(react@18.2.0) + specifier: ^5.16.4 + version: 5.16.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) copy-to-clipboard: specifier: ^3.3.2 version: 3.3.3 i18next: - specifier: ^23.10.0 - version: 23.10.0 + specifier: ^23.11.2 + version: 23.11.2 lodash-es: specifier: ^4.17.21 version: 4.17.21 @@ -640,8 +596,8 @@ importers: specifier: ^18.2.0 version: 18.2.0(react@18.2.0) react-i18next: - specifier: ^14.0.5 - version: 14.0.5(i18next@23.10.0)(react-dom@18.2.0)(react@18.2.0) + specifier: ^14.1.1 + version: 14.1.1(i18next@23.11.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react-share: specifier: ^4.4.1 version: 4.4.1(react@18.2.0) @@ -657,16 +613,16 @@ importers: dependencies: '@emotion/react': specifier: ^11.11.4 - version: 11.11.4(@types/react@18.2.62)(react@18.2.0) + version: 11.11.4(@types/react@18.2.79)(react@18.2.0) '@illa-public/utils': specifier: workspace:* version: link:../../utils/public '@types/react': - specifier: ^18.2.62 - version: 18.2.62 + specifier: ^18.2.79 + version: 18.2.79 '@types/react-dom': - specifier: ^18.2.19 - version: 18.2.19 + specifier: ^18.2.25 + version: 18.2.25 react: specifier: ^18.2.0 version: 18.2.0 @@ -675,7 +631,7 @@ importers: version: 18.2.0(react@18.2.0) react-use: specifier: ^17.4.0 - version: 17.5.0(react-dom@18.2.0)(react@18.2.0) + version: 17.5.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) devDependencies: tsconfig: specifier: workspace:* @@ -684,11 +640,11 @@ importers: packages/components/MarketShare: dependencies: '@ant-design/icons': - specifier: ^5.3.1 - version: 5.3.1(react-dom@18.2.0)(react@18.2.0) + specifier: 5.3.6 + version: 5.3.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@emotion/react': specifier: ^11.11.4 - version: 11.11.4(@types/react@18.2.62)(react@18.2.0) + version: 11.11.4(@types/react@18.2.79)(react@18.2.0) '@illa-public/color-scheme': specifier: workspace:* version: link:../../utils/colorScheme @@ -702,17 +658,17 @@ importers: specifier: workspace:* version: link:../../utils/public '@types/react': - specifier: ^18.2.62 - version: 18.2.62 + specifier: ^18.2.79 + version: 18.2.79 '@types/react-dom': - specifier: ^18.2.19 - version: 18.2.19 + specifier: ^18.2.25 + version: 18.2.25 antd: - specifier: ^5.15.2 - version: 5.15.2(react-dom@18.2.0)(react@18.2.0) + specifier: ^5.16.4 + version: 5.16.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) i18next: - specifier: ^23.10.0 - version: 23.10.0 + specifier: ^23.11.2 + version: 23.11.2 react: specifier: ^18.2.0 version: 18.2.0 @@ -720,8 +676,8 @@ importers: specifier: ^18.2.0 version: 18.2.0(react@18.2.0) react-i18next: - specifier: ^14.0.5 - version: 14.0.5(i18next@23.10.0)(react-dom@18.2.0)(react@18.2.0) + specifier: ^14.1.1 + version: 14.1.1(i18next@23.11.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react-share: specifier: ^4.4.1 version: 4.4.1(react@18.2.0) @@ -730,14 +686,99 @@ importers: specifier: workspace:* version: link:../../devConfigs/tsconfig + packages/components/NewCodeEditor: + dependencies: + '@codemirror/autocomplete': + specifier: ^6.16.0 + version: 6.16.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.26.3)(@lezer/common@1.2.1) + '@codemirror/commands': + specifier: ^6.5.0 + version: 6.5.0 + '@codemirror/lang-javascript': + specifier: ^6.2.2 + version: 6.2.2 + '@codemirror/lang-json': + specifier: ^6.0.1 + version: 6.0.1 + '@codemirror/lang-markdown': + specifier: ^6.2.5 + version: 6.2.5 + '@codemirror/lang-sql': + specifier: ^6.6.3 + version: 6.6.3(@codemirror/view@6.26.3) + '@codemirror/language': + specifier: ^6.10.1 + version: 6.10.1 + '@codemirror/state': + specifier: ^6.4.1 + version: 6.4.1 + '@codemirror/view': + specifier: ^6.26.3 + version: 6.26.3 + '@emotion/react': + specifier: ^11.11.4 + version: 11.11.4(@types/react@18.2.79)(react@18.2.0) + '@illa-public/color-scheme': + specifier: workspace:* + version: link:../../utils/colorScheme + '@illa-public/draggable-modal': + specifier: workspace:* + version: link:../DraggableModal + '@illa-public/dynamic-string': + specifier: workspace:^ + version: link:../../utils/dynamicStringUtils + '@illa-public/icon': + specifier: workspace:* + version: link:../Icon + '@illa-public/utils': + specifier: workspace:* + version: link:../../utils/public + '@lezer/common': + specifier: ^1.2.1 + version: 1.2.1 + '@lezer/highlight': + specifier: ^1.2.0 + version: 1.2.0 + '@lezer/markdown': + specifier: ^1.3.0 + version: 1.3.0 + '@types/react': + specifier: ^18.2.79 + version: 18.2.79 + '@types/react-dom': + specifier: ^18.2.25 + version: 18.2.25 + i18next: + specifier: ^23.11.2 + version: 23.11.2 + lodash-es: + specifier: ^4.17.21 + version: 4.17.21 + react: + specifier: ^18.2.0 + version: 18.2.0 + react-dom: + specifier: ^18.2.0 + version: 18.2.0(react@18.2.0) + react-i18next: + specifier: ^14.1.1 + version: 14.1.1(i18next@23.11.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + devDependencies: + '@types/lodash-es': + specifier: ^4.17.12 + version: 4.17.12 + tsconfig: + specifier: workspace:* + version: link:../../devConfigs/tsconfig + packages/components/RecordEditor: dependencies: '@ant-design/icons': - specifier: ^5.3.1 - version: 5.3.1(react-dom@18.2.0)(react@18.2.0) + specifier: 5.3.6 + version: 5.3.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@emotion/react': specifier: ^11.11.4 - version: 11.11.4(@types/react@18.2.62)(react@18.2.0) + version: 11.11.4(@types/react@18.2.79)(react@18.2.0) '@illa-public/color-scheme': specifier: workspace:* version: link:../../utils/colorScheme @@ -748,17 +789,17 @@ importers: specifier: workspace:* version: link:../../utils/public '@types/react': - specifier: ^18.2.62 - version: 18.2.62 + specifier: ^18.2.79 + version: 18.2.79 '@types/react-dom': - specifier: ^18.2.19 - version: 18.2.19 + specifier: ^18.2.25 + version: 18.2.25 antd: - specifier: ^5.15.2 - version: 5.15.2(react-dom@18.2.0)(react@18.2.0) + specifier: ^5.16.4 + version: 5.16.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) i18next: - specifier: ^23.10.0 - version: 23.10.0 + specifier: ^23.11.2 + version: 23.11.2 react: specifier: ^18.2.0 version: 18.2.0 @@ -766,8 +807,8 @@ importers: specifier: ^18.2.0 version: 18.2.0(react@18.2.0) react-i18next: - specifier: ^14.0.5 - version: 14.0.5(i18next@23.10.0)(react-dom@18.2.0)(react@18.2.0) + specifier: ^14.1.1 + version: 14.1.1(i18next@23.11.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) devDependencies: tsconfig: specifier: workspace:* @@ -776,11 +817,11 @@ importers: packages/components/RoleSelector: dependencies: '@ant-design/icons': - specifier: ^5.3.1 - version: 5.3.1(react-dom@18.2.0)(react@18.2.0) + specifier: 5.3.6 + version: 5.3.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@emotion/react': specifier: ^11.11.4 - version: 11.11.4(@types/react@18.2.62)(react@18.2.0) + version: 11.11.4(@types/react@18.2.79)(react@18.2.0) '@illa-public/color-scheme': specifier: workspace:* version: link:../../utils/colorScheme @@ -794,17 +835,17 @@ importers: specifier: workspace:* version: link:../../utils/UserRoleUtils '@types/react': - specifier: ^18.2.62 - version: 18.2.62 + specifier: ^18.2.79 + version: 18.2.79 '@types/react-dom': - specifier: ^18.2.19 - version: 18.2.19 + specifier: ^18.2.25 + version: 18.2.25 antd: - specifier: ^5.15.2 - version: 5.15.2(react-dom@18.2.0)(react@18.2.0) + specifier: ^5.16.4 + version: 5.16.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) i18next: - specifier: ^23.10.0 - version: 23.10.0 + specifier: ^23.11.2 + version: 23.11.2 react: specifier: ^18.2.0 version: 18.2.0 @@ -812,8 +853,8 @@ importers: specifier: ^18.2.0 version: 18.2.0(react@18.2.0) react-i18next: - specifier: ^14.0.5 - version: 14.0.5(i18next@23.10.0)(react-dom@18.2.0)(react@18.2.0) + specifier: ^14.1.1 + version: 14.1.1(i18next@23.11.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) devDependencies: tsconfig: specifier: workspace:* @@ -823,7 +864,7 @@ importers: dependencies: '@emotion/react': specifier: ^11.11.4 - version: 11.11.4(@types/react@18.2.62)(react@18.2.0) + version: 11.11.4(@types/react@18.2.79)(react@18.2.0) '@illa-public/color-scheme': specifier: workspace:* version: link:../../utils/colorScheme @@ -837,17 +878,17 @@ importers: specifier: workspace:* version: link:../../utils/UserRoleUtils '@types/react': - specifier: ^18.2.62 - version: 18.2.62 + specifier: ^18.2.79 + version: 18.2.79 '@types/react-dom': - specifier: ^18.2.19 - version: 18.2.19 + specifier: ^18.2.25 + version: 18.2.25 antd: - specifier: ^5.15.2 - version: 5.15.2(react-dom@18.2.0)(react@18.2.0) + specifier: ^5.16.4 + version: 5.16.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) i18next: - specifier: ^23.10.0 - version: 23.10.0 + specifier: ^23.11.2 + version: 23.11.2 react: specifier: ^18.2.0 version: 18.2.0 @@ -856,13 +897,13 @@ importers: version: 18.2.0(react@18.2.0) react-helmet-async: specifier: ^2.0.4 - version: 2.0.4(react-dom@18.2.0)(react@18.2.0) + version: 2.0.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react-i18next: - specifier: ^14.0.5 - version: 14.0.5(i18next@23.10.0)(react-dom@18.2.0)(react@18.2.0) + specifier: ^14.1.1 + version: 14.1.1(i18next@23.11.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react-router-dom: specifier: ^6.4.4 - version: 6.22.2(react-dom@18.2.0)(react@18.2.0) + version: 6.23.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) devDependencies: tsconfig: specifier: workspace:* @@ -871,11 +912,11 @@ importers: packages/components/UpgradeModal: dependencies: '@ant-design/icons': - specifier: ^5.3.1 - version: 5.3.1(react-dom@18.2.0)(react@18.2.0) + specifier: 5.3.6 + version: 5.3.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@emotion/react': specifier: ^11.11.4 - version: 11.11.4(@types/react@18.2.62)(react@18.2.0) + version: 11.11.4(@types/react@18.2.79)(react@18.2.0) '@illa-public/color-scheme': specifier: workspace:* version: link:../../utils/colorScheme @@ -901,17 +942,17 @@ importers: specifier: workspace:* version: link:../../utils/public '@types/react': - specifier: ^18.2.62 - version: 18.2.62 + specifier: ^18.2.79 + version: 18.2.79 '@types/react-dom': - specifier: ^18.2.19 - version: 18.2.19 + specifier: ^18.2.25 + version: 18.2.25 antd: - specifier: ^5.15.2 - version: 5.15.2(react-dom@18.2.0)(react@18.2.0) + specifier: ^5.16.4 + version: 5.16.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) i18next: - specifier: ^23.10.0 - version: 23.10.0 + specifier: ^23.11.2 + version: 23.11.2 react: specifier: ^18.2.0 version: 18.2.0 @@ -919,17 +960,17 @@ importers: specifier: ^18.2.0 version: 18.2.0(react@18.2.0) react-i18next: - specifier: ^14.0.5 - version: 14.0.5(i18next@23.10.0)(react-dom@18.2.0)(react@18.2.0) + specifier: ^14.1.1 + version: 14.1.1(i18next@23.11.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react-redux: specifier: ^9.0.4 - version: 9.1.0(@types/react@18.2.62)(react@18.2.0)(redux@5.0.1) + version: 9.1.1(@types/react@18.2.79)(react@18.2.0)(redux@5.0.1) react-router-dom: specifier: ^6.14.0 - version: 6.22.2(react-dom@18.2.0)(react@18.2.0) + version: 6.23.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react-use: specifier: ^17.4.0 - version: 17.5.0(react-dom@18.2.0)(react@18.2.0) + version: 17.5.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) uuid: specifier: ^8.3.2 version: 8.3.2 @@ -957,13 +998,13 @@ importers: version: link:../../utils/public '@reduxjs/toolkit': specifier: ^2.2.1 - version: 2.2.1(react-redux@9.1.0)(react@18.2.0) + version: 2.2.3(react-redux@9.1.1(@types/react@18.2.79)(react@18.2.0)(redux@5.0.1))(react@18.2.0) '@types/react': - specifier: ^18.2.62 - version: 18.2.62 + specifier: ^18.2.79 + version: 18.2.79 '@types/react-dom': - specifier: ^18.2.19 - version: 18.2.19 + specifier: ^18.2.25 + version: 18.2.25 react: specifier: ^18.2.0 version: 18.2.0 @@ -972,10 +1013,10 @@ importers: version: 18.2.0(react@18.2.0) react-redux: specifier: ^9.0.4 - version: 9.1.0(@types/react@18.2.62)(react@18.2.0)(redux@5.0.1) + version: 9.1.1(@types/react@18.2.79)(react@18.2.0)(redux@5.0.1) react-router-dom: specifier: ^6.4.4 - version: 6.22.2(react-dom@18.2.0)(react@18.2.0) + version: 6.23.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) devDependencies: tsconfig: specifier: workspace:* @@ -984,11 +1025,11 @@ importers: packages/components/newInviteModal: dependencies: '@ant-design/icons': - specifier: ^5.3.1 - version: 5.3.1(react-dom@18.2.0)(react@18.2.0) + specifier: 5.3.6 + version: 5.3.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@emotion/react': specifier: ^11.11.4 - version: 11.11.4(@types/react@18.2.62)(react@18.2.0) + version: 11.11.4(@types/react@18.2.79)(react@18.2.0) '@illa-public/avatar': specifier: workspace:* version: link:../Avatar @@ -1023,17 +1064,17 @@ importers: specifier: workspace:* version: link:../../utils/public '@types/react': - specifier: ^18.2.62 - version: 18.2.62 + specifier: ^18.2.79 + version: 18.2.79 '@types/react-dom': - specifier: ^18.2.19 - version: 18.2.19 + specifier: ^18.2.25 + version: 18.2.25 antd: - specifier: ^5.15.2 - version: 5.15.2(react-dom@18.2.0)(react@18.2.0) + specifier: ^5.16.4 + version: 5.16.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) i18next: - specifier: ^23.10.0 - version: 23.10.0 + specifier: ^23.11.2 + version: 23.11.2 react: specifier: ^18.2.0 version: 18.2.0 @@ -1041,8 +1082,8 @@ importers: specifier: ^18.2.0 version: 18.2.0(react@18.2.0) react-i18next: - specifier: ^14.0.5 - version: 14.0.5(i18next@23.10.0)(react-dom@18.2.0)(react@18.2.0) + specifier: ^14.1.1 + version: 14.1.1(i18next@23.11.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) devDependencies: tsconfig: specifier: workspace:* @@ -1052,10 +1093,10 @@ importers: dependencies: '@typescript-eslint/eslint-plugin': specifier: ^6.12.0 - version: 6.17.0(@typescript-eslint/parser@6.17.0)(eslint@8.57.0)(typescript@5.3.3) + version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': specifier: ^6.12.0 - version: 6.17.0(eslint@8.57.0)(typescript@5.3.3) + version: 6.21.0(eslint@8.57.0)(typescript@5.4.5) eslint-config-prettier: specifier: ^9.0.0 version: 9.1.0(eslint@8.57.0) @@ -1064,25 +1105,25 @@ importers: version: 1.1.7 eslint-import-resolver-typescript: specifier: ^3.6.1 - version: 3.6.1(@typescript-eslint/parser@6.17.0)(eslint-plugin-import@2.29.0)(eslint@8.57.0) + version: 3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0) eslint-plugin-import: specifier: ^2.29.0 - version: 2.29.0(@typescript-eslint/parser@6.17.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + version: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) eslint-plugin-jsx-a11y: specifier: ^6.8.0 version: 6.8.0(eslint@8.57.0) eslint-plugin-react: specifier: ^7.33.2 - version: 7.33.2(eslint@8.57.0) + version: 7.34.1(eslint@8.57.0) eslint-plugin-react-hooks: specifier: ^4.6.0 version: 4.6.0(eslint@8.57.0) eslint-plugin-react-refresh: specifier: ^0.4.5 - version: 0.4.5(eslint@8.57.0) + version: 0.4.6(eslint@8.57.0) eslint-plugin-unused-imports: specifier: ^3.0.0 - version: 3.1.0(@typescript-eslint/eslint-plugin@6.17.0)(eslint@8.57.0) + version: 3.1.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0) packages/devConfigs/tsconfig: {} @@ -1115,7 +1156,7 @@ importers: version: link:../public axios: specifier: ^1.6.2 - version: 1.6.7 + version: 1.6.8 devDependencies: tsconfig: specifier: workspace:* @@ -1201,7 +1242,7 @@ importers: dependencies: '@emotion/react': specifier: ^11.11.4 - version: 11.11.4(@types/react@18.2.62)(react@18.2.0) + version: 11.11.4(@types/react@18.2.79)(react@18.2.0) '@illa-public/illa-storage': specifier: workspace:* version: link:../ILLAStorage @@ -1209,11 +1250,11 @@ importers: specifier: workspace:* version: link:../../others/publicTypes '@types/react': - specifier: ^18.2.62 - version: 18.2.62 + specifier: ^18.2.79 + version: 18.2.79 '@types/react-dom': - specifier: ^18.2.19 - version: 18.2.19 + specifier: ^18.2.25 + version: 18.2.25 chroma-js: specifier: ^2.4.2 version: 2.4.2 @@ -1227,8 +1268,8 @@ importers: specifier: ^1.3.1 version: 1.3.1 i18next: - specifier: ^23.10.0 - version: 23.10.0 + specifier: ^23.11.2 + version: 23.11.2 react: specifier: ^18.2.0 version: 18.2.0 @@ -1236,11 +1277,11 @@ importers: specifier: ^18.2.0 version: 18.2.0(react@18.2.0) react-i18next: - specifier: ^14.0.5 - version: 14.0.5(i18next@23.10.0)(react-dom@18.2.0)(react@18.2.0) + specifier: ^14.1.1 + version: 14.1.1(i18next@23.11.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react-use: specifier: ^17.4.0 - version: 17.5.0(react-dom@18.2.0)(react@18.2.0) + version: 17.5.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) devDependencies: '@types/chroma-js': specifier: ^2.1.4 @@ -1261,14 +1302,14 @@ importers: specifier: workspace:* version: link:../public '@types/react': - specifier: ^18.2.62 - version: 18.2.62 + specifier: ^18.2.79 + version: 18.2.79 '@types/react-dom': - specifier: ^18.2.19 - version: 18.2.19 + specifier: ^18.2.25 + version: 18.2.25 posthog-js: specifier: ^1.116.6 - version: 1.116.6 + version: 1.129.0 react: specifier: ^18.2.0 version: 18.2.0 @@ -1293,8 +1334,8 @@ packages: '@ant-design/colors@7.0.2': resolution: {integrity: sha512-7KJkhTiPiLHSu+LmMJnehfJ6242OCxSlR3xHVBecYxnMW8MS/878NXct1GqYARyL59fyeFdKRxXTfvR9SnDgJg==} - '@ant-design/cssinjs@1.18.4': - resolution: {integrity: sha512-IrUAOj5TYuMG556C9gdbFuOrigyhzhU5ZYpWb3gYTxAwymVqRbvLzFCZg6OsjLBR6GhzcxYF3AhxKmjB+rA2xA==} + '@ant-design/cssinjs@1.20.0': + resolution: {integrity: sha512-uG3iWzJxgNkADdZmc6W0Ci3iQAUOvLMcM8SnnmWq3r6JeocACft4ChnY/YWvI2Y+rG/68QBla/O+udke1yH3vg==} peerDependencies: react: ^18.2.0 react-dom: ^18.2.0 @@ -1302,20 +1343,20 @@ packages: '@ant-design/icons-svg@4.4.2': resolution: {integrity: sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==} - '@ant-design/icons@5.3.1': - resolution: {integrity: sha512-85zROTJCCApQn0Ee6L9561+Vd7yVKtSWNm2TpmOsYMrumchbzaRK83x1WWHv2VG+Y1ZAaKkDwcnnSPS/eSwNHA==} + '@ant-design/icons@5.3.6': + resolution: {integrity: sha512-JeWsgNjvkTTC73YDPgWOgdScRku/iHN9JU0qk39OSEmJSCiRghQMLlxGTCY5ovbRRoXjxHXnUKgQEgBDnQfKmA==} engines: {node: '>=8'} peerDependencies: react: ^18.2.0 react-dom: ^18.2.0 - '@ant-design/react-slick@1.0.2': - resolution: {integrity: sha512-Wj8onxL/T8KQLFFiCA4t8eIRGpRR+UPgOdac2sYzonv+i0n3kXHmvHLLiOYL655DQx2Umii9Y9nNgL7ssu5haQ==} + '@ant-design/react-slick@1.1.2': + resolution: {integrity: sha512-EzlvzE6xQUBrZuuhSAFTdsr4P2bBBHGZwKFemEfq8gIGyIQCxalYfZW/T2ORbtQx5rU69o+WycP3exY/7T1hGA==} peerDependencies: react: ^18.2.0 - '@atlaskit/ds-lib@2.2.5': - resolution: {integrity: sha512-fE7uEuB4uAJvNGncY5k+ofUYmJmVcS43MDChvhz1qG2dweYx4hktFVOowiDjt7+RtLQOXuvs7WTn3wIy25er3w==} + '@atlaskit/ds-lib@2.3.0': + resolution: {integrity: sha512-ULU9ZTVBvlQ9QUwKXhCju3/fUWT79zdX5omNYOIL3nUrAtBCPX7inNpIJ/D4Lx35O6XSWJRKuNFL5tR75FEYKQ==} peerDependencies: react: ^18.2.0 @@ -1325,45 +1366,37 @@ packages: '@atlaskit/pragmatic-drag-and-drop-hitbox@1.0.3': resolution: {integrity: sha512-/Sbu/HqN2VGLYBhnsG7SbRNg98XKkbF6L7XDdBi+izRybfaK1FeMfodPpm/xnBHPJzwYMdkE0qtLyv6afhgMUA==} - '@atlaskit/pragmatic-drag-and-drop-react-drop-indicator@1.1.0': - resolution: {integrity: sha512-h6TClbK1axZflyQL17mDZO44psPyk3i7P7xn/lSzPfMEXdUuGHPsGBr5jH0QyxJ+flHA9GlfNDqggJK3L/HkFg==} + '@atlaskit/pragmatic-drag-and-drop-react-drop-indicator@1.1.1': + resolution: {integrity: sha512-BFoRoMmx4aJGc/7KwTFYwgakf98zzRwlUkUgj2l7qUL4t9a4CPBqC232ZgNKF8zU2Rl0pOH+4MKN0/1v7cxfrA==} peerDependencies: react: ^18.2.0 '@atlaskit/pragmatic-drag-and-drop@1.1.3': resolution: {integrity: sha512-lx6ZMPSU8zPhUfAkdKajNAFWDDIqdtM8eQzCsqCRalXWumpclcvqeN8VCLkmclcQDEUhV8c2utKbcuhm7hvRIw==} - '@atlaskit/tokens@1.43.0': - resolution: {integrity: sha512-3rRxGRnJGQBVKGqNqy+Zuad3xuDZ7uD+aFGRcU2OpLuIpiFLX95agDZ9w0HGzNiDw9eWi2f1j8Uzq06AyaRqTw==} + '@atlaskit/tokens@1.43.1': + resolution: {integrity: sha512-Q8TWv4xyOjqrxU15cdD7aeoah1iGriVVLGqjLCBBEfgk1yuQg60FB/J5T+vfQfuAQ8QItL76S2kfSddvFZSNOQ==} peerDependencies: react: ^18.2.0 - '@babel/code-frame@7.22.13': - resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} - engines: {node: '>=6.9.0'} - - '@babel/code-frame@7.23.5': - resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.23.5': - resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} + '@babel/code-frame@7.24.2': + resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} engines: {node: '>=6.9.0'} '@babel/compat-data@7.24.4': resolution: {integrity: sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==} engines: {node: '>=6.9.0'} - '@babel/core@7.24.0': - resolution: {integrity: sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==} + '@babel/core@7.24.4': + resolution: {integrity: sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==} engines: {node: '>=6.9.0'} '@babel/generator@7.17.7': resolution: {integrity: sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==} engines: {node: '>=6.9.0'} - '@babel/generator@7.23.6': - resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} + '@babel/generator@7.24.4': + resolution: {integrity: sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==} engines: {node: '>=6.9.0'} '@babel/helper-annotate-as-pure@7.22.5': @@ -1390,8 +1423,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-define-polyfill-provider@0.6.1': - resolution: {integrity: sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA==} + '@babel/helper-define-polyfill-provider@0.6.2': + resolution: {integrity: sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -1411,10 +1444,6 @@ packages: resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.22.15': - resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} - engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.24.3': resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==} engines: {node: '>=6.9.0'} @@ -1457,12 +1486,8 @@ packages: resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.22.5': - resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.23.4': - resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + '@babel/helper-string-parser@7.24.1': + resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} engines: {node: '>=6.9.0'} '@babel/helper-validator-identifier@7.22.20': @@ -1477,20 +1502,16 @@ packages: resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.24.0': - resolution: {integrity: sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==} - engines: {node: '>=6.9.0'} - - '@babel/highlight@7.22.20': - resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==} + '@babel/helpers@7.24.4': + resolution: {integrity: sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==} engines: {node: '>=6.9.0'} - '@babel/highlight@7.23.4': - resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + '@babel/highlight@7.24.2': + resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==} engines: {node: '>=6.9.0'} - '@babel/parser@7.24.0': - resolution: {integrity: sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==} + '@babel/parser@7.24.4': + resolution: {integrity: sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==} engines: {node: '>=6.0.0'} hasBin: true @@ -1922,12 +1943,8 @@ packages: '@babel/regjsgen@0.8.0': resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} - '@babel/runtime@7.23.2': - resolution: {integrity: sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==} - engines: {node: '>=6.9.0'} - - '@babel/runtime@7.24.0': - resolution: {integrity: sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==} + '@babel/runtime@7.24.4': + resolution: {integrity: sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==} engines: {node: '>=6.9.0'} '@babel/template@7.24.0': @@ -1938,38 +1955,46 @@ packages: resolution: {integrity: sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.24.0': - resolution: {integrity: sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==} + '@babel/traverse@7.24.1': + resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==} engines: {node: '>=6.9.0'} '@babel/types@7.17.0': resolution: {integrity: sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==} engines: {node: '>=6.9.0'} - '@babel/types@7.23.3': - resolution: {integrity: sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==} - engines: {node: '>=6.9.0'} - '@babel/types@7.24.0': resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} engines: {node: '>=6.9.0'} - '@codemirror/autocomplete@6.13.0': - resolution: {integrity: sha512-SuDrho1klTINfbcMPnyro1ZxU9xJtwDMtb62R8TjL/tOl71IoOsvBo1a9x+hDvHhIzkTcJHy2VC+rmpGgYkRSw==} + '@codemirror/autocomplete@6.16.0': + resolution: {integrity: sha512-P/LeCTtZHRTCU4xQsa89vSKWecYv1ZqwzOd5topheGRf+qtacFgBeIMQi3eL8Kt/BUNvxUWkx+5qP2jlGoARrg==} peerDependencies: '@codemirror/language': ^6.0.0 '@codemirror/state': ^6.0.0 '@codemirror/view': ^6.0.0 '@lezer/common': ^1.0.0 - '@codemirror/commands@6.3.3': - resolution: {integrity: sha512-dO4hcF0fGT9tu1Pj1D2PvGvxjeGkbC6RGcZw6Qs74TH+Ed1gw98jmUgd2axWvIZEqTeTuFrg1lEB1KV6cK9h1A==} + '@codemirror/commands@6.5.0': + resolution: {integrity: sha512-rK+sj4fCAN/QfcY9BEzYMgp4wwL/q5aj/VfNSoH1RWPF9XS/dUwBkvlL3hpWgEjOqlpdN1uLC9UkjJ4tmyjJYg==} + + '@codemirror/lang-css@6.2.1': + resolution: {integrity: sha512-/UNWDNV5Viwi/1lpr/dIXJNWiwDxpw13I4pTUAsNxZdg6E0mI2kTQb0P2iHczg1Tu+H4EBgJR+hYhKiHKko7qg==} + + '@codemirror/lang-html@6.4.9': + resolution: {integrity: sha512-aQv37pIMSlueybId/2PVSP6NPnmurFDVmZwzc7jszd2KAF8qd4VBbvNYPXWQq90WIARjsdVkPbw29pszmHws3Q==} '@codemirror/lang-javascript@6.2.2': resolution: {integrity: sha512-VGQfY+FCc285AhWuwjYxQyUQcYurWlxdKYT4bqwr3Twnd5wP5WSeu52t4tvvuWmljT4EmgEgZCqSieokhtY8hg==} - '@codemirror/lang-sql@6.6.1': - resolution: {integrity: sha512-tRHMLymUbL1yY8dzdrGdHVg+nMlfacOU54tjN5+VF45Syw5L3APxsFFhgdWIs4yg7OTt929Z9Ffw5qyV++kbWQ==} + '@codemirror/lang-json@6.0.1': + resolution: {integrity: sha512-+T1flHdgpqDDlJZ2Lkil/rLiRy684WMLc74xUnjJH48GQdfJo/pudlTRreZmKwzP8/tGdKf83wlbAdOCzlJOGQ==} + + '@codemirror/lang-markdown@6.2.5': + resolution: {integrity: sha512-Hgke565YcO4fd9pe2uLYxnMufHO5rQwRr+AAhFq8ABuhkrjyX8R5p5s+hZUTdV60O0dMRjxKhBLxz8pu/MkUVA==} + + '@codemirror/lang-sql@6.6.3': + resolution: {integrity: sha512-fo5i3OD/7TmmqMtKycC4OaqfPsRxk0sKOb35g8cOtyUyyI2hfP2qXkDc7Asb6h7BiJK+MU/DYVPnQm6iNB5ZTw==} '@codemirror/language@6.10.1': resolution: {integrity: sha512-5GrXzrhq6k+gL5fjkAwt90nYDmjlzTIJV8THnxNFtNKWotMIlzzN+CpqxqwXOECnUdOndmSeWntVrVcv5axWRQ==} @@ -1977,22 +2002,19 @@ packages: '@codemirror/lint@6.5.0': resolution: {integrity: sha512-+5YyicIaaAZKU8K43IQi8TBy6mF6giGeWAH7N96Z5LC30Wm5JMjqxOYIE9mxwMG1NbhT2mA3l9hA4uuKUM3E5g==} - '@codemirror/search@6.5.6': - resolution: {integrity: sha512-rpMgcsh7o0GuCDUXKPvww+muLA1pDJaFrpq/CCHtpQJYz8xopu4D1hPcKRoDD0YlF8gZaqTNIRa4VRBWyhyy7Q==} - '@codemirror/state@6.4.1': resolution: {integrity: sha512-QkEyUiLhsJoZkbumGZlswmAhA7CBU02Wrz7zvH4SrcifbsqwlXShVXg65f3v/ts57W3dqyamEriMhij1Z3Zz4A==} - '@codemirror/view@6.25.0': - resolution: {integrity: sha512-XnMGOm6qXB8znzCko0N7k97qZayVdvqpA0JebxA5fHtgBjC/XlCPhH9TK92TahsoCKMPQlaTCUep06Dwj/+GXQ==} + '@codemirror/view@6.26.3': + resolution: {integrity: sha512-gmqxkPALZjkgSxIeeweY/wGQXBfwTUaLs8h7OKtSwfbj9Ct3L11lD+u1sS7XHppxFQoMDiMDp07P9f3I2jWOHw==} - '@commitlint/cli@19.0.3': - resolution: {integrity: sha512-mGhh/aYPib4Vy4h+AGRloMY+CqkmtdeKPV9poMcZeImF5e3knQ5VYaSeAM0mEzps1dbKsHvABwaDpafLUuM96g==} + '@commitlint/cli@19.3.0': + resolution: {integrity: sha512-LgYWOwuDR7BSTQ9OLZ12m7F/qhNY+NpAyPBgo4YNMkACE7lGuUnuQq1yi9hz1KA4+3VqpOYl8H1rY/LYK43v7g==} engines: {node: '>=v18'} hasBin: true - '@commitlint/config-conventional@19.0.3': - resolution: {integrity: sha512-vh0L8XeLaEzTe8VCxSd0gAFvfTK0RFolrzw4o431bIuWJfi/yRCHJlsDwus7wW2eJaFFDR0VFXJyjGyDQhi4vA==} + '@commitlint/config-conventional@19.2.2': + resolution: {integrity: sha512-mLXjsxUVLYEGgzbxbxicGPggDuyWNkf25Ht23owXIH+zV2pv1eJuzLK3t1gDY5Gp6pxdE60jZnWUY5cvgL3ufw==} engines: {node: '>=v18'} '@commitlint/config-validator@19.0.3': @@ -2007,20 +2029,20 @@ packages: resolution: {integrity: sha512-mtsdpY1qyWgAO/iOK0L6gSGeR7GFcdW7tIjcNFxcWkfLDF5qVbPHKuGATFqRMsxcO8OUKNj0+3WOHB7EHm4Jdw==} engines: {node: '>=v18'} - '@commitlint/format@19.0.3': - resolution: {integrity: sha512-QjjyGyoiVWzx1f5xOteKHNLFyhyweVifMgopozSgx1fGNrGV8+wp7k6n1t6StHdJ6maQJ+UUtO2TcEiBFRyR6Q==} + '@commitlint/format@19.3.0': + resolution: {integrity: sha512-luguk5/aF68HiF4H23ACAfk8qS8AHxl4LLN5oxPc24H+2+JRPsNr1OS3Gaea0CrH7PKhArBMKBz5RX9sA5NtTg==} engines: {node: '>=v18'} - '@commitlint/is-ignored@19.0.3': - resolution: {integrity: sha512-MqDrxJaRSVSzCbPsV6iOKG/Lt52Y+PVwFVexqImmYYFhe51iVJjK2hRhOG2jUAGiUHk4jpdFr0cZPzcBkSzXDQ==} + '@commitlint/is-ignored@19.2.2': + resolution: {integrity: sha512-eNX54oXMVxncORywF4ZPFtJoBm3Tvp111tg1xf4zWXGfhBPKpfKG6R+G3G4v5CPlRROXpAOpQ3HMhA9n1Tck1g==} engines: {node: '>=v18'} - '@commitlint/lint@19.0.3': - resolution: {integrity: sha512-uHPyRqIn57iIplYa5xBr6oNu5aPXKGC4WLeuHfqQHclwIqbJ33g3yA5fIA+/NYnp5ZM2EFiujqHFaVUYj6HlKA==} + '@commitlint/lint@19.2.2': + resolution: {integrity: sha512-xrzMmz4JqwGyKQKTpFzlN0dx0TAiT7Ran1fqEBgEmEj+PU98crOFtysJgY+QdeSagx6EDRigQIXJVnfrI0ratA==} engines: {node: '>=v18'} - '@commitlint/load@19.0.3': - resolution: {integrity: sha512-18Tk/ZcDFRKIoKfEcl7kC+bYkEQ055iyKmGsYDoYWpKf6FUvBrP9bIWapuy/MB+kYiltmP9ITiUx6UXtqC9IRw==} + '@commitlint/load@19.2.0': + resolution: {integrity: sha512-XvxxLJTKqZojCxaBQ7u92qQLFMMZc4+p9qrIq/9kJDy8DOrEa7P1yx7Tjdc2u2JxIalqT4KOGraVgCE7eCYJyQ==} engines: {node: '>=v18'} '@commitlint/message@19.0.0': @@ -2031,12 +2053,12 @@ packages: resolution: {integrity: sha512-Il+tNyOb8VDxN3P6XoBBwWJtKKGzHlitEuXA5BP6ir/3loWlsSqDr5aecl6hZcC/spjq4pHqNh0qPlfeWu38QA==} engines: {node: '>=v18'} - '@commitlint/read@19.0.3': - resolution: {integrity: sha512-b5AflTyAXkUx5qKw4TkjjcOccXZHql3JqMi522knTQktq2AubKXFz60Sws+K4FsefwPws6fGz9mqiI/NvsvxFA==} + '@commitlint/read@19.2.1': + resolution: {integrity: sha512-qETc4+PL0EUv7Q36lJbPG+NJiBOGg7SSC7B5BsPWOmei+Dyif80ErfWQ0qXoW9oCh7GTpTNRoaVhiI8RbhuaNw==} engines: {node: '>=v18'} - '@commitlint/resolve-extends@19.0.3': - resolution: {integrity: sha512-18BKmta8OC8+Ub+Q3QGM9l27VjQaXobloVXOrMvu8CpEwJYv62vC/t7Ka5kJnsW0tU9q1eMqJFZ/nN9T/cOaIA==} + '@commitlint/resolve-extends@19.1.0': + resolution: {integrity: sha512-z2riI+8G3CET5CPgXJPlzftH+RiWYLMYv4C9tSLdLXdr6pBNimSKukYP9MS27ejmscqCTVA4almdLh0ODD2KYg==} engines: {node: '>=v18'} '@commitlint/rules@19.0.3': @@ -2071,15 +2093,9 @@ packages: '@emotion/hash@0.9.1': resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==} - '@emotion/is-prop-valid@0.8.8': - resolution: {integrity: sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==} - '@emotion/is-prop-valid@1.2.2': resolution: {integrity: sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==} - '@emotion/memoize@0.7.4': - resolution: {integrity: sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==} - '@emotion/memoize@0.8.1': resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} @@ -2092,14 +2108,14 @@ packages: '@types/react': optional: true - '@emotion/serialize@1.1.3': - resolution: {integrity: sha512-iD4D6QVZFDhcbH0RAG1uVu1CwVLMWUkCvAqqlewO/rxf8+87yIBAlt4+AxMiiKPLs5hFc0owNk/sLLAOROw3cA==} + '@emotion/serialize@1.1.4': + resolution: {integrity: sha512-RIN04MBT8g+FnDwgvIUi8czvr1LU1alUMI05LekWB5DGyTm8cCBMCRpq3GqaiyEDRptEXOyXnvZ58GZYu4kBxQ==} '@emotion/sheet@1.2.2': resolution: {integrity: sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==} - '@emotion/styled@11.11.0': - resolution: {integrity: sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==} + '@emotion/styled@11.11.5': + resolution: {integrity: sha512-/ZjjnaNKvuMPxcIiUkf/9SHoG4Q196DRl1w82hQ3WCsjo1IUR8uaGWrC6a87CrYAW0Kb/pK7hk8BnLgLRi9KoQ==} peerDependencies: '@emotion/react': ^11.11.4 '@types/react': '*' @@ -2125,276 +2141,138 @@ packages: '@emotion/weak-memoize@0.3.1': resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==} - '@esbuild/aix-ppc64@0.19.12': - resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - '@esbuild/aix-ppc64@0.20.2': resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} engines: {node: '>=12'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.19.12': - resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm64@0.20.2': resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} engines: {node: '>=12'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.19.12': - resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - '@esbuild/android-arm@0.20.2': resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} engines: {node: '>=12'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.19.12': - resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - '@esbuild/android-x64@0.20.2': resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} engines: {node: '>=12'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.19.12': - resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-arm64@0.20.2': resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.19.12': - resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - '@esbuild/darwin-x64@0.20.2': resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} engines: {node: '>=12'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.19.12': - resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-arm64@0.20.2': resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.19.12': - resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - '@esbuild/freebsd-x64@0.20.2': resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.19.12': - resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm64@0.20.2': resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} engines: {node: '>=12'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.19.12': - resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - '@esbuild/linux-arm@0.20.2': resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} engines: {node: '>=12'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.19.12': - resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-ia32@0.20.2': resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} engines: {node: '>=12'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.19.12': - resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-loong64@0.20.2': resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} engines: {node: '>=12'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.19.12': - resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-mips64el@0.20.2': resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.19.12': - resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-ppc64@0.20.2': resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.19.12': - resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-riscv64@0.20.2': resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.19.12': - resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-s390x@0.20.2': resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} engines: {node: '>=12'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.19.12': - resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - '@esbuild/linux-x64@0.20.2': resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} engines: {node: '>=12'} cpu: [x64] os: [linux] - '@esbuild/netbsd-x64@0.19.12': - resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - '@esbuild/netbsd-x64@0.20.2': resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-x64@0.19.12': - resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - '@esbuild/openbsd-x64@0.20.2': resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.19.12': - resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - '@esbuild/sunos-x64@0.20.2': resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} engines: {node: '>=12'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.19.12': - resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-arm64@0.20.2': resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} engines: {node: '>=12'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.19.12': - resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-ia32@0.20.2': resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} engines: {node: '>=12'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.19.12': - resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - '@esbuild/win32-x64@0.20.2': resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} engines: {node: '>=12'} @@ -2452,8 +2330,8 @@ packages: resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - '@humanwhocodes/object-schema@2.0.2': - resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} + '@humanwhocodes/object-schema@2.0.3': + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} '@jridgewell/gen-mapping@0.3.5': resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} @@ -2482,36 +2360,48 @@ packages: '@lezer/common@1.2.1': resolution: {integrity: sha512-yemX0ZD2xS/73llMZIK6KplkjIjf2EvAHcinDi/TfJ9hS25G0388+ClHt6/3but0oOxinTcQHJLDXh6w1crzFQ==} + '@lezer/css@1.1.8': + resolution: {integrity: sha512-7JhxupKuMBaWQKjQoLtzhGj83DdnZY9MckEOG5+/iLKNK2ZJqKc6hf6uc0HjwCX7Qlok44jBNqZhHKDhEhZYLA==} + '@lezer/highlight@1.2.0': resolution: {integrity: sha512-WrS5Mw51sGrpqjlh3d4/fOwpEV2Hd3YOkp9DBt4k8XZQcoTHZFB7sx030A6OcahF4J1nDQAa3jXlTVVYH50IFA==} - '@lezer/javascript@1.4.13': - resolution: {integrity: sha512-5IBr8LIO3xJdJH1e9aj/ZNLE4LSbdsx25wFmGRAZsj2zSmwAYjx26JyU/BYOCpRQlu1jcv1z3vy4NB9+UkfRow==} + '@lezer/html@1.3.9': + resolution: {integrity: sha512-MXxeCMPyrcemSLGaTQEZx0dBUH0i+RPl8RN5GwMAzo53nTsd/Unc/t5ZxACeQoyPUM5/GkPLRUs2WliOImzkRA==} + + '@lezer/javascript@1.4.15': + resolution: {integrity: sha512-B082ZdjI0vo2AgLqD834GlRTE9gwRX8NzHzKq5uDwEnQ9Dq+A/CEhd3nf68tiNA2f9O+8jS1NeSTUYT9IAqcTw==} + + '@lezer/json@1.0.2': + resolution: {integrity: sha512-xHT2P4S5eeCYECyKNPhr4cbEL9tc8w83SPwRC373o9uEdrvGKTZoJVAGxpOsZckMlEh9W23Pc72ew918RWQOBQ==} '@lezer/lr@1.4.0': resolution: {integrity: sha512-Wst46p51km8gH0ZUmeNrtpRYmdlRHUpN1DQd3GFAyKANi8WVz8c2jHYTf1CVScFaCjQw1iO3ZZdqGDxQPRErTg==} - '@mui/base@5.0.0-beta.37': - resolution: {integrity: sha512-/o3anbb+DeCng8jNsd3704XtmmLDZju1Fo8R2o7ugrVtPQ/QpcqddwKNzKPZwa0J5T8YNW3ZVuHyQgbTnQLisQ==} + '@lezer/markdown@1.3.0': + resolution: {integrity: sha512-ErbEQ15eowmJUyT095e9NJc3BI9yZ894fjSDtHftD0InkfUBGgnKSU6dvan9jqsZuNHg2+ag/1oyDRxNsENupQ==} + + '@mui/base@5.0.0-beta.40': + resolution: {integrity: sha512-I/lGHztkCzvwlXpjD2+SNmvNQvB4227xBXhISPjEaJUXGImOQ9f3D2Yj/T3KasSI/h0MLWy74X0J6clhPmsRbQ==} engines: {node: '>=12.0.0'} peerDependencies: - '@types/react': ^18.2.62 + '@types/react': ^18.2.79 react: ^18.2.0 react-dom: ^18.2.0 peerDependenciesMeta: '@types/react': optional: true - '@mui/core-downloads-tracker@5.15.11': - resolution: {integrity: sha512-JVrJ9Jo4gyU707ujnRzmE8ABBWpXd6FwL9GYULmwZRtfPg89ggXs/S3MStQkpJ1JRWfdLL6S5syXmgQGq5EDAw==} + '@mui/core-downloads-tracker@5.15.15': + resolution: {integrity: sha512-aXnw29OWQ6I5A47iuWEI6qSSUfH6G/aCsW9KmW3LiFqr7uXZBK4Ks+z8G+qeIub8k0T5CMqlT2q0L+ZJTMrqpg==} - '@mui/material@5.15.11': - resolution: {integrity: sha512-FA3eEuEZaDaxgN3CgfXezMWbCZ4VCeU/sv0F0/PK5n42qIgsPVD6q+j71qS7/62sp6wRFMHtDMpXRlN+tT/7NA==} + '@mui/material@5.15.15': + resolution: {integrity: sha512-3zvWayJ+E1kzoIsvwyEvkTUKVKt1AjchFFns+JtluHCuvxgKcLSRJTADw37k0doaRtVAsyh8bz9Afqzv+KYrIA==} engines: {node: '>=12.0.0'} peerDependencies: '@emotion/react': ^11.11.4 - '@emotion/styled': ^11.11.0 - '@types/react': ^18.2.62 + '@emotion/styled': ^11.11.5 + '@types/react': ^18.2.79 react: ^18.2.0 react-dom: ^18.2.0 peerDependenciesMeta: @@ -2522,22 +2412,22 @@ packages: '@types/react': optional: true - '@mui/private-theming@5.15.11': - resolution: {integrity: sha512-jY/696SnSxSzO1u86Thym7ky5T9CgfidU3NFJjguldqK4f3Z5S97amZ6nffg8gTD0HBjY9scB+4ekqDEUmxZOA==} + '@mui/private-theming@5.15.14': + resolution: {integrity: sha512-UH0EiZckOWcxiXLX3Jbb0K7rC8mxTr9L9l6QhOZxYc4r8FHUkefltV9VDGLrzCaWh30SQiJvAEd7djX3XXY6Xw==} engines: {node: '>=12.0.0'} peerDependencies: - '@types/react': ^18.2.62 + '@types/react': ^18.2.79 react: ^18.2.0 peerDependenciesMeta: '@types/react': optional: true - '@mui/styled-engine@5.15.11': - resolution: {integrity: sha512-So21AhAngqo07ces4S/JpX5UaMU2RHXpEA6hNzI6IQjd/1usMPxpgK8wkGgTe3JKmC2KDmH8cvoycq5H3Ii7/w==} + '@mui/styled-engine@5.15.14': + resolution: {integrity: sha512-RILkuVD8gY6PvjZjqnWhz8fu68dVkqhM5+jYWfB5yhlSQKg+2rHkmEwm75XIeAqI3qwOndK6zELK5H6Zxn4NHw==} engines: {node: '>=12.0.0'} peerDependencies: '@emotion/react': ^11.11.4 - '@emotion/styled': ^11.11.0 + '@emotion/styled': ^11.11.5 react: ^18.2.0 peerDependenciesMeta: '@emotion/react': @@ -2545,13 +2435,13 @@ packages: '@emotion/styled': optional: true - '@mui/system@5.15.11': - resolution: {integrity: sha512-9j35suLFq+MgJo5ktVSHPbkjDLRMBCV17NMBdEQurh6oWyGnLM4uhU4QGZZQ75o0vuhjJghOCA1jkO3+79wKsA==} + '@mui/system@5.15.15': + resolution: {integrity: sha512-aulox6N1dnu5PABsfxVGOZffDVmlxPOVgj56HrUnJE8MCSh8lOvvkd47cebIVQQYAjpwieXQXiDPj5pwM40jTQ==} engines: {node: '>=12.0.0'} peerDependencies: '@emotion/react': ^11.11.4 - '@emotion/styled': ^11.11.0 - '@types/react': ^18.2.62 + '@emotion/styled': ^11.11.5 + '@types/react': ^18.2.79 react: ^18.2.0 peerDependenciesMeta: '@emotion/react': @@ -2561,26 +2451,26 @@ packages: '@types/react': optional: true - '@mui/types@7.2.13': - resolution: {integrity: sha512-qP9OgacN62s+l8rdDhSFRe05HWtLLJ5TGclC9I1+tQngbssu0m2dmFZs+Px53AcOs9fD7TbYd4gc9AXzVqO/+g==} + '@mui/types@7.2.14': + resolution: {integrity: sha512-MZsBZ4q4HfzBsywtXgM1Ksj6HDThtiwmOKUXH1pKYISI9gAVXCNHNpo7TlGoGrBaYWZTdNoirIN7JsQcQUjmQQ==} peerDependencies: - '@types/react': ^18.2.62 + '@types/react': ^18.2.79 peerDependenciesMeta: '@types/react': optional: true - '@mui/utils@5.15.11': - resolution: {integrity: sha512-D6bwqprUa9Stf8ft0dcMqWyWDKEo7D+6pB1k8WajbqlYIRA8J8Kw9Ra7PSZKKePGBGWO+/xxrX1U8HpG/aXQCw==} + '@mui/utils@5.15.14': + resolution: {integrity: sha512-0lF/7Hh/ezDv5X7Pry6enMsbYyGKjADzvHyo3Qrc/SSlTsQ1VkbDMbH0m2t3OR5iIVLwMoxwM7yGd+6FCMtTFA==} engines: {node: '>=12.0.0'} peerDependencies: - '@types/react': ^18.2.62 + '@types/react': ^18.2.79 react: ^18.2.0 peerDependenciesMeta: '@types/react': optional: true - '@mui/x-data-grid-premium@6.19.6': - resolution: {integrity: sha512-G0wQeagVcq2Sl8yDWVXolJk6JJwVIzeW9wUU55niF9a+i1VN0r8Wipp858liIA3A+sS++H/Ai6CDyx7KwqylhQ==} + '@mui/x-data-grid-premium@6.19.11': + resolution: {integrity: sha512-A8BU6q2diK7B/s44IduPpHYguoasnTrRKEXRzzMlJ/L3eNEvynBBKwL29sOdXP1HjLieT5aijzX8FhNIMEwAsw==} engines: {node: '>=14.0.0'} peerDependencies: '@mui/material': ^5.4.1 @@ -2588,8 +2478,8 @@ packages: react: ^18.2.0 react-dom: ^18.2.0 - '@mui/x-data-grid-pro@6.19.6': - resolution: {integrity: sha512-Bh2qvRHoHxgrUHKMeu46VRzl2lOSvxjtPAhJncRUJuYE6hVu2VZxvqrdmdxdIWkom2ygpFwq6YP6xMJsDFX+QQ==} + '@mui/x-data-grid-pro@6.19.11': + resolution: {integrity: sha512-Kttf9+J8qZ4hINfA+Aj/P0WL/KSItsDZW4sVIjF5Eb+lra3VGwvTNAsvT28OCcvg+dIzk4MVksGXklA7871GqA==} engines: {node: '>=14.0.0'} peerDependencies: '@mui/material': ^5.4.1 @@ -2597,8 +2487,8 @@ packages: react: ^18.2.0 react-dom: ^18.2.0 - '@mui/x-data-grid@6.19.6': - resolution: {integrity: sha512-jpZkX1Gnlo87gKcD10mKMY8YoAzUD8Cv3/IvedH3FINDKO3hnraMeOciKDeUk0tYSj8RUDB02kpTHCM8ojLVBA==} + '@mui/x-data-grid@6.19.11': + resolution: {integrity: sha512-QsUp2cPkjUm8vyTR5gYWuCFqxspljOzElbCm412wzvMTJSKaB0kz7CEecFhxjlsMjQ8B7kY8oDF3LXjjucFcPQ==} engines: {node: '>=14.0.0'} peerDependencies: '@mui/material': ^5.4.1 @@ -2627,8 +2517,8 @@ packages: '@popperjs/core@2.11.8': resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} - '@rc-component/color-picker@1.5.2': - resolution: {integrity: sha512-YJXujYzYFAEtlXJXy0yJUhwzUWPTcniBZto+wZ/vnACmFnUTNR7dH+NOeqSwMMsssh74e9H5Jfpr5LAH2PYqUw==} + '@rc-component/color-picker@1.5.3': + resolution: {integrity: sha512-+tGGH3nLmYXTalVe0L8hSZNs73VTP5ueSHwUlDC77KKRaN7G4DS4wcpG5DTDzdcV/Yas+rzA6UGgIyzd8fS4cw==} peerDependencies: react: ^18.2.0 react-dom: ^18.2.0 @@ -2664,15 +2554,15 @@ packages: react: ^18.2.0 react-dom: ^18.2.0 - '@rc-component/trigger@2.0.0': - resolution: {integrity: sha512-niwKADPdY5dhdIblV6uwSayVivwo2uUISfJqri+/ovYQcH/omxDYBJKo755QKeoIIsWptxnRpgr7reEnNEZGFg==} + '@rc-component/trigger@2.1.1': + resolution: {integrity: sha512-UjHkedkgtEcgQu87w1VuWug1idoDJV7VUt0swxHXRcmei2uu1AuUzGBPEUlmOmXGJ+YtTgZfVLi7kuAUKoZTMA==} engines: {node: '>=8.x'} peerDependencies: react: ^18.2.0 react-dom: ^18.2.0 - '@reduxjs/toolkit@2.2.1': - resolution: {integrity: sha512-8CREoqJovQW/5I4yvvijm/emUiCCmcs4Ev4XPWd4mizSO+dD3g5G6w34QK5AGeNrSH7qM8Fl66j4vuV7dpOdkw==} + '@reduxjs/toolkit@2.2.3': + resolution: {integrity: sha512-76dll9EnJXg4EVcI5YNxZA/9hSAmZsFqzMmNRHvIlzw2WS/twfcVX3ysYrWGJMClwEmChQFC4yRq74tn6fdzRA==} peerDependencies: react: ^18.2.0 react-redux: ^7.2.1 || ^8.1.3 || ^9.0.0 @@ -2682,8 +2572,8 @@ packages: react-redux: optional: true - '@remix-run/router@1.15.2': - resolution: {integrity: sha512-+Rnav+CaoTE5QJc4Jcwh5toUpnVLKYbpU6Ys0zqbakqbaLQHeglLVHPfxOiQqdNmUy5C2lXz5dwC6tQNX2JW2Q==} + '@remix-run/router@1.16.0': + resolution: {integrity: sha512-Quz1KOffeEf/zwkCBM3kBtH4ZoZ+pT3xIXBG4PPW/XFtDP7EGhtTiC2+gpL9GnR7+Qdet5Oa6cYSvwKYg6kN9Q==} engines: {node: '>=14.0.0'} '@rollup/pluginutils@5.1.0': @@ -2695,89 +2585,104 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.12.0': - resolution: {integrity: sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w==} + '@rollup/rollup-android-arm-eabi@4.16.4': + resolution: {integrity: sha512-GkhjAaQ8oUTOKE4g4gsZ0u8K/IHU1+2WQSgS1TwTcYvL+sjbaQjNHFXbOJ6kgqGHIO1DfUhI/Sphi9GkRT9K+Q==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.12.0': - resolution: {integrity: sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ==} + '@rollup/rollup-android-arm64@4.16.4': + resolution: {integrity: sha512-Bvm6D+NPbGMQOcxvS1zUl8H7DWlywSXsphAeOnVeiZLQ+0J6Is8T7SrjGTH29KtYkiY9vld8ZnpV3G2EPbom+w==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.12.0': - resolution: {integrity: sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ==} + '@rollup/rollup-darwin-arm64@4.16.4': + resolution: {integrity: sha512-i5d64MlnYBO9EkCOGe5vPR/EeDwjnKOGGdd7zKFhU5y8haKhQZTN2DgVtpODDMxUr4t2K90wTUJg7ilgND6bXw==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.12.0': - resolution: {integrity: sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg==} + '@rollup/rollup-darwin-x64@4.16.4': + resolution: {integrity: sha512-WZupV1+CdUYehaZqjaFTClJI72fjJEgTXdf4NbW69I9XyvdmztUExBtcI2yIIU6hJtYvtwS6pkTkHJz+k08mAQ==} cpu: [x64] os: [darwin] - '@rollup/rollup-linux-arm-gnueabihf@4.12.0': - resolution: {integrity: sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA==} + '@rollup/rollup-linux-arm-gnueabihf@4.16.4': + resolution: {integrity: sha512-ADm/xt86JUnmAfA9mBqFcRp//RVRt1ohGOYF6yL+IFCYqOBNwy5lbEK05xTsEoJq+/tJzg8ICUtS82WinJRuIw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.12.0': - resolution: {integrity: sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA==} + '@rollup/rollup-linux-arm-musleabihf@4.16.4': + resolution: {integrity: sha512-tJfJaXPiFAG+Jn3cutp7mCs1ePltuAgRqdDZrzb1aeE3TktWWJ+g7xK9SNlaSUFw6IU4QgOxAY4rA+wZUT5Wfg==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.16.4': + resolution: {integrity: sha512-7dy1BzQkgYlUTapDTvK997cgi0Orh5Iu7JlZVBy1MBURk7/HSbHkzRnXZa19ozy+wwD8/SlpJnOOckuNZtJR9w==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.12.0': - resolution: {integrity: sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ==} + '@rollup/rollup-linux-arm64-musl@4.16.4': + resolution: {integrity: sha512-zsFwdUw5XLD1gQe0aoU2HVceI6NEW7q7m05wA46eUAyrkeNYExObfRFQcvA6zw8lfRc5BHtan3tBpo+kqEOxmg==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.12.0': - resolution: {integrity: sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw==} + '@rollup/rollup-linux-powerpc64le-gnu@4.16.4': + resolution: {integrity: sha512-p8C3NnxXooRdNrdv6dBmRTddEapfESEUflpICDNKXpHvTjRRq1J82CbU5G3XfebIZyI3B0s074JHMWD36qOW6w==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.16.4': + resolution: {integrity: sha512-Lh/8ckoar4s4Id2foY7jNgitTOUQczwMWNYi+Mjt0eQ9LKhr6sK477REqQkmy8YHY3Ca3A2JJVdXnfb3Rrwkng==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.12.0': - resolution: {integrity: sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA==} + '@rollup/rollup-linux-s390x-gnu@4.16.4': + resolution: {integrity: sha512-1xwwn9ZCQYuqGmulGsTZoKrrn0z2fAur2ujE60QgyDpHmBbXbxLaQiEvzJWDrscRq43c8DnuHx3QorhMTZgisQ==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.16.4': + resolution: {integrity: sha512-LuOGGKAJ7dfRtxVnO1i3qWc6N9sh0Em/8aZ3CezixSTM+E9Oq3OvTsvC4sm6wWjzpsIlOCnZjdluINKESflJLA==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.12.0': - resolution: {integrity: sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw==} + '@rollup/rollup-linux-x64-musl@4.16.4': + resolution: {integrity: sha512-ch86i7KkJKkLybDP2AtySFTRi5fM3KXp0PnHocHuJMdZwu7BuyIKi35BE9guMlmTpwwBTB3ljHj9IQXnTCD0vA==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.12.0': - resolution: {integrity: sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw==} + '@rollup/rollup-win32-arm64-msvc@4.16.4': + resolution: {integrity: sha512-Ma4PwyLfOWZWayfEsNQzTDBVW8PZ6TUUN1uFTBQbF2Chv/+sjenE86lpiEwj2FiviSmSZ4Ap4MaAfl1ciF4aSA==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.12.0': - resolution: {integrity: sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA==} + '@rollup/rollup-win32-ia32-msvc@4.16.4': + resolution: {integrity: sha512-9m/ZDrQsdo/c06uOlP3W9G2ENRVzgzbSXmXHT4hwVaDQhYcRpi9bgBT0FTG9OhESxwK0WjQxYOSfv40cU+T69w==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.12.0': - resolution: {integrity: sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg==} + '@rollup/rollup-win32-x64-msvc@4.16.4': + resolution: {integrity: sha512-YunpoOAyGLDseanENHmbFvQSfVL5BxW3k7hhy0eN4rb3gS/ct75dVD0EXOWIqFT/nE8XYW6LP6vz6ctKRi0k9A==} cpu: [x64] os: [win32] - '@sentry-internal/feedback@7.110.1': - resolution: {integrity: sha512-0aR3wuEW+SZKOVNamuy0pTQyPmqDjWPPLrB2GAXGT3ZjrVxjEzzVPqk6DVBYxSV2MuJaD507SZnvfoSPNgoBmw==} + '@sentry-internal/feedback@7.112.2': + resolution: {integrity: sha512-z+XP8BwB8B3pa+i8xqbrPsbtDWUFUS6wo+FJbmOYUqOusJJbVFDAhBoEdKoo5ZjOcsAZG7XR6cA9zrhJynIWBA==} engines: {node: '>=12'} - '@sentry-internal/replay-canvas@7.110.1': - resolution: {integrity: sha512-zdcCmWFXM4DHOau/BCZVb6jf9zozdbAiJ1MzQ6azuZEuysOl00YfktoWZBbZjjjpWT6025s+wrmFz54t0O+enw==} + '@sentry-internal/replay-canvas@7.112.2': + resolution: {integrity: sha512-BCCCxrZ1wJvN6La5gg1JJbKitAhJI5MATCnhtklsZbUcHkHB9iZoj19J65+P56gwssvHz5xh63AjNiITaetIRg==} engines: {node: '>=12'} - '@sentry-internal/tracing@7.110.1': - resolution: {integrity: sha512-4kTd6EM0OP1SVWl2yLn3KIwlCpld1lyhNDeR8G1aKLm1PN+kVsR6YB/jy9KPPp4Q3lN3W9EkTSES3qhP4jVffQ==} + '@sentry-internal/tracing@7.112.2': + resolution: {integrity: sha512-fT1Y46J4lfXZkgFkb03YMNeIEs2xS6jdKMoukMFQfRfVvL9fSWEbTgZpHPd/YTT8r2i082XzjtAoQNgklm/0Hw==} engines: {node: '>=8'} '@sentry/babel-plugin-component-annotate@2.16.1': resolution: {integrity: sha512-pJka66URsqQbk6hTs9H1XFpUeI0xxuqLYf9Dy5pRGNHSJMtfv91U+CaYSWt03aRRMGDXMduh62zAAY7Wf0HO+A==} engines: {node: '>= 14'} - '@sentry/browser@7.110.1': - resolution: {integrity: sha512-H3TZlbdsgxuoVxhotMtBDemvAofx3UPNcS+UjQ40Bd+hKX01IIbEN3i+9RQ0jmcbU6xjf+yhjwp+Ejpm4FmYMw==} + '@sentry/browser@7.112.2': + resolution: {integrity: sha512-wULwavCch84+d0bueAdFm6CDm1u0TfOjN91VgY+sj/vxUV2vesvDgI8zRZfmbZEor3MYA90zerkZT3ehZQKbYw==} engines: {node: '>=8'} '@sentry/bundler-plugin-core@2.16.1': @@ -2830,26 +2735,30 @@ packages: engines: {node: '>= 10'} hasBin: true - '@sentry/core@7.110.1': - resolution: {integrity: sha512-yC1yeUFQlmHj9u/KxKmwOMVanBmgfX+4MZnZU31QPqN95adyZTwpaYFZl4fH5kDVnz7wXJI0qRP8SxuMePtqhw==} + '@sentry/core@7.112.2': + resolution: {integrity: sha512-gHPCcJobbMkk0VR18J65WYQTt3ED4qC6X9lHKp27Ddt63E+MDGkG6lvYBU1LS8cV7CdyBGC1XXDCfor61GvLsA==} engines: {node: '>=8'} - '@sentry/react@7.110.1': - resolution: {integrity: sha512-kXdMrDexPyBf0KP/IfgCk5NS1Yfz6tFK/+UKWTxEM5PVRZkHzV7CBdd50IFGL3xMGbJmtE5Bly6WzezqUgWZ5w==} + '@sentry/integrations@7.112.2': + resolution: {integrity: sha512-ioC2yyU6DqtLkdmWnm87oNvdn2+9oKctJeA4t+jkS6JaJ10DcezjCwiLscX4rhB9aWJV3IWF7Op0O6K3w0t2Hg==} + engines: {node: '>=8'} + + '@sentry/react@7.112.2': + resolution: {integrity: sha512-Xf6mc1+/ncCk6ZFIj0oT4or2o0UxqqJZk09U/21RYNvVCn7+DNyCdJZ/F5wXWgPqVE67PrjydLLYaQWiqLibiA==} engines: {node: '>=8'} peerDependencies: react: ^18.2.0 - '@sentry/replay@7.110.1': - resolution: {integrity: sha512-R49fGOuKYsJ97EujPTzMjs3ZSuSkLTFFQmVBbsu/o6beRp4kK9l8H7r2BfLEcWJOXdWO5EU4KpRWgIxHaDK2aw==} + '@sentry/replay@7.112.2': + resolution: {integrity: sha512-7Ns/8D54WPsht1nlVj93Inf6rXyve2AZoibYN0YfcM2w3lI4NO51gPPHJU0lFEfMwzwK4ZBJWzOeW9098a+uEg==} engines: {node: '>=12'} - '@sentry/types@7.110.1': - resolution: {integrity: sha512-sZxOpM5gfyxvJeWVvNpHnxERTnlqcozjqNcIv29SZ6wonlkekmxDyJ3uCuPv85VO54WLyA4uzskPKnNFHacI8A==} + '@sentry/types@7.112.2': + resolution: {integrity: sha512-kCMLt7yhY5OkWE9MeowlTNmox9pqDxcpvqguMo4BDNZM5+v9SEb1AauAdR78E1a1V8TyCzjBD7JDfXWhvpYBcQ==} engines: {node: '>=8'} - '@sentry/utils@7.110.1': - resolution: {integrity: sha512-eibLo2m1a7sHkOHxYYmRujr3D7ek2l9sv26F1SLoQBVDF7Afw5AKyzPmtA1D+4M9P/ux1okj7cGj3SaBrVpxXA==} + '@sentry/utils@7.112.2': + resolution: {integrity: sha512-OjLh0hx0t1EcL4ZIjf+4svlmmP+tHUDGcr5qpFWH78tjmkPW4+cqPuZCZfHSuWcDdeiaXi8TnYoVRqDcJKK/eQ==} engines: {node: '>=8'} '@sentry/vite-plugin@2.16.1': @@ -2924,68 +2833,68 @@ packages: peerDependencies: '@svgr/core': '*' - '@swc/core-darwin-arm64@1.4.2': - resolution: {integrity: sha512-1uSdAn1MRK5C1m/TvLZ2RDvr0zLvochgrZ2xL+lRzugLlCTlSA+Q4TWtrZaOz+vnnFVliCpw7c7qu0JouhgQIw==} + '@swc/core-darwin-arm64@1.5.0': + resolution: {integrity: sha512-dyA25zQjm3xmMFsRPFgBpSqWSW9TITnkndZkZAiPYLjBxH9oTNMa0l09BePsaqEeXySY++tUgAeYu/9onsHLbg==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.4.2': - resolution: {integrity: sha512-TYD28+dCQKeuxxcy7gLJUCFLqrwDZnHtC2z7cdeGfZpbI2mbfppfTf2wUPzqZk3gEC96zHd4Yr37V3Tvzar+lQ==} + '@swc/core-darwin-x64@1.5.0': + resolution: {integrity: sha512-cO7kZMMA/fcQIBT31LBzcVNSk3AZGVYLqvEPnJhFImjPm3mGKUd6kWpARUEGR68MyRU2VsWhE6eCjMcM+G7bxw==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.4.2': - resolution: {integrity: sha512-Eyqipf7ZPGj0vplKHo8JUOoU1un2sg5PjJMpEesX0k+6HKE2T8pdyeyXODN0YTFqzndSa/J43EEPXm+rHAsLFQ==} + '@swc/core-linux-arm-gnueabihf@1.5.0': + resolution: {integrity: sha512-BXaXytS4y9lBFRO6vwA6ovvy1d2ZIzS02i2R1oegoZzzNu89CJDpkYXYS9bId0GvK2m9Q9y2ofoZzKE2Rp3PqQ==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.4.2': - resolution: {integrity: sha512-wZn02DH8VYPv3FC0ub4my52Rttsus/rFw+UUfzdb3tHMHXB66LqN+rR0ssIOZrH6K+VLN6qpTw9VizjyoH0BxA==} + '@swc/core-linux-arm64-gnu@1.5.0': + resolution: {integrity: sha512-Bu4/41pGadXKnRsUbox0ig63xImATVH704oPCXcoOvNGkDyMjWgIAhzIi111vrwFNpj9utabgUE4AtlUa2tAOQ==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.4.2': - resolution: {integrity: sha512-3G0D5z9hUj9bXNcwmA1eGiFTwe5rWkuL3DsoviTj73TKLpk7u64ND0XjEfO0huVv4vVu9H1jodrKb7nvln/dlw==} + '@swc/core-linux-arm64-musl@1.5.0': + resolution: {integrity: sha512-lUFFvC8tsepNcTnKEHNrePWanVVef6PQ82Rv9wIeebgGHRUqDh6+CyCqodXez+aKz6NyE/PBIfp0r+jPx4hoJA==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-x64-gnu@1.4.2': - resolution: {integrity: sha512-LFxn9U8cjmYHw3jrdPNqPAkBGglKE3tCZ8rA7hYyp0BFxuo7L2ZcEnPm4RFpmSCCsExFH+LEJWuMGgWERoktvg==} + '@swc/core-linux-x64-gnu@1.5.0': + resolution: {integrity: sha512-c6LegFU1qdyMfk+GzNIOvrX61+mksm21Q01FBnXSy1nf1ACj/a86jmr3zkPl0zpNVHfPOw3Ry1QIuLQKD+67YA==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.4.2': - resolution: {integrity: sha512-dp0fAmreeVVYTUcb4u9njTPrYzKnbIH0EhH2qvC9GOYNNREUu2GezSIDgonjOXkHiTCvopG4xU7y56XtXj4VrQ==} + '@swc/core-linux-x64-musl@1.5.0': + resolution: {integrity: sha512-I/V8aWBmfDWwjtM1bS8ASG+6PcO/pVFYyPP5g2ok46Vz1o1MnAUd18mHnWX43nqVJokaW+BD/G4ZMZ+gXRl4zQ==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-win32-arm64-msvc@1.4.2': - resolution: {integrity: sha512-HlVIiLMQkzthAdqMslQhDkoXJ5+AOLUSTV6fm6shFKZKqc/9cJvr4S8UveNERL9zUficA36yM3bbfo36McwnvQ==} + '@swc/core-win32-arm64-msvc@1.5.0': + resolution: {integrity: sha512-nN685BvI7iM58xabrSOSQHUvIY10pcXh5H9DmS8LeYqG6Dkq7QZ8AwYqqonOitIS5C35MUfhSMLpOTzKoLdUqA==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.4.2': - resolution: {integrity: sha512-WCF8faPGjCl4oIgugkp+kL9nl3nUATlzKXCEGFowMEmVVCFM0GsqlmGdPp1pjZoWc9tpYanoXQDnp5IvlDSLhA==} + '@swc/core-win32-ia32-msvc@1.5.0': + resolution: {integrity: sha512-3YjltmEHljI+TvuDOC4lspUzjBUoB3X5BhftRBprSTJx/czuMl0vdoZKs2Snzb5Eqqesp0Rl8q+iQ1E1oJ6dEA==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.4.2': - resolution: {integrity: sha512-oV71rwiSpA5xre2C5570BhCsg1HF97SNLsZ/12xv7zayGzqr3yvFALFJN8tHKpqUdCB4FGPjoP3JFdV3i+1wUw==} + '@swc/core-win32-x64-msvc@1.5.0': + resolution: {integrity: sha512-ZairtCwJsaxnUH85DcYCyGpNb9bUoIm9QXYW+VaEoXwbcB95dTIiJwN0aRxPT8B0B2MNw/CXLqjoPo6sDwz5iw==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.4.2': - resolution: {integrity: sha512-vWgY07R/eqj1/a0vsRKLI9o9klGZfpLNOVEnrv4nrccxBgYPjcf22IWwAoaBJ+wpA7Q4fVjCUM8lP0m01dpxcg==} + '@swc/core@1.5.0': + resolution: {integrity: sha512-fjADAC5gOOX54Rpcr1lF9DHLD+nPD5H/zXLtEgK2Ez3esmogT+LfHzCZtUxqetjvaMChKhQ0Pp0ZB6Hpz/tCbw==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': ^0.5.0 @@ -2996,75 +2905,75 @@ packages: '@swc/counter@0.1.3': resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - '@swc/types@0.1.5': - resolution: {integrity: sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==} + '@swc/types@0.1.6': + resolution: {integrity: sha512-/JLo/l2JsT/LRd80C3HfbmVpxOAJ11FO2RCEslFrgzLltoP9j8XIbsyDcfCt2WWyX+CM96rBoNM+IToAkFOugg==} - '@tauri-apps/api@1.5.3': - resolution: {integrity: sha512-zxnDjHHKjOsrIzZm6nO5Xapb/BxqUq1tc7cGkFXsFkGTsSWgCPH1D8mm0XS9weJY2OaR73I3k3S+b7eSzJDfqA==} + '@tauri-apps/api@1.5.4': + resolution: {integrity: sha512-LKYae9URbdEdbHrOXBeXb/lZgVyWTX0E98rSFBuQlmkLr8OeG+akuE41PfLjBVyk1Q+fq7wxo4ieenLSMUAUhA==} engines: {node: '>= 14.6.0', npm: '>= 6.6.0', yarn: '>= 1.19.1'} - '@tauri-apps/cli-darwin-arm64@1.5.11': - resolution: {integrity: sha512-2NLSglDb5VfvTbMtmOKWyD+oaL/e8Z/ZZGovHtUFyUSFRabdXc6cZOlcD1BhFvYkHqm+TqGaz5qtPR5UbqDs8A==} + '@tauri-apps/cli-darwin-arm64@1.5.12': + resolution: {integrity: sha512-ud06E547WE7oDZeN5rH4eeB90Rie0aSCFH0Zb6XyNb6qgg0ZIftM+N3OjVONxk84/g//nr4/x7wW6LOwiwvPHw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@tauri-apps/cli-darwin-x64@1.5.11': - resolution: {integrity: sha512-/RQllHiJRH2fJOCudtZlaUIjofkHzP3zZgxi71ZUm7Fy80smU5TDfwpwOvB0wSVh0g/ciDjMArCSTo0MRvL+ag==} + '@tauri-apps/cli-darwin-x64@1.5.12': + resolution: {integrity: sha512-hSz9cuHO4lYora0z2XRFEIblkStT3eJvh/iYmsFfjT3usGBt2fTPMJ4SnL1Uyu64Y59dqyRNBikuBuymAFESjA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@tauri-apps/cli-linux-arm-gnueabihf@1.5.11': - resolution: {integrity: sha512-IlBuBPKmMm+a5LLUEK6a21UGr9ZYd6zKuKLq6IGM4tVweQa8Sf2kP2Nqs74dMGIUrLmMs0vuqdURpykQg+z4NQ==} + '@tauri-apps/cli-linux-arm-gnueabihf@1.5.12': + resolution: {integrity: sha512-FanE15/c7nz64CcTFe7f+8b7+rFQCb3Ivju+4sxVSPkAOJXHc5no3Y/LxFt85SAOMgPTB2FMuxHUdjvLjd2D1w==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@tauri-apps/cli-linux-arm64-gnu@1.5.11': - resolution: {integrity: sha512-w+k1bNHCU/GbmXshtAhyTwqosThUDmCEFLU4Zkin1vl2fuAtQry2RN7thfcJFepblUGL/J7yh3Q/0+BCjtspKQ==} + '@tauri-apps/cli-linux-arm64-gnu@1.5.12': + resolution: {integrity: sha512-ETVyIcR4xVGnuhTgTY+kPG5LbAJQobPA8OxSLRY203f0cqYuSPffgyahtS65uPJ9egWIN3fflDKGTE1xcgFNAA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tauri-apps/cli-linux-arm64-musl@1.5.11': - resolution: {integrity: sha512-PN6/dl+OfYQ/qrAy4HRAfksJ2AyWQYn2IA/2Wwpaa7SDRz2+hzwTQkvajuvy0sQ5L2WCG7ymFYRYMbpC6Hk9Pg==} + '@tauri-apps/cli-linux-arm64-musl@1.5.12': + resolution: {integrity: sha512-ZhMagbS50dDV9glHrtRg1bkUa7sUDPsZ9bJ0xnd0vr8Smi8RiJ/dgQbF5eQNp4ahzYl+FtLjBkMTZKACrKgusg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tauri-apps/cli-linux-x64-gnu@1.5.11': - resolution: {integrity: sha512-MTVXLi89Nj7Apcvjezw92m7ZqIDKT5SFKZtVPCg6RoLUBTzko/BQoXYIRWmdoz2pgkHDUHgO2OMJ8oKzzddXbw==} + '@tauri-apps/cli-linux-x64-gnu@1.5.12': + resolution: {integrity: sha512-H6jXU4AG8g6FZxX+U3M76zigbLvj7bE+wG+xOrS7xCRwkfAEKw0aulymdFfOl44KBZDQQsV5KYA6T6csx3KbIQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tauri-apps/cli-linux-x64-musl@1.5.11': - resolution: {integrity: sha512-kwzAjqFpz7rvTs7WGZLy/a5nS5t15QKr3E9FG95MNF0exTl3d29YoAUAe1Mn0mOSrTJ9Z+vYYAcI/QdcsGBP+w==} + '@tauri-apps/cli-linux-x64-musl@1.5.12': + resolution: {integrity: sha512-Y/0dzBD8oFZ04Xq75LKPJvOI2MbVFdwGY6w41l24OxNiNopF7AzdrZGTJ+MoUbU9PALNP8ABhOP6BYZiV528OA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tauri-apps/cli-win32-arm64-msvc@1.5.11': - resolution: {integrity: sha512-L+5NZ/rHrSUrMxjj6YpFYCXp6wHnq8c8SfDTBOX8dO8x+5283/vftb4vvuGIsLS4UwUFXFnLt3XQr44n84E67Q==} + '@tauri-apps/cli-win32-arm64-msvc@1.5.12': + resolution: {integrity: sha512-fxCS1/zQp+W7Lze+6Sh64RLqWFE57NsU+Y9L30ZKt5Prnt2LXEoa3POSaQpgHLRgwL/WfDW2nkYBRH3fVIrpQg==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@tauri-apps/cli-win32-ia32-msvc@1.5.11': - resolution: {integrity: sha512-oVlD9IVewrY0lZzTdb71kNXkjdgMqFq+ohb67YsJb4Rf7o8A9DTlFds1XLCe3joqLMm4M+gvBKD7YnGIdxQ9vA==} + '@tauri-apps/cli-win32-ia32-msvc@1.5.12': + resolution: {integrity: sha512-keWSEBOxL8q750AzmL4L3DDJzDzmb6DGT3+0HTjbEfu+a2GRS1lnrkm3EEeAepPoz4r62+cOQbjPRP8YGtGfFw==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] - '@tauri-apps/cli-win32-x64-msvc@1.5.11': - resolution: {integrity: sha512-1CexcqUFCis5ypUIMOKllxUBrna09McbftWENgvVXMfA+SP+yPDPAVb8fIvUcdTIwR/yHJwcIucmTB4anww4vg==} + '@tauri-apps/cli-win32-x64-msvc@1.5.12': + resolution: {integrity: sha512-+eIvaPVwtVM7puXlCZIS1lSFF0VZ0gAUShKwk/kBZi8xUYQoNEW2RUWSPp+TEdZsMiAxd/zFZ+tGgv83Hxjbjg==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@tauri-apps/cli@1.5.11': - resolution: {integrity: sha512-B475D7phZrq5sZ3kDABH4g2mEoUIHtnIO+r4ZGAAfsjMbZCwXxR/jlMGTEL+VO3YzjpF7gQe38IzB4vLBbVppw==} + '@tauri-apps/cli@1.5.12': + resolution: {integrity: sha512-tMvcMVIrvNjoPIVO5pZk7lJrHVXw7NBggpJXRAQsD7VkMW9hT1uX3jVZeoPCmQ5KbpXvjoNXe+Ws8nE2NR/8Ow==} engines: {node: '>= 10'} hasBin: true @@ -3083,8 +2992,8 @@ packages: '@types/color-convert@2.0.3': resolution: {integrity: sha512-2Q6wzrNiuEvYxVQqhh7sXM2mhIhvZR/Paq4FdsQkOMgWsCIkKvSGj8Le1/XalulrmgOzPMqNa0ix+ePY4hTrfg==} - '@types/color-name@1.1.3': - resolution: {integrity: sha512-87W6MJCKZYDhLAx/J1ikW8niMvmGRyY+rpUxWpL1cO7F8Uu5CHuQoFv+R0/L5pgNdW4jTyda42kv60uwVIPjLw==} + '@types/color-name@1.1.4': + resolution: {integrity: sha512-hulKeREDdLFesGQjl96+4aoJSHY5b2GRjagzzcqCfIrWhe5vkCqIvrLbqzBaI1q94Vg8DNJZZqTR5ocdWmWclg==} '@types/color@3.0.6': resolution: {integrity: sha512-NMiNcZFRUAiUUCCf7zkAelY8eV3aKqfbzyFQlXpPIEeoNDbsEHGpb854V3gzTsGKYj830I5zPuOwU/TP5/cW6A==} @@ -3122,8 +3031,8 @@ packages: '@types/js-cookie@2.2.7': resolution: {integrity: sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==} - '@types/json-schema@7.0.12': - resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} @@ -3131,8 +3040,8 @@ packages: '@types/lodash-es@4.17.12': resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} - '@types/lodash@4.14.202': - resolution: {integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==} + '@types/lodash@4.17.0': + resolution: {integrity: sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==} '@types/mdast@3.0.15': resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} @@ -3152,20 +3061,20 @@ packages: '@types/node@14.18.63': resolution: {integrity: sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==} - '@types/node@18.19.21': - resolution: {integrity: sha512-2Q2NeB6BmiTFQi4DHBzncSoq/cJMLDdhPaAoJFnFCyD9a8VPZRf7a1GAwp1Edb7ROaZc5Jz/tnZyL6EsWMRaqw==} + '@types/node@18.19.31': + resolution: {integrity: sha512-ArgCD39YpyyrtFKIqMDvjz79jto5fcI/SVUs2HwB+f0dAzq68yqOdyaSivLiLugSziTpNXLQrVb7RZFmdZzbhA==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - '@types/prop-types@15.7.11': - resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} + '@types/prop-types@15.7.12': + resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} - '@types/qs@6.9.12': - resolution: {integrity: sha512-bZcOkJ6uWrL0Qb2NAWKa7TBU+mJHPzhx9jjLL1KHF+XpzEcR7EXHvjbHlGtR/IsP1vyPrehuS6XqkmaePy//mg==} + '@types/qs@6.9.15': + resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} - '@types/react-dom@18.2.19': - resolution: {integrity: sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA==} + '@types/react-dom@18.2.25': + resolution: {integrity: sha512-o/V48vf4MQh7juIKZU2QGDfli6p1+OOi5oXx36Hffpc9adsHeXjVp8rHuPkjd8VT8sOJ2Zp05HR7CdpGTIUFUA==} '@types/react-syntax-highlighter@15.5.11': resolution: {integrity: sha512-ZqIJl+Pg8kD+47kxUjvrlElrraSUrYa4h0dauY/U/FTUuprSCqvUj+9PNQNQzVc6AJgIWUUxn87/gqsMHNbRjw==} @@ -3173,14 +3082,11 @@ packages: '@types/react-transition-group@4.4.10': resolution: {integrity: sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==} - '@types/react@18.2.62': - resolution: {integrity: sha512-l3f57BbaEKP0xcFzf+5qRG8/PXykZiuVM6eEoPtqBPCp6dxO3HhDkLIgIyXPhPKNAeXn3KO2pEaNgzaEo/asaw==} - - '@types/scheduler@0.16.3': - resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==} + '@types/react@18.2.79': + resolution: {integrity: sha512-RwGAGXPl9kSXwdNTafkOEuFrTBD5SA2B3iEB96xi8+xu5ddUa/cpvyVCSNn+asgLCTHkb5ZxN8gbuibYJi4s1w==} - '@types/semver@7.5.0': - resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} + '@types/semver@7.5.8': + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} '@types/streamsaver@2.0.4': resolution: {integrity: sha512-XxpGYIaBP+2NgZ5+4YeG7hI3wYAyOX8QB92xlPpNvStIAvlniml1th+D0bes1lUZz52IWkPlXMf88wy8NzFkbA==} @@ -3212,8 +3118,8 @@ packages: '@types/uuid@9.0.8': resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} - '@typescript-eslint/eslint-plugin@6.17.0': - resolution: {integrity: sha512-Vih/4xLXmY7V490dGwBQJTpIZxH4ZFH6eCVmQ4RFkB+wmaCTDAx4dtgoWwMNGKLkqRY1L6rPqzEbjorRnDo4rQ==} + '@typescript-eslint/eslint-plugin@6.21.0': + resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -3223,8 +3129,8 @@ packages: typescript: optional: true - '@typescript-eslint/parser@6.17.0': - resolution: {integrity: sha512-C4bBaX2orvhK+LlwrY8oWGmSl4WolCfYm513gEccdWZj0CwGadbIADb0FtVEcI+WzUyjyoBj2JRP8g25E6IB8A==} + '@typescript-eslint/parser@6.21.0': + resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -3233,12 +3139,12 @@ packages: typescript: optional: true - '@typescript-eslint/scope-manager@6.17.0': - resolution: {integrity: sha512-RX7a8lwgOi7am0k17NUO0+ZmMOX4PpjLtLRgLmT1d3lBYdWH4ssBUbwdmc5pdRX8rXon8v9x8vaoOSpkHfcXGA==} + '@typescript-eslint/scope-manager@6.21.0': + resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/type-utils@6.17.0': - resolution: {integrity: sha512-hDXcWmnbtn4P2B37ka3nil3yi3VCQO2QEB9gBiHJmQp5wmyQWqnjA85+ZcE8c4FqnaB6lBwMrPkgd4aBYz3iNg==} + '@typescript-eslint/type-utils@6.21.0': + resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -3247,12 +3153,12 @@ packages: typescript: optional: true - '@typescript-eslint/types@6.17.0': - resolution: {integrity: sha512-qRKs9tvc3a4RBcL/9PXtKSehI/q8wuU9xYJxe97WFxnzH8NWWtcW3ffNS+EWg8uPvIerhjsEZ+rHtDqOCiH57A==} + '@typescript-eslint/types@6.21.0': + resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/typescript-estree@6.17.0': - resolution: {integrity: sha512-gVQe+SLdNPfjlJn5VNGhlOhrXz4cajwFd5kAgWtZ9dCZf4XJf8xmgCTLIqec7aha3JwgLI2CK6GY1043FRxZwg==} + '@typescript-eslint/typescript-estree@6.21.0': + resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -3260,14 +3166,14 @@ packages: typescript: optional: true - '@typescript-eslint/utils@6.17.0': - resolution: {integrity: sha512-LofsSPjN/ITNkzV47hxas2JCsNCEnGhVvocfyOcLzT9c/tSZE7SfhS/iWtzP1lKNOEfLhRTZz6xqI8N2RzweSQ==} + '@typescript-eslint/utils@6.21.0': + resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 - '@typescript-eslint/visitor-keys@6.17.0': - resolution: {integrity: sha512-H6VwB/k3IuIeQOyYczyyKN8wH6ed8EwliaYHLxOIhyF0dYEIsN8+Bk3GE19qafeMKyZJJHP8+O1HiFhFLUNKSg==} + '@typescript-eslint/visitor-keys@6.21.0': + resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} engines: {node: ^16.0.0 || >=18.0.0} '@ungap/structured-clone@1.2.0': @@ -3343,9 +3249,9 @@ packages: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} - ansi-escapes@5.0.0: - resolution: {integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==} - engines: {node: '>=12'} + ansi-escapes@6.2.1: + resolution: {integrity: sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==} + engines: {node: '>=14.16'} ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} @@ -3370,12 +3276,12 @@ packages: antd-img-crop@4.21.0: resolution: {integrity: sha512-YA5GUMfwoDoSJNWinGOmtYFDFLf+t7Rhfg7ZusbHgFpKCq8n9W0005LeCWgSP4C0iK3vxNHAT3DaRa3rTgKFlQ==} peerDependencies: - antd: ^5.15.2 + antd: ^5.16.4 react: ^18.2.0 react-dom: ^18.2.0 - antd@5.15.2: - resolution: {integrity: sha512-EByEiCQknPKJVYfD+zneXwEvjdFzvMw8CZrsxw9nq19ftC4uMcMkZ2irasW7RQQGg9i7XsAZpAwYz3anuFX+EA==} + antd@5.16.4: + resolution: {integrity: sha512-H3LtVz5hiNgs0lL8U6pzi11rluR6RDRw1cm2pWX6CsvgZmybWsaTBV2h+d+zmgFfuch53TWs5uztLdAldIoYYw==} peerDependencies: react: ^18.2.0 react-dom: ^18.2.0 @@ -3405,14 +3311,15 @@ packages: aria-query@5.3.0: resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} - array-buffer-byte-length@1.0.0: - resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} array-ify@1.0.0: resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} - array-includes@3.1.7: - resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} + array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} engines: {node: '>= 0.4'} array-tree-filter@2.1.0: @@ -3422,8 +3329,12 @@ packages: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} - array.prototype.findlastindex@1.2.3: - resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} + array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} + + array.prototype.findlastindex@1.2.5: + resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} engines: {node: '>= 0.4'} array.prototype.flat@1.3.2: @@ -3434,11 +3345,14 @@ packages: resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} engines: {node: '>= 0.4'} - array.prototype.tosorted@1.1.2: - resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==} + array.prototype.toreversed@1.1.2: + resolution: {integrity: sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==} + + array.prototype.tosorted@1.1.3: + resolution: {integrity: sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==} - arraybuffer.prototype.slice@1.0.2: - resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} + arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} engines: {node: '>= 0.4'} ast-types-flow@0.0.8: @@ -3450,22 +3364,19 @@ packages: async@3.2.5: resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} - asynciterator.prototype@1.0.0: - resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} - asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} axe-core@4.7.0: resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} engines: {node: '>=4'} - axios@1.6.7: - resolution: {integrity: sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==} + axios@1.6.8: + resolution: {integrity: sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==} axobject-query@3.2.1: resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} @@ -3474,8 +3385,8 @@ packages: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} - babel-plugin-polyfill-corejs2@0.4.10: - resolution: {integrity: sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ==} + babel-plugin-polyfill-corejs2@0.4.11: + resolution: {integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -3484,8 +3395,8 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-plugin-polyfill-regenerator@0.6.1: - resolution: {integrity: sha512-JfTApdE++cgcTWjsiCQlLyFBMbTUft9ja17saCc93lgV33h4tuCVj7tlvu//qpLwaG+3yEz7/KhahGrUMkVq9g==} + babel-plugin-polyfill-regenerator@0.6.2: + resolution: {integrity: sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -3505,8 +3416,8 @@ packages: resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} engines: {node: '>=0.6'} - binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} binary@0.3.0: @@ -3584,9 +3495,6 @@ packages: resolution: {integrity: sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==} engines: {node: '>=0.2.0'} - call-bind@1.0.5: - resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} - call-bind@1.0.7: resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} engines: {node: '>= 0.4'} @@ -3599,8 +3507,8 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - caniuse-lite@1.0.30001594: - resolution: {integrity: sha512-VblSX6nYqyJVs8DKFMldE2IVCJjZ225LW00ydtUWwh5hk9IfkTOffO6r8gJNsH0qqqeAF8KrbMYA2VEwTlGW5g==} + caniuse-lite@1.0.30001612: + resolution: {integrity: sha512-lFgnZ07UhaCcsSZgWW0K5j4e69dK1u/ltrL9lTUiFOwNHs12S3UMIEYgBV0Z6C6hRDev7iRnMzzYmKabYdXF9g==} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -3657,9 +3565,9 @@ packages: resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - cli-truncate@3.1.0: - resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + cli-truncate@4.0.0: + resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} + engines: {node: '>=18'} cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} @@ -3676,8 +3584,8 @@ packages: resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} engines: {node: '>=6'} - clsx@2.1.0: - resolution: {integrity: sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==} + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} color-convert@1.9.3: @@ -3720,10 +3628,6 @@ packages: comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} - commander@11.0.0: - resolution: {integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==} - engines: {node: '>=16'} - commander@11.1.0: resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} engines: {node: '>=16'} @@ -3773,11 +3677,11 @@ packages: copy-to-clipboard@3.3.3: resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} - core-js-compat@3.36.1: - resolution: {integrity: sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA==} + core-js-compat@3.37.0: + resolution: {integrity: sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA==} - core-js@3.36.1: - resolution: {integrity: sha512-BTvUrwxVBezj5SZ3f10ImnX2oRByMxql3EimVqMysepbC9EeMUOpLwdy6Eoili2x6E4kf+ZUB5k/+Jv55alPfA==} + core-js@3.37.0: + resolution: {integrity: sha512-fu5vHevQ8ZG4og+LXug8ulUtVxjOcEYvifJr7L5Bfq9GOztVqsKd9/59hUk2ZSbCrS3BqUr3EpaYGIYzq7g3Ug==} core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -3803,6 +3707,15 @@ packages: typescript: optional: true + cosmiconfig@9.0.0: + resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + crc-32@1.2.2: resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} engines: {node: '>=0.8'} @@ -3841,9 +3754,6 @@ packages: resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} engines: {node: '>= 6'} - csstype@3.1.2: - resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} - csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} @@ -3854,6 +3764,18 @@ packages: resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==} engines: {node: '>=12'} + data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + dayjs@1.11.10: resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==} @@ -3897,10 +3819,6 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - define-data-property@1.1.1: - resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} - engines: {node: '>= 0.4'} - define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} @@ -3980,11 +3898,11 @@ packages: duplexer2@0.1.4: resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + electron-to-chromium@1.4.748: + resolution: {integrity: sha512-VWqjOlPZn70UZ8FTKUOkUvBLeTQ0xpty66qV0yJcAGY2/CthI4xyW9aEozRVtuwv3Kpf5xTesmJUcPwuJmgP4A==} - electron-to-chromium@1.4.692: - resolution: {integrity: sha512-d5rZRka9n2Y3MkWRN74IoAsxR0HK3yaAt7T50e3iT9VZmCCQDT3geXUO5ZRMhDToa1pkCeQXuNo+0g+NfDOVPA==} + emoji-regex@10.3.0: + resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -3999,8 +3917,8 @@ packages: resolution: {integrity: sha512-n6e4bsCpzsP0OB76X+vEWhySUQI8GHPVFVK+3QkX35tbryy2WoeGeK5kQ+oxzgDVHjIZyz5fyS60Mi3EpQLc0Q==} engines: {node: '>=0.6'} - enhanced-resolve@5.15.0: - resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} + enhanced-resolve@5.16.0: + resolution: {integrity: sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==} engines: {node: '>=10.13.0'} ensure-posix-path@1.1.1: @@ -4010,6 +3928,10 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + eol@0.9.1: resolution: {integrity: sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==} @@ -4023,8 +3945,8 @@ packages: error-stack-parser@2.1.4: resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} - es-abstract@1.22.3: - resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} + es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} engines: {node: '>= 0.4'} es-define-property@1.0.0: @@ -4035,11 +3957,16 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-iterator-helpers@1.0.15: - resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==} + es-iterator-helpers@1.0.19: + resolution: {integrity: sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==} + engines: {node: '>= 0.4'} - es-set-tostringtag@2.0.2: - resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} + es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} engines: {node: '>= 0.4'} es-shim-unscopables@1.0.2: @@ -4049,18 +3976,13 @@ packages: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} - esbuild@0.19.12: - resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} - engines: {node: '>=12'} - hasBin: true - esbuild@0.20.2: resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} engines: {node: '>=12'} hasBin: true - escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} escape-string-regexp@1.0.5: @@ -4094,8 +4016,8 @@ packages: eslint: '*' eslint-plugin-import: '*' - eslint-module-utils@2.8.0: - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + eslint-module-utils@2.8.1: + resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -4115,8 +4037,8 @@ packages: eslint-import-resolver-webpack: optional: true - eslint-plugin-import@2.29.0: - resolution: {integrity: sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==} + eslint-plugin-import@2.29.1: + resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -4137,13 +4059,13 @@ packages: peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - eslint-plugin-react-refresh@0.4.5: - resolution: {integrity: sha512-D53FYKJa+fDmZMtriODxvhwrO+IOqrxoEo21gMA0sjHdU6dPVH4OhyFip9ypl8HOF5RV5KdTo+rBQLvnY2cO8w==} + eslint-plugin-react-refresh@0.4.6: + resolution: {integrity: sha512-NjGXdm7zgcKRkKMua34qVO9doI7VOxZ6ancSvBELJSSoX97jyndXcSoa8XBh69JoB31dNz3EEzlMcizZl7LaMA==} peerDependencies: eslint: '>=7' - eslint-plugin-react@7.33.2: - resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} + eslint-plugin-react@7.34.1: + resolution: {integrity: sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==} engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 @@ -4205,10 +4127,6 @@ packages: resolution: {integrity: sha512-XctvKaEMaj1Ii9oDOqbW/6e1gXknSY4g/aLCDicOXqBE4M0nRWkUu0PTp++UPNzoFY12BNHMfs/VadKIS6llvg==} engines: {node: '>=8.3.0'} - execa@7.2.0: - resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} - engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} - execa@8.0.1: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} @@ -4226,8 +4144,8 @@ packages: fast-fifo@1.3.2: resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} - fast-glob@3.3.1: - resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} fast-json-stable-stringify@2.1.0: @@ -4239,9 +4157,6 @@ packages: fast-loops@1.1.3: resolution: {integrity: sha512-8EZzEP0eKkEEVX+drtd9mtuQ+/QrlfW/5MlwcwK5Nds6EkZ/tRzEexkzUY2mIssnAyVLT+TKHuRXmFNNXYUd6g==} - fast-memoize@2.5.2: - resolution: {integrity: sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==} - fast-shallow-equal@1.0.0: resolution: {integrity: sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==} @@ -4251,8 +4166,8 @@ packages: fastest-stable-stringify@2.0.2: resolution: {integrity: sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q==} - fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} fault@1.0.4: resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==} @@ -4282,18 +4197,18 @@ packages: resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} engines: {node: '>=18'} - flat-cache@3.0.4: - resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} - flatted@3.2.7: - resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} + flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} fnv-plus@1.3.1: resolution: {integrity: sha512-Gz1EvfOneuFfk4yG458dJ3TLJ7gV19q3OM/vVvvHf7eT02Hm1DleB4edsia6ahbKgAYxO9gvyQ1ioWZR+a00Yw==} - follow-redirects@1.15.5: - resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==} + follow-redirects@1.15.6: + resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -4312,12 +4227,15 @@ packages: resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} engines: {node: '>=0.4.x'} - framer-motion@11.0.8: - resolution: {integrity: sha512-1KSGNuqe1qZkS/SWQlDnqK2VCVzRVEoval379j0FiUBJAZoqgwyvqFkfvJbgW2IPFo4wX16K+M0k5jO23lCIjA==} + framer-motion@11.1.7: + resolution: {integrity: sha512-cW11Pu53eDAXUEhv5hEiWuIXWhfkbV32PlgVISn7jRdcAiVrJ1S03YQQ0/DzoswGYYwKi4qYmHHjCzAH52eSdQ==} peerDependencies: + '@emotion/is-prop-valid': '*' react: ^18.2.0 react-dom: ^18.2.0 peerDependenciesMeta: + '@emotion/is-prop-valid': + optional: true react: optional: true react-dom: @@ -4379,27 +4297,24 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-intrinsic@1.2.2: - resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} + get-east-asian-width@1.2.0: + resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} + engines: {node: '>=18'} get-intrinsic@1.2.4: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} - get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - get-stream@8.0.1: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} - get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} - get-tsconfig@4.7.2: - resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} + get-tsconfig@4.7.3: + resolution: {integrity: sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==} git-raw-commits@4.0.0: resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==} @@ -4414,8 +4329,8 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - glob-stream@8.0.0: - resolution: {integrity: sha512-CdIUuwOkYNv9ZadR3jJvap8CMooKziQZ/QCSPhEb7zqfsEI5YnPmvca7IvbaVE3z58ZdUYD2JsU6AUWjL8WZJA==} + glob-stream@8.0.2: + resolution: {integrity: sha512-R8z6eTB55t3QeZMmU1C+Gv+t5UnNRkA55c5yo67fAVfxODxieTwsjNG7utxS/73NdP1NbDgCrhVEg2h00y4fFw==} engines: {node: '>=10.13.0'} glob@7.2.3: @@ -4472,26 +4387,23 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - has-property-descriptors@1.0.1: - resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} - has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} engines: {node: '>= 0.4'} has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} - has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} - hasown@2.0.0: - resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} hast-util-parse-selector@2.2.5: @@ -4529,10 +4441,6 @@ packages: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} - human-signals@4.3.1: - resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} - engines: {node: '>=14.18.0'} - human-signals@5.0.0: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} @@ -4545,19 +4453,19 @@ packages: hyphenate-style-name@1.0.4: resolution: {integrity: sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==} - i18next-browser-languagedetector@7.2.0: - resolution: {integrity: sha512-U00DbDtFIYD3wkWsr2aVGfXGAj2TgnELzOX9qv8bT0aJtvPV9CRO77h+vgmHFBMe7LAxdwvT/7VkCWGya6L3tA==} + i18next-browser-languagedetector@7.2.1: + resolution: {integrity: sha512-h/pM34bcH6tbz8WgGXcmWauNpQupCGr25XPp9cZwZInR9XHSjIFDYp1SIok7zSPsTOMxdvuLyu86V+g2Kycnfw==} - i18next-http-backend@2.5.0: - resolution: {integrity: sha512-Z/aQsGZk1gSxt2/DztXk92DuDD20J+rNudT7ZCdTrNOiK8uQppfvdjq9+DFQfpAnFPn3VZS+KQIr1S/W1KxhpQ==} + i18next-http-backend@2.5.1: + resolution: {integrity: sha512-+rNX1tghdVxdfjfPt0bI1sNg5ahGW9kA7OboG7b4t03Fp69NdDlRIze6yXhIbN8rbHxJ8IP4dzRm/okZ15lkQg==} i18next-parser@8.13.0: resolution: {integrity: sha512-XU7resoeNcpJazh29OncQQUH6HsgCxk06RqBBDAmLHldafxopfCHY1vElyG/o3EY0Sn7XjelAmPTV0SgddJEww==} engines: {node: '>=16.0.0 || >=18.0.0 || >=20.0.0', npm: '>=6', yarn: '>=1'} hasBin: true - i18next@23.10.0: - resolution: {integrity: sha512-/TgHOqsa7/9abUKJjdPeydoyDc0oTi/7u9F8lMSj6ufg4cbC1Oj3f/Jja7zj7WRIhEQKB7Q4eN6y68I9RDxxGQ==} + i18next@23.11.2: + resolution: {integrity: sha512-qMBm7+qT8jdpmmDw/kQD16VpmkL9BdL+XNAK5MNbNFaf1iQQq35ZbPrSlqmnNPOSUY4m342+c0t0evinF5l7sA==} iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} @@ -4573,8 +4481,8 @@ packages: immediate@3.0.6: resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} - immer@10.0.3: - resolution: {integrity: sha512-pwupu3eWfouuaowscykeckFmVTpqbzW+rXFCX8rQLkZzM9ftBmU/++Ra+o+L27mz03zJTlyV4UUr+fdKNffo4A==} + immer@10.0.4: + resolution: {integrity: sha512-cuBuGK40P/sk5IzWa9QPUaAdvPHjkk1c+xYsd9oZw+YQQEV+10G0P5uMpGctZZKnyQ+ibRO08bD25nWLmYi2pw==} import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} @@ -4603,8 +4511,8 @@ packages: inline-style-prefixer@7.0.0: resolution: {integrity: sha512-I7GEdScunP1dQ6IM2mQWh6v0mOYdYmH3Bp31UecKdrcUgcURTcctSe1IECdUznSHKSmsHtjrT3CwCPI1pyxfUQ==} - internal-slot@1.0.6: - resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} + internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} engines: {node: '>= 0.4'} invariant@2.2.4: @@ -4616,8 +4524,9 @@ packages: is-alphanumerical@1.0.4: resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} - is-array-buffer@3.0.2: - resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} @@ -4651,6 +4560,10 @@ packages: is-core-module@2.13.1: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} @@ -4678,6 +4591,10 @@ packages: resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} engines: {node: '>=12'} + is-fullwidth-code-point@5.0.0: + resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} + engines: {node: '>=18'} + is-generator-function@1.0.10: resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} engines: {node: '>= 0.4'} @@ -4689,15 +4606,16 @@ packages: is-hexadecimal@1.0.4: resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} - is-map@2.0.2: - resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} is-negated-glob@1.0.0: resolution: {integrity: sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==} engines: {node: '>=0.10.0'} - is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} is-number-object@1.0.7: @@ -4728,11 +4646,13 @@ packages: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} - is-set@2.0.2: - resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} - is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} @@ -4750,22 +4670,24 @@ packages: resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} engines: {node: '>=8'} - is-typed-array@1.1.12: - resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} engines: {node: '>= 0.4'} is-valid-glob@1.0.0: resolution: {integrity: sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==} engines: {node: '>=0.10.0'} - is-weakmap@2.0.1: - resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} - is-weakset@2.0.2: - resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} + is-weakset@2.0.3: + resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} + engines: {node: '>= 0.4'} is-wsl@2.2.0: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} @@ -4809,6 +4731,9 @@ packages: engines: {node: '>=4'} hasBin: true + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} @@ -4853,6 +4778,9 @@ packages: jszip@3.10.1: resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + kleur@4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} @@ -4886,9 +4814,9 @@ packages: lie@3.3.0: resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} - lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} + lilconfig@3.0.0: + resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} + engines: {node: '>=14'} lilconfig@3.1.1: resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==} @@ -4897,22 +4825,17 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - lint-staged@13.3.0: - resolution: {integrity: sha512-mPRtrYnipYYv1FEE134ufbWpeggNTo+O/UPzngoaKzbzHAthvR55am+8GfHTnqNRQVRRrYQLGW9ZyUoD7DsBHQ==} - engines: {node: ^16.14.0 || >=18.0.0} + lint-staged@15.2.2: + resolution: {integrity: sha512-TiTt93OPh1OZOsb5B7k96A/ATl2AjIZo+vnzFZ6oHK5FuTk63ByDtxGQpHm+kFETjEWqgkF95M8FRXKR/LEBcw==} + engines: {node: '>=18.12.0'} hasBin: true listenercount@1.0.1: resolution: {integrity: sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==} - listr2@6.6.1: - resolution: {integrity: sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==} - engines: {node: '>=16.0.0'} - peerDependencies: - enquirer: '>= 2.3.0 < 3' - peerDependenciesMeta: - enquirer: - optional: true + listr2@8.0.1: + resolution: {integrity: sha512-ovJXBXkKGfq+CwmKTjluEqFi3p4h8xvkxGQQAQan22YCgef4KZ1mKGjzfGh6PL6AW5Csw0QiQPNuQyH+6Xk3hA==} + engines: {node: '>=18.0.0'} localforage@1.10.0: resolution: {integrity: sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==} @@ -4994,9 +4917,9 @@ packages: lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - log-update@5.0.1: - resolution: {integrity: sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + log-update@6.0.0: + resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==} + engines: {node: '>=18'} longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} @@ -5028,16 +4951,15 @@ packages: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} + magic-string@0.30.10: + resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} + magic-string@0.30.8: resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} engines: {node: '>=12'} - magic-string@0.30.9: - resolution: {integrity: sha512-S1+hd+dIrC8EZqKyT9DstTH/0Z+f76kmmvZnkfQVmOpDEF9iVgdYif3Q/pIWHmCoo59bQVGW0kVL3e2nl+9+Sw==} - engines: {node: '>=12'} - - mammoth@1.7.0: - resolution: {integrity: sha512-ptFhft61dqieLffpdpHD7PUS0cX9YvHQIO3n3ejRhj1bi5Na+RL5wovtNHHXAK6Oj554XfGrVcyTuxgegN6umw==} + mammoth@1.7.1: + resolution: {integrity: sha512-ckxfvNH5sUaJh+SbYbxpvB7urZTGS02jA91rFCNiL928CgE9FXXMyXxcJBY0n+CpmKE/eWh7qaV0+v+Dbwun3Q==} engines: {node: '>=12.0.0'} hasBin: true @@ -5262,6 +5184,9 @@ packages: ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + nano-css@5.6.1: resolution: {integrity: sha512-T2Mhc//CepkTa3X4pUhKgbEheJHYAxD0VptuqFhDbGMUWVV2m+lkNiW/Ieuj35wrfC8Zm0l7HvssQh7zcEttSw==} peerDependencies: @@ -5306,8 +5231,8 @@ packages: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} - npm-run-path@5.1.0: - resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} + npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} nth-check@2.1.1: @@ -5324,26 +5249,28 @@ packages: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} - object.assign@4.1.4: - resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} + object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} engines: {node: '>= 0.4'} - object.entries@1.1.7: - resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} + object.entries@1.1.8: + resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} engines: {node: '>= 0.4'} - object.fromentries@2.0.7: - resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} + object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} engines: {node: '>= 0.4'} - object.groupby@1.0.1: - resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} + object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} - object.hasown@1.1.3: - resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} + object.hasown@1.1.4: + resolution: {integrity: sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==} + engines: {node: '>= 0.4'} - object.values@1.1.7: - resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + object.values@1.2.0: + resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} engines: {node: '>= 0.4'} once@1.4.0: @@ -5458,15 +5385,19 @@ packages: engines: {node: '>=0.10'} hasBin: true - postcss@8.4.35: - resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + + postcss@8.4.38: + resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} engines: {node: ^10 || ^12 || >=14} - posthog-js@1.116.6: - resolution: {integrity: sha512-rvt8HxzJD4c2B/xsUa4jle8ApdqljeBI2Qqjp4XJMohQf18DXRyM6b96H5/UMs8jxYuZG14Er0h/kEIWeU6Fmw==} + posthog-js@1.129.0: + resolution: {integrity: sha512-Vddg6Shbum/SxFFUYrEUMu6PmFk7tNHIxTXQwtqrYtar6YKUXDUslW8kf8vwsK09AOglX7ISynisSJ8u/MzicA==} - preact@10.20.1: - resolution: {integrity: sha512-JIFjgFg9B2qnOoGiYMVBtrcFxHqn+dNXbq76bVmcaHYJFYR4lW67AOcXgAYQQTDYXDOg/kTZrKPNCdRgJ2UJmw==} + preact@10.20.2: + resolution: {integrity: sha512-S1d1ernz3KQ+Y2awUxKakpfOg2CEmJmwOP+6igPx6dgr6pgDvenqYviyokWso2rhHvGtTlWWnJDa7RaPbQerTg==} prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} @@ -5475,6 +5406,7 @@ packages: prettier@3.2.5: resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} engines: {node: '>=14'} + hasBin: true prismjs@1.27.0: resolution: {integrity: sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==} @@ -5501,8 +5433,8 @@ packages: property-information@5.6.0: resolution: {integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==} - property-information@6.4.1: - resolution: {integrity: sha512-OHYtXfu5aI2sS2LWFSN5rgJjrQ4pCy8i1jubJLe2QvMF8JJ++HXTUIVWFLfXJoaOfvYYjk2SN8J2wFUWIGXT4w==} + property-information@6.5.0: + resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} @@ -5510,8 +5442,8 @@ packages: prr@1.0.1: resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} - punycode@2.3.0: - resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} qrcode.react@3.1.0: @@ -5519,8 +5451,8 @@ packages: peerDependencies: react: ^18.2.0 - qs@6.12.0: - resolution: {integrity: sha512-trVZiI6RMOkO476zLGaBIzszOdFPnCCXHPG9kn0yuS1uz6xdVxPfZdB3vUig9pxPFDM9BRAgz/YUIVQ1/vuiUg==} + qs@6.12.1: + resolution: {integrity: sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==} engines: {node: '>=0.6'} queue-microtask@1.2.3: @@ -5535,8 +5467,8 @@ packages: raf-schd@4.0.3: resolution: {integrity: sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ==} - rc-cascader@3.24.0: - resolution: {integrity: sha512-NwkYsVULA61S085jbOYbq8Z7leyIxVmLwf+71mWLjA3kCfUf/rAKC0WfjQbqBDaLGlU9d4z1EzyPaHBKLYWv6A==} + rc-cascader@3.24.1: + resolution: {integrity: sha512-RgKuYgEGPx+6wCgguYFHjMsDZdCyydZd58YJRCfYQ8FObqLnZW0x/vUcEyPjhWIj1EhjV958IcR+NFPDbbj9kg==} peerDependencies: react: ^18.2.0 react-dom: ^18.2.0 @@ -5547,8 +5479,8 @@ packages: react: ^18.2.0 react-dom: ^18.2.0 - rc-collapse@3.7.2: - resolution: {integrity: sha512-ZRw6ipDyOnfLFySxAiCMdbHtb5ePAsB9mT17PA6y1mRD/W6KHRaZeb5qK/X9xDV1CqgyxMpzw0VdS74PCcUk4A==} + rc-collapse@3.7.3: + resolution: {integrity: sha512-60FJcdTRn0X5sELF18TANwtVi7FtModq649H11mYF1jh83DniMoM4MqY627sEKRCTm4+WXfGDcB7hY5oW6xhyw==} peerDependencies: react: ^18.2.0 react-dom: ^18.2.0 @@ -5571,8 +5503,8 @@ packages: react: ^18.2.0 react-dom: ^18.2.0 - rc-field-form@1.42.1: - resolution: {integrity: sha512-SqiEmWNP+I61Lt80+ofPvT+3l8Ij6vb35IS+x14gheVnCJN0SRnOwEgsqCEB5FslT7xqjUqDnU845hRZ1jzlAA==} + rc-field-form@1.44.0: + resolution: {integrity: sha512-el7w87fyDUsca63Y/s8qJcq9kNkf/J5h+iTdqG5WsSHLH0e6Usl7QuYSmSVzJMgtp40mOVZIY/W/QP9zwrp1FA==} engines: {node: '>=8.x'} peerDependencies: react: ^18.2.0 @@ -5590,8 +5522,8 @@ packages: react: ^18.2.0 react-dom: ^18.2.0 - rc-input@1.4.3: - resolution: {integrity: sha512-aHyQUAIRmTlOnvk5EcNqEpJ+XMtfMpYRAJayIlJfsvvH9cAKUWboh4egm23vgMA7E+c/qm4BZcnrDcA960GC1w==} + rc-input@1.4.5: + resolution: {integrity: sha512-AjzykhwnwYTRSwwgCu70CGKBIAv6bP2nqnFptnNTprph/TF1BAs0Qxl91mie/BR6n827WIJB6ZjaRf9iiMwAfw==} peerDependencies: react: ^18.2.0 react-dom: ^18.2.0 @@ -5614,8 +5546,8 @@ packages: react: ^18.2.0 react-dom: ^18.2.0 - rc-notification@5.3.0: - resolution: {integrity: sha512-WCf0uCOkZ3HGfF0p1H4Sgt7aWfipxORWTPp7o6prA3vxwtWhtug3GfpYls1pnBp4WA+j8vGIi5c2/hQRpGzPcQ==} + rc-notification@5.4.0: + resolution: {integrity: sha512-li19y9RoYJciF3WRFvD+DvWS70jdL8Fr+Gfb/OshK+iY6iTkwzoigmSIp76/kWh5tF5i/i9im12X3nsF85GYdA==} engines: {node: '>=8.x'} peerDependencies: react: ^18.2.0 @@ -5633,8 +5565,8 @@ packages: react: ^18.2.0 react-dom: ^18.2.0 - rc-picker@4.3.0: - resolution: {integrity: sha512-bQNB/+NdW55jlQ5lPnNqF5J90Tq4SihLbAF7tzPBvGDJyoYmDgwLm4FN0ZB3Ot9i1v6vJY/1mgqZZTT9jbYc5w==} + rc-picker@4.4.2: + resolution: {integrity: sha512-MdbAXvwiGyhb+bHe66qPps8xPQivzEgcyCp3/MPK4T+oER0gOmVRCEDxaD4FhYG/7GLH3rDrHpu79BvEn2JFTQ==} engines: {node: '>=8.x'} peerDependencies: date-fns: '>= 2.x' @@ -5653,8 +5585,8 @@ packages: moment: optional: true - rc-progress@3.5.1: - resolution: {integrity: sha512-V6Amx6SbLRwPin/oD+k1vbPrO8+9Qf8zW1T8A7o83HdNafEVvAxPV5YsgtKFP+Ud5HghLj33zKOcEHrcrUGkfw==} + rc-progress@4.0.0: + resolution: {integrity: sha512-oofVMMafOCokIUIBnZLNcOZFsABaUw8PPrf1/y0ZBvKZNpOiu5h4AO9vv11Sw0p4Hb3D0yGWuEattcQGtNJ/aw==} peerDependencies: react: ^18.2.0 react-dom: ^18.2.0 @@ -5678,15 +5610,15 @@ packages: react: ^18.2.0 react-dom: ^18.2.0 - rc-select@14.13.0: - resolution: {integrity: sha512-ew34FsaqHokK4dxVrcIxSYrgWJ2XJYlkk32eiOIiEo3GkHUExdCzmozMYaUc2P67c5QJRUvvY0uqCs3QG67h5A==} + rc-select@14.13.1: + resolution: {integrity: sha512-A1VHqjIOemxLnUGRxLGVqXBs8jGcJemI5NXxOJwU5PQc1wigAu1T4PRLgMkTPDOz8gPhlY9dwsPzMgakMc2QjQ==} engines: {node: '>=8.x'} peerDependencies: react: ^18.2.0 react-dom: ^18.2.0 - rc-slider@10.5.0: - resolution: {integrity: sha512-xiYght50cvoODZYI43v3Ylsqiw14+D7ELsgzR40boDZaya1HFa1Etnv9MDkQE8X/UrXAffwv2AcNAhslgYuDTw==} + rc-slider@10.6.2: + resolution: {integrity: sha512-FjkoFjyvUQWcBo1F3RgSglky3ar0+qHLM41PlFVYB4Bj3RD8E/Mv7kqMouLFBU+3aFglMzzctAIWRwajEuueSw==} engines: {node: '>=8.x'} peerDependencies: react: ^18.2.0 @@ -5705,8 +5637,8 @@ packages: react: ^18.2.0 react-dom: ^18.2.0 - rc-table@7.42.0: - resolution: {integrity: sha512-GwHV9Zs3HvWxBkoXatO/IeKoElzy3Ojf3dcyw1Rj3cyQVb+ZHtexslKdyzsrKRPJ0mUa62BoX+ZAg3zgTEql8w==} + rc-table@7.45.4: + resolution: {integrity: sha512-6aSbGrnkN2GLSt3s1x+wa4f3j/VEgg1uKPpaLY5qHH1/nFyreS2V7DFJ0TfUb18allf2FQl7oVYEjTixlBXEyQ==} engines: {node: '>=8.x'} peerDependencies: react: ^18.2.0 @@ -5750,27 +5682,27 @@ packages: react: ^18.2.0 react-dom: ^18.2.0 - rc-util@5.38.2: - resolution: {integrity: sha512-yRGRPKyi84H7NkRSP6FzEIYBdUt4ufdsmXUZ7qM2H5qoByPax70NnGPkfo36N+UKUnUBj2f2Q2eUbwYMuAsIOQ==} + rc-util@5.39.1: + resolution: {integrity: sha512-OW/ERynNDgNr4y0oiFmtes3rbEamXw7GHGbkbNd9iRr7kgT03T6fT0b9WpJ3mbxKhyOcAHnGcIoh5u/cjrC2OQ==} peerDependencies: react: ^18.2.0 react-dom: ^18.2.0 - rc-util@5.39.1: - resolution: {integrity: sha512-OW/ERynNDgNr4y0oiFmtes3rbEamXw7GHGbkbNd9iRr7kgT03T6fT0b9WpJ3mbxKhyOcAHnGcIoh5u/cjrC2OQ==} + rc-virtual-list@3.11.5: + resolution: {integrity: sha512-iZRW99m5jAxtwKNPLwUrPryurcnKpXBdTyhuBp6ythf7kg/otKO5cCiIvL55GQwU0QGSlouQS0tnkciRMJUwRQ==} + engines: {node: '>=8.x'} peerDependencies: react: ^18.2.0 react-dom: ^18.2.0 - rc-virtual-list@3.11.4: - resolution: {integrity: sha512-NbBi0fvyIu26gP69nQBiWgUMTPX3mr4FcuBQiVqagU0BnuX8WQkiivnMs105JROeuUIFczLrlgUhLQwTWV1XDA==} - engines: {node: '>=8.x'} + re-resizable@6.9.14: + resolution: {integrity: sha512-2UbPrpezMr6gkHKNCRA/N6QGGU237SKOZ78yMHId204A/oXWSAREAIuGZNQ9qlrJosewzcsv2CphZH3u7hC6ng==} peerDependencies: react: ^18.2.0 react-dom: ^18.2.0 - re-resizable@6.9.6: - resolution: {integrity: sha512-0xYKS5+Z0zk+vICQlcZW+g54CcJTTmHluA7JUUgvERDxnKAnytylcyPsA+BSFi759s5hPlHmBRegFrwXs2FuBQ==} + re-resizable@6.9.16: + resolution: {integrity: sha512-D9+ofwgPQRC6PL6cwavCZO9MUR8TKKxV1nHjbutSdNaFHK9v5k8m6DcESMXrw1+mRJn7fBHJRhZpa7EQ1ZWEEA==} peerDependencies: react: ^18.2.0 react-dom: ^18.2.0 @@ -5786,14 +5718,14 @@ packages: peerDependencies: react: ^18.2.0 - react-draggable@4.4.5: - resolution: {integrity: sha512-OMHzJdyJbYTZo4uQE393fHcqqPYsEtkjfMgvCHr6rejT+Ezn4OZbNyGH50vv+SunC1RMvwOTSWkEODQLzw1M9g==} + react-draggable@4.4.6: + resolution: {integrity: sha512-LtY5Xw1zTPqHkVmtM3X8MUOxNDOUhv/khTgBgrUvwaS064bwVvxT+q5El0uUFNx5IEPKXuRejr7UqLwBIg5pdw==} peerDependencies: react: ^18.2.0 react-dom: ^18.2.0 - react-easy-crop@5.0.5: - resolution: {integrity: sha512-GH7Jw3898ytSaN4i4Oxi7j3BKzapZ2pVgnKIl+gFIUjA+NsDgdBSIpiBQUrPFIvHzSnPmz0kGCpX95X6NgsDzA==} + react-easy-crop@5.0.6: + resolution: {integrity: sha512-LV8te8NGC72k3l8uAqPAw73D2i9AbRlZqyo1Xz8VetwiMfkSKYgyqE3IFEwf5h+1g7AS1nMxBKk6ZPdhvLw6MQ==} peerDependencies: react: ^18.2.0 react-dom: ^18.2.0 @@ -5807,16 +5739,16 @@ packages: react: ^18.2.0 react-dom: ^18.2.0 - react-hook-form@7.51.2: - resolution: {integrity: sha512-y++lwaWjtzDt/XNnyGDQy6goHskFualmDlf+jzEZvjvz6KWDf7EboL7pUvRCzPTJd0EOPpdekYaQLEvvG6m6HA==} + react-hook-form@7.51.3: + resolution: {integrity: sha512-cvJ/wbHdhYx8aviSWh28w9ImjmVsb5Y05n1+FW786vEZQJV5STNM0pW6ujS+oiBecb0ARBxJFyAnXj9+GHXACQ==} engines: {node: '>=12.22.0'} peerDependencies: react: ^18.2.0 - react-i18next@14.0.5: - resolution: {integrity: sha512-5+bQSeEtgJrMBABBL5lO7jPdSNAbeAZ+MlFWDw//7FnVacuVu3l9EeWFzBQvZsKy+cihkbThWOAThEdH8YjGEw==} + react-i18next@14.1.1: + resolution: {integrity: sha512-QSiKw+ihzJ/CIeIYWrarCmXJUySHDwQr5y8uaNIkbxoGRm/5DukkxZs+RPla79IKyyDPzC/DRlgQCABHtrQuQQ==} peerDependencies: - i18next: ^23.10.0 + i18next: ^23.11.2 react: ^18.2.0 react-dom: '*' react-native: '*' @@ -5835,13 +5767,13 @@ packages: react-markdown@8.0.7: resolution: {integrity: sha512-bvWbzG4MtOU62XqBx3Xx+zB2raaFFsq4mYiAzfjXJMEz2sixgeAfraA3tvzULF02ZdOMUOKTBFFaZJDDrq+BJQ==} peerDependencies: - '@types/react': ^18.2.62 + '@types/react': ^18.2.79 react: ^18.2.0 - react-redux@9.1.0: - resolution: {integrity: sha512-6qoDzIO+gbrza8h3hjMA9aq4nwVFCKFtY2iLxCtVT38Swyy2C/dJCGBXHeHLtx6qlg/8qzc2MrhOeduf5K32wQ==} + react-redux@9.1.1: + resolution: {integrity: sha512-5ynfGDzxxsoV73+4czQM56qF43vsmgJsO22rmAvU5tZT2z5Xow/A2uhhxwXuGTxgdReF3zcp7A80gma2onRs1A==} peerDependencies: - '@types/react': ^18.2.62 + '@types/react': ^18.2.79 react: ^18.2.0 react-native: '>=0.69' redux: ^5.0.0 @@ -5853,21 +5785,21 @@ packages: redux: optional: true - react-rnd@10.4.1: - resolution: {integrity: sha512-0m887AjQZr6p2ADLNnipquqsDq4XJu/uqVqI3zuoGD19tRm6uB83HmZWydtkilNp5EWsOHbLGF4IjWMdd5du8Q==} + react-rnd@10.4.10: + resolution: {integrity: sha512-YjQAgEeSbNUoOXSD9ZBvIiLVizFb+bNhpDk8DbIRHA557NW02CXbwsAeOTpJQnsdhEL+NP2I+Ssrwejqcodtjg==} peerDependencies: react: ^18.2.0 react-dom: ^18.2.0 - react-router-dom@6.22.2: - resolution: {integrity: sha512-WgqxD2qySEIBPZ3w0sHH+PUAiamDeszls9tzqMPBDA1YYVucTBXLU7+gtRfcSnhe92A3glPnvSxK2dhNoAVOIQ==} + react-router-dom@6.23.0: + resolution: {integrity: sha512-Q9YaSYvubwgbal2c9DJKfx6hTNoBp3iJDsl+Duva/DwxoJH+OTXkxGpql4iUK2sla/8z4RpjAm6EWx1qUDuopQ==} engines: {node: '>=14.0.0'} peerDependencies: react: ^18.2.0 react-dom: ^18.2.0 - react-router@6.22.2: - resolution: {integrity: sha512-YD3Dzprzpcq+tBMHBS822tCjnWD3iIZbTeSXMY9LPSG541EfoBGyZ3bS25KEnaZjLcmQpw2AVLkFyfgXY8uvcw==} + react-router@6.23.0: + resolution: {integrity: sha512-wPMZ8S2TuPadH0sF5irFGjkNLIcRvOSaEe7v+JER8508dyJumm6XZB1u5kztlX0RVq6AzRVndzqcUh6sFIauzA==} engines: {node: '>=14.0.0'} peerDependencies: react: ^18.2.0 @@ -5895,8 +5827,8 @@ packages: react: ^18.2.0 tslib: '*' - react-use-intercom@5.3.0: - resolution: {integrity: sha512-sS93lEe4lpDl8DrLdLbqocOJOm2AjQzoq0KR2L8pCU5pXVUhr8C4yzNR4ek4pIvPrLGW7BFz1rOlRYHAcHL+UA==} + react-use-intercom@5.4.0: + resolution: {integrity: sha512-fMOfylJoFQbXdVNbsXbNZrK+Qwc45AqjZFzkq8gclxiK72FcZl7IUKbm3g+EVKd6QoNX2AHpDD7sqAEwMvzFaQ==} peerDependencies: react: ^18.2.0 react-dom: ^18.2.0 @@ -5939,8 +5871,8 @@ packages: redux@5.0.1: resolution: {integrity: sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==} - reflect.getprototypeof@1.0.4: - resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==} + reflect.getprototypeof@1.0.6: + resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} engines: {node: '>= 0.4'} refractor@3.6.0: @@ -5953,17 +5885,14 @@ packages: regenerate@1.4.2: resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} - regenerator-runtime@0.14.0: - resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} - regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} regenerator-transform@0.15.2: resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} - regexp.prototype.flags@1.5.1: - resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} + regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} engines: {node: '>= 0.4'} regexpu-core@5.3.2: @@ -6070,8 +5999,8 @@ packages: rollup: optional: true - rollup@4.12.0: - resolution: {integrity: sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q==} + rollup@4.16.4: + resolution: {integrity: sha512-kuaTJSUbz+Wsb2ATGvEknkI12XV40vIiHmLuFlejoo7HtDok/O5eDDD0UpCVY5bBX5U5RYo8wWP83H7ZsqVEnA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -6092,15 +6021,19 @@ packages: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} engines: {node: '>=6'} - safe-array-concat@1.0.1: - resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} + safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} engines: {node: '>=0.4'} safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - safe-regex-test@1.0.0: - resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -6128,16 +6061,12 @@ packages: engines: {node: '>=10'} hasBin: true - set-function-length@1.1.1: - resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} - engines: {node: '>= 0.4'} - set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} - set-function-name@2.0.1: - resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} engines: {node: '>= 0.4'} set-harmonic-interval@1.0.1: @@ -6158,9 +6087,6 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} - side-channel@1.0.6: resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} engines: {node: '>= 0.4'} @@ -6183,6 +6109,10 @@ packages: resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} engines: {node: '>=12'} + slice-ansi@7.1.0: + resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} + engines: {node: '>=18'} + snake-case@3.0.4: resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} @@ -6190,8 +6120,8 @@ packages: resolution: {integrity: sha512-Pdz01AvCAottHTPQGzndktFNdbRA75BgOfeT1hH+AMnJFv8lynkPi42rfeEhpx1saTEI3YNMWxfqu0sFD1G8pw==} engines: {node: '>=12'} - source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} source-map-support@0.5.21: @@ -6261,29 +6191,34 @@ packages: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} - string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} + string-width@7.1.0: + resolution: {integrity: sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==} + engines: {node: '>=18'} string.fromcodepoint@0.2.1: resolution: {integrity: sha512-n69H31OnxSGSZyZbgBlvYIXlrMhJQ0dQAX1js1QDhpaUH6zmU3QYlj07bCwCNlPOu3oRXIubGPl2gDGnHsiCqg==} - string.prototype.matchall@4.0.10: - resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} + string.prototype.matchall@4.0.11: + resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} + engines: {node: '>= 0.4'} - string.prototype.trim@1.2.8: - resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} + string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} engines: {node: '>= 0.4'} - string.prototype.trimend@1.0.7: - resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} - string.prototype.trimstart@1.0.7: - resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -6313,8 +6248,8 @@ packages: stylis@4.2.0: resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} - stylis@4.3.1: - resolution: {integrity: sha512-EQepAV+wMsIaGVGX1RECzgrcqRRU/0sYOHkeLsZ3fzHaHXZy4DaOOX0vOlGQdlsjkh3mFHAIlVimpwAs4dslyQ==} + stylis@4.3.2: + resolution: {integrity: sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==} supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} @@ -6356,8 +6291,8 @@ packages: resolution: {integrity: sha512-Z8uvtdWIlFn1GWy0HW5FhZ8VDryZwoJUdnjZU25C7/PBOltLIn1uv+WF3rVq6S1761YbsmbZYRP/l0ZJBCkvrw==} hasBin: true - terser@5.30.3: - resolution: {integrity: sha512-STdUgOUx8rLbMGO9IOwHLpCqolkDITFFQSMYYwKE1N2lY6MVSaeoi10z/EhWxRc6ybqoVmKSkhKYH/XUpl7vSA==} + terser@5.30.4: + resolution: {integrity: sha512-xRdd0v64a8mFK9bnsKVdoNP9GQIKUAaJPTaqEQDL4w/J8WaW4sWXXoMZ+6SimPkfT5bElreXf8m9HnmPc3E1BQ==} engines: {node: '>=10'} hasBin: true @@ -6419,59 +6354,56 @@ packages: trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - ts-api-utils@1.0.2: - resolution: {integrity: sha512-Cbu4nIqnEdd+THNEsBdkolnOXhg0I8XteoHaEKgvsxpsbWda4IsUut2c187HxywQCvveojow0Dgw/amxtSKVkQ==} - engines: {node: '>=16.13.0'} + ts-api-utils@1.3.0: + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} peerDependencies: typescript: '>=4.2.0' ts-easing@0.2.0: resolution: {integrity: sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==} - tsconfig-paths@3.14.2: - resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} tslib@2.0.1: resolution: {integrity: sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ==} - tslib@2.3.1: - resolution: {integrity: sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==} - tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - turbo-darwin-64@1.12.4: - resolution: {integrity: sha512-dBwFxhp9isTa9RS/fz2gDVk5wWhKQsPQMozYhjM7TT4jTrnYn0ZJMzr7V3B/M/T8QF65TbniW7w1gtgxQgX5Zg==} + turbo-darwin-64@1.13.2: + resolution: {integrity: sha512-CCSuD8CfmtncpohCuIgq7eAzUas0IwSbHfI8/Q3vKObTdXyN8vAo01gwqXjDGpzG9bTEVedD0GmLbD23dR0MLA==} cpu: [x64] os: [darwin] - turbo-darwin-arm64@1.12.4: - resolution: {integrity: sha512-1Uo5iI6xsJ1j9ObsqxYRsa3W26mEbUe6fnj4rQYV6kDaqYD54oAMJ6hM53q9rB8JvFxwdrUXGp3PwTw9A0qqkA==} + turbo-darwin-arm64@1.13.2: + resolution: {integrity: sha512-0HySm06/D2N91rJJ89FbiI/AodmY8B3WDSFTVEpu2+8spUw7hOJ8okWOT0e5iGlyayUP9gr31eOeL3VFZkpfCw==} cpu: [arm64] os: [darwin] - turbo-linux-64@1.12.4: - resolution: {integrity: sha512-ONg2aSqKP7LAQOg7ysmU5WpEQp4DGNxSlAiR7um+LKtbmC/UxogbR5+T+Uuq6zGuQ5kJyKjWJ4NhtvUswOqBsA==} + turbo-linux-64@1.13.2: + resolution: {integrity: sha512-7HnibgbqZrjn4lcfIouzlPu8ZHSBtURG4c7Bedu7WJUDeZo+RE1crlrQm8wuwO54S0siYqUqo7GNHxu4IXbioQ==} cpu: [x64] os: [linux] - turbo-linux-arm64@1.12.4: - resolution: {integrity: sha512-9FPufkwdgfIKg/9jj87Cdtftw8o36y27/S2vLN7FTR2pp9c0MQiTBOLVYadUr1FlShupddmaMbTkXEhyt9SdrA==} + turbo-linux-arm64@1.13.2: + resolution: {integrity: sha512-sUq4dbpk6SNKg/Hkwn256Vj2AEYSQdG96repio894h5/LEfauIK2QYiC/xxAeW3WBMc6BngmvNyURIg7ltrePg==} cpu: [arm64] os: [linux] - turbo-windows-64@1.12.4: - resolution: {integrity: sha512-2mOtxHW5Vjh/5rDVu/aFwsMzI+chs8XcEuJHlY1sYOpEymYTz+u6AXbnzRvwZFMrLKr7J7fQOGl+v96sLKbNdA==} + turbo-windows-64@1.13.2: + resolution: {integrity: sha512-DqzhcrciWq3dpzllJR2VVIyOhSlXYCo4mNEWl98DJ3FZ08PEzcI3ceudlH6F0t/nIcfSItK1bDP39cs7YoZHEA==} cpu: [x64] os: [win32] - turbo-windows-arm64@1.12.4: - resolution: {integrity: sha512-nOY5wae9qnxPOpT1fRuYO0ks6dTwpKMPV6++VkDkamFDLFHUDVM/9kmD2UTeh1yyrKnrZksbb9zmShhmfj1wog==} + turbo-windows-arm64@1.13.2: + resolution: {integrity: sha512-WnPMrwfCXxK69CdDfS1/j2DlzcKxSmycgDAqV0XCYpK/812KB0KlvsVAt5PjEbZGXkY88pCJ1BLZHAjF5FcbqA==} cpu: [arm64] os: [win32] - turbo@1.12.4: - resolution: {integrity: sha512-yUJ7elEUSToiGwFZogXpYKJpQ0BvaMbkEuQECIWtkBLcmWzlMOt6bActsIm29oN83mRU0WbzGt4e8H1KHWedhg==} + turbo@1.13.2: + resolution: {integrity: sha512-rX/d9f4MgRT3yK6cERPAkfavIxbpBZowDQpgvkYwGMGDQ0Nvw1nc0NVjruE76GrzXQqoxR1UpnmEP54vBARFHQ==} hasBin: true type-check@0.4.0: @@ -6486,27 +6418,24 @@ packages: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} - type-fest@1.4.0: - resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} - engines: {node: '>=10'} - - typed-array-buffer@1.0.0: - resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} engines: {node: '>= 0.4'} - typed-array-byte-length@1.0.0: - resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} engines: {node: '>= 0.4'} - typed-array-byte-offset@1.0.0: - resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} engines: {node: '>= 0.4'} - typed-array-length@1.0.4: - resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} - typescript@5.3.3: - resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} + typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'} hasBin: true @@ -6582,8 +6511,8 @@ packages: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} - universalify@2.0.0: - resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} unplugin@1.0.1: @@ -6690,8 +6619,8 @@ packages: peerDependencies: vite: ^2.6.0 || 3 || 4 || 5 - vite@5.1.5: - resolution: {integrity: sha512-BdN1xh0Of/oQafhU+FvopafUp6WaYenLU/NFoL5WyJL++GxkNfieKzBhM24H3HVsPQrlAqB7iJYTHabzaRed5Q==} + vite@5.2.10: + resolution: {integrity: sha512-PAzgUZbP7msvQvqdSD+ErD5qGnSFiGOoWmV5yAKUEI0kdhjbH6nMWVyZQC/hSc4aXwc0oJ9aEdIiF9Oje0JFCw==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -6780,11 +6709,12 @@ packages: resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} engines: {node: '>= 0.4'} - which-collection@1.0.1: - resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} - which-typed-array@1.1.13: - resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} + which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} engines: {node: '>= 0.4'} which@2.0.2: @@ -6796,16 +6726,15 @@ packages: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} - wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} + wrap-ansi@9.0.0: + resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} + engines: {node: '>=18'} wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} xlsx@https://cdn.sheetjs.com/xlsx-0.20.1/xlsx-0.20.1.tgz: - resolution: {registry: https://registry.npmjs.org/, tarball: https://cdn.sheetjs.com/xlsx-0.20.1/xlsx-0.20.1.tgz} - name: xlsx + resolution: {tarball: https://cdn.sheetjs.com/xlsx-0.20.1/xlsx-0.20.1.tgz} version: 0.20.1 engines: {node: '>=0.8'} hasBin: true @@ -6835,8 +6764,8 @@ packages: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} - yaml@2.3.1: - resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} + yaml@2.3.4: + resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} engines: {node: '>= 14'} yargs-parser@21.1.1: @@ -6875,61 +6804,61 @@ snapshots: dependencies: '@ctrl/tinycolor': 3.6.1 - '@ant-design/cssinjs@1.18.4(react-dom@18.2.0)(react@18.2.0)': + '@ant-design/cssinjs@1.20.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 '@emotion/hash': 0.8.0 '@emotion/unitless': 0.7.5 classnames: 2.5.1 csstype: 3.1.3 - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - stylis: 4.3.1 + stylis: 4.3.2 '@ant-design/icons-svg@4.4.2': {} - '@ant-design/icons@5.3.1(react-dom@18.2.0)(react@18.2.0)': + '@ant-design/icons@5.3.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@ant-design/colors': 7.0.2 '@ant-design/icons-svg': 4.4.2 - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 classnames: 2.5.1 - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@ant-design/react-slick@1.0.2(react@18.2.0)': + '@ant-design/react-slick@1.1.2(react@18.2.0)': dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 classnames: 2.5.1 json2mq: 0.2.0 react: 18.2.0 resize-observer-polyfill: 1.5.1 throttle-debounce: 5.0.0 - '@atlaskit/ds-lib@2.2.5(react@18.2.0)': + '@atlaskit/ds-lib@2.3.0(react@18.2.0)': dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 bind-event-listener: 2.1.1 react: 18.2.0 '@atlaskit/platform-feature-flags@0.2.5': dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 '@atlaskit/pragmatic-drag-and-drop-hitbox@1.0.3': dependencies: '@atlaskit/pragmatic-drag-and-drop': 1.1.3 - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 - '@atlaskit/pragmatic-drag-and-drop-react-drop-indicator@1.1.0(@types/react@18.2.62)(react@18.2.0)': + '@atlaskit/pragmatic-drag-and-drop-react-drop-indicator@1.1.1(@types/react@18.2.79)(react@18.2.0)': dependencies: '@atlaskit/pragmatic-drag-and-drop': 1.1.3 '@atlaskit/pragmatic-drag-and-drop-hitbox': 1.0.3 - '@atlaskit/tokens': 1.43.0(react@18.2.0) - '@babel/runtime': 7.24.0 - '@emotion/react': 11.11.4(@types/react@18.2.62)(react@18.2.0) + '@atlaskit/tokens': 1.43.1(react@18.2.0) + '@babel/runtime': 7.24.4 + '@emotion/react': 11.11.4(@types/react@18.2.79)(react@18.2.0) react: 18.2.0 transitivePeerDependencies: - '@types/react' @@ -6937,47 +6866,40 @@ snapshots: '@atlaskit/pragmatic-drag-and-drop@1.1.3': dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 bind-event-listener: 2.1.1 raf-schd: 4.0.3 - '@atlaskit/tokens@1.43.0(react@18.2.0)': + '@atlaskit/tokens@1.43.1(react@18.2.0)': dependencies: - '@atlaskit/ds-lib': 2.2.5(react@18.2.0) + '@atlaskit/ds-lib': 2.3.0(react@18.2.0) '@atlaskit/platform-feature-flags': 0.2.5 - '@babel/runtime': 7.24.0 - '@babel/traverse': 7.24.0 + '@babel/runtime': 7.24.4 + '@babel/traverse': 7.24.1 '@babel/types': 7.24.0 bind-event-listener: 2.1.1 react: 18.2.0 transitivePeerDependencies: - supports-color - '@babel/code-frame@7.22.13': + '@babel/code-frame@7.24.2': dependencies: - '@babel/highlight': 7.22.20 - chalk: 2.4.2 - - '@babel/code-frame@7.23.5': - dependencies: - '@babel/highlight': 7.23.4 - chalk: 2.4.2 - - '@babel/compat-data@7.23.5': {} + '@babel/highlight': 7.24.2 + picocolors: 1.0.0 '@babel/compat-data@7.24.4': {} - '@babel/core@7.24.0': + '@babel/core@7.24.4': dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 + '@babel/code-frame': 7.24.2 + '@babel/generator': 7.24.4 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.0) - '@babel/helpers': 7.24.0 - '@babel/parser': 7.24.0 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) + '@babel/helpers': 7.24.4 + '@babel/parser': 7.24.4 '@babel/template': 7.24.0 - '@babel/traverse': 7.24.0 + '@babel/traverse': 7.24.1 '@babel/types': 7.24.0 convert-source-map: 2.0.0 debug: 4.3.4 @@ -6989,11 +6911,11 @@ snapshots: '@babel/generator@7.17.7': dependencies: - '@babel/types': 7.23.3 + '@babel/types': 7.17.0 jsesc: 2.5.2 source-map: 0.5.7 - '@babel/generator@7.23.6': + '@babel/generator@7.24.4': dependencies: '@babel/types': 7.24.0 '@jridgewell/gen-mapping': 0.3.5 @@ -7010,35 +6932,35 @@ snapshots: '@babel/helper-compilation-targets@7.23.6': dependencies: - '@babel/compat-data': 7.23.5 + '@babel/compat-data': 7.24.4 '@babel/helper-validator-option': 7.23.5 browserslist: 4.23.0 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.24.4(@babel/core@7.24.0)': + '@babel/helper-create-class-features-plugin@7.24.4(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.0) + '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.4) '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 semver: 6.3.1 - '@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.24.0)': + '@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-annotate-as-pure': 7.22.5 regexpu-core: 5.3.2 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.1(@babel/core@7.24.0)': + '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.24.0 debug: 4.3.4 @@ -7052,29 +6974,25 @@ snapshots: '@babel/helper-function-name@7.23.0': dependencies: '@babel/template': 7.24.0 - '@babel/types': 7.23.3 + '@babel/types': 7.24.0 '@babel/helper-hoist-variables@7.22.5': dependencies: - '@babel/types': 7.23.3 + '@babel/types': 7.24.0 '@babel/helper-member-expression-to-functions@7.23.0': dependencies: '@babel/types': 7.24.0 - '@babel/helper-module-imports@7.22.15': - dependencies: - '@babel/types': 7.23.3 - '@babel/helper-module-imports@7.24.3': dependencies: '@babel/types': 7.24.0 - '@babel/helper-module-transforms@7.23.3(@babel/core@7.24.0)': + '@babel/helper-module-transforms@7.23.3(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.22.15 + '@babel/helper-module-imports': 7.24.3 '@babel/helper-simple-access': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.20 @@ -7085,16 +7003,16 @@ snapshots: '@babel/helper-plugin-utils@7.24.0': {} - '@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.24.0)': + '@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-wrap-function': 7.22.20 - '@babel/helper-replace-supers@7.24.1(@babel/core@7.24.0)': + '@babel/helper-replace-supers@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 @@ -7109,11 +7027,9 @@ snapshots: '@babel/helper-split-export-declaration@7.22.6': dependencies: - '@babel/types': 7.23.3 - - '@babel/helper-string-parser@7.22.5': {} + '@babel/types': 7.24.0 - '@babel/helper-string-parser@7.23.4': {} + '@babel/helper-string-parser@7.24.1': {} '@babel/helper-validator-identifier@7.22.20': {} @@ -7125,574 +7041,565 @@ snapshots: '@babel/template': 7.24.0 '@babel/types': 7.24.0 - '@babel/helpers@7.24.0': + '@babel/helpers@7.24.4': dependencies: '@babel/template': 7.24.0 - '@babel/traverse': 7.24.0 + '@babel/traverse': 7.24.1 '@babel/types': 7.24.0 transitivePeerDependencies: - supports-color - '@babel/highlight@7.22.20': - dependencies: - '@babel/helper-validator-identifier': 7.22.20 - chalk: 2.4.2 - js-tokens: 4.0.0 - - '@babel/highlight@7.23.4': + '@babel/highlight@7.24.2': dependencies: '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 + picocolors: 1.0.0 - '@babel/parser@7.24.0': + '@babel/parser@7.24.4': dependencies: - '@babel/types': 7.23.3 + '@babel/types': 7.17.0 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.4(@babel/core@7.24.0)': + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.4(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-optional-chaining': 7.24.1(@babel/core@7.24.0) + '@babel/plugin-transform-optional-chaining': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.0)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.0)': + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.0)': + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.0)': + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.0)': + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.0)': + '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-import-assertions@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-syntax-import-assertions@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-import-attributes@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-syntax-import-attributes@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.0)': + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.0)': + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.0)': + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.0)': + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.0)': + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.0)': + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.0)': + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.0)': + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.0)': + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.0)': + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.0)': + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.0) + '@babel/core': 7.24.4 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-transform-arrow-functions@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-arrow-functions@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-transform-async-generator-functions@7.24.3(@babel/core@7.24.0)': + '@babel/plugin-transform-async-generator-functions@7.24.3(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.0) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.0) + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.4) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.4) - '@babel/plugin-transform-async-to-generator@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-async-to-generator@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-module-imports': 7.24.3 '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.0) + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.4) - '@babel/plugin-transform-block-scoped-functions@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-block-scoped-functions@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-transform-block-scoping@7.24.4(@babel/core@7.24.0)': + '@babel/plugin-transform-block-scoping@7.24.4(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-transform-class-properties@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-class-properties@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 - '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.0) + '@babel/core': 7.24.4 + '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-transform-class-static-block@7.24.4(@babel/core@7.24.0)': + '@babel/plugin-transform-class-static-block@7.24.4(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 - '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.0) + '@babel/core': 7.24.4 + '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.0) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.4) - '@babel/plugin-transform-classes@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-classes@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.0) + '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.4) '@babel/helper-split-export-declaration': 7.22.6 globals: 11.12.0 - '@babel/plugin-transform-computed-properties@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-computed-properties@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 '@babel/template': 7.24.0 - '@babel/plugin-transform-destructuring@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-destructuring@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-transform-dotall-regex@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-dotall-regex@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.0) + '@babel/core': 7.24.4 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-transform-duplicate-keys@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-duplicate-keys@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-transform-dynamic-import@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-dynamic-import@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.0) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-transform-exponentiation-operator@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-exponentiation-operator@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-transform-export-namespace-from@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-export-namespace-from@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.0) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-transform-for-of@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-for-of@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-function-name@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-function-name@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-function-name': 7.23.0 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-transform-json-strings@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-json-strings@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.0) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-transform-literals@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-literals@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-transform-logical-assignment-operators@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-logical-assignment-operators@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.0) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.4) - '@babel/plugin-transform-member-expression-literals@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-member-expression-literals@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-transform-modules-amd@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-modules-amd@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.0) + '@babel/core': 7.24.4 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-transform-modules-commonjs@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-modules-commonjs@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.0) + '@babel/core': 7.24.4 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-simple-access': 7.22.5 - '@babel/plugin-transform-modules-systemjs@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-modules-systemjs@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.0) + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-validator-identifier': 7.22.20 - '@babel/plugin-transform-modules-umd@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-modules-umd@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.0) + '@babel/core': 7.24.4 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.24.0)': + '@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.0) + '@babel/core': 7.24.4 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-transform-new-target@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-new-target@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-transform-nullish-coalescing-operator@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-nullish-coalescing-operator@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.0) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-transform-numeric-separator@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-numeric-separator@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.0) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.4) - '@babel/plugin-transform-object-rest-spread@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-object-rest-spread@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.0) - '@babel/plugin-transform-parameters': 7.24.1(@babel/core@7.24.0) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-transform-parameters': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-object-super@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-object-super@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.0) + '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-optional-catch-binding@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-optional-catch-binding@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.0) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-transform-optional-chaining@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-optional-chaining@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.0) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-transform-parameters@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-parameters@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-transform-private-methods@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-private-methods@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 - '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.0) + '@babel/core': 7.24.4 + '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-transform-private-property-in-object@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-private-property-in-object@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.0) + '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.0) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.4) - '@babel/plugin-transform-property-literals@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-property-literals@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-transform-regenerator@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-regenerator@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 regenerator-transform: 0.15.2 - '@babel/plugin-transform-reserved-words@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-reserved-words@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-transform-shorthand-properties@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-shorthand-properties@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-transform-spread@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-spread@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-sticky-regex@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-sticky-regex@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-transform-template-literals@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-template-literals@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-transform-typeof-symbol@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-typeof-symbol@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-transform-unicode-escapes@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-unicode-escapes@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-transform-unicode-property-regex@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-unicode-property-regex@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.0) + '@babel/core': 7.24.4 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-transform-unicode-regex@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-unicode-regex@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.0) + '@babel/core': 7.24.4 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-transform-unicode-sets-regex@7.24.1(@babel/core@7.24.0)': + '@babel/plugin-transform-unicode-sets-regex@7.24.1(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.0) + '@babel/core': 7.24.4 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.24.0 - '@babel/preset-env@7.24.4(@babel/core@7.24.0)': + '@babel/preset-env@7.24.4(@babel/core@7.24.4)': dependencies: '@babel/compat-data': 7.24.4 - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.24.4(@babel/core@7.24.0) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.0) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.0) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.0) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.0) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.0) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.0) - '@babel/plugin-syntax-import-assertions': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-syntax-import-attributes': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.0) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.0) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.0) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.0) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.0) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.0) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.0) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.0) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.0) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.0) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.0) - '@babel/plugin-transform-arrow-functions': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-async-generator-functions': 7.24.3(@babel/core@7.24.0) - '@babel/plugin-transform-async-to-generator': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-block-scoped-functions': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-block-scoping': 7.24.4(@babel/core@7.24.0) - '@babel/plugin-transform-class-properties': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-class-static-block': 7.24.4(@babel/core@7.24.0) - '@babel/plugin-transform-classes': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-computed-properties': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-destructuring': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-dotall-regex': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-duplicate-keys': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-dynamic-import': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-exponentiation-operator': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-export-namespace-from': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-for-of': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-function-name': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-json-strings': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-literals': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-logical-assignment-operators': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-member-expression-literals': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-modules-amd': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-modules-systemjs': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-modules-umd': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.24.0) - '@babel/plugin-transform-new-target': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-nullish-coalescing-operator': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-numeric-separator': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-object-rest-spread': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-object-super': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-optional-catch-binding': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-optional-chaining': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-parameters': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-private-methods': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-private-property-in-object': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-property-literals': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-regenerator': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-reserved-words': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-shorthand-properties': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-spread': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-sticky-regex': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-template-literals': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-typeof-symbol': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-unicode-escapes': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-unicode-property-regex': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-unicode-regex': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-transform-unicode-sets-regex': 7.24.1(@babel/core@7.24.0) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.0) - babel-plugin-polyfill-corejs2: 0.4.10(@babel/core@7.24.0) - babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.0) - babel-plugin-polyfill-regenerator: 0.6.1(@babel/core@7.24.0) - core-js-compat: 3.36.1 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.24.4(@babel/core@7.24.4) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.4) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.4) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.4) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.4) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-import-assertions': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-syntax-import-attributes': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.4) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.4) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.4) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.4) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.4) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.4) + '@babel/plugin-transform-arrow-functions': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-async-generator-functions': 7.24.3(@babel/core@7.24.4) + '@babel/plugin-transform-async-to-generator': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-block-scoped-functions': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-block-scoping': 7.24.4(@babel/core@7.24.4) + '@babel/plugin-transform-class-properties': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-class-static-block': 7.24.4(@babel/core@7.24.4) + '@babel/plugin-transform-classes': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-computed-properties': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-destructuring': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-dotall-regex': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-duplicate-keys': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-dynamic-import': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-exponentiation-operator': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-export-namespace-from': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-for-of': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-function-name': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-json-strings': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-literals': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-logical-assignment-operators': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-member-expression-literals': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-modules-amd': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-modules-systemjs': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-modules-umd': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.24.4) + '@babel/plugin-transform-new-target': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-nullish-coalescing-operator': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-numeric-separator': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-object-rest-spread': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-object-super': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-optional-catch-binding': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-optional-chaining': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-parameters': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-private-methods': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-private-property-in-object': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-property-literals': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-regenerator': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-reserved-words': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-shorthand-properties': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-spread': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-sticky-regex': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-template-literals': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-typeof-symbol': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-unicode-escapes': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-unicode-property-regex': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-unicode-regex': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-unicode-sets-regex': 7.24.1(@babel/core@7.24.4) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.4) + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.4) + babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.4) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.24.4) + core-js-compat: 3.37.0 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.0)': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 '@babel/types': 7.24.0 esutils: 2.0.3 '@babel/regjsgen@0.8.0': {} - '@babel/runtime@7.23.2': + '@babel/runtime@7.24.4': dependencies: - regenerator-runtime: 0.14.0 - - '@babel/runtime@7.24.0': - dependencies: - regenerator-runtime: 0.14.0 + regenerator-runtime: 0.14.1 '@babel/template@7.24.0': dependencies: - '@babel/code-frame': 7.23.5 - '@babel/parser': 7.24.0 + '@babel/code-frame': 7.24.2 + '@babel/parser': 7.24.4 '@babel/types': 7.24.0 '@babel/traverse@7.23.2': dependencies: - '@babel/code-frame': 7.22.13 - '@babel/generator': 7.23.6 + '@babel/code-frame': 7.24.2 + '@babel/generator': 7.24.4 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.24.0 - '@babel/types': 7.23.3 + '@babel/parser': 7.24.4 + '@babel/types': 7.24.0 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/traverse@7.24.0': + '@babel/traverse@7.24.1': dependencies: - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 + '@babel/code-frame': 7.24.2 + '@babel/generator': 7.24.4 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.24.0 + '@babel/parser': 7.24.4 '@babel/types': 7.24.0 debug: 4.3.4 globals: 11.12.0 @@ -7704,45 +7611,76 @@ snapshots: '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 - '@babel/types@7.23.3': + '@babel/types@7.24.0': dependencies: - '@babel/helper-string-parser': 7.22.5 + '@babel/helper-string-parser': 7.24.1 '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 - '@babel/types@7.24.0': + '@codemirror/autocomplete@6.16.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.26.3)(@lezer/common@1.2.1)': dependencies: - '@babel/helper-string-parser': 7.23.4 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 + '@codemirror/language': 6.10.1 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.26.3 + '@lezer/common': 1.2.1 - '@codemirror/autocomplete@6.13.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.25.0)(@lezer/common@1.2.1)': + '@codemirror/commands@6.5.0': dependencies: '@codemirror/language': 6.10.1 '@codemirror/state': 6.4.1 - '@codemirror/view': 6.25.0 + '@codemirror/view': 6.26.3 '@lezer/common': 1.2.1 - '@codemirror/commands@6.3.3': + '@codemirror/lang-css@6.2.1(@codemirror/view@6.26.3)': dependencies: + '@codemirror/autocomplete': 6.16.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.26.3)(@lezer/common@1.2.1) '@codemirror/language': 6.10.1 '@codemirror/state': 6.4.1 - '@codemirror/view': 6.25.0 '@lezer/common': 1.2.1 + '@lezer/css': 1.1.8 + transitivePeerDependencies: + - '@codemirror/view' + + '@codemirror/lang-html@6.4.9': + dependencies: + '@codemirror/autocomplete': 6.16.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.26.3)(@lezer/common@1.2.1) + '@codemirror/lang-css': 6.2.1(@codemirror/view@6.26.3) + '@codemirror/lang-javascript': 6.2.2 + '@codemirror/language': 6.10.1 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.26.3 + '@lezer/common': 1.2.1 + '@lezer/css': 1.1.8 + '@lezer/html': 1.3.9 '@codemirror/lang-javascript@6.2.2': dependencies: - '@codemirror/autocomplete': 6.13.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.25.0)(@lezer/common@1.2.1) + '@codemirror/autocomplete': 6.16.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.26.3)(@lezer/common@1.2.1) '@codemirror/language': 6.10.1 '@codemirror/lint': 6.5.0 '@codemirror/state': 6.4.1 - '@codemirror/view': 6.25.0 + '@codemirror/view': 6.26.3 '@lezer/common': 1.2.1 - '@lezer/javascript': 1.4.13 + '@lezer/javascript': 1.4.15 + + '@codemirror/lang-json@6.0.1': + dependencies: + '@codemirror/language': 6.10.1 + '@lezer/json': 1.0.2 - '@codemirror/lang-sql@6.6.1(@codemirror/view@6.25.0)': + '@codemirror/lang-markdown@6.2.5': dependencies: - '@codemirror/autocomplete': 6.13.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.25.0)(@lezer/common@1.2.1) + '@codemirror/autocomplete': 6.16.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.26.3)(@lezer/common@1.2.1) + '@codemirror/lang-html': 6.4.9 + '@codemirror/language': 6.10.1 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.26.3 + '@lezer/common': 1.2.1 + '@lezer/markdown': 1.3.0 + + '@codemirror/lang-sql@6.6.3(@codemirror/view@6.26.3)': + dependencies: + '@codemirror/autocomplete': 6.16.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.26.3)(@lezer/common@1.2.1) '@codemirror/language': 6.10.1 '@codemirror/state': 6.4.1 '@lezer/common': 1.2.1 @@ -7754,7 +7692,7 @@ snapshots: '@codemirror/language@6.10.1': dependencies: '@codemirror/state': 6.4.1 - '@codemirror/view': 6.25.0 + '@codemirror/view': 6.26.3 '@lezer/common': 1.2.1 '@lezer/highlight': 1.2.0 '@lezer/lr': 1.4.0 @@ -7763,29 +7701,23 @@ snapshots: '@codemirror/lint@6.5.0': dependencies: '@codemirror/state': 6.4.1 - '@codemirror/view': 6.25.0 - crelt: 1.0.6 - - '@codemirror/search@6.5.6': - dependencies: - '@codemirror/state': 6.4.1 - '@codemirror/view': 6.25.0 + '@codemirror/view': 6.26.3 crelt: 1.0.6 '@codemirror/state@6.4.1': {} - '@codemirror/view@6.25.0': + '@codemirror/view@6.26.3': dependencies: '@codemirror/state': 6.4.1 style-mod: 4.1.2 w3c-keyname: 2.2.8 - '@commitlint/cli@19.0.3(@types/node@18.19.21)(typescript@5.3.3)': + '@commitlint/cli@19.3.0(@types/node@18.19.31)(typescript@5.4.5)': dependencies: - '@commitlint/format': 19.0.3 - '@commitlint/lint': 19.0.3 - '@commitlint/load': 19.0.3(@types/node@18.19.21)(typescript@5.3.3) - '@commitlint/read': 19.0.3 + '@commitlint/format': 19.3.0 + '@commitlint/lint': 19.2.2 + '@commitlint/load': 19.2.0(@types/node@18.19.31)(typescript@5.4.5) + '@commitlint/read': 19.2.1 '@commitlint/types': 19.0.3 execa: 8.0.1 yargs: 17.7.2 @@ -7793,7 +7725,7 @@ snapshots: - '@types/node' - typescript - '@commitlint/config-conventional@19.0.3': + '@commitlint/config-conventional@19.2.2': dependencies: '@commitlint/types': 19.0.3 conventional-changelog-conventionalcommits: 7.0.2 @@ -7814,32 +7746,32 @@ snapshots: '@commitlint/execute-rule@19.0.0': {} - '@commitlint/format@19.0.3': + '@commitlint/format@19.3.0': dependencies: '@commitlint/types': 19.0.3 chalk: 5.3.0 - '@commitlint/is-ignored@19.0.3': + '@commitlint/is-ignored@19.2.2': dependencies: '@commitlint/types': 19.0.3 semver: 7.6.0 - '@commitlint/lint@19.0.3': + '@commitlint/lint@19.2.2': dependencies: - '@commitlint/is-ignored': 19.0.3 + '@commitlint/is-ignored': 19.2.2 '@commitlint/parse': 19.0.3 '@commitlint/rules': 19.0.3 '@commitlint/types': 19.0.3 - '@commitlint/load@19.0.3(@types/node@18.19.21)(typescript@5.3.3)': + '@commitlint/load@19.2.0(@types/node@18.19.31)(typescript@5.4.5)': dependencies: '@commitlint/config-validator': 19.0.3 '@commitlint/execute-rule': 19.0.0 - '@commitlint/resolve-extends': 19.0.3 + '@commitlint/resolve-extends': 19.1.0 '@commitlint/types': 19.0.3 chalk: 5.3.0 - cosmiconfig: 8.3.6(typescript@5.3.3) - cosmiconfig-typescript-loader: 5.0.0(@types/node@18.19.21)(cosmiconfig@8.3.6)(typescript@5.3.3) + cosmiconfig: 9.0.0(typescript@5.4.5) + cosmiconfig-typescript-loader: 5.0.0(@types/node@18.19.31)(cosmiconfig@9.0.0(typescript@5.4.5))(typescript@5.4.5) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -7855,14 +7787,15 @@ snapshots: conventional-changelog-angular: 7.0.0 conventional-commits-parser: 5.0.0 - '@commitlint/read@19.0.3': + '@commitlint/read@19.2.1': dependencies: '@commitlint/top-level': 19.0.0 '@commitlint/types': 19.0.3 + execa: 8.0.1 git-raw-commits: 4.0.0 minimist: 1.2.8 - '@commitlint/resolve-extends@19.0.3': + '@commitlint/resolve-extends@19.1.0': dependencies: '@commitlint/config-validator': 19.0.3 '@commitlint/types': 19.0.3 @@ -7894,11 +7827,11 @@ snapshots: '@emotion/babel-plugin@11.11.0': dependencies: - '@babel/helper-module-imports': 7.22.15 - '@babel/runtime': 7.23.2 + '@babel/helper-module-imports': 7.24.3 + '@babel/runtime': 7.24.4 '@emotion/hash': 0.9.1 '@emotion/memoize': 0.8.1 - '@emotion/serialize': 1.1.3 + '@emotion/serialize': 1.1.4 babel-plugin-macros: 3.1.0 convert-source-map: 1.9.0 escape-string-regexp: 4.0.0 @@ -7918,54 +7851,48 @@ snapshots: '@emotion/hash@0.9.1': {} - '@emotion/is-prop-valid@0.8.8': - dependencies: - '@emotion/memoize': 0.7.4 - optional: true - '@emotion/is-prop-valid@1.2.2': dependencies: '@emotion/memoize': 0.8.1 - '@emotion/memoize@0.7.4': - optional: true - '@emotion/memoize@0.8.1': {} - '@emotion/react@11.11.4(@types/react@18.2.62)(react@18.2.0)': + '@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0)': dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 '@emotion/babel-plugin': 11.11.0 '@emotion/cache': 11.11.0 - '@emotion/serialize': 1.1.3 + '@emotion/serialize': 1.1.4 '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) '@emotion/utils': 1.2.1 '@emotion/weak-memoize': 0.3.1 - '@types/react': 18.2.62 hoist-non-react-statics: 3.3.2 react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.79 - '@emotion/serialize@1.1.3': + '@emotion/serialize@1.1.4': dependencies: '@emotion/hash': 0.9.1 '@emotion/memoize': 0.8.1 '@emotion/unitless': 0.8.1 '@emotion/utils': 1.2.1 - csstype: 3.1.2 + csstype: 3.1.3 '@emotion/sheet@1.2.2': {} - '@emotion/styled@11.11.0(@emotion/react@11.11.4)(@types/react@18.2.62)(react@18.2.0)': + '@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0)': dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 '@emotion/babel-plugin': 11.11.0 '@emotion/is-prop-valid': 1.2.2 - '@emotion/react': 11.11.4(@types/react@18.2.62)(react@18.2.0) - '@emotion/serialize': 1.1.3 + '@emotion/react': 11.11.4(@types/react@18.2.79)(react@18.2.0) + '@emotion/serialize': 1.1.4 '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) '@emotion/utils': 1.2.1 - '@types/react': 18.2.62 react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.79 '@emotion/unitless@0.7.5': {} @@ -7979,141 +7906,72 @@ snapshots: '@emotion/weak-memoize@0.3.1': {} - '@esbuild/aix-ppc64@0.19.12': - optional: true - '@esbuild/aix-ppc64@0.20.2': optional: true - '@esbuild/android-arm64@0.19.12': - optional: true - '@esbuild/android-arm64@0.20.2': optional: true - '@esbuild/android-arm@0.19.12': - optional: true - '@esbuild/android-arm@0.20.2': optional: true - '@esbuild/android-x64@0.19.12': - optional: true - '@esbuild/android-x64@0.20.2': optional: true - '@esbuild/darwin-arm64@0.19.12': - optional: true - '@esbuild/darwin-arm64@0.20.2': optional: true - '@esbuild/darwin-x64@0.19.12': - optional: true - '@esbuild/darwin-x64@0.20.2': optional: true - '@esbuild/freebsd-arm64@0.19.12': - optional: true - '@esbuild/freebsd-arm64@0.20.2': optional: true - '@esbuild/freebsd-x64@0.19.12': - optional: true - '@esbuild/freebsd-x64@0.20.2': optional: true - '@esbuild/linux-arm64@0.19.12': - optional: true - '@esbuild/linux-arm64@0.20.2': optional: true - '@esbuild/linux-arm@0.19.12': - optional: true - '@esbuild/linux-arm@0.20.2': optional: true - '@esbuild/linux-ia32@0.19.12': - optional: true - '@esbuild/linux-ia32@0.20.2': optional: true - '@esbuild/linux-loong64@0.19.12': - optional: true - '@esbuild/linux-loong64@0.20.2': optional: true - '@esbuild/linux-mips64el@0.19.12': - optional: true - '@esbuild/linux-mips64el@0.20.2': optional: true - '@esbuild/linux-ppc64@0.19.12': - optional: true - '@esbuild/linux-ppc64@0.20.2': optional: true - '@esbuild/linux-riscv64@0.19.12': - optional: true - '@esbuild/linux-riscv64@0.20.2': optional: true - '@esbuild/linux-s390x@0.19.12': - optional: true - '@esbuild/linux-s390x@0.20.2': optional: true - '@esbuild/linux-x64@0.19.12': - optional: true - '@esbuild/linux-x64@0.20.2': optional: true - '@esbuild/netbsd-x64@0.19.12': - optional: true - - '@esbuild/netbsd-x64@0.20.2': - optional: true - - '@esbuild/openbsd-x64@0.19.12': - optional: true - - '@esbuild/openbsd-x64@0.20.2': - optional: true - - '@esbuild/sunos-x64@0.19.12': + '@esbuild/netbsd-x64@0.20.2': optional: true - '@esbuild/sunos-x64@0.20.2': + '@esbuild/openbsd-x64@0.20.2': optional: true - '@esbuild/win32-arm64@0.19.12': + '@esbuild/sunos-x64@0.20.2': optional: true '@esbuild/win32-arm64@0.20.2': optional: true - '@esbuild/win32-ia32@0.19.12': - optional: true - '@esbuild/win32-ia32@0.20.2': optional: true - '@esbuild/win32-x64@0.19.12': - optional: true - '@esbuild/win32-x64@0.20.2': optional: true @@ -8168,7 +8026,7 @@ snapshots: '@floating-ui/core': 1.6.0 '@floating-ui/utils': 0.2.1 - '@floating-ui/react-dom@2.0.8(react-dom@18.2.0)(react@18.2.0)': + '@floating-ui/react-dom@2.0.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@floating-ui/dom': 1.6.3 react: 18.2.0 @@ -8182,7 +8040,7 @@ snapshots: '@humanwhocodes/config-array@0.11.14': dependencies: - '@humanwhocodes/object-schema': 2.0.2 + '@humanwhocodes/object-schema': 2.0.3 debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: @@ -8190,7 +8048,7 @@ snapshots: '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/object-schema@2.0.2': {} + '@humanwhocodes/object-schema@2.0.3': {} '@jridgewell/gen-mapping@0.3.5': dependencies: @@ -8218,11 +8076,29 @@ snapshots: '@lezer/common@1.2.1': {} + '@lezer/css@1.1.8': + dependencies: + '@lezer/common': 1.2.1 + '@lezer/highlight': 1.2.0 + '@lezer/lr': 1.4.0 + '@lezer/highlight@1.2.0': dependencies: '@lezer/common': 1.2.1 - '@lezer/javascript@1.4.13': + '@lezer/html@1.3.9': + dependencies: + '@lezer/common': 1.2.1 + '@lezer/highlight': 1.2.0 + '@lezer/lr': 1.4.0 + + '@lezer/javascript@1.4.15': + dependencies: + '@lezer/common': 1.2.1 + '@lezer/highlight': 1.2.0 + '@lezer/lr': 1.4.0 + + '@lezer/json@1.0.2': dependencies: '@lezer/common': 1.2.1 '@lezer/highlight': 1.2.0 @@ -8232,98 +8108,109 @@ snapshots: dependencies: '@lezer/common': 1.2.1 - '@mui/base@5.0.0-beta.37(@types/react@18.2.62)(react-dom@18.2.0)(react@18.2.0)': + '@lezer/markdown@1.3.0': + dependencies: + '@lezer/common': 1.2.1 + '@lezer/highlight': 1.2.0 + + '@mui/base@5.0.0-beta.40(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@babel/runtime': 7.24.0 - '@floating-ui/react-dom': 2.0.8(react-dom@18.2.0)(react@18.2.0) - '@mui/types': 7.2.13(@types/react@18.2.62) - '@mui/utils': 5.15.11(@types/react@18.2.62)(react@18.2.0) + '@babel/runtime': 7.24.4 + '@floating-ui/react-dom': 2.0.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@mui/types': 7.2.14(@types/react@18.2.79) + '@mui/utils': 5.15.14(@types/react@18.2.79)(react@18.2.0) '@popperjs/core': 2.11.8 - '@types/react': 18.2.62 - clsx: 2.1.0 + clsx: 2.1.1 prop-types: 15.8.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.79 - '@mui/core-downloads-tracker@5.15.11': {} + '@mui/core-downloads-tracker@5.15.15': {} - '@mui/material@5.15.11(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@types/react@18.2.62)(react-dom@18.2.0)(react@18.2.0)': + '@mui/material@5.15.15(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@babel/runtime': 7.24.0 - '@emotion/react': 11.11.4(@types/react@18.2.62)(react@18.2.0) - '@emotion/styled': 11.11.0(@emotion/react@11.11.4)(@types/react@18.2.62)(react@18.2.0) - '@mui/base': 5.0.0-beta.37(@types/react@18.2.62)(react-dom@18.2.0)(react@18.2.0) - '@mui/core-downloads-tracker': 5.15.11 - '@mui/system': 5.15.11(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@types/react@18.2.62)(react@18.2.0) - '@mui/types': 7.2.13(@types/react@18.2.62) - '@mui/utils': 5.15.11(@types/react@18.2.62)(react@18.2.0) - '@types/react': 18.2.62 + '@babel/runtime': 7.24.4 + '@mui/base': 5.0.0-beta.40(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@mui/core-downloads-tracker': 5.15.15 + '@mui/system': 5.15.15(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0) + '@mui/types': 7.2.14(@types/react@18.2.79) + '@mui/utils': 5.15.14(@types/react@18.2.79)(react@18.2.0) '@types/react-transition-group': 4.4.10 - clsx: 2.1.0 + clsx: 2.1.1 csstype: 3.1.3 prop-types: 15.8.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-is: 18.2.0 - react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.2.0) + react-transition-group: 4.4.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + optionalDependencies: + '@emotion/react': 11.11.4(@types/react@18.2.79)(react@18.2.0) + '@emotion/styled': 11.11.5(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0) + '@types/react': 18.2.79 - '@mui/private-theming@5.15.11(@types/react@18.2.62)(react@18.2.0)': + '@mui/private-theming@5.15.14(@types/react@18.2.79)(react@18.2.0)': dependencies: - '@babel/runtime': 7.24.0 - '@mui/utils': 5.15.11(@types/react@18.2.62)(react@18.2.0) - '@types/react': 18.2.62 + '@babel/runtime': 7.24.4 + '@mui/utils': 5.15.14(@types/react@18.2.79)(react@18.2.0) prop-types: 15.8.1 react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.79 - '@mui/styled-engine@5.15.11(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(react@18.2.0)': + '@mui/styled-engine@5.15.14(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0))(react@18.2.0)': dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 '@emotion/cache': 11.11.0 - '@emotion/react': 11.11.4(@types/react@18.2.62)(react@18.2.0) - '@emotion/styled': 11.11.0(@emotion/react@11.11.4)(@types/react@18.2.62)(react@18.2.0) csstype: 3.1.3 prop-types: 15.8.1 react: 18.2.0 + optionalDependencies: + '@emotion/react': 11.11.4(@types/react@18.2.79)(react@18.2.0) + '@emotion/styled': 11.11.5(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0) - '@mui/system@5.15.11(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@types/react@18.2.62)(react@18.2.0)': - dependencies: - '@babel/runtime': 7.24.0 - '@emotion/react': 11.11.4(@types/react@18.2.62)(react@18.2.0) - '@emotion/styled': 11.11.0(@emotion/react@11.11.4)(@types/react@18.2.62)(react@18.2.0) - '@mui/private-theming': 5.15.11(@types/react@18.2.62)(react@18.2.0) - '@mui/styled-engine': 5.15.11(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(react@18.2.0) - '@mui/types': 7.2.13(@types/react@18.2.62) - '@mui/utils': 5.15.11(@types/react@18.2.62)(react@18.2.0) - '@types/react': 18.2.62 - clsx: 2.1.0 + '@mui/system@5.15.15(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.4 + '@mui/private-theming': 5.15.14(@types/react@18.2.79)(react@18.2.0) + '@mui/styled-engine': 5.15.14(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0))(react@18.2.0) + '@mui/types': 7.2.14(@types/react@18.2.79) + '@mui/utils': 5.15.14(@types/react@18.2.79)(react@18.2.0) + clsx: 2.1.1 csstype: 3.1.3 prop-types: 15.8.1 react: 18.2.0 + optionalDependencies: + '@emotion/react': 11.11.4(@types/react@18.2.79)(react@18.2.0) + '@emotion/styled': 11.11.5(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0) + '@types/react': 18.2.79 - '@mui/types@7.2.13(@types/react@18.2.62)': - dependencies: - '@types/react': 18.2.62 + '@mui/types@7.2.14(@types/react@18.2.79)': + optionalDependencies: + '@types/react': 18.2.79 - '@mui/utils@5.15.11(@types/react@18.2.62)(react@18.2.0)': + '@mui/utils@5.15.14(@types/react@18.2.79)(react@18.2.0)': dependencies: - '@babel/runtime': 7.24.0 - '@types/prop-types': 15.7.11 - '@types/react': 18.2.62 + '@babel/runtime': 7.24.4 + '@types/prop-types': 15.7.12 prop-types: 15.8.1 react: 18.2.0 react-is: 18.2.0 + optionalDependencies: + '@types/react': 18.2.79 - '@mui/x-data-grid-premium@6.19.6(@mui/material@5.15.11)(@mui/system@5.15.11)(@types/react@18.2.62)(react-dom@18.2.0)(react@18.2.0)': + '@mui/x-data-grid-premium@6.19.11(@mui/material@5.15.15(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@mui/system@5.15.15(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@babel/runtime': 7.24.0 - '@mui/material': 5.15.11(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@types/react@18.2.62)(react-dom@18.2.0)(react@18.2.0) - '@mui/system': 5.15.11(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@types/react@18.2.62)(react@18.2.0) - '@mui/utils': 5.15.11(@types/react@18.2.62)(react@18.2.0) - '@mui/x-data-grid': 6.19.6(@mui/material@5.15.11)(@mui/system@5.15.11)(@types/react@18.2.62)(react-dom@18.2.0)(react@18.2.0) - '@mui/x-data-grid-pro': 6.19.6(@mui/material@5.15.11)(@mui/system@5.15.11)(@types/react@18.2.62)(react-dom@18.2.0)(react@18.2.0) - '@mui/x-license-pro': 6.10.2(@types/react@18.2.62)(react@18.2.0) + '@babel/runtime': 7.24.4 + '@mui/material': 5.15.15(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@mui/system': 5.15.15(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0) + '@mui/utils': 5.15.14(@types/react@18.2.79)(react@18.2.0) + '@mui/x-data-grid': 6.19.11(@mui/material@5.15.15(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@mui/system@5.15.15(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@mui/x-data-grid-pro': 6.19.11(@mui/material@5.15.15(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@mui/system@5.15.15(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@mui/x-license-pro': 6.10.2(@types/react@18.2.79)(react@18.2.0) '@types/format-util': 1.0.4 - clsx: 2.1.0 + clsx: 2.1.1 exceljs: 4.4.0 prop-types: 15.8.1 react: 18.2.0 @@ -8332,16 +8219,16 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@mui/x-data-grid-pro@6.19.6(@mui/material@5.15.11)(@mui/system@5.15.11)(@types/react@18.2.62)(react-dom@18.2.0)(react@18.2.0)': + '@mui/x-data-grid-pro@6.19.11(@mui/material@5.15.15(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@mui/system@5.15.15(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@babel/runtime': 7.24.0 - '@mui/material': 5.15.11(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@types/react@18.2.62)(react-dom@18.2.0)(react@18.2.0) - '@mui/system': 5.15.11(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@types/react@18.2.62)(react@18.2.0) - '@mui/utils': 5.15.11(@types/react@18.2.62)(react@18.2.0) - '@mui/x-data-grid': 6.19.6(@mui/material@5.15.11)(@mui/system@5.15.11)(@types/react@18.2.62)(react-dom@18.2.0)(react@18.2.0) - '@mui/x-license-pro': 6.10.2(@types/react@18.2.62)(react@18.2.0) + '@babel/runtime': 7.24.4 + '@mui/material': 5.15.15(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@mui/system': 5.15.15(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0) + '@mui/utils': 5.15.14(@types/react@18.2.79)(react@18.2.0) + '@mui/x-data-grid': 6.19.11(@mui/material@5.15.15(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@mui/system@5.15.15(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@mui/x-license-pro': 6.10.2(@types/react@18.2.79)(react@18.2.0) '@types/format-util': 1.0.4 - clsx: 2.1.0 + clsx: 2.1.1 prop-types: 15.8.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -8349,13 +8236,13 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@mui/x-data-grid@6.19.6(@mui/material@5.15.11)(@mui/system@5.15.11)(@types/react@18.2.62)(react-dom@18.2.0)(react@18.2.0)': + '@mui/x-data-grid@6.19.11(@mui/material@5.15.15(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@mui/system@5.15.15(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@babel/runtime': 7.24.0 - '@mui/material': 5.15.11(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@types/react@18.2.62)(react-dom@18.2.0)(react@18.2.0) - '@mui/system': 5.15.11(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@types/react@18.2.62)(react@18.2.0) - '@mui/utils': 5.15.11(@types/react@18.2.62)(react@18.2.0) - clsx: 2.1.0 + '@babel/runtime': 7.24.4 + '@mui/material': 5.15.15(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@mui/system': 5.15.15(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0))(@types/react@18.2.79)(react@18.2.0) + '@mui/utils': 5.15.14(@types/react@18.2.79)(react@18.2.0) + clsx: 2.1.1 prop-types: 15.8.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -8363,10 +8250,10 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@mui/x-license-pro@6.10.2(@types/react@18.2.62)(react@18.2.0)': + '@mui/x-license-pro@6.10.2(@types/react@18.2.79)(react@18.2.0)': dependencies: - '@babel/runtime': 7.24.0 - '@mui/utils': 5.15.11(@types/react@18.2.62)(react@18.2.0) + '@babel/runtime': 7.24.4 + '@mui/utils': 5.15.14(@types/react@18.2.79)(react@18.2.0) react: 18.2.0 transitivePeerDependencies: - '@types/react' @@ -8381,157 +8268,170 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 + fastq: 1.17.1 '@popperjs/core@2.11.8': {} - '@rc-component/color-picker@1.5.2(react-dom@18.2.0)(react@18.2.0)': + '@rc-component/color-picker@1.5.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 '@ctrl/tinycolor': 3.6.1 classnames: 2.5.1 - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@rc-component/context@1.4.0(react-dom@18.2.0)(react@18.2.0)': + '@rc-component/context@1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@babel/runtime': 7.24.0 - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + '@babel/runtime': 7.24.4 + rc-util: 5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) '@rc-component/mini-decimal@1.1.0': dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 - '@rc-component/mutate-observer@1.1.0(react-dom@18.2.0)(react@18.2.0)': + '@rc-component/mutate-observer@1.1.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 classnames: 2.5.1 - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@rc-component/portal@1.1.2(react-dom@18.2.0)(react@18.2.0)': + '@rc-component/portal@1.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 classnames: 2.5.1 - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@rc-component/tour@1.14.2(react-dom@18.2.0)(react@18.2.0)': + '@rc-component/tour@1.14.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@babel/runtime': 7.24.0 - '@rc-component/portal': 1.1.2(react-dom@18.2.0)(react@18.2.0) - '@rc-component/trigger': 2.0.0(react-dom@18.2.0)(react@18.2.0) + '@babel/runtime': 7.24.4 + '@rc-component/portal': 1.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@rc-component/trigger': 2.1.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) classnames: 2.5.1 - rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@rc-component/trigger@2.0.0(react-dom@18.2.0)(react@18.2.0)': + '@rc-component/trigger@2.1.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@babel/runtime': 7.24.0 - '@rc-component/portal': 1.1.2(react-dom@18.2.0)(react@18.2.0) + '@babel/runtime': 7.24.4 + '@rc-component/portal': 1.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0) classnames: 2.5.1 - rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) - rc-resize-observer: 1.4.0(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) + rc-motion: 2.9.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-resize-observer: 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@reduxjs/toolkit@2.2.1(react-redux@9.1.0)(react@18.2.0)': + '@reduxjs/toolkit@2.2.3(react-redux@9.1.1(@types/react@18.2.79)(react@18.2.0)(redux@5.0.1))(react@18.2.0)': dependencies: - immer: 10.0.3 - react: 18.2.0 - react-redux: 9.1.0(@types/react@18.2.62)(react@18.2.0)(redux@5.0.1) + immer: 10.0.4 redux: 5.0.1 redux-thunk: 3.1.0(redux@5.0.1) reselect: 5.1.0 + optionalDependencies: + react: 18.2.0 + react-redux: 9.1.1(@types/react@18.2.79)(react@18.2.0)(redux@5.0.1) - '@remix-run/router@1.15.2': {} + '@remix-run/router@1.16.0': {} - '@rollup/pluginutils@5.1.0': + '@rollup/pluginutils@5.1.0(rollup@4.16.4)': dependencies: '@types/estree': 1.0.5 estree-walker: 2.0.2 picomatch: 2.3.1 + optionalDependencies: + rollup: 4.16.4 + + '@rollup/rollup-android-arm-eabi@4.16.4': + optional: true + + '@rollup/rollup-android-arm64@4.16.4': + optional: true + + '@rollup/rollup-darwin-arm64@4.16.4': + optional: true - '@rollup/rollup-android-arm-eabi@4.12.0': + '@rollup/rollup-darwin-x64@4.16.4': optional: true - '@rollup/rollup-android-arm64@4.12.0': + '@rollup/rollup-linux-arm-gnueabihf@4.16.4': optional: true - '@rollup/rollup-darwin-arm64@4.12.0': + '@rollup/rollup-linux-arm-musleabihf@4.16.4': optional: true - '@rollup/rollup-darwin-x64@4.12.0': + '@rollup/rollup-linux-arm64-gnu@4.16.4': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.12.0': + '@rollup/rollup-linux-arm64-musl@4.16.4': optional: true - '@rollup/rollup-linux-arm64-gnu@4.12.0': + '@rollup/rollup-linux-powerpc64le-gnu@4.16.4': optional: true - '@rollup/rollup-linux-arm64-musl@4.12.0': + '@rollup/rollup-linux-riscv64-gnu@4.16.4': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.12.0': + '@rollup/rollup-linux-s390x-gnu@4.16.4': optional: true - '@rollup/rollup-linux-x64-gnu@4.12.0': + '@rollup/rollup-linux-x64-gnu@4.16.4': optional: true - '@rollup/rollup-linux-x64-musl@4.12.0': + '@rollup/rollup-linux-x64-musl@4.16.4': optional: true - '@rollup/rollup-win32-arm64-msvc@4.12.0': + '@rollup/rollup-win32-arm64-msvc@4.16.4': optional: true - '@rollup/rollup-win32-ia32-msvc@4.12.0': + '@rollup/rollup-win32-ia32-msvc@4.16.4': optional: true - '@rollup/rollup-win32-x64-msvc@4.12.0': + '@rollup/rollup-win32-x64-msvc@4.16.4': optional: true - '@sentry-internal/feedback@7.110.1': + '@sentry-internal/feedback@7.112.2': dependencies: - '@sentry/core': 7.110.1 - '@sentry/types': 7.110.1 - '@sentry/utils': 7.110.1 + '@sentry/core': 7.112.2 + '@sentry/types': 7.112.2 + '@sentry/utils': 7.112.2 - '@sentry-internal/replay-canvas@7.110.1': + '@sentry-internal/replay-canvas@7.112.2': dependencies: - '@sentry/core': 7.110.1 - '@sentry/replay': 7.110.1 - '@sentry/types': 7.110.1 - '@sentry/utils': 7.110.1 + '@sentry/core': 7.112.2 + '@sentry/replay': 7.112.2 + '@sentry/types': 7.112.2 + '@sentry/utils': 7.112.2 - '@sentry-internal/tracing@7.110.1': + '@sentry-internal/tracing@7.112.2': dependencies: - '@sentry/core': 7.110.1 - '@sentry/types': 7.110.1 - '@sentry/utils': 7.110.1 + '@sentry/core': 7.112.2 + '@sentry/types': 7.112.2 + '@sentry/utils': 7.112.2 '@sentry/babel-plugin-component-annotate@2.16.1': {} - '@sentry/browser@7.110.1': + '@sentry/browser@7.112.2': dependencies: - '@sentry-internal/feedback': 7.110.1 - '@sentry-internal/replay-canvas': 7.110.1 - '@sentry-internal/tracing': 7.110.1 - '@sentry/core': 7.110.1 - '@sentry/replay': 7.110.1 - '@sentry/types': 7.110.1 - '@sentry/utils': 7.110.1 + '@sentry-internal/feedback': 7.112.2 + '@sentry-internal/replay-canvas': 7.112.2 + '@sentry-internal/tracing': 7.112.2 + '@sentry/core': 7.112.2 + '@sentry/integrations': 7.112.2 + '@sentry/replay': 7.112.2 + '@sentry/types': 7.112.2 + '@sentry/utils': 7.112.2 '@sentry/bundler-plugin-core@2.16.1': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@sentry/babel-plugin-component-annotate': 2.16.1 '@sentry/cli': 2.31.0 dotenv: 16.4.5 @@ -8583,32 +8483,39 @@ snapshots: - encoding - supports-color - '@sentry/core@7.110.1': + '@sentry/core@7.112.2': + dependencies: + '@sentry/types': 7.112.2 + '@sentry/utils': 7.112.2 + + '@sentry/integrations@7.112.2': dependencies: - '@sentry/types': 7.110.1 - '@sentry/utils': 7.110.1 + '@sentry/core': 7.112.2 + '@sentry/types': 7.112.2 + '@sentry/utils': 7.112.2 + localforage: 1.10.0 - '@sentry/react@7.110.1(react@18.2.0)': + '@sentry/react@7.112.2(react@18.2.0)': dependencies: - '@sentry/browser': 7.110.1 - '@sentry/core': 7.110.1 - '@sentry/types': 7.110.1 - '@sentry/utils': 7.110.1 + '@sentry/browser': 7.112.2 + '@sentry/core': 7.112.2 + '@sentry/types': 7.112.2 + '@sentry/utils': 7.112.2 hoist-non-react-statics: 3.3.2 react: 18.2.0 - '@sentry/replay@7.110.1': + '@sentry/replay@7.112.2': dependencies: - '@sentry-internal/tracing': 7.110.1 - '@sentry/core': 7.110.1 - '@sentry/types': 7.110.1 - '@sentry/utils': 7.110.1 + '@sentry-internal/tracing': 7.112.2 + '@sentry/core': 7.112.2 + '@sentry/types': 7.112.2 + '@sentry/utils': 7.112.2 - '@sentry/types@7.110.1': {} + '@sentry/types@7.112.2': {} - '@sentry/utils@7.110.1': + '@sentry/utils@7.112.2': dependencies: - '@sentry/types': 7.110.1 + '@sentry/types': 7.112.2 '@sentry/vite-plugin@2.16.1': dependencies: @@ -8618,56 +8525,56 @@ snapshots: - encoding - supports-color - '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.24.0)': + '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 - '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.24.0)': + '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 - '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.24.0)': + '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 - '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.24.0)': + '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 - '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.24.0)': + '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 - '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.24.0)': + '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 - '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.24.0)': + '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 - '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.24.0)': + '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 - '@svgr/babel-preset@8.1.0(@babel/core@7.24.0)': + '@svgr/babel-preset@8.1.0(@babel/core@7.24.4)': dependencies: - '@babel/core': 7.24.0 - '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.24.0) - '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.24.0) - '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.24.0) - '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.24.0) - '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.24.0) - '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.24.0) - '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.24.0) - '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.24.0) + '@babel/core': 7.24.4 + '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.24.4) + '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.24.4) + '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.24.4) + '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.24.4) + '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.24.4) + '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.24.4) + '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.24.4) + '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.24.4) - '@svgr/core@8.1.0(typescript@5.3.3)': + '@svgr/core@8.1.0(typescript@5.4.5)': dependencies: - '@babel/core': 7.24.0 - '@svgr/babel-preset': 8.1.0(@babel/core@7.24.0) + '@babel/core': 7.24.4 + '@svgr/babel-preset': 8.1.0(@babel/core@7.24.4) camelcase: 6.3.0 - cosmiconfig: 8.3.6(typescript@5.3.3) + cosmiconfig: 8.3.6(typescript@5.4.5) snake-case: 3.0.4 transitivePeerDependencies: - supports-color @@ -8678,115 +8585,117 @@ snapshots: '@babel/types': 7.24.0 entities: 4.5.0 - '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0)': + '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.4.5))': dependencies: - '@babel/core': 7.24.0 - '@svgr/babel-preset': 8.1.0(@babel/core@7.24.0) - '@svgr/core': 8.1.0(typescript@5.3.3) + '@babel/core': 7.24.4 + '@svgr/babel-preset': 8.1.0(@babel/core@7.24.4) + '@svgr/core': 8.1.0(typescript@5.4.5) '@svgr/hast-util-to-babel-ast': 8.0.0 svg-parser: 2.0.4 transitivePeerDependencies: - supports-color - '@swc/core-darwin-arm64@1.4.2': + '@swc/core-darwin-arm64@1.5.0': optional: true - '@swc/core-darwin-x64@1.4.2': + '@swc/core-darwin-x64@1.5.0': optional: true - '@swc/core-linux-arm-gnueabihf@1.4.2': + '@swc/core-linux-arm-gnueabihf@1.5.0': optional: true - '@swc/core-linux-arm64-gnu@1.4.2': + '@swc/core-linux-arm64-gnu@1.5.0': optional: true - '@swc/core-linux-arm64-musl@1.4.2': + '@swc/core-linux-arm64-musl@1.5.0': optional: true - '@swc/core-linux-x64-gnu@1.4.2': + '@swc/core-linux-x64-gnu@1.5.0': optional: true - '@swc/core-linux-x64-musl@1.4.2': + '@swc/core-linux-x64-musl@1.5.0': optional: true - '@swc/core-win32-arm64-msvc@1.4.2': + '@swc/core-win32-arm64-msvc@1.5.0': optional: true - '@swc/core-win32-ia32-msvc@1.4.2': + '@swc/core-win32-ia32-msvc@1.5.0': optional: true - '@swc/core-win32-x64-msvc@1.4.2': + '@swc/core-win32-x64-msvc@1.5.0': optional: true - '@swc/core@1.4.2': + '@swc/core@1.5.0': dependencies: '@swc/counter': 0.1.3 - '@swc/types': 0.1.5 + '@swc/types': 0.1.6 optionalDependencies: - '@swc/core-darwin-arm64': 1.4.2 - '@swc/core-darwin-x64': 1.4.2 - '@swc/core-linux-arm-gnueabihf': 1.4.2 - '@swc/core-linux-arm64-gnu': 1.4.2 - '@swc/core-linux-arm64-musl': 1.4.2 - '@swc/core-linux-x64-gnu': 1.4.2 - '@swc/core-linux-x64-musl': 1.4.2 - '@swc/core-win32-arm64-msvc': 1.4.2 - '@swc/core-win32-ia32-msvc': 1.4.2 - '@swc/core-win32-x64-msvc': 1.4.2 + '@swc/core-darwin-arm64': 1.5.0 + '@swc/core-darwin-x64': 1.5.0 + '@swc/core-linux-arm-gnueabihf': 1.5.0 + '@swc/core-linux-arm64-gnu': 1.5.0 + '@swc/core-linux-arm64-musl': 1.5.0 + '@swc/core-linux-x64-gnu': 1.5.0 + '@swc/core-linux-x64-musl': 1.5.0 + '@swc/core-win32-arm64-msvc': 1.5.0 + '@swc/core-win32-ia32-msvc': 1.5.0 + '@swc/core-win32-x64-msvc': 1.5.0 '@swc/counter@0.1.3': {} - '@swc/types@0.1.5': {} + '@swc/types@0.1.6': + dependencies: + '@swc/counter': 0.1.3 - '@tauri-apps/api@1.5.3': {} + '@tauri-apps/api@1.5.4': {} - '@tauri-apps/cli-darwin-arm64@1.5.11': + '@tauri-apps/cli-darwin-arm64@1.5.12': optional: true - '@tauri-apps/cli-darwin-x64@1.5.11': + '@tauri-apps/cli-darwin-x64@1.5.12': optional: true - '@tauri-apps/cli-linux-arm-gnueabihf@1.5.11': + '@tauri-apps/cli-linux-arm-gnueabihf@1.5.12': optional: true - '@tauri-apps/cli-linux-arm64-gnu@1.5.11': + '@tauri-apps/cli-linux-arm64-gnu@1.5.12': optional: true - '@tauri-apps/cli-linux-arm64-musl@1.5.11': + '@tauri-apps/cli-linux-arm64-musl@1.5.12': optional: true - '@tauri-apps/cli-linux-x64-gnu@1.5.11': + '@tauri-apps/cli-linux-x64-gnu@1.5.12': optional: true - '@tauri-apps/cli-linux-x64-musl@1.5.11': + '@tauri-apps/cli-linux-x64-musl@1.5.12': optional: true - '@tauri-apps/cli-win32-arm64-msvc@1.5.11': + '@tauri-apps/cli-win32-arm64-msvc@1.5.12': optional: true - '@tauri-apps/cli-win32-ia32-msvc@1.5.11': + '@tauri-apps/cli-win32-ia32-msvc@1.5.12': optional: true - '@tauri-apps/cli-win32-x64-msvc@1.5.11': + '@tauri-apps/cli-win32-x64-msvc@1.5.12': optional: true - '@tauri-apps/cli@1.5.11': + '@tauri-apps/cli@1.5.12': optionalDependencies: - '@tauri-apps/cli-darwin-arm64': 1.5.11 - '@tauri-apps/cli-darwin-x64': 1.5.11 - '@tauri-apps/cli-linux-arm-gnueabihf': 1.5.11 - '@tauri-apps/cli-linux-arm64-gnu': 1.5.11 - '@tauri-apps/cli-linux-arm64-musl': 1.5.11 - '@tauri-apps/cli-linux-x64-gnu': 1.5.11 - '@tauri-apps/cli-linux-x64-musl': 1.5.11 - '@tauri-apps/cli-win32-arm64-msvc': 1.5.11 - '@tauri-apps/cli-win32-ia32-msvc': 1.5.11 - '@tauri-apps/cli-win32-x64-msvc': 1.5.11 + '@tauri-apps/cli-darwin-arm64': 1.5.12 + '@tauri-apps/cli-darwin-x64': 1.5.12 + '@tauri-apps/cli-linux-arm-gnueabihf': 1.5.12 + '@tauri-apps/cli-linux-arm64-gnu': 1.5.12 + '@tauri-apps/cli-linux-arm64-musl': 1.5.12 + '@tauri-apps/cli-linux-x64-gnu': 1.5.12 + '@tauri-apps/cli-linux-x64-musl': 1.5.12 + '@tauri-apps/cli-win32-arm64-msvc': 1.5.12 + '@tauri-apps/cli-win32-ia32-msvc': 1.5.12 + '@tauri-apps/cli-win32-x64-msvc': 1.5.12 '@trivago/prettier-plugin-sort-imports@4.3.0(prettier@3.2.5)': dependencies: '@babel/generator': 7.17.7 - '@babel/parser': 7.24.0 + '@babel/parser': 7.24.4 '@babel/traverse': 7.23.2 '@babel/types': 7.17.0 javascript-natural-sort: 0.7.1 @@ -8799,9 +8708,9 @@ snapshots: '@types/color-convert@2.0.3': dependencies: - '@types/color-name': 1.1.3 + '@types/color-name': 1.1.4 - '@types/color-name@1.1.3': {} + '@types/color-name@1.1.4': {} '@types/color@3.0.6': dependencies: @@ -8809,7 +8718,7 @@ snapshots: '@types/conventional-commits-parser@5.0.0': dependencies: - '@types/node': 18.19.21 + '@types/node': 18.19.31 '@types/debug@4.1.12': dependencies: @@ -8825,12 +8734,12 @@ snapshots: '@types/fs-extra@8.1.5': dependencies: - '@types/node': 18.19.21 + '@types/node': 18.19.31 '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 18.19.21 + '@types/node': 18.19.31 '@types/gtag.js@0.0.18': {} @@ -8840,15 +8749,15 @@ snapshots: '@types/js-cookie@2.2.7': {} - '@types/json-schema@7.0.12': {} + '@types/json-schema@7.0.15': {} '@types/json5@0.0.29': {} '@types/lodash-es@4.17.12': dependencies: - '@types/lodash': 4.14.202 + '@types/lodash': 4.17.0 - '@types/lodash@4.14.202': {} + '@types/lodash@4.17.0': {} '@types/mdast@3.0.15': dependencies: @@ -8866,37 +8775,34 @@ snapshots: '@types/node@14.18.63': {} - '@types/node@18.19.21': + '@types/node@18.19.31': dependencies: undici-types: 5.26.5 '@types/parse-json@4.0.2': {} - '@types/prop-types@15.7.11': {} + '@types/prop-types@15.7.12': {} - '@types/qs@6.9.12': {} + '@types/qs@6.9.15': {} - '@types/react-dom@18.2.19': + '@types/react-dom@18.2.25': dependencies: - '@types/react': 18.2.62 + '@types/react': 18.2.79 '@types/react-syntax-highlighter@15.5.11': dependencies: - '@types/react': 18.2.62 + '@types/react': 18.2.79 '@types/react-transition-group@4.4.10': dependencies: - '@types/react': 18.2.62 + '@types/react': 18.2.79 - '@types/react@18.2.62': + '@types/react@18.2.79': dependencies: - '@types/prop-types': 15.7.11 - '@types/scheduler': 0.16.3 + '@types/prop-types': 15.7.12 csstype: 3.1.3 - '@types/scheduler@0.16.3': {} - - '@types/semver@7.5.0': {} + '@types/semver@7.5.8': {} '@types/streamsaver@2.0.4': {} @@ -8920,113 +8826,117 @@ snapshots: '@types/uuid@9.0.8': {} - '@typescript-eslint/eslint-plugin@6.17.0(@typescript-eslint/parser@6.17.0)(eslint@8.57.0)(typescript@5.3.3)': + '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)': dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.17.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 6.17.0 - '@typescript-eslint/type-utils': 6.17.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/utils': 6.17.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.17.0 + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.4 eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 semver: 7.6.0 - ts-api-utils: 1.0.2(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: + typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@6.17.0(eslint@8.57.0)(typescript@5.3.3)': + '@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5)': dependencies: - '@typescript-eslint/scope-manager': 6.17.0 - '@typescript-eslint/types': 6.17.0 - '@typescript-eslint/typescript-estree': 6.17.0(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.17.0 + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.4 eslint: 8.57.0 - typescript: 5.3.3 + optionalDependencies: + typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@6.17.0': + '@typescript-eslint/scope-manager@6.21.0': dependencies: - '@typescript-eslint/types': 6.17.0 - '@typescript-eslint/visitor-keys': 6.17.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 - '@typescript-eslint/type-utils@6.17.0(eslint@8.57.0)(typescript@5.3.3)': + '@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.4.5)': dependencies: - '@typescript-eslint/typescript-estree': 6.17.0(typescript@5.3.3) - '@typescript-eslint/utils': 6.17.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) debug: 4.3.4 eslint: 8.57.0 - ts-api-utils: 1.0.2(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: + typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@6.17.0': {} + '@typescript-eslint/types@6.21.0': {} - '@typescript-eslint/typescript-estree@6.17.0(typescript@5.3.3)': + '@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.5)': dependencies: - '@typescript-eslint/types': 6.17.0 - '@typescript-eslint/visitor-keys': 6.17.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.6.0 - ts-api-utils: 1.0.2(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: + typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@6.17.0(eslint@8.57.0)(typescript@5.3.3)': + '@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.4.5)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@types/json-schema': 7.0.12 - '@types/semver': 7.5.0 - '@typescript-eslint/scope-manager': 6.17.0 - '@typescript-eslint/types': 6.17.0 - '@typescript-eslint/typescript-estree': 6.17.0(typescript@5.3.3) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) eslint: 8.57.0 semver: 7.6.0 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/visitor-keys@6.17.0': + '@typescript-eslint/visitor-keys@6.21.0': dependencies: - '@typescript-eslint/types': 6.17.0 + '@typescript-eslint/types': 6.21.0 eslint-visitor-keys: 3.4.3 '@ungap/structured-clone@1.2.0': {} - '@vitejs/plugin-basic-ssl@1.1.0(vite@5.1.5)': + '@vitejs/plugin-basic-ssl@1.1.0(vite@5.2.10(@types/node@18.19.31)(terser@5.30.4))': dependencies: - vite: 5.1.5(@types/node@18.19.21)(terser@5.30.3) + vite: 5.2.10(@types/node@18.19.31)(terser@5.30.4) - '@vitejs/plugin-legacy@5.3.2(terser@5.30.3)(vite@5.1.5)': + '@vitejs/plugin-legacy@5.3.2(terser@5.30.4)(vite@5.2.10(@types/node@18.19.31)(terser@5.30.4))': dependencies: - '@babel/core': 7.24.0 - '@babel/preset-env': 7.24.4(@babel/core@7.24.0) + '@babel/core': 7.24.4 + '@babel/preset-env': 7.24.4(@babel/core@7.24.4) browserslist: 4.23.0 browserslist-to-esbuild: 2.1.1(browserslist@4.23.0) - core-js: 3.36.1 - magic-string: 0.30.9 + core-js: 3.37.0 + magic-string: 0.30.10 regenerator-runtime: 0.14.1 systemjs: 6.14.3 - terser: 5.30.3 - vite: 5.1.5(@types/node@18.19.21)(terser@5.30.3) + terser: 5.30.4 + vite: 5.2.10(@types/node@18.19.31)(terser@5.30.4) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react-swc@3.6.0(vite@5.1.5)': + '@vitejs/plugin-react-swc@3.6.0(vite@5.2.10(@types/node@18.19.31)(terser@5.30.4))': dependencies: - '@swc/core': 1.4.2 - vite: 5.1.5(@types/node@18.19.21)(terser@5.30.3) + '@swc/core': 1.5.0 + vite: 5.2.10(@types/node@18.19.31)(terser@5.30.4) transitivePeerDependencies: - '@swc/helpers' @@ -9079,9 +8989,7 @@ snapshots: dependencies: type-fest: 0.21.3 - ansi-escapes@5.0.0: - dependencies: - type-fest: 1.4.0 + ansi-escapes@6.2.1: {} ansi-regex@5.0.1: {} @@ -9097,63 +9005,63 @@ snapshots: ansi-styles@6.2.1: {} - antd-img-crop@4.21.0(antd@5.15.2)(react-dom@18.2.0)(react@18.2.0): + antd-img-crop@4.21.0(antd@5.16.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - antd: 5.15.2(react-dom@18.2.0)(react@18.2.0) + antd: 5.16.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) compare-versions: 6.1.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-easy-crop: 5.0.5(react-dom@18.2.0)(react@18.2.0) + react-easy-crop: 5.0.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) tslib: 2.6.2 - antd@5.15.2(react-dom@18.2.0)(react@18.2.0): + antd@5.16.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: '@ant-design/colors': 7.0.2 - '@ant-design/cssinjs': 1.18.4(react-dom@18.2.0)(react@18.2.0) - '@ant-design/icons': 5.3.1(react-dom@18.2.0)(react@18.2.0) - '@ant-design/react-slick': 1.0.2(react@18.2.0) - '@babel/runtime': 7.24.0 + '@ant-design/cssinjs': 1.20.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@ant-design/icons': 5.3.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@ant-design/react-slick': 1.1.2(react@18.2.0) + '@babel/runtime': 7.24.4 '@ctrl/tinycolor': 3.6.1 - '@rc-component/color-picker': 1.5.2(react-dom@18.2.0)(react@18.2.0) - '@rc-component/mutate-observer': 1.1.0(react-dom@18.2.0)(react@18.2.0) - '@rc-component/tour': 1.14.2(react-dom@18.2.0)(react@18.2.0) - '@rc-component/trigger': 2.0.0(react-dom@18.2.0)(react@18.2.0) + '@rc-component/color-picker': 1.5.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@rc-component/mutate-observer': 1.1.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@rc-component/tour': 1.14.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@rc-component/trigger': 2.1.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) classnames: 2.5.1 copy-to-clipboard: 3.3.3 dayjs: 1.11.10 qrcode.react: 3.1.0(react@18.2.0) - rc-cascader: 3.24.0(react-dom@18.2.0)(react@18.2.0) - rc-checkbox: 3.2.0(react-dom@18.2.0)(react@18.2.0) - rc-collapse: 3.7.2(react-dom@18.2.0)(react@18.2.0) - rc-dialog: 9.4.0(react-dom@18.2.0)(react@18.2.0) - rc-drawer: 7.1.0(react-dom@18.2.0)(react@18.2.0) - rc-dropdown: 4.2.0(react-dom@18.2.0)(react@18.2.0) - rc-field-form: 1.42.1(react-dom@18.2.0)(react@18.2.0) - rc-image: 7.6.0(react-dom@18.2.0)(react@18.2.0) - rc-input: 1.4.3(react-dom@18.2.0)(react@18.2.0) - rc-input-number: 9.0.0(react-dom@18.2.0)(react@18.2.0) - rc-mentions: 2.11.1(react-dom@18.2.0)(react@18.2.0) - rc-menu: 9.13.0(react-dom@18.2.0)(react@18.2.0) - rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) - rc-notification: 5.3.0(react-dom@18.2.0)(react@18.2.0) - rc-pagination: 4.0.4(react-dom@18.2.0)(react@18.2.0) - rc-picker: 4.3.0(dayjs@1.11.10)(react-dom@18.2.0)(react@18.2.0) - rc-progress: 3.5.1(react-dom@18.2.0)(react@18.2.0) - rc-rate: 2.12.0(react-dom@18.2.0)(react@18.2.0) - rc-resize-observer: 1.4.0(react-dom@18.2.0)(react@18.2.0) - rc-segmented: 2.3.0(react-dom@18.2.0)(react@18.2.0) - rc-select: 14.13.0(react-dom@18.2.0)(react@18.2.0) - rc-slider: 10.5.0(react-dom@18.2.0)(react@18.2.0) - rc-steps: 6.0.1(react-dom@18.2.0)(react@18.2.0) - rc-switch: 4.1.0(react-dom@18.2.0)(react@18.2.0) - rc-table: 7.42.0(react-dom@18.2.0)(react@18.2.0) - rc-tabs: 14.1.1(react-dom@18.2.0)(react@18.2.0) - rc-textarea: 1.6.3(react-dom@18.2.0)(react@18.2.0) - rc-tooltip: 6.2.0(react-dom@18.2.0)(react@18.2.0) - rc-tree: 5.8.5(react-dom@18.2.0)(react@18.2.0) - rc-tree-select: 5.19.0(react-dom@18.2.0)(react@18.2.0) - rc-upload: 4.5.2(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) + rc-cascader: 3.24.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-checkbox: 3.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-collapse: 3.7.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-dialog: 9.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-drawer: 7.1.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-dropdown: 4.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-field-form: 1.44.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-image: 7.6.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-input: 1.4.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-input-number: 9.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-mentions: 2.11.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-menu: 9.13.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-motion: 2.9.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-notification: 5.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-pagination: 4.0.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-picker: 4.4.2(dayjs@1.11.10)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-progress: 4.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-rate: 2.12.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-resize-observer: 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-segmented: 2.3.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-select: 14.13.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-slider: 10.6.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-steps: 6.0.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-switch: 4.1.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-table: 7.45.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-tabs: 14.1.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-textarea: 1.6.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-tooltip: 6.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-tree: 5.8.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-tree-select: 5.19.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-upload: 4.5.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) scroll-into-view-if-needed: 3.1.0 @@ -9214,64 +9122,83 @@ snapshots: dependencies: dequal: 2.0.3 - array-buffer-byte-length@1.0.0: + array-buffer-byte-length@1.0.1: dependencies: - call-bind: 1.0.5 - is-array-buffer: 3.0.2 + call-bind: 1.0.7 + is-array-buffer: 3.0.4 array-ify@1.0.0: {} - array-includes@3.1.7: + array-includes@3.1.8: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.4 is-string: 1.0.7 array-tree-filter@2.1.0: {} array-union@2.1.0: {} - array.prototype.findlastindex@1.2.3: + array.prototype.findlast@1.2.5: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-shim-unscopables: 1.0.2 + + array.prototype.findlastindex@1.2.5: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 es-shim-unscopables: 1.0.2 - get-intrinsic: 1.2.2 array.prototype.flat@1.3.2: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 array.prototype.flatmap@1.3.2: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-shim-unscopables: 1.0.2 + + array.prototype.toreversed@1.1.2: + dependencies: + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 - array.prototype.tosorted@1.1.2: + array.prototype.tosorted@1.1.3: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 + es-errors: 1.3.0 es-shim-unscopables: 1.0.2 - get-intrinsic: 1.2.2 - arraybuffer.prototype.slice@1.0.2: + arraybuffer.prototype.slice@1.0.3: dependencies: - array-buffer-byte-length: 1.0.0 - call-bind: 1.0.5 + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 - is-array-buffer: 3.0.2 - is-shared-array-buffer: 1.0.2 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 ast-types-flow@0.0.8: {} @@ -9279,19 +9206,17 @@ snapshots: async@3.2.5: {} - asynciterator.prototype@1.0.0: - dependencies: - has-symbols: 1.0.3 - asynckit@0.4.0: {} - available-typed-arrays@1.0.5: {} + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.0.0 axe-core@4.7.0: {} - axios@1.6.7: + axios@1.6.8: dependencies: - follow-redirects: 1.15.5 + follow-redirects: 1.15.6 form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -9303,31 +9228,31 @@ snapshots: babel-plugin-macros@3.1.0: dependencies: - '@babel/runtime': 7.23.2 + '@babel/runtime': 7.24.4 cosmiconfig: 7.1.0 resolve: 1.22.8 - babel-plugin-polyfill-corejs2@0.4.10(@babel/core@7.24.0): + babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.24.4): dependencies: '@babel/compat-data': 7.24.4 - '@babel/core': 7.24.0 - '@babel/helper-define-polyfill-provider': 0.6.1(@babel/core@7.24.0) + '@babel/core': 7.24.4 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.4) semver: 6.3.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.24.0): + babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.24.4): dependencies: - '@babel/core': 7.24.0 - '@babel/helper-define-polyfill-provider': 0.6.1(@babel/core@7.24.0) - core-js-compat: 3.36.1 + '@babel/core': 7.24.4 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.4) + core-js-compat: 3.37.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.1(@babel/core@7.24.0): + babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.24.4): dependencies: - '@babel/core': 7.24.0 - '@babel/helper-define-polyfill-provider': 0.6.1(@babel/core@7.24.0) + '@babel/core': 7.24.4 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.4) transitivePeerDependencies: - supports-color @@ -9342,7 +9267,7 @@ snapshots: big-integer@1.6.52: {} - binary-extensions@2.2.0: {} + binary-extensions@2.3.0: {} binary@0.3.0: dependencies: @@ -9411,8 +9336,8 @@ snapshots: browserslist@4.23.0: dependencies: - caniuse-lite: 1.0.30001594 - electron-to-chromium: 1.4.692 + caniuse-lite: 1.0.30001612 + electron-to-chromium: 1.4.748 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.23.0) @@ -9434,12 +9359,6 @@ snapshots: buffers@0.1.1: {} - call-bind@1.0.5: - dependencies: - function-bind: 1.1.2 - get-intrinsic: 1.2.2 - set-function-length: 1.1.1 - call-bind@1.0.7: dependencies: es-define-property: 1.0.0 @@ -9452,7 +9371,7 @@ snapshots: camelcase@6.3.0: {} - caniuse-lite@1.0.30001594: {} + caniuse-lite@1.0.30001612: {} ccount@2.0.1: {} @@ -9524,10 +9443,10 @@ snapshots: dependencies: restore-cursor: 4.0.0 - cli-truncate@3.1.0: + cli-truncate@4.0.0: dependencies: slice-ansi: 5.0.0 - string-width: 5.1.2 + string-width: 7.1.0 cliui@8.0.1: dependencies: @@ -9541,7 +9460,7 @@ snapshots: clsx@1.2.1: {} - clsx@2.1.0: {} + clsx@2.1.1: {} color-convert@1.9.3: dependencies: @@ -9579,8 +9498,6 @@ snapshots: comma-separated-tokens@2.0.3: {} - commander@11.0.0: {} - commander@11.1.0: {} commander@2.20.3: {} @@ -9628,20 +9545,20 @@ snapshots: dependencies: toggle-selection: 1.0.6 - core-js-compat@3.36.1: + core-js-compat@3.37.0: dependencies: browserslist: 4.23.0 - core-js@3.36.1: {} + core-js@3.37.0: {} core-util-is@1.0.3: {} - cosmiconfig-typescript-loader@5.0.0(@types/node@18.19.21)(cosmiconfig@8.3.6)(typescript@5.3.3): + cosmiconfig-typescript-loader@5.0.0(@types/node@18.19.31)(cosmiconfig@9.0.0(typescript@5.4.5))(typescript@5.4.5): dependencies: - '@types/node': 18.19.21 - cosmiconfig: 8.3.6(typescript@5.3.3) + '@types/node': 18.19.31 + cosmiconfig: 9.0.0(typescript@5.4.5) jiti: 1.21.0 - typescript: 5.3.3 + typescript: 5.4.5 cosmiconfig@7.1.0: dependencies: @@ -9651,13 +9568,23 @@ snapshots: path-type: 4.0.0 yaml: 1.10.2 - cosmiconfig@8.3.6(typescript@5.3.3): + cosmiconfig@8.3.6(typescript@5.4.5): dependencies: import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 - typescript: 5.3.3 + optionalDependencies: + typescript: 5.4.5 + + cosmiconfig@9.0.0(typescript@5.4.5): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + optionalDependencies: + typescript: 5.4.5 crc-32@1.2.2: {} @@ -9703,14 +9630,30 @@ snapshots: css-what@6.1.0: {} - csstype@3.1.2: {} - csstype@3.1.3: {} damerau-levenshtein@1.0.8: {} dargs@8.1.0: {} + data-view-buffer@1.0.1: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + data-view-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + data-view-byte-offset@1.0.0: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dayjs@1.11.10: {} de-indent@1.0.2: {} @@ -9723,7 +9666,7 @@ snapshots: debug@3.2.7: dependencies: - ms: 2.1.2 + ms: 2.1.3 debug@4.3.4: dependencies: @@ -9737,12 +9680,6 @@ snapshots: deep-is@0.1.4: {} - define-data-property@1.1.1: - dependencies: - get-intrinsic: 1.2.2 - gopd: 1.0.1 - has-property-descriptors: 1.0.1 - define-data-property@1.1.4: dependencies: es-define-property: 1.0.0 @@ -9753,8 +9690,8 @@ snapshots: define-properties@1.2.1: dependencies: - define-data-property: 1.1.1 - has-property-descriptors: 1.0.1 + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 object-keys: 1.1.1 delayed-stream@1.0.0: {} @@ -9783,8 +9720,8 @@ snapshots: dom-helpers@5.2.1: dependencies: - '@babel/runtime': 7.23.2 - csstype: 3.1.2 + '@babel/runtime': 7.24.4 + csstype: 3.1.3 dom-serializer@2.0.0: dependencies: @@ -9825,9 +9762,9 @@ snapshots: dependencies: readable-stream: 2.3.8 - eastasianwidth@0.2.0: {} + electron-to-chromium@1.4.748: {} - electron-to-chromium@1.4.692: {} + emoji-regex@10.3.0: {} emoji-regex@8.0.0: {} @@ -9844,7 +9781,7 @@ snapshots: object-assign: 4.1.1 tapable: 0.2.9 - enhanced-resolve@5.15.0: + enhanced-resolve@5.16.0: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 @@ -9853,6 +9790,8 @@ snapshots: entities@4.5.0: {} + env-paths@2.2.1: {} + eol@0.9.1: {} errno@0.1.8: @@ -9867,47 +9806,54 @@ snapshots: dependencies: stackframe: 1.3.4 - es-abstract@1.22.3: + es-abstract@1.23.3: dependencies: - array-buffer-byte-length: 1.0.0 - arraybuffer.prototype.slice: 1.0.2 - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 - es-set-tostringtag: 2.0.2 + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 es-to-primitive: 1.2.1 function.prototype.name: 1.1.6 - get-intrinsic: 1.2.2 - get-symbol-description: 1.0.0 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 globalthis: 1.0.3 gopd: 1.0.1 - has-property-descriptors: 1.0.1 - has-proto: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 has-symbols: 1.0.3 - hasown: 2.0.0 - internal-slot: 1.0.6 - is-array-buffer: 3.0.2 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 is-callable: 1.2.7 - is-negative-zero: 2.0.2 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 + is-shared-array-buffer: 1.0.3 is-string: 1.0.7 - is-typed-array: 1.1.12 + is-typed-array: 1.1.13 is-weakref: 1.0.2 object-inspect: 1.13.1 object-keys: 1.1.1 - object.assign: 4.1.4 - regexp.prototype.flags: 1.5.1 - safe-array-concat: 1.0.1 - safe-regex-test: 1.0.0 - string.prototype.trim: 1.2.8 - string.prototype.trimend: 1.0.7 - string.prototype.trimstart: 1.0.7 - typed-array-buffer: 1.0.0 - typed-array-byte-length: 1.0.0 - typed-array-byte-offset: 1.0.0 - typed-array-length: 1.0.4 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.6 unbox-primitive: 1.0.2 - which-typed-array: 1.1.13 + which-typed-array: 1.1.15 es-define-property@1.0.0: dependencies: @@ -9915,32 +9861,36 @@ snapshots: es-errors@1.3.0: {} - es-iterator-helpers@1.0.15: + es-iterator-helpers@1.0.19: dependencies: - asynciterator.prototype: 1.0.0 - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - es-set-tostringtag: 2.0.2 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-set-tostringtag: 2.0.3 function-bind: 1.1.2 - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.4 globalthis: 1.0.3 - has-property-descriptors: 1.0.1 - has-proto: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 has-symbols: 1.0.3 - internal-slot: 1.0.6 + internal-slot: 1.0.7 iterator.prototype: 1.1.2 - safe-array-concat: 1.0.1 + safe-array-concat: 1.1.2 + + es-object-atoms@1.0.0: + dependencies: + es-errors: 1.3.0 - es-set-tostringtag@2.0.2: + es-set-tostringtag@2.0.3: dependencies: - get-intrinsic: 1.2.2 - has-tostringtag: 1.0.0 - hasown: 2.0.0 + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.2 es-shim-unscopables@1.0.2: dependencies: - hasown: 2.0.0 + hasown: 2.0.2 es-to-primitive@1.2.1: dependencies: @@ -9948,32 +9898,6 @@ snapshots: is-date-object: 1.0.5 is-symbol: 1.0.4 - esbuild@0.19.12: - optionalDependencies: - '@esbuild/aix-ppc64': 0.19.12 - '@esbuild/android-arm': 0.19.12 - '@esbuild/android-arm64': 0.19.12 - '@esbuild/android-x64': 0.19.12 - '@esbuild/darwin-arm64': 0.19.12 - '@esbuild/darwin-x64': 0.19.12 - '@esbuild/freebsd-arm64': 0.19.12 - '@esbuild/freebsd-x64': 0.19.12 - '@esbuild/linux-arm': 0.19.12 - '@esbuild/linux-arm64': 0.19.12 - '@esbuild/linux-ia32': 0.19.12 - '@esbuild/linux-loong64': 0.19.12 - '@esbuild/linux-mips64el': 0.19.12 - '@esbuild/linux-ppc64': 0.19.12 - '@esbuild/linux-riscv64': 0.19.12 - '@esbuild/linux-s390x': 0.19.12 - '@esbuild/linux-x64': 0.19.12 - '@esbuild/netbsd-x64': 0.19.12 - '@esbuild/openbsd-x64': 0.19.12 - '@esbuild/sunos-x64': 0.19.12 - '@esbuild/win32-arm64': 0.19.12 - '@esbuild/win32-ia32': 0.19.12 - '@esbuild/win32-x64': 0.19.12 - esbuild@0.20.2: optionalDependencies: '@esbuild/aix-ppc64': 0.20.2 @@ -10000,7 +9924,7 @@ snapshots: '@esbuild/win32-ia32': 0.20.2 '@esbuild/win32-x64': 0.20.2 - escalade@3.1.1: {} + escalade@3.1.2: {} escape-string-regexp@1.0.5: {} @@ -10022,15 +9946,15 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.17.0)(eslint-plugin-import@2.29.0)(eslint@8.57.0): + eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0): dependencies: debug: 4.3.4 - enhanced-resolve: 5.15.0 + enhanced-resolve: 5.16.0 eslint: 8.57.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.17.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.17.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - fast-glob: 3.3.1 - get-tsconfig: 4.7.2 + eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + fast-glob: 3.3.2 + get-tsconfig: 4.7.3 is-core-module: 2.13.1 is-glob: 4.0.3 transitivePeerDependencies: @@ -10039,37 +9963,39 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.8.0(@typescript-eslint/parser@6.17.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0): dependencies: - '@typescript-eslint/parser': 6.17.0(eslint@8.57.0)(typescript@5.3.3) debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.17.0)(eslint-plugin-import@2.29.0)(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.17.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): dependencies: - '@typescript-eslint/parser': 6.17.0(eslint@8.57.0)(typescript@5.3.3) - array-includes: 3.1.7 - array.prototype.findlastindex: 1.2.3 + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.17.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - hasown: 2.0.0 + eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) + hasown: 2.0.2 is-core-module: 2.13.1 is-glob: 4.0.3 minimatch: 3.1.2 - object.fromentries: 2.0.7 - object.groupby: 1.0.1 - object.values: 1.1.7 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.0 semver: 6.3.1 - tsconfig-paths: 3.14.2 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -10077,57 +10003,60 @@ snapshots: eslint-plugin-jsx-a11y@6.8.0(eslint@8.57.0): dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 aria-query: 5.3.0 - array-includes: 3.1.7 + array-includes: 3.1.8 array.prototype.flatmap: 1.3.2 ast-types-flow: 0.0.8 axe-core: 4.7.0 axobject-query: 3.2.1 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - es-iterator-helpers: 1.0.15 + es-iterator-helpers: 1.0.19 eslint: 8.57.0 - hasown: 2.0.0 + hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 minimatch: 3.1.2 - object.entries: 1.1.7 - object.fromentries: 2.0.7 + object.entries: 1.1.8 + object.fromentries: 2.0.8 eslint-plugin-react-hooks@4.6.0(eslint@8.57.0): dependencies: eslint: 8.57.0 - eslint-plugin-react-refresh@0.4.5(eslint@8.57.0): + eslint-plugin-react-refresh@0.4.6(eslint@8.57.0): dependencies: eslint: 8.57.0 - eslint-plugin-react@7.33.2(eslint@8.57.0): + eslint-plugin-react@7.34.1(eslint@8.57.0): dependencies: - array-includes: 3.1.7 + array-includes: 3.1.8 + array.prototype.findlast: 1.2.5 array.prototype.flatmap: 1.3.2 - array.prototype.tosorted: 1.1.2 + array.prototype.toreversed: 1.1.2 + array.prototype.tosorted: 1.1.3 doctrine: 2.1.0 - es-iterator-helpers: 1.0.15 + es-iterator-helpers: 1.0.19 eslint: 8.57.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.5 minimatch: 3.1.2 - object.entries: 1.1.7 - object.fromentries: 2.0.7 - object.hasown: 1.1.3 - object.values: 1.1.7 + object.entries: 1.1.8 + object.fromentries: 2.0.8 + object.hasown: 1.1.4 + object.values: 1.2.0 prop-types: 15.8.1 resolve: 2.0.0-next.5 semver: 6.3.1 - string.prototype.matchall: 4.0.10 + string.prototype.matchall: 4.0.11 - eslint-plugin-unused-imports@3.1.0(@typescript-eslint/eslint-plugin@6.17.0)(eslint@8.57.0): + eslint-plugin-unused-imports@3.1.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0): dependencies: - '@typescript-eslint/eslint-plugin': 6.17.0(@typescript-eslint/parser@6.17.0)(eslint@8.57.0)(typescript@5.3.3) eslint: 8.57.0 eslint-rule-composer: 0.3.0 + optionalDependencies: + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) eslint-rule-composer@0.3.0: {} @@ -10215,18 +10144,6 @@ snapshots: unzipper: 0.10.14 uuid: 8.3.2 - execa@7.2.0: - dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 4.3.1 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.1.0 - onetime: 6.0.0 - signal-exit: 3.0.7 - strip-final-newline: 3.0.0 - execa@8.0.1: dependencies: cross-spawn: 7.0.3 @@ -10234,7 +10151,7 @@ snapshots: human-signals: 5.0.0 is-stream: 3.0.0 merge-stream: 2.0.0 - npm-run-path: 5.1.0 + npm-run-path: 5.3.0 onetime: 6.0.0 signal-exit: 4.1.0 strip-final-newline: 3.0.0 @@ -10250,7 +10167,7 @@ snapshots: fast-fifo@1.3.2: {} - fast-glob@3.3.1: + fast-glob@3.3.2: dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 @@ -10264,15 +10181,13 @@ snapshots: fast-loops@1.1.3: {} - fast-memoize@2.5.2: {} - fast-shallow-equal@1.0.0: {} fast-sort@3.4.0: {} fastest-stable-stringify@2.0.2: {} - fastq@1.15.0: + fastq@1.17.1: dependencies: reusify: 1.0.4 @@ -10286,7 +10201,7 @@ snapshots: file-entry-cache@6.0.1: dependencies: - flat-cache: 3.0.4 + flat-cache: 3.2.0 fill-range@7.0.1: dependencies: @@ -10305,16 +10220,17 @@ snapshots: path-exists: 5.0.0 unicorn-magic: 0.1.0 - flat-cache@3.0.4: + flat-cache@3.2.0: dependencies: - flatted: 3.2.7 + flatted: 3.3.1 + keyv: 4.5.4 rimraf: 3.0.2 - flatted@3.2.7: {} + flatted@3.3.1: {} fnv-plus@1.3.1: {} - follow-redirects@1.15.5: {} + follow-redirects@1.15.6: {} for-each@0.3.3: dependencies: @@ -10328,13 +10244,13 @@ snapshots: format@0.2.2: {} - framer-motion@11.0.8(react-dom@18.2.0)(react@18.2.0): + framer-motion@11.1.7(@emotion/is-prop-valid@1.2.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) tslib: 2.6.2 optionalDependencies: - '@emotion/is-prop-valid': 0.8.8 + '@emotion/is-prop-valid': 1.2.2 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) fs-constants@1.0.0: {} @@ -10342,7 +10258,7 @@ snapshots: dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 - universalify: 2.0.0 + universalify: 2.0.1 fs-extra@8.1.0: dependencies: @@ -10391,9 +10307,9 @@ snapshots: function.prototype.name@1.1.6: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 functions-have-names: 1.2.3 functions-have-names@1.2.3: {} @@ -10404,31 +10320,25 @@ snapshots: get-caller-file@2.0.5: {} - get-intrinsic@1.2.2: - dependencies: - function-bind: 1.1.2 - has-proto: 1.0.1 - has-symbols: 1.0.3 - hasown: 2.0.0 + get-east-asian-width@1.2.0: {} get-intrinsic@1.2.4: dependencies: es-errors: 1.3.0 function-bind: 1.1.2 - has-proto: 1.0.1 + has-proto: 1.0.3 has-symbols: 1.0.3 - hasown: 2.0.0 - - get-stream@6.0.1: {} + hasown: 2.0.2 get-stream@8.0.1: {} - get-symbol-description@1.0.0: + get-symbol-description@1.0.2: dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 - get-tsconfig@4.7.2: + get-tsconfig@4.7.3: dependencies: resolve-pkg-maps: 1.0.0 @@ -10446,11 +10356,11 @@ snapshots: dependencies: is-glob: 4.0.3 - glob-stream@8.0.0: + glob-stream@8.0.2: dependencies: '@gulpjs/to-absolute-glob': 4.0.0 anymatch: 3.1.3 - fastq: 1.15.0 + fastq: 1.17.1 glob-parent: 6.0.2 is-glob: 4.0.3 is-negated-glob: 1.0.0 @@ -10492,7 +10402,7 @@ snapshots: '@types/glob': 7.2.0 array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.3.1 + fast-glob: 3.3.2 glob: 7.2.3 ignore: 5.3.1 merge2: 1.4.1 @@ -10502,14 +10412,14 @@ snapshots: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.3.1 + fast-glob: 3.3.2 ignore: 5.3.1 merge2: 1.4.1 slash: 3.0.0 gopd@1.0.1: dependencies: - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.4 graceful-fs@4.2.11: {} @@ -10525,23 +10435,19 @@ snapshots: has-flag@4.0.0: {} - has-property-descriptors@1.0.1: - dependencies: - get-intrinsic: 1.2.2 - has-property-descriptors@1.0.2: dependencies: es-define-property: 1.0.0 - has-proto@1.0.1: {} + has-proto@1.0.3: {} has-symbols@1.0.3: {} - has-tostringtag@1.0.0: + has-tostringtag@1.0.2: dependencies: has-symbols: 1.0.3 - hasown@2.0.0: + hasown@2.0.2: dependencies: function-bind: 1.1.2 @@ -10594,19 +10500,17 @@ snapshots: transitivePeerDependencies: - supports-color - human-signals@4.3.1: {} - human-signals@5.0.0: {} husky@9.0.11: {} hyphenate-style-name@1.0.4: {} - i18next-browser-languagedetector@7.2.0: + i18next-browser-languagedetector@7.2.1: dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 - i18next-http-backend@2.5.0: + i18next-http-backend@2.5.1: dependencies: cross-fetch: 4.0.0 transitivePeerDependencies: @@ -10614,7 +10518,7 @@ snapshots: i18next-parser@8.13.0: dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 broccoli-plugin: 4.0.7 cheerio: 1.0.0-rc.12 colors: 1.4.0 @@ -10623,21 +10527,21 @@ snapshots: esbuild: 0.20.2 fs-extra: 11.2.0 gulp-sort: 2.0.0 - i18next: 23.10.0 + i18next: 23.11.2 js-yaml: 4.1.0 lilconfig: 3.1.1 rsvp: 4.8.5 sort-keys: 5.0.0 - typescript: 5.3.3 + typescript: 5.4.5 vinyl: 3.0.0 vinyl-fs: 4.0.0 vue-template-compiler: 2.7.16 transitivePeerDependencies: - supports-color - i18next@23.10.0: + i18next@23.11.2: dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 iconv-lite@0.6.3: dependencies: @@ -10649,7 +10553,7 @@ snapshots: immediate@3.0.6: {} - immer@10.0.3: {} + immer@10.0.4: {} import-fresh@3.3.0: dependencies: @@ -10676,11 +10580,11 @@ snapshots: css-in-js-utils: 3.1.0 fast-loops: 1.1.3 - internal-slot@1.0.6: + internal-slot@1.0.7: dependencies: - get-intrinsic: 1.2.2 - hasown: 2.0.0 - side-channel: 1.0.4 + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.0.6 invariant@2.2.4: dependencies: @@ -10693,11 +10597,10 @@ snapshots: is-alphabetical: 1.0.4 is-decimal: 1.0.4 - is-array-buffer@3.0.2: + is-array-buffer@3.0.4: dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-typed-array: 1.1.12 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 is-arrayish@0.2.1: {} @@ -10705,7 +10608,7 @@ snapshots: is-async-function@2.0.0: dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 is-bigint@1.0.4: dependencies: @@ -10713,12 +10616,12 @@ snapshots: is-binary-path@2.1.0: dependencies: - binary-extensions: 2.2.0 + binary-extensions: 2.3.0 is-boolean-object@1.1.2: dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 + call-bind: 1.0.7 + has-tostringtag: 1.0.2 is-buffer@2.0.5: {} @@ -10726,11 +10629,15 @@ snapshots: is-core-module@2.13.1: dependencies: - hasown: 2.0.0 + hasown: 2.0.2 + + is-data-view@1.0.1: + dependencies: + is-typed-array: 1.1.13 is-date-object@1.0.5: dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 is-decimal@1.0.4: {} @@ -10740,15 +10647,19 @@ snapshots: is-finalizationregistry@1.0.2: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 is-fullwidth-code-point@3.0.0: {} is-fullwidth-code-point@4.0.0: {} + is-fullwidth-code-point@5.0.0: + dependencies: + get-east-asian-width: 1.2.0 + is-generator-function@1.0.10: dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 is-glob@4.0.3: dependencies: @@ -10756,15 +10667,15 @@ snapshots: is-hexadecimal@1.0.4: {} - is-map@2.0.2: {} + is-map@2.0.3: {} is-negated-glob@1.0.0: {} - is-negative-zero@2.0.2: {} + is-negative-zero@2.0.3: {} is-number-object@1.0.7: dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 is-number@7.0.0: {} @@ -10778,20 +10689,20 @@ snapshots: is-regex@1.1.4: dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 + call-bind: 1.0.7 + has-tostringtag: 1.0.2 - is-set@2.0.2: {} + is-set@2.0.3: {} - is-shared-array-buffer@1.0.2: + is-shared-array-buffer@1.0.3: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 is-stream@3.0.0: {} is-string@1.0.7: dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 is-symbol@1.0.4: dependencies: @@ -10801,22 +10712,22 @@ snapshots: dependencies: text-extensions: 2.4.0 - is-typed-array@1.1.12: + is-typed-array@1.1.13: dependencies: - which-typed-array: 1.1.13 + which-typed-array: 1.1.15 is-valid-glob@1.0.0: {} - is-weakmap@2.0.1: {} + is-weakmap@2.0.2: {} is-weakref@1.0.2: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 - is-weakset@2.0.2: + is-weakset@2.0.3: dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 is-wsl@2.2.0: dependencies: @@ -10831,10 +10742,10 @@ snapshots: iterator.prototype@1.1.2: dependencies: define-properties: 1.2.1 - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.4 has-symbols: 1.0.3 - reflect.getprototypeof: 1.0.4 - set-function-name: 2.0.1 + reflect.getprototypeof: 1.0.6 + set-function-name: 2.0.2 javascript-natural-sort@0.7.1: {} @@ -10852,6 +10763,8 @@ snapshots: jsesc@2.5.2: {} + json-buffer@3.0.1: {} + json-parse-even-better-errors@2.3.1: {} json-schema-traverse@0.4.1: {} @@ -10876,7 +10789,7 @@ snapshots: jsonfile@6.1.0: dependencies: - universalify: 2.0.0 + universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 @@ -10890,10 +10803,10 @@ snapshots: jsx-ast-utils@3.3.5: dependencies: - array-includes: 3.1.7 + array-includes: 3.1.8 array.prototype.flat: 1.3.2 - object.assign: 4.1.4 - object.values: 1.1.7 + object.assign: 4.1.5 + object.values: 1.2.0 jszip@3.10.1: dependencies: @@ -10902,6 +10815,10 @@ snapshots: readable-stream: 2.3.8 setimmediate: 1.0.5 + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + kleur@4.1.5: {} klona@2.0.6: {} @@ -10931,38 +10848,37 @@ snapshots: dependencies: immediate: 3.0.6 - lilconfig@2.1.0: {} + lilconfig@3.0.0: {} lilconfig@3.1.1: {} lines-and-columns@1.2.4: {} - lint-staged@13.3.0: + lint-staged@15.2.2: dependencies: chalk: 5.3.0 - commander: 11.0.0 + commander: 11.1.0 debug: 4.3.4 - execa: 7.2.0 - lilconfig: 2.1.0 - listr2: 6.6.1 + execa: 8.0.1 + lilconfig: 3.0.0 + listr2: 8.0.1 micromatch: 4.0.5 pidtree: 0.6.0 string-argv: 0.3.2 - yaml: 2.3.1 + yaml: 2.3.4 transitivePeerDependencies: - - enquirer - supports-color listenercount@1.0.1: {} - listr2@6.6.1: + listr2@8.0.1: dependencies: - cli-truncate: 3.1.0 + cli-truncate: 4.0.0 colorette: 2.0.20 eventemitter3: 5.0.1 - log-update: 5.0.1 + log-update: 6.0.0 rfdc: 1.3.1 - wrap-ansi: 8.1.0 + wrap-ansi: 9.0.0 localforage@1.10.0: dependencies: @@ -11022,13 +10938,13 @@ snapshots: lodash@4.17.21: {} - log-update@5.0.1: + log-update@6.0.0: dependencies: - ansi-escapes: 5.0.0 + ansi-escapes: 6.2.1 cli-cursor: 4.0.0 - slice-ansi: 5.0.0 + slice-ansi: 7.1.0 strip-ansi: 7.1.0 - wrap-ansi: 8.1.0 + wrap-ansi: 9.0.0 longest-streak@3.1.0: {} @@ -11063,15 +10979,15 @@ snapshots: dependencies: yallist: 4.0.0 - magic-string@0.30.8: + magic-string@0.30.10: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 - magic-string@0.30.9: + magic-string@0.30.8: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 - mammoth@1.7.0: + mammoth@1.7.1: dependencies: '@xmldom/xmldom': 0.8.10 argparse: 1.0.10 @@ -11463,7 +11379,9 @@ snapshots: ms@2.1.2: {} - nano-css@5.6.1(react-dom@18.2.0)(react@18.2.0): + ms@2.1.3: {} + + nano-css@5.6.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: '@jridgewell/sourcemap-codec': 1.4.15 css-tree: 1.1.3 @@ -11474,7 +11392,7 @@ snapshots: react-dom: 18.2.0(react@18.2.0) rtl-css-js: 1.16.1 stacktrace-js: 2.0.2 - stylis: 4.3.1 + stylis: 4.3.2 nanoid@3.3.7: {} @@ -11503,7 +11421,7 @@ snapshots: dependencies: path-key: 3.1.1 - npm-run-path@5.1.0: + npm-run-path@5.3.0: dependencies: path-key: 4.0.0 @@ -11517,42 +11435,43 @@ snapshots: object-keys@1.1.1: {} - object.assign@4.1.4: + object.assign@4.1.5: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 - object.entries@1.1.7: + object.entries@1.1.8: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-object-atoms: 1.0.0 - object.fromentries@2.0.7: + object.fromentries@2.0.8: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 - object.groupby@1.0.1: + object.groupby@1.0.3: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 + es-abstract: 1.23.3 - object.hasown@1.1.3: + object.hasown@1.1.4: dependencies: define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 - object.values@1.1.7: + object.values@1.2.0: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-object-atoms: 1.0.0 once@1.4.0: dependencies: @@ -11616,7 +11535,7 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.22.13 + '@babel/code-frame': 7.24.2 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -11662,18 +11581,20 @@ snapshots: pidtree@0.6.0: {} - postcss@8.4.35: + possible-typed-array-names@1.0.0: {} + + postcss@8.4.38: dependencies: nanoid: 3.3.7 picocolors: 1.0.0 - source-map-js: 1.0.2 + source-map-js: 1.2.0 - posthog-js@1.116.6: + posthog-js@1.129.0: dependencies: fflate: 0.4.8 - preact: 10.20.1 + preact: 10.20.2 - preact@10.20.1: {} + preact@10.20.2: {} prelude-ls@1.2.1: {} @@ -11699,19 +11620,19 @@ snapshots: dependencies: xtend: 4.0.2 - property-information@6.4.1: {} + property-information@6.5.0: {} proxy-from-env@1.1.0: {} prr@1.0.1: {} - punycode@2.3.0: {} + punycode@2.3.1: {} qrcode.react@3.1.0(react@18.2.0): dependencies: react: 18.2.0 - qs@6.12.0: + qs@6.12.1: dependencies: side-channel: 1.0.6 @@ -11727,334 +11648,332 @@ snapshots: raf-schd@4.0.3: {} - rc-cascader@3.24.0(react-dom@18.2.0)(react@18.2.0): + rc-cascader@3.24.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 array-tree-filter: 2.1.0 classnames: 2.5.1 - rc-select: 14.13.0(react-dom@18.2.0)(react@18.2.0) - rc-tree: 5.8.5(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) + rc-select: 14.13.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-tree: 5.8.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - rc-checkbox@3.2.0(react-dom@18.2.0)(react@18.2.0): + rc-checkbox@3.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 classnames: 2.5.1 - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - rc-collapse@3.7.2(react-dom@18.2.0)(react@18.2.0): + rc-collapse@3.7.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 classnames: 2.5.1 - rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-motion: 2.9.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - rc-dialog@9.4.0(react-dom@18.2.0)(react@18.2.0): + rc-dialog@9.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime': 7.24.0 - '@rc-component/portal': 1.1.2(react-dom@18.2.0)(react@18.2.0) + '@babel/runtime': 7.24.4 + '@rc-component/portal': 1.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0) classnames: 2.5.1 - rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-motion: 2.9.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - rc-drawer@7.1.0(react-dom@18.2.0)(react@18.2.0): + rc-drawer@7.1.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime': 7.24.0 - '@rc-component/portal': 1.1.2(react-dom@18.2.0)(react@18.2.0) + '@babel/runtime': 7.24.4 + '@rc-component/portal': 1.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0) classnames: 2.5.1 - rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-motion: 2.9.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - rc-dropdown@4.2.0(react-dom@18.2.0)(react@18.2.0): + rc-dropdown@4.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime': 7.24.0 - '@rc-component/trigger': 2.0.0(react-dom@18.2.0)(react@18.2.0) + '@babel/runtime': 7.24.4 + '@rc-component/trigger': 2.1.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) classnames: 2.5.1 - rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - rc-field-form@1.42.1(react-dom@18.2.0)(react@18.2.0): + rc-field-form@1.44.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 async-validator: 4.2.5 - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - rc-image@7.6.0(react-dom@18.2.0)(react@18.2.0): + rc-image@7.6.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime': 7.24.0 - '@rc-component/portal': 1.1.2(react-dom@18.2.0)(react@18.2.0) + '@babel/runtime': 7.24.4 + '@rc-component/portal': 1.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0) classnames: 2.5.1 - rc-dialog: 9.4.0(react-dom@18.2.0)(react@18.2.0) - rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-dialog: 9.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-motion: 2.9.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - rc-input-number@9.0.0(react-dom@18.2.0)(react@18.2.0): + rc-input-number@9.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 '@rc-component/mini-decimal': 1.1.0 classnames: 2.5.1 - rc-input: 1.4.3(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-input: 1.4.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - rc-input@1.4.3(react-dom@18.2.0)(react@18.2.0): + rc-input@1.4.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 classnames: 2.5.1 - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - rc-mentions@2.11.1(react-dom@18.2.0)(react@18.2.0): + rc-mentions@2.11.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime': 7.24.0 - '@rc-component/trigger': 2.0.0(react-dom@18.2.0)(react@18.2.0) + '@babel/runtime': 7.24.4 + '@rc-component/trigger': 2.1.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) classnames: 2.5.1 - rc-input: 1.4.3(react-dom@18.2.0)(react@18.2.0) - rc-menu: 9.13.0(react-dom@18.2.0)(react@18.2.0) - rc-textarea: 1.6.3(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) + rc-input: 1.4.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-menu: 9.13.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-textarea: 1.6.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - rc-menu@9.13.0(react-dom@18.2.0)(react@18.2.0): + rc-menu@9.13.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime': 7.24.0 - '@rc-component/trigger': 2.0.0(react-dom@18.2.0)(react@18.2.0) + '@babel/runtime': 7.24.4 + '@rc-component/trigger': 2.1.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) classnames: 2.5.1 - rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) - rc-overflow: 1.3.2(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) + rc-motion: 2.9.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-overflow: 1.3.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - rc-motion@2.9.0(react-dom@18.2.0)(react@18.2.0): + rc-motion@2.9.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 classnames: 2.5.1 - rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - rc-notification@5.3.0(react-dom@18.2.0)(react@18.2.0): + rc-notification@5.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 classnames: 2.5.1 - rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-motion: 2.9.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - rc-overflow@1.3.2(react-dom@18.2.0)(react@18.2.0): + rc-overflow@1.3.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 classnames: 2.5.1 - rc-resize-observer: 1.4.0(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.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))(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - rc-pagination@4.0.4(react-dom@18.2.0)(react@18.2.0): + rc-pagination@4.0.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 classnames: 2.5.1 - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - rc-picker@4.3.0(dayjs@1.11.10)(react-dom@18.2.0)(react@18.2.0): + rc-picker@4.4.2(dayjs@1.11.10)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime': 7.24.0 - '@rc-component/trigger': 2.0.0(react-dom@18.2.0)(react@18.2.0) + '@babel/runtime': 7.24.4 + '@rc-component/trigger': 2.1.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) classnames: 2.5.1 - dayjs: 1.11.10 - rc-overflow: 1.3.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) - rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) + rc-overflow: 1.3.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-resize-observer: 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + dayjs: 1.11.10 - rc-progress@3.5.1(react-dom@18.2.0)(react@18.2.0): + rc-progress@4.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 classnames: 2.5.1 - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - rc-rate@2.12.0(react-dom@18.2.0)(react@18.2.0): + rc-rate@2.12.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 classnames: 2.5.1 - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - rc-resize-observer@1.4.0(react-dom@18.2.0)(react@18.2.0): + rc-resize-observer@1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 classnames: 2.5.1 - rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) resize-observer-polyfill: 1.5.1 - rc-segmented@2.3.0(react-dom@18.2.0)(react@18.2.0): + rc-segmented@2.3.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 classnames: 2.5.1 - rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-motion: 2.9.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - rc-select@14.13.0(react-dom@18.2.0)(react@18.2.0): + rc-select@14.13.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime': 7.24.0 - '@rc-component/trigger': 2.0.0(react-dom@18.2.0)(react@18.2.0) + '@babel/runtime': 7.24.4 + '@rc-component/trigger': 2.1.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) classnames: 2.5.1 - rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) - rc-overflow: 1.3.2(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) - rc-virtual-list: 3.11.4(react-dom@18.2.0)(react@18.2.0) + rc-motion: 2.9.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-overflow: 1.3.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-virtual-list: 3.11.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - rc-slider@10.5.0(react-dom@18.2.0)(react@18.2.0): + rc-slider@10.6.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 classnames: 2.5.1 - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - rc-steps@6.0.1(react-dom@18.2.0)(react@18.2.0): + rc-steps@6.0.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 classnames: 2.5.1 - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - rc-switch@4.1.0(react-dom@18.2.0)(react@18.2.0): + rc-switch@4.1.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 classnames: 2.5.1 - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - rc-table@7.42.0(react-dom@18.2.0)(react@18.2.0): + rc-table@7.45.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime': 7.24.0 - '@rc-component/context': 1.4.0(react-dom@18.2.0)(react@18.2.0) + '@babel/runtime': 7.24.4 + '@rc-component/context': 1.4.0(react-dom@18.2.0(react@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) - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) - rc-virtual-list: 3.11.4(react-dom@18.2.0)(react@18.2.0) + rc-resize-observer: 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-virtual-list: 3.11.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - rc-tabs@14.1.1(react-dom@18.2.0)(react@18.2.0): + rc-tabs@14.1.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 classnames: 2.5.1 - rc-dropdown: 4.2.0(react-dom@18.2.0)(react@18.2.0) - rc-menu: 9.13.0(react-dom@18.2.0)(react@18.2.0) - rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) - rc-resize-observer: 1.4.0(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) + rc-dropdown: 4.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-menu: 9.13.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-motion: 2.9.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-resize-observer: 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - rc-textarea@1.6.3(react-dom@18.2.0)(react@18.2.0): + rc-textarea@1.6.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 classnames: 2.5.1 - rc-input: 1.4.3(react-dom@18.2.0)(react@18.2.0) - rc-resize-observer: 1.4.0(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) + rc-input: 1.4.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-resize-observer: 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - rc-tooltip@6.2.0(react-dom@18.2.0)(react@18.2.0): + rc-tooltip@6.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime': 7.24.0 - '@rc-component/trigger': 2.0.0(react-dom@18.2.0)(react@18.2.0) + '@babel/runtime': 7.24.4 + '@rc-component/trigger': 2.1.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) classnames: 2.5.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - rc-tree-select@5.19.0(react-dom@18.2.0)(react@18.2.0): + rc-tree-select@5.19.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 classnames: 2.5.1 - rc-select: 14.13.0(react-dom@18.2.0)(react@18.2.0) - rc-tree: 5.8.5(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) + rc-select: 14.13.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-tree: 5.8.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - rc-tree@5.8.5(react-dom@18.2.0)(react@18.2.0): + rc-tree@5.8.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 classnames: 2.5.1 - rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) - rc-virtual-list: 3.11.4(react-dom@18.2.0)(react@18.2.0) + rc-motion: 2.9.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-virtual-list: 3.11.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - rc-upload@4.5.2(react-dom@18.2.0)(react@18.2.0): + rc-upload@4.5.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 classnames: 2.5.1 - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - rc-util@5.38.2(react-dom@18.2.0)(react@18.2.0): + rc-util@5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime': 7.23.2 + '@babel/runtime': 7.24.4 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-is: 18.2.0 - rc-util@5.39.1(react-dom@18.2.0)(react@18.2.0): + rc-virtual-list@3.11.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 + classnames: 2.5.1 + rc-resize-observer: 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-is: 18.2.0 - rc-virtual-list@3.11.4(react-dom@18.2.0)(react@18.2.0): + re-resizable@6.9.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime': 7.24.0 - classnames: 2.5.1 - rc-resize-observer: 1.4.0(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - re-resizable@6.9.6(react-dom@18.2.0)(react@18.2.0): + re-resizable@6.9.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - fast-memoize: 2.5.2 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -12069,14 +11988,14 @@ snapshots: react: 18.2.0 scheduler: 0.23.0 - react-draggable@4.4.5(react-dom@18.2.0)(react@18.2.0): + react-draggable@4.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: clsx: 1.2.1 prop-types: 15.8.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-easy-crop@5.0.5(react-dom@18.2.0)(react@18.2.0): + react-easy-crop@5.0.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: normalize-wheel: 1.0.1 react: 18.2.0 @@ -12085,7 +12004,7 @@ snapshots: react-fast-compare@3.2.2: {} - react-helmet-async@2.0.4(react-dom@18.2.0)(react@18.2.0): + react-helmet-async@2.0.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: invariant: 2.2.4 react: 18.2.0 @@ -12093,32 +12012,33 @@ snapshots: react-fast-compare: 3.2.2 shallowequal: 1.1.0 - react-hook-form@7.51.2(react@18.2.0): + react-hook-form@7.51.3(react@18.2.0): dependencies: react: 18.2.0 - react-i18next@14.0.5(i18next@23.10.0)(react-dom@18.2.0)(react@18.2.0): + react-i18next@14.1.1(i18next@23.11.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 html-parse-stringify: 3.0.1 - i18next: 23.10.0 + i18next: 23.11.2 react: 18.2.0 + optionalDependencies: react-dom: 18.2.0(react@18.2.0) react-is@16.13.1: {} react-is@18.2.0: {} - react-markdown@8.0.7(@types/react@18.2.62)(react@18.2.0): + react-markdown@8.0.7(@types/react@18.2.79)(react@18.2.0): dependencies: '@types/hast': 2.3.10 - '@types/prop-types': 15.7.11 - '@types/react': 18.2.62 + '@types/prop-types': 15.7.12 + '@types/react': 18.2.79 '@types/unist': 2.0.10 comma-separated-tokens: 2.0.3 hast-util-whitespace: 2.0.1 prop-types: 15.8.1 - property-information: 6.4.1 + property-information: 6.5.0 react: 18.2.0 react-is: 18.2.0 remark-parse: 10.0.2 @@ -12131,32 +12051,33 @@ snapshots: transitivePeerDependencies: - supports-color - react-redux@9.1.0(@types/react@18.2.62)(react@18.2.0)(redux@5.0.1): + react-redux@9.1.1(@types/react@18.2.79)(react@18.2.0)(redux@5.0.1): dependencies: - '@types/react': 18.2.62 '@types/use-sync-external-store': 0.0.3 react: 18.2.0 - redux: 5.0.1 use-sync-external-store: 1.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.79 + redux: 5.0.1 - react-rnd@10.4.1(react-dom@18.2.0)(react@18.2.0): + react-rnd@10.4.10(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - re-resizable: 6.9.6(react-dom@18.2.0)(react@18.2.0) + re-resizable: 6.9.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-draggable: 4.4.5(react-dom@18.2.0)(react@18.2.0) - tslib: 2.3.1 + react-draggable: 4.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + tslib: 2.6.2 - react-router-dom@6.22.2(react-dom@18.2.0)(react@18.2.0): + react-router-dom@6.23.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@remix-run/router': 1.15.2 + '@remix-run/router': 1.16.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-router: 6.22.2(react@18.2.0) + react-router: 6.23.0(react@18.2.0) - react-router@6.22.2(react@18.2.0): + react-router@6.23.0(react@18.2.0): dependencies: - '@remix-run/router': 1.15.2 + '@remix-run/router': 1.16.0 react: 18.2.0 react-share@4.4.1(react@18.2.0): @@ -12169,16 +12090,16 @@ snapshots: react-syntax-highlighter@15.5.0(react@18.2.0): dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 highlight.js: 10.7.3 lowlight: 1.20.0 prismjs: 1.29.0 react: 18.2.0 refractor: 3.6.0 - react-transition-group@4.4.5(react-dom@18.2.0)(react@18.2.0): + react-transition-group@4.4.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -12190,18 +12111,18 @@ snapshots: react: 18.2.0 tslib: 2.6.2 - react-use-intercom@5.3.0(react-dom@18.2.0)(react@18.2.0): + react-use-intercom@5.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-use-measure@2.1.1(react-dom@18.2.0)(react@18.2.0): + react-use-measure@2.1.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: debounce: 1.2.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-use@17.5.0(react-dom@18.2.0)(react@18.2.0): + react-use@17.5.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: '@types/js-cookie': 2.2.7 '@xobotyi/scrollbar-width': 1.9.5 @@ -12209,7 +12130,7 @@ snapshots: fast-deep-equal: 3.1.3 fast-shallow-equal: 1.0.0 js-cookie: 2.2.1 - nano-css: 5.6.1(react-dom@18.2.0)(react@18.2.0) + nano-css: 5.6.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-universal-interface: 0.6.2(react@18.2.0)(tslib@2.6.2) @@ -12237,7 +12158,7 @@ snapshots: readable-stream@3.6.2: dependencies: inherits: 2.0.4 - string_decoder: 1.1.1 + string_decoder: 1.3.0 util-deprecate: 1.0.2 readdir-glob@1.1.3: @@ -12254,12 +12175,13 @@ snapshots: redux@5.0.1: {} - reflect.getprototypeof@1.0.4: + reflect.getprototypeof@1.0.6: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 globalthis: 1.0.3 which-builtin-type: 1.1.3 @@ -12275,19 +12197,18 @@ snapshots: regenerate@1.4.2: {} - regenerator-runtime@0.14.0: {} - regenerator-runtime@0.14.1: {} regenerator-transform@0.15.2: dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 - regexp.prototype.flags@1.5.1: + regexp.prototype.flags@1.5.2: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - set-function-name: 2.0.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 regexpu-core@5.3.2: dependencies: @@ -12395,30 +12316,35 @@ snapshots: globby: 10.0.1 is-plain-object: 3.0.1 - rollup-plugin-visualizer@5.12.0: + rollup-plugin-visualizer@5.12.0(rollup@4.16.4): dependencies: open: 8.4.2 picomatch: 2.3.1 source-map: 0.7.4 yargs: 17.7.2 + optionalDependencies: + rollup: 4.16.4 - rollup@4.12.0: + rollup@4.16.4: dependencies: '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.12.0 - '@rollup/rollup-android-arm64': 4.12.0 - '@rollup/rollup-darwin-arm64': 4.12.0 - '@rollup/rollup-darwin-x64': 4.12.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.12.0 - '@rollup/rollup-linux-arm64-gnu': 4.12.0 - '@rollup/rollup-linux-arm64-musl': 4.12.0 - '@rollup/rollup-linux-riscv64-gnu': 4.12.0 - '@rollup/rollup-linux-x64-gnu': 4.12.0 - '@rollup/rollup-linux-x64-musl': 4.12.0 - '@rollup/rollup-win32-arm64-msvc': 4.12.0 - '@rollup/rollup-win32-ia32-msvc': 4.12.0 - '@rollup/rollup-win32-x64-msvc': 4.12.0 + '@rollup/rollup-android-arm-eabi': 4.16.4 + '@rollup/rollup-android-arm64': 4.16.4 + '@rollup/rollup-darwin-arm64': 4.16.4 + '@rollup/rollup-darwin-x64': 4.16.4 + '@rollup/rollup-linux-arm-gnueabihf': 4.16.4 + '@rollup/rollup-linux-arm-musleabihf': 4.16.4 + '@rollup/rollup-linux-arm64-gnu': 4.16.4 + '@rollup/rollup-linux-arm64-musl': 4.16.4 + '@rollup/rollup-linux-powerpc64le-gnu': 4.16.4 + '@rollup/rollup-linux-riscv64-gnu': 4.16.4 + '@rollup/rollup-linux-s390x-gnu': 4.16.4 + '@rollup/rollup-linux-x64-gnu': 4.16.4 + '@rollup/rollup-linux-x64-musl': 4.16.4 + '@rollup/rollup-win32-arm64-msvc': 4.16.4 + '@rollup/rollup-win32-ia32-msvc': 4.16.4 + '@rollup/rollup-win32-x64-msvc': 4.16.4 fsevents: 2.3.3 rsvp@3.2.1: {} @@ -12427,7 +12353,7 @@ snapshots: rtl-css-js@1.16.1: dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 run-parallel@1.2.0: dependencies: @@ -12437,19 +12363,21 @@ snapshots: dependencies: mri: 1.2.0 - safe-array-concat@1.0.1: + safe-array-concat@1.1.2: dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 has-symbols: 1.0.3 isarray: 2.0.5 safe-buffer@5.1.2: {} - safe-regex-test@1.0.0: + safe-buffer@5.2.1: {} + + safe-regex-test@1.0.3: dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + es-errors: 1.3.0 is-regex: 1.1.4 safer-buffer@2.1.2: {} @@ -12474,13 +12402,6 @@ snapshots: dependencies: lru-cache: 6.0.0 - set-function-length@1.1.1: - dependencies: - define-data-property: 1.1.1 - get-intrinsic: 1.2.2 - gopd: 1.0.1 - has-property-descriptors: 1.0.1 - set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 @@ -12490,11 +12411,12 @@ snapshots: gopd: 1.0.1 has-property-descriptors: 1.0.2 - set-function-name@2.0.1: + set-function-name@2.0.2: dependencies: - define-data-property: 1.1.1 + define-data-property: 1.1.4 + es-errors: 1.3.0 functions-have-names: 1.2.3 - has-property-descriptors: 1.0.1 + has-property-descriptors: 1.0.2 set-harmonic-interval@1.0.1: {} @@ -12508,12 +12430,6 @@ snapshots: shebang-regex@3.0.0: {} - side-channel@1.0.4: - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - object-inspect: 1.13.1 - side-channel@1.0.6: dependencies: call-bind: 1.0.7 @@ -12536,6 +12452,11 @@ snapshots: ansi-styles: 6.2.1 is-fullwidth-code-point: 4.0.0 + slice-ansi@7.1.0: + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 5.0.0 + snake-case@3.0.4: dependencies: dot-case: 3.0.4 @@ -12545,7 +12466,7 @@ snapshots: dependencies: is-plain-obj: 4.1.0 - source-map-js@1.0.2: {} + source-map-js@1.2.0: {} source-map-support@0.5.21: dependencies: @@ -12610,48 +12531,56 @@ snapshots: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - string-width@5.1.2: + string-width@7.1.0: dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 + emoji-regex: 10.3.0 + get-east-asian-width: 1.2.0 strip-ansi: 7.1.0 string.fromcodepoint@0.2.1: {} - string.prototype.matchall@4.0.10: + string.prototype.matchall@4.0.11: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.4 + gopd: 1.0.1 has-symbols: 1.0.3 - internal-slot: 1.0.6 - regexp.prototype.flags: 1.5.1 - set-function-name: 2.0.1 - side-channel: 1.0.4 + internal-slot: 1.0.7 + regexp.prototype.flags: 1.5.2 + set-function-name: 2.0.2 + side-channel: 1.0.6 - string.prototype.trim@1.2.8: + string.prototype.trim@1.2.9: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 - string.prototype.trimend@1.0.7: + string.prototype.trimend@1.0.8: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-object-atoms: 1.0.0 - string.prototype.trimstart@1.0.7: + string.prototype.trimstart@1.0.8: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-object-atoms: 1.0.0 string_decoder@1.1.1: dependencies: safe-buffer: 5.1.2 + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -12674,7 +12603,7 @@ snapshots: stylis@4.2.0: {} - stylis@4.3.1: {} + stylis@4.3.2: {} supports-color@5.5.0: dependencies: @@ -12718,7 +12647,7 @@ snapshots: minimatch: 3.1.2 resolve-from: 2.0.0 - terser@5.30.3: + terser@5.30.4: dependencies: '@jridgewell/source-map': 0.3.6 acorn: 8.11.3 @@ -12766,13 +12695,13 @@ snapshots: trough@2.2.0: {} - ts-api-utils@1.0.2(typescript@5.3.3): + ts-api-utils@1.3.0(typescript@5.4.5): dependencies: - typescript: 5.3.3 + typescript: 5.4.5 ts-easing@0.2.0: {} - tsconfig-paths@3.14.2: + tsconfig-paths@3.15.0: dependencies: '@types/json5': 0.0.29 json5: 1.0.2 @@ -12781,36 +12710,34 @@ snapshots: tslib@2.0.1: {} - tslib@2.3.1: {} - tslib@2.6.2: {} - turbo-darwin-64@1.12.4: + turbo-darwin-64@1.13.2: optional: true - turbo-darwin-arm64@1.12.4: + turbo-darwin-arm64@1.13.2: optional: true - turbo-linux-64@1.12.4: + turbo-linux-64@1.13.2: optional: true - turbo-linux-arm64@1.12.4: + turbo-linux-arm64@1.13.2: optional: true - turbo-windows-64@1.12.4: + turbo-windows-64@1.13.2: optional: true - turbo-windows-arm64@1.12.4: + turbo-windows-arm64@1.13.2: optional: true - turbo@1.12.4: + turbo@1.13.2: optionalDependencies: - turbo-darwin-64: 1.12.4 - turbo-darwin-arm64: 1.12.4 - turbo-linux-64: 1.12.4 - turbo-linux-arm64: 1.12.4 - turbo-windows-64: 1.12.4 - turbo-windows-arm64: 1.12.4 + turbo-darwin-64: 1.13.2 + turbo-darwin-arm64: 1.13.2 + turbo-linux-64: 1.13.2 + turbo-linux-arm64: 1.13.2 + turbo-windows-64: 1.13.2 + turbo-windows-arm64: 1.13.2 type-check@0.4.0: dependencies: @@ -12820,40 +12747,43 @@ snapshots: type-fest@0.21.3: {} - type-fest@1.4.0: {} - - typed-array-buffer@1.0.0: + typed-array-buffer@1.0.2: dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-typed-array: 1.1.12 + call-bind: 1.0.7 + es-errors: 1.3.0 + is-typed-array: 1.1.13 - typed-array-byte-length@1.0.0: + typed-array-byte-length@1.0.1: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 - typed-array-byte-offset@1.0.0: + typed-array-byte-offset@1.0.2: dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 - typed-array-length@1.0.4: + typed-array-length@1.0.6: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 for-each: 0.3.3 - is-typed-array: 1.1.12 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 - typescript@5.3.3: {} + typescript@5.4.5: {} unbox-primitive@1.0.2: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 @@ -12944,7 +12874,7 @@ snapshots: universalify@0.1.2: {} - universalify@2.0.0: {} + universalify@2.0.1: {} unplugin@1.0.1: dependencies: @@ -12969,12 +12899,12 @@ snapshots: update-browserslist-db@1.0.13(browserslist@4.23.0): dependencies: browserslist: 4.23.0 - escalade: 3.1.1 + escalade: 3.1.2 picocolors: 1.0.0 uri-js@4.4.1: dependencies: - punycode: 2.3.0 + punycode: 2.3.1 use-sync-external-store@1.2.0(react@18.2.0): dependencies: @@ -13026,7 +12956,7 @@ snapshots: vinyl-fs@4.0.0: dependencies: fs-mkdirp-stream: 2.0.1 - glob-stream: 8.0.0 + glob-stream: 8.0.2 graceful-fs: 4.2.11 iconv-lite: 0.6.3 is-valid-glob: 1.0.0 @@ -13057,46 +12987,50 @@ snapshots: replace-ext: 2.0.0 teex: 1.0.1 - vite-plugin-checker@0.6.4(typescript@5.3.3)(vite@5.1.5): + vite-plugin-checker@0.6.4(eslint@8.57.0)(meow@13.2.0)(optionator@0.9.3)(typescript@5.4.5)(vite@5.2.10(@types/node@18.19.31)(terser@5.30.4)): dependencies: - '@babel/code-frame': 7.23.5 + '@babel/code-frame': 7.24.2 ansi-escapes: 4.3.2 chalk: 4.1.2 chokidar: 3.6.0 commander: 8.3.0 - fast-glob: 3.3.1 + fast-glob: 3.3.2 fs-extra: 11.2.0 npm-run-path: 4.0.1 semver: 7.6.0 strip-ansi: 6.0.1 tiny-invariant: 1.3.3 - typescript: 5.3.3 - vite: 5.1.5(@types/node@18.19.21)(terser@5.30.3) + vite: 5.2.10(@types/node@18.19.31)(terser@5.30.4) vscode-languageclient: 7.0.0 vscode-languageserver: 7.0.0 vscode-languageserver-textdocument: 1.0.11 vscode-uri: 3.0.8 + optionalDependencies: + eslint: 8.57.0 + meow: 13.2.0 + optionator: 0.9.3 + typescript: 5.4.5 - vite-plugin-svgr@4.2.0(typescript@5.3.3)(vite@5.1.5): + vite-plugin-svgr@4.2.0(rollup@4.16.4)(typescript@5.4.5)(vite@5.2.10(@types/node@18.19.31)(terser@5.30.4)): dependencies: - '@rollup/pluginutils': 5.1.0 - '@svgr/core': 8.1.0(typescript@5.3.3) - '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0) - vite: 5.1.5(@types/node@18.19.21)(terser@5.30.3) + '@rollup/pluginutils': 5.1.0(rollup@4.16.4) + '@svgr/core': 8.1.0(typescript@5.4.5) + '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.4.5)) + vite: 5.2.10(@types/node@18.19.31)(terser@5.30.4) transitivePeerDependencies: - rollup - supports-color - typescript - vite@5.1.5(@types/node@18.19.21)(terser@5.30.3): + vite@5.2.10(@types/node@18.19.31)(terser@5.30.4): dependencies: - '@types/node': 18.19.21 - esbuild: 0.19.12 - postcss: 8.4.35 - rollup: 4.12.0 - terser: 5.30.3 + esbuild: 0.20.2 + postcss: 8.4.38 + rollup: 4.16.4 optionalDependencies: + '@types/node': 18.19.31 fsevents: 2.3.3 + terser: 5.30.4 void-elements@3.1.0: {} @@ -13161,7 +13095,7 @@ snapshots: which-builtin-type@1.1.3: dependencies: function.prototype.name: 1.1.6 - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 is-async-function: 2.0.0 is-date-object: 1.0.5 is-finalizationregistry: 1.0.2 @@ -13170,23 +13104,23 @@ snapshots: is-weakref: 1.0.2 isarray: 2.0.5 which-boxed-primitive: 1.0.2 - which-collection: 1.0.1 - which-typed-array: 1.1.13 + which-collection: 1.0.2 + which-typed-array: 1.1.15 - which-collection@1.0.1: + which-collection@1.0.2: dependencies: - is-map: 2.0.2 - is-set: 2.0.2 - is-weakmap: 2.0.1 - is-weakset: 2.0.2 + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.3 - which-typed-array@1.1.13: + which-typed-array@1.1.15: dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 for-each: 0.3.3 gopd: 1.0.1 - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 which@2.0.2: dependencies: @@ -13198,10 +13132,10 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 - wrap-ansi@8.1.0: + wrap-ansi@9.0.0: dependencies: ansi-styles: 6.2.1 - string-width: 5.1.2 + string-width: 7.1.0 strip-ansi: 7.1.0 wrappy@1.0.2: {} @@ -13222,14 +13156,14 @@ snapshots: yaml@1.10.2: {} - yaml@2.3.1: {} + yaml@2.3.4: {} yargs-parser@21.1.1: {} yargs@17.7.2: dependencies: cliui: 8.0.1 - escalade: 3.1.1 + escalade: 3.1.2 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3