From cfd263a1e786b8d6f63221cc55725e60d7306565 Mon Sep 17 00:00:00 2001 From: xion Date: Thu, 20 Mar 2025 21:47:50 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=8E=BB=E6=8E=89antd?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 14 +- packages/codemirror/package.json | 1 - packages/codemirror/src/editor/editor.ts | 6 +- packages/components/src/modal/Confirm.tsx | 86 +-- packages/components/src/select/TagsInput.tsx | 47 ++ packages/components/src/select/index.tsx | 18 + packages/components/src/theme/index.tsx | 33 +- .../src/pages/file/draw/FileDrawer.tsx | 38 +- .../src/pages/file/draw/modules/MetaForm.tsx | 34 +- .../src/pages/file/list/FileTable.tsx | 20 +- .../pages/file/modules/PermissionManager.tsx | 24 +- .../src/pages/file/modules/key-parse.ts | 21 +- .../src/pages/store/resource-file.ts | 34 +- packages/resources/src/pages/upload/index.tsx | 80 ++- .../src/pages/upload/tools/to-file.ts | 4 - .../src/pages/upload/utils/filter-files.ts | 23 + .../src/pages/upload/utils/upload-chunk.ts | 12 + .../src/pages/upload/utils/upload.ts | 2 +- pnpm-lock.yaml | 583 +++++++++++++----- public/locales/en/translation.json | 10 +- public/locales/zh/translation.json | 10 +- src/App.tsx | 19 +- src/globals.css | 5 +- src/modules/message.ts | 3 +- src/pages/app/edit/AppVersionList.tsx | 94 +-- src/pages/app/edit/List.tsx | 208 ++++--- src/pages/app/store/user-app.ts | 18 + src/pages/container/edit/List.tsx | 209 ++++--- src/pages/container/index.tsx | 1 - src/pages/container/module/Select.tsx | 39 -- src/pages/file/edit/List.tsx | 104 +++- src/pages/org/edit/List.tsx | 116 ++-- src/pages/org/edit/UserList.tsx | 116 ++-- src/pages/org/store/index.ts | 3 +- src/pages/user/edit/List.tsx | 102 ++- tsconfig.app.json | 1 + 36 files changed, 1369 insertions(+), 769 deletions(-) create mode 100644 packages/components/src/select/TagsInput.tsx create mode 100644 packages/components/src/select/index.tsx create mode 100644 packages/resources/src/pages/upload/utils/filter-files.ts delete mode 100644 src/pages/container/module/Select.tsx diff --git a/package.json b/package.json index 9cf9827..c008a6b 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "@kevisual/center-components": "workspace:*", "@kevisual/codemirror": "workspace:*", "@kevisual/container": "1.0.0", - "@kevisual/query": "^0.0.8", + "@kevisual/query": "^0.0.9", "@kevisual/resources": "workspace:*", "@kevisual/system-ui": "^0.0.3", "@kevisual/ui": "^0.0.2", @@ -41,14 +41,14 @@ "immer": "^10.1.1", "lodash-es": "^4.17.21", "marked": "^15.0.7", - "nanoid": "^5.1.4", + "nanoid": "^5.1.5", "react": "19.0.0", "react-dom": "19.0.0", "react-hook-form": "^7.54.2", "react-i18next": "^15.4.1", "react-resizable-panels": "^2.1.7", - "react-router": "^7.3.0", - "react-router-dom": "^7.3.0", + "react-router": "^7.4.0", + "react-router-dom": "^7.4.0", "react-toastify": "^11.0.5", "vite-plugin-tsconfig-paths": "^1.4.1", "zustand": "^5.0.3" @@ -61,7 +61,7 @@ "@types/lodash-es": "^4.17.12", "@types/node": "^22.13.10", "@types/path-browserify": "^1.0.3", - "@types/react": "^19.0.11", + "@types/react": "^19.0.12", "@types/react-dom": "^19.0.4", "@vitejs/plugin-basic-ssl": "^2.0.0", "@vitejs/plugin-react": "^4.3.4", @@ -71,7 +71,7 @@ "eslint-plugin-react-hooks": "^5.2.0", "eslint-plugin-react-refresh": "^0.4.19", "globals": "^16.0.0", - "lucide-react": "^0.482.0", + "lucide-react": "^0.483.0", "path-browserify": "^1.0.1", "postcss-import": "^16.1.0", "pretty-bytes": "^6.1.1", @@ -80,7 +80,7 @@ "tailwindcss": "^4.0.14", "tailwindcss-animate": "^1.0.7", "typescript": "^5.8.2", - "typescript-eslint": "^8.26.1", + "typescript-eslint": "^8.27.0", "vite": "^6.2.2" } } \ No newline at end of file diff --git a/packages/codemirror/package.json b/packages/codemirror/package.json index f00cb15..d5f6371 100644 --- a/packages/codemirror/package.json +++ b/packages/codemirror/package.json @@ -20,7 +20,6 @@ "@codemirror/autocomplete": "^6.18.6", "@codemirror/basic-setup": "^0.20.0", "@codemirror/commands": "^6.8.0", - "@codemirror/history": "^0.19.2", "@codemirror/lang-css": "^6.3.1", "@codemirror/lang-html": "^6.4.9", "@codemirror/lang-javascript": "^6.2.3", diff --git a/packages/codemirror/src/editor/editor.ts b/packages/codemirror/src/editor/editor.ts index 6a908cd..ac26f7d 100644 --- a/packages/codemirror/src/editor/editor.ts +++ b/packages/codemirror/src/editor/editor.ts @@ -5,10 +5,10 @@ import { html } from '@codemirror/lang-html'; import { css } from '@codemirror/lang-css'; import { json } from '@codemirror/lang-json'; import { yaml } from '@codemirror/lang-yaml'; -import { history } from '@codemirror/history'; +import { history } from '@codemirror/commands'; import { vscodeLight } from '@uiw/codemirror-theme-vscode'; import { formatKeymap } from './modules/keymap'; -import { Compartment, EditorState, Extension } from '@codemirror/state'; +import { Compartment, Extension } from '@codemirror/state'; import { defaultKeymap } from '@codemirror/commands'; import { autocompletion, Completion } from '@codemirror/autocomplete'; import { getFileType } from './utils/get-file-type'; @@ -58,7 +58,7 @@ export class BaseEditor { vscodeLight, formatKeymap, keymap.of(defaultKeymap), // - // history(), + history(), ]; if (this.autoComplete?.open) { extensions.push( diff --git a/packages/components/src/modal/Confirm.tsx b/packages/components/src/modal/Confirm.tsx index 099bef9..92728ba 100644 --- a/packages/components/src/modal/Confirm.tsx +++ b/packages/components/src/modal/Confirm.tsx @@ -1,13 +1,13 @@ import { Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, Button } from '@mui/material'; import { useRef, useState } from 'react'; - +import type { ModalFuncProps } from 'antd'; export const Confirm = ({ open, onClose, title, content, onConfirm, - confirmText = '确认', + okText = '确认', cancelText = '取消', }: { open: boolean; @@ -15,11 +15,15 @@ export const Confirm = ({ title: string; content: string; onConfirm?: () => void; - confirmText?: string; + okText?: string; cancelText?: string; }) => { return ( - + {title} @@ -31,7 +35,7 @@ export const Confirm = ({ {cancelText || '取消'} @@ -39,53 +43,57 @@ export const Confirm = ({ }; type Fn = () => void; -export const useConfirm = () => { +export const useModal = () => { const [open, setOpen] = useState(false); const [title, setTitle] = useState(''); const [content, setContent] = useState(''); const fns = useRef<{ onConfirm: Fn; onCancel: Fn; - confirmText: string; + okText: string; cancelText: string; }>({ onConfirm: () => {}, onCancel: () => {}, - confirmText: '确认', + okText: '确认', cancelText: '取消', }); - return { - contextHolder: ( - { - setOpen(false); - fns.current.onCancel(); - }} - title={title} - content={content} - onConfirm={fns.current.onConfirm} - /> - ), - confirm: ( - title: string, - content: string, - opts?: { - onConfirm: () => void; - confirmText?: string; - cancelText?: string; - onCancel?: () => void; - }, - ) => { + const modal = { + confirm: (props: ModalFuncProps) => { setOpen(true); - setTitle(title); - setContent(content); - fns.current.onConfirm = opts?.onConfirm || (() => {}); - fns.current.onCancel = opts?.onCancel || (() => {}); - fns.current.confirmText = opts?.confirmText || '确认'; - fns.current.cancelText = opts?.cancelText || '取消'; + setTitle(props.title as string); + setContent(props.content as string); + fns.current.onConfirm = async () => { + const isClose = await props.onOk?.(); + if (!isClose) { + setOpen(false); + } + }; + fns.current.onCancel = async () => { + await props.onCancel?.(); + setOpen(false); + }; + fns.current.okText = props.okText as string; + fns.current.cancelText = props.cancelText as string; + }, + cancel: () => { + setOpen(false); + fns.current.onCancel(); }, }; + const contextHolder = ( + { + setOpen(false); + fns.current.onCancel(); + }} + title={title} + content={content} + onConfirm={fns.current.onConfirm} + /> + ); + return [modal, contextHolder] as [typeof modal, React.ReactNode]; }; diff --git a/packages/components/src/select/TagsInput.tsx b/packages/components/src/select/TagsInput.tsx new file mode 100644 index 0000000..ad39f95 --- /dev/null +++ b/packages/components/src/select/TagsInput.tsx @@ -0,0 +1,47 @@ +import { Fragment, useEffect, useState } from 'react'; +import Autocomplete from '@mui/material/Autocomplete'; +import { TextField, Chip } from '@mui/material'; + +type TagsInputProps = { + value: string[]; + onChange: (value: string[]) => void; + placeholder?: string; + label?: string; +}; +export const TagsInput = ({ value, onChange, placeholder = 'Add a tag', label = 'Tags' }: TagsInputProps) => { + const [tags, setTags] = useState(value); + useEffect(() => { + setTags(value); + }, [value]); + const randomid = () => { + return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15); + }; + return ( + { + // setTags(newValue as string[]); + onChange(newValue as string[]); + }} + renderTags={(value: string[], getTagProps) => { + const id = randomid(); + const com = value.map((option: string, index: number) => ( + + )); + return {com}; + }} + renderInput={(params) => } + /> + ); +}; diff --git a/packages/components/src/select/index.tsx b/packages/components/src/select/index.tsx new file mode 100644 index 0000000..4c9d090 --- /dev/null +++ b/packages/components/src/select/index.tsx @@ -0,0 +1,18 @@ +import { MenuItem, Select as MuiSelect, SelectProps as MuiSelectProps } from '@mui/material'; + +type SelectProps = { + options?: { label: string; value: string }[]; +} & MuiSelectProps; + +export const Select = (props: SelectProps) => { + const { options, ...rest } = props; + return ( + + {options?.map((option) => ( + + {option.label} + + ))} + + ); +}; diff --git a/packages/components/src/theme/index.tsx b/packages/components/src/theme/index.tsx index 8f1f790..904c7af 100644 --- a/packages/components/src/theme/index.tsx +++ b/packages/components/src/theme/index.tsx @@ -58,7 +58,7 @@ export const themeOptions: ThemeOptions = { // paper: '#f5f5f5', // 设置纸张背景颜色 }, error: { - main: red[500], + main: red[500], // 设置错误颜色 "#f44336" }, }, shadows: generateShadows('rgba(255, 193, 7, 0.2)'), @@ -94,6 +94,14 @@ export const themeOptions: ThemeOptions = { }, }, MuiTextField: { + defaultProps: { + fullWidth: true, + slotProps: { + inputLabel: { + shrink: true, + }, + }, + }, styleOverrides: { root: { '& .MuiOutlinedInput-root': { @@ -145,6 +153,29 @@ export const themeOptions: ThemeOptions = { }, }, }, + MuiFormControlLabel: { + defaultProps: { + labelPlacement: 'top', + sx: { + alignItems: 'flex-start', + '& .MuiFormControlLabel-label': { + textAlign: 'left', + width: '100%', + }, + '& .MuiFormControlLabel-root': { + width: '100%', + }, + '& .MuiInputBase-root': { + width: '100%', + }, + }, + }, + styleOverrides: { + root: { + color: amber[600], + }, + }, + }, }, }; diff --git a/packages/resources/src/pages/file/draw/FileDrawer.tsx b/packages/resources/src/pages/file/draw/FileDrawer.tsx index 8c254a4..675d64d 100644 --- a/packages/resources/src/pages/file/draw/FileDrawer.tsx +++ b/packages/resources/src/pages/file/draw/FileDrawer.tsx @@ -1,12 +1,14 @@ import { useResourceStore } from '@kevisual/resources/pages/store/resource'; import { useResourceFileStore } from '@kevisual/resources/pages/store/resource-file'; -import { Box, Divider, Drawer, Tab, Tabs } from '@mui/material'; +import { Box, Button, Divider, Drawer, Tab, Tabs } from '@mui/material'; import { useMemo, useState } from 'react'; import { QuickValues, QuickTabs } from './QuickTabs'; +import { Delete, Trash } from 'lucide-react'; +import { InitProvider } from '../../App'; export const FileDrawer = () => { - const { prefix } = useResourceStore(); - const { resource, openDrawer, setOpenDrawer } = useResourceFileStore(); + const { prefix, getList } = useResourceStore(); + const { resource, openDrawer, setOpenDrawer, deleteFile } = useResourceFileStore(); const [tab, setTab] = useState(QuickValues[0]); const quickCom = useMemo(() => { return QuickTabs.find((item) => item.value === tab)?.component; @@ -31,10 +33,26 @@ export const FileDrawer = () => { style={{ zIndex: 1000, }}> -
+
-

- {resource?.name ? resource.name.replace(prefix, '') : resource?.prefix?.replace(prefix, '')} +

+
{resource?.name ? resource.name.replace(prefix, '') : resource?.prefix?.replace(prefix, '')}
+

@@ -58,3 +76,11 @@ export const FileDrawer = () => { ); }; + +export const FileDrawerApp = () => { + return ( + + + + ); +}; diff --git a/packages/resources/src/pages/file/draw/modules/MetaForm.tsx b/packages/resources/src/pages/file/draw/modules/MetaForm.tsx index 6339ed7..9296a6a 100644 --- a/packages/resources/src/pages/file/draw/modules/MetaForm.tsx +++ b/packages/resources/src/pages/file/draw/modules/MetaForm.tsx @@ -1,13 +1,13 @@ import { useResourceFileStore } from '@kevisual/resources/pages/store/resource-file'; -import { FormControlLabel, Box, TextField, Button, IconButton, ButtonGroup, Tooltip, Select, MenuItem, Typography, FormGroup } from '@mui/material'; +import { FormControlLabel, Box, ButtonGroup, Tooltip, Typography } from '@mui/material'; +import { IconButton } from '@kevisual/center-components/button/index.tsx'; import { Info, Plus, Save, Share, Shuffle, Trash } from 'lucide-react'; -import { useState, useEffect, useMemo } from 'react'; +import { useState, useEffect } from 'react'; import { toast } from 'react-toastify'; import { create } from 'zustand'; import { uniq } from 'lodash-es'; import { DatePicker } from './DatePicker'; import { SelectPicker } from './SelectPicker'; -import dayjs from 'dayjs'; import { DialogKey } from './DialogKey'; import { keysTips, KeyParse } from '../../modules/key-parse'; import { KeyShareSelect, KeyTextField } from '../../modules/PermissionManager'; @@ -139,7 +139,7 @@ export const MetaForm = () => { } else { _formData[key] = value; } - setFormData(_formData); + setFormData({ ..._formData }); }; const deleteMeta = (key: string) => { setKeys(keys.filter((item) => item !== key)); @@ -165,14 +165,15 @@ export const MetaForm = () => {
-
- +
+ {btnList.map((item) => { - const icon = ( - - {item.icon} - - ); + const icon = {item.icon}; if (item.tooltip) { return ( @@ -212,7 +213,14 @@ export const MetaForm = () => { )}
- deleteMeta(key)}> + deleteMeta(key)}>
@@ -241,5 +249,3 @@ export const MetaForm = () => {
); }; - - diff --git a/packages/resources/src/pages/file/list/FileTable.tsx b/packages/resources/src/pages/file/list/FileTable.tsx index 6a72ad7..456bfd4 100644 --- a/packages/resources/src/pages/file/list/FileTable.tsx +++ b/packages/resources/src/pages/file/list/FileTable.tsx @@ -6,12 +6,12 @@ import { getIcon } from '../FileIcon'; import { Download, Trash } from 'lucide-react'; import clsx from 'clsx'; import { useResourceFileStore } from '@kevisual/resources/pages/store/resource-file'; -import { useConfirm } from '@kevisual/center-components/modal/Confirm.tsx'; +import { useModal } from '@kevisual/center-components/modal/Confirm.tsx'; export const FileTable = () => { - const { list, prefix, download, onOpenPrefix, deleteFile } = useResourceStore(); - const { setOpenDrawer, setPrefix } = useResourceFileStore(); - const { confirm, contextHolder } = useConfirm(); + const { list, prefix, download, onOpenPrefix, getList } = useResourceStore(); + const { setOpenDrawer, setPrefix, deleteFile } = useResourceFileStore(); + const [modal, contextHolder] = useModal(); return ( <> {contextHolder} @@ -95,9 +95,15 @@ export const FileTable = () => { className='ml-2!' onClick={(e) => { e.stopPropagation(); - confirm('删除文件', '确定删除该文件吗?', { - onConfirm: () => { - deleteFile(row); + modal.confirm({ + title: '删除文件', + content: '确定删除该文件吗?', + onOk: () => { + deleteFile(row, { + onSuccess: () => { + getList(); + }, + }); }, }); }} diff --git a/packages/resources/src/pages/file/modules/PermissionManager.tsx b/packages/resources/src/pages/file/modules/PermissionManager.tsx index 3ad9046..9093f9a 100644 --- a/packages/resources/src/pages/file/modules/PermissionManager.tsx +++ b/packages/resources/src/pages/file/modules/PermissionManager.tsx @@ -4,6 +4,8 @@ import { FormControlLabel, TextField, Select, MenuItem, FormGroup, Tooltip } fro import { DatePicker } from '../draw/modules/DatePicker'; import { SelectPicker } from '../draw/modules/SelectPicker'; import { HelpCircle } from 'lucide-react'; +import clsx from 'clsx'; +import { useTranslation } from 'react-i18next'; export const KeyShareSelect = ({ name, value, onChange }: { name: string; value: string; onChange?: (value: string) => void }) => { return ( webkitdirectory={props.uploadDirectory ? 'true' : undefined} mozdirectory={props.uploadDirectory ? 'true' : undefined} /> +
+ ); + if (onlyIcon) { + return uploadCom; + } + return ( + + ); }; export const Upload = ({ uploadDirectory = false }: { uploadDirectory?: boolean }) => { const onDrop = async (acceptedFiles) => { - console.log(acceptedFiles); + acceptedFiles = filterFiles(acceptedFiles); if (acceptedFiles.length > 1) { const res = await uploadFiles(acceptedFiles, {}); console.log('uploadFiles res', res); diff --git a/packages/resources/src/pages/upload/tools/to-file.ts b/packages/resources/src/pages/upload/tools/to-file.ts index 256054c..8d09352 100644 --- a/packages/resources/src/pages/upload/tools/to-file.ts +++ b/packages/resources/src/pages/upload/tools/to-file.ts @@ -21,12 +21,8 @@ const getFileType = (extension: string) => { return 'image/gif'; case 'svg': return 'image/svg+xml'; - case 'ico': - return 'image/x-icon'; case 'webp': return 'image/webp'; - case 'gif': - return 'image/gif'; case 'ico': return 'image/x-icon'; default: diff --git a/packages/resources/src/pages/upload/utils/filter-files.ts b/packages/resources/src/pages/upload/utils/filter-files.ts new file mode 100644 index 0000000..71ab8f0 --- /dev/null +++ b/packages/resources/src/pages/upload/utils/filter-files.ts @@ -0,0 +1,23 @@ +/** + * 过滤文件, 过滤 .DS_Store, node_modules, 以.开头的文件, 过滤 __开头的文件 + * @param files + * @returns + */ +export const filterFiles = (files: File[]) => { + files = files.filter((file) => { + if (file.webkitRelativePath.startsWith('__MACOSX')) { + return false; + } + // 过滤node_modules + if (file.webkitRelativePath.includes('node_modules')) { + return false; + } + // 过滤文件 .DS_Store + if (file.name === '.DS_Store') { + return false; + } + // 过滤以.开头的文件 + return !file.name.startsWith('.'); + }); + return files; +}; diff --git a/packages/resources/src/pages/upload/utils/upload-chunk.ts b/packages/resources/src/pages/upload/utils/upload-chunk.ts index 76ba7b0..21deb8c 100644 --- a/packages/resources/src/pages/upload/utils/upload-chunk.ts +++ b/packages/resources/src/pages/upload/utils/upload-chunk.ts @@ -18,6 +18,7 @@ export const uploadFileChunked = async (file: File, opts: ConvertOpts) => { return new Promise(async (resolve, reject) => { const token = localStorage.getItem('token'); if (!token) { + console.log('uploadFileChunked token', token); toastLogin(); return; } @@ -33,6 +34,7 @@ export const uploadFileChunked = async (file: File, opts: ConvertOpts) => { searchParams.set('public', 'true'); } const eventSource = new EventSource('/api/s1/events?' + searchParams.toString()); + let isError = false; // 监听服务器推送的进度更新 eventSource.onmessage = function (event) { console.log('Progress update:', event.data); @@ -55,6 +57,7 @@ export const uploadFileChunked = async (file: File, opts: ConvertOpts) => { }; eventSource.onerror = function (event) { console.log('eventSource.onerror', event); + isError = true; reject(event); }; @@ -91,6 +94,15 @@ export const uploadFileChunked = async (file: File, opts: ConvertOpts) => { }, }).then((response) => response.json()); fetch('/api/s1/events/close?taskId=' + taskId); + if (res?.code !== 200) { + toast.error('上传失败'); + isError = true; + NProgress.done(); + eventSource.close(); + toast.dismiss(load); + reject(new Error(res?.message || '上传失败')); + return; + } if (isLast) { NProgress.done(); eventSource.close(); diff --git a/packages/resources/src/pages/upload/utils/upload.ts b/packages/resources/src/pages/upload/utils/upload.ts index c76ae81..463b579 100644 --- a/packages/resources/src/pages/upload/utils/upload.ts +++ b/packages/resources/src/pages/upload/utils/upload.ts @@ -3,7 +3,6 @@ import 'nprogress/nprogress.css'; import { toast } from 'react-toastify'; import { nanoid } from 'nanoid'; import { toastLogin } from '@kevisual/resources/pages/message/ToastLogin'; - type ConvertOpts = { appKey?: string; version?: string; @@ -39,6 +38,7 @@ export const uploadFiles = async (files: File[], opts: ConvertOpts) => { } const token = localStorage.getItem('token'); if (!token) { + console.log('uploadFiles token', token); toastLogin(); return; } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d221e72..fc2ca33 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,10 +13,10 @@ importers: version: 5.6.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@emotion/react': specifier: ^11.14.0 - version: 11.14.0(@types/react@19.0.11)(react@19.0.0) + version: 11.14.0(@types/react@19.0.12)(react@19.0.0) '@emotion/styled': specifier: ^11.14.0 - version: 11.14.0(@emotion/react@11.14.0(@types/react@19.0.11)(react@19.0.0))(@types/react@19.0.11)(react@19.0.0) + version: 11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.0.0))(@types/react@19.0.12)(react@19.0.0) '@icon-park/react': specifier: ^1.4.2 version: 1.4.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -28,10 +28,10 @@ importers: version: link:packages/codemirror '@kevisual/container': specifier: 1.0.0 - version: 1.0.0(@emotion/css@11.13.4)(@types/react@19.0.11)(crypto-js@4.2.0)(eventemitter3@5.0.1)(immer@10.1.1)(react@19.0.0)(rollup@4.34.7)(typescript@5.8.2) + version: 1.0.0(@emotion/css@11.13.4)(@types/react@19.0.12)(crypto-js@4.2.0)(eventemitter3@5.0.1)(immer@10.1.1)(react@19.0.0)(rollup@4.34.7)(typescript@5.8.2) '@kevisual/query': - specifier: ^0.0.8 - version: 0.0.8 + specifier: ^0.0.9 + version: 0.0.9(ws@8.18.1) '@kevisual/resources': specifier: workspace:* version: link:packages/resources @@ -46,7 +46,7 @@ importers: version: 4.7.0(monaco-editor@0.52.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@mui/material': specifier: ^6.4.8 - version: 6.4.8(@emotion/react@11.14.0(@types/react@19.0.11)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.11)(react@19.0.0))(@types/react@19.0.11)(react@19.0.0))(@types/react@19.0.11)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 6.4.8(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.0.0))(@types/react@19.0.12)(react@19.0.0))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@tailwindcss/vite': specifier: ^4.0.14 version: 4.0.14(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(yaml@2.5.1)) @@ -55,7 +55,7 @@ importers: version: 3.1.0(@babel/runtime@7.26.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@xyflow/react': specifier: ^12.4.4 - version: 12.4.4(@types/react@19.0.11)(immer@10.1.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 12.4.4(@types/react@19.0.12)(immer@10.1.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) antd: specifier: ^5.24.4 version: 5.24.4(date-fns@4.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -93,8 +93,8 @@ importers: specifier: ^15.0.7 version: 15.0.7 nanoid: - specifier: ^5.1.4 - version: 5.1.4 + specifier: ^5.1.5 + version: 5.1.5 react: specifier: 19.0.0 version: 19.0.0 @@ -111,11 +111,11 @@ importers: specifier: ^2.1.7 version: 2.1.7(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react-router: - specifier: ^7.3.0 - version: 7.3.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + specifier: ^7.4.0 + version: 7.4.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react-router-dom: - specifier: ^7.3.0 - version: 7.3.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + specifier: ^7.4.0 + version: 7.4.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react-toastify: specifier: ^11.0.5 version: 11.0.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -124,7 +124,7 @@ importers: version: 1.4.1(typescript@5.8.2)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(yaml@2.5.1)) zustand: specifier: ^5.0.3 - version: 5.0.3(@types/react@19.0.11)(immer@10.1.1)(react@19.0.0)(use-sync-external-store@1.2.2(react@19.0.0)) + version: 5.0.3(@types/react@19.0.12)(immer@10.1.1)(react@19.0.0)(use-sync-external-store@1.2.2(react@19.0.0)) devDependencies: '@eslint/js': specifier: ^9.22.0 @@ -148,11 +148,11 @@ importers: specifier: ^1.0.3 version: 1.0.3 '@types/react': - specifier: ^19.0.11 - version: 19.0.11 + specifier: ^19.0.12 + version: 19.0.12 '@types/react-dom': specifier: ^19.0.4 - version: 19.0.4(@types/react@19.0.11) + version: 19.0.4(@types/react@19.0.12) '@vitejs/plugin-basic-ssl': specifier: ^2.0.0 version: 2.0.0(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(yaml@2.5.1)) @@ -178,8 +178,8 @@ importers: specifier: ^16.0.0 version: 16.0.0 lucide-react: - specifier: ^0.482.0 - version: 0.482.0(react@19.0.0) + specifier: ^0.483.0 + version: 0.483.0(react@19.0.0) path-browserify: specifier: ^1.0.1 version: 1.0.1 @@ -205,8 +205,8 @@ importers: specifier: ^5.8.2 version: 5.8.2 typescript-eslint: - specifier: ^8.26.1 - version: 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) + specifier: ^8.27.0 + version: 8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) vite: specifier: ^6.2.2 version: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(yaml@2.5.1) @@ -254,10 +254,10 @@ importers: version: 6.36.4 '@emotion/react': specifier: ^11.14.0 - version: 11.14.0(@types/react@19.0.11)(react@19.0.0) + version: 11.14.0(@types/react@19.0.12)(react@19.0.0) '@emotion/styled': specifier: ^11.14.0 - version: 11.14.0(@emotion/react@11.14.0(@types/react@19.0.11)(react@19.0.0))(@types/react@19.0.11)(react@19.0.0) + version: 11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.0.0))(@types/react@19.0.12)(react@19.0.0) '@kevisual/center-components': specifier: workspace:* version: link:../components @@ -269,7 +269,7 @@ importers: version: 0.0.2(rollup@4.34.7) '@mui/material': specifier: ^6.4.8 - version: 6.4.8(@emotion/react@11.14.0(@types/react@19.0.11)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.11)(react@19.0.0))(@types/react@19.0.11)(react@19.0.0))(@types/react@19.0.11)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 6.4.8(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.0.0))(@types/react@19.0.12)(react@19.0.0))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@types/lodash-es': specifier: ^4.17.12 version: 4.17.12 @@ -338,7 +338,7 @@ importers: version: 11.0.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) zustand: specifier: ^5.0.3 - version: 5.0.3(@types/react@19.0.11)(immer@10.1.1)(react@19.0.0)(use-sync-external-store@1.2.2(react@19.0.0)) + version: 5.0.3(@types/react@19.0.12)(immer@10.1.1)(react@19.0.0)(use-sync-external-store@1.2.2(react@19.0.0)) devDependencies: '@kevisual/types': specifier: ^0.0.6 @@ -348,13 +348,13 @@ importers: dependencies: '@emotion/react': specifier: ^11.14.0 - version: 11.14.0(@types/react@19.0.11)(react@19.0.0) + version: 11.14.0(@types/react@19.0.12)(react@19.0.0) '@emotion/styled': specifier: ^11.14.0 - version: 11.14.0(@emotion/react@11.14.0(@types/react@19.0.11)(react@19.0.0))(@types/react@19.0.11)(react@19.0.0) + version: 11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.0.0))(@types/react@19.0.12)(react@19.0.0) '@mui/material': specifier: ^6.4.7 - version: 6.4.7(@emotion/react@11.14.0(@types/react@19.0.11)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.11)(react@19.0.0))(@types/react@19.0.11)(react@19.0.0))(@types/react@19.0.11)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 6.4.7(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.0.0))(@types/react@19.0.12)(react@19.0.0))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react: specifier: 19.0.0 version: 19.0.0 @@ -376,10 +376,10 @@ importers: dependencies: '@emotion/react': specifier: ^11.14.0 - version: 11.14.0(@types/react@19.0.11)(react@19.0.0) + version: 11.14.0(@types/react@19.0.12)(react@19.0.0) '@emotion/styled': specifier: ^11.14.0 - version: 11.14.0(@emotion/react@11.14.0(@types/react@19.0.11)(react@19.0.0))(@types/react@19.0.11)(react@19.0.0) + version: 11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.0.0))(@types/react@19.0.12)(react@19.0.0) '@kevisual/center-components': specifier: workspace:* version: link:../components @@ -391,7 +391,7 @@ importers: version: 0.0.2(rollup@4.34.7) '@mui/material': specifier: ^6.4.8 - version: 6.4.8(@emotion/react@11.14.0(@types/react@19.0.11)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.11)(react@19.0.0))(@types/react@19.0.11)(react@19.0.0))(@types/react@19.0.11)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 6.4.8(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.0.0))(@types/react@19.0.12)(react@19.0.0))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@types/lodash-es': specifier: ^4.17.12 version: 4.17.12 @@ -439,7 +439,7 @@ importers: version: 11.0.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) zustand: specifier: ^5.0.3 - version: 5.0.3(@types/react@19.0.11)(immer@10.1.1)(react@19.0.0)(use-sync-external-store@1.2.2(react@19.0.0)) + version: 5.0.3(@types/react@19.0.12)(immer@10.1.1)(react@19.0.0)(use-sync-external-store@1.2.2(react@19.0.0)) devDependencies: '@kevisual/types': specifier: ^0.0.6 @@ -1022,8 +1022,8 @@ packages: crypto-js: ^4.2.0 eventemitter3: ^5.0.1 - '@kevisual/query@0.0.8': - resolution: {integrity: sha512-LL+bcOi4elJzw8FDze+tQXNZX3aH533UhZ+WPkp8IZ0e0dRltrwCHulEmIg1Rz2MUsigGIpXWbYGQu7GfU0ZXw==} + '@kevisual/query@0.0.9': + resolution: {integrity: sha512-b2rNhORKtyAY1Zo36Qum3JOuxKU76mYQJdWOxxX5+1jJSqv11Pa9RSu3FYWiaSP0+9djrjLg/nECr9sMkJxt8Q==} '@kevisual/router@0.0.7': resolution: {integrity: sha512-4n1Tp4YLoraJv7jtfy7jbuLGyAj0B2QkTlnlEDHCUTlEUOvOkjtf7DHAe2SL92fTgXhSbod0I/0vUcDF85oj/w==} @@ -1649,9 +1649,15 @@ packages: '@types/mdast@4.0.4': resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + '@types/node-fetch@2.6.12': + resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} + '@types/node-forge@1.3.11': resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} + '@types/node@18.19.80': + resolution: {integrity: sha512-kEWeMwMeIvxYkeg1gTc01awpwLbfMRZXdIhwRcakd/KlK53jmRC26LqcbIt7fnAQTu5GzlnWmzA3H6+l1u6xxQ==} + '@types/node@22.13.10': resolution: {integrity: sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==} @@ -1680,8 +1686,8 @@ packages: peerDependencies: '@types/react': '*' - '@types/react@19.0.11': - resolution: {integrity: sha512-vrdxRZfo9ALXth6yPfV16PYTLZwsUWhVjjC+DkfE5t1suNSbBrWC9YqSuuxJZ8Ps6z1o2ycRpIqzZJIgklq4Tw==} + '@types/react@19.0.12': + resolution: {integrity: sha512-V6Ar115dBDrjbtXSrS+/Oruobc+qVbbUxDFC1RSbRqLt5SYvxxyIDrSC85RWml54g+jfNeEMZhEj7wW07ONQhA==} '@types/unist@2.0.11': resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} @@ -1689,51 +1695,51 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@typescript-eslint/eslint-plugin@8.26.1': - resolution: {integrity: sha512-2X3mwqsj9Bd3Ciz508ZUtoQQYpOhU/kWoUqIf49H8Z0+Vbh6UF/y0OEYp0Q0axOGzaBGs7QxRwq0knSQ8khQNA==} + '@typescript-eslint/eslint-plugin@8.27.0': + resolution: {integrity: sha512-4henw4zkePi5p252c8ncBLzLce52SEUz2Ebj8faDnuUXz2UuHEONYcJ+G0oaCF+bYCWVZtrGzq3FD7YXetmnSA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/parser@8.26.1': - resolution: {integrity: sha512-w6HZUV4NWxqd8BdeFf81t07d7/YV9s7TCWrQQbG5uhuvGUAW+fq1usZ1Hmz9UPNLniFnD8GLSsDpjP0hm1S4lQ==} + '@typescript-eslint/parser@8.27.0': + resolution: {integrity: sha512-XGwIabPallYipmcOk45DpsBSgLC64A0yvdAkrwEzwZ2viqGqRUJ8eEYoPz0CWnutgAFbNMPdsGGvzjSmcWVlEA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/scope-manager@8.26.1': - resolution: {integrity: sha512-6EIvbE5cNER8sqBu6V7+KeMZIC1664d2Yjt+B9EWUXrsyWpxx4lEZrmvxgSKRC6gX+efDL/UY9OpPZ267io3mg==} + '@typescript-eslint/scope-manager@8.27.0': + resolution: {integrity: sha512-8oI9GwPMQmBryaaxG1tOZdxXVeMDte6NyJA4i7/TWa4fBwgnAXYlIQP+uYOeqAaLJ2JRxlG9CAyL+C+YE9Xknw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.26.1': - resolution: {integrity: sha512-Kcj/TagJLwoY/5w9JGEFV0dclQdyqw9+VMndxOJKtoFSjfZhLXhYjzsQEeyza03rwHx2vFEGvrJWJBXKleRvZg==} + '@typescript-eslint/type-utils@8.27.0': + resolution: {integrity: sha512-wVArTVcz1oJOIEJxui/nRhV0TXzD/zMSOYi/ggCfNq78EIszddXcJb7r4RCp/oBrjt8n9A0BSxRMKxHftpDxDA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/types@8.26.1': - resolution: {integrity: sha512-n4THUQW27VmQMx+3P+B0Yptl7ydfceUj4ON/AQILAASwgYdZ/2dhfymRMh5egRUrvK5lSmaOm77Ry+lmXPOgBQ==} + '@typescript-eslint/types@8.27.0': + resolution: {integrity: sha512-/6cp9yL72yUHAYq9g6DsAU+vVfvQmd1a8KyA81uvfDE21O2DwQ/qxlM4AR8TSdAu+kJLBDrEHKC5/W2/nxsY0A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.26.1': - resolution: {integrity: sha512-yUwPpUHDgdrv1QJ7YQal3cMVBGWfnuCdKbXw1yyjArax3353rEJP1ZA+4F8nOlQ3RfS2hUN/wze3nlY+ZOhvoA==} + '@typescript-eslint/typescript-estree@8.27.0': + resolution: {integrity: sha512-BnKq8cqPVoMw71O38a1tEb6iebEgGA80icSxW7g+kndx0o6ot6696HjG7NdgfuAVmVEtwXUr3L8R9ZuVjoQL6A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@8.26.1': - resolution: {integrity: sha512-V4Urxa/XtSUroUrnI7q6yUTD3hDtfJ2jzVfeT3VK0ciizfK2q/zGC0iDh1lFMUZR8cImRrep6/q0xd/1ZGPQpg==} + '@typescript-eslint/utils@8.27.0': + resolution: {integrity: sha512-njkodcwH1yvmo31YWgRHNb/x1Xhhq4/m81PhtvmRngD8iHPehxffz1SNCO+kwaePhATC+kOa/ggmvPoPza5i0Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/visitor-keys@8.26.1': - resolution: {integrity: sha512-AjOC3zfnxd6S4Eiy3jwktJPclqhFHNyd8L6Gycf9WUPoKZpgM5PjkxY1X7uSy61xVpiJDhhk7XT2NVsN3ALTWg==} + '@typescript-eslint/visitor-keys@8.27.0': + resolution: {integrity: sha512-WsXQwMkILJvffP6z4U3FYJPlbf/j07HIxmDjZpbNvBJkMfvwXj5ACRkkHwBDvLBbDbtX5TdU64/rcvKJ/vuInQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@uiw/codemirror-theme-duotone@4.23.10': @@ -1783,6 +1789,10 @@ packages: '@xyflow/system@0.0.52': resolution: {integrity: sha512-pJBMaoh/GEebIABWEIxAai0yf57dm+kH7J/Br+LnLFPuJL87Fhcmm4KFWd/bCUy/kCWUg+2/yFAGY0AUHRPOnQ==} + abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -1793,6 +1803,10 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + agentkeepalive@4.6.0: + resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} + engines: {node: '>= 8.0.0'} + ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} @@ -1813,6 +1827,9 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + attr-accept@2.2.5: resolution: {integrity: sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ==} engines: {node: '>=4'} @@ -1857,6 +1874,10 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -1916,6 +1937,10 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} @@ -2126,6 +2151,10 @@ packages: delaunator@5.0.1: resolution: {integrity: sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==} + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} @@ -2140,6 +2169,10 @@ packages: dom-helpers@5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + electron-to-chromium@1.5.76: resolution: {integrity: sha512-CjVQyG7n7Sr+eBXE86HIulnL5N8xZY1sgmOPGuq/F0Rr0FJq63lg0kEtOIDfZBk44FnDLf6FUJ+dsJcuiUDdDQ==} @@ -2161,6 +2194,22 @@ packages: error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + esbuild@0.25.0: resolution: {integrity: sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==} engines: {node: '>=18'} @@ -2231,6 +2280,10 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} + event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} @@ -2279,6 +2332,17 @@ packages: flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + form-data-encoder@1.7.2: + resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==} + + form-data@4.0.2: + resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} + engines: {node: '>= 6'} + + formdata-node@4.4.1: + resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} + engines: {node: '>= 12.20'} + fraction.js@4.3.7: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} @@ -2294,6 +2358,14 @@ packages: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -2314,6 +2386,10 @@ packages: resolution: {integrity: sha512-iInW14XItCXET01CQFqudPOWP2jYMl7T+QRQT+UNcR/iQncN/F0UNpgd76iFkBPgNQb4+X3LV9tLJYzwh+Gl3A==} engines: {node: '>=18'} + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -2328,6 +2404,14 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} @@ -2372,6 +2456,9 @@ packages: html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + i18next-http-backend@3.0.2: resolution: {integrity: sha512-PdlvPnvIp4E1sYi46Ik4tBYh/v/NbYfFFgTjkwFl0is8A18s7/bx9aXqsrOax9WUbeNS6mD2oix7Z0yGGf6m5g==} @@ -2603,6 +2690,10 @@ packages: engines: {node: '>= 18'} hasBin: true + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + mdast-util-to-hast@13.2.0: resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} @@ -2629,6 +2720,14 @@ packages: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -2660,6 +2759,10 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} @@ -2687,6 +2790,18 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} + openai@4.88.0: + resolution: {integrity: sha512-Ll2ZJCdX/56WcCF/wLtAFou+zWRyLeneoXy+qya5T5/wm5LkIr6heJfSn53c5ujXWPB+24cgumiOetbFqcppFA==} + hasBin: true + peerDependencies: + ws: ^8.18.0 + zod: ^3.23.8 + peerDependenciesMeta: + ws: + optional: true + zod: + optional: true + optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -3087,15 +3202,15 @@ packages: react: ^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc react-dom: ^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - react-router-dom@7.3.0: - resolution: {integrity: sha512-z7Q5FTiHGgQfEurX/FBinkOXhWREJIAB2RiU24lvcBa82PxUpwqvs/PAXb9lJyPjTs2jrl6UkLvCZVGJPeNuuQ==} + react-router-dom@7.4.0: + resolution: {integrity: sha512-VlksBPf3n2bijPvnA7nkTsXxMAKOj+bWp4R9c3i+bnwlSOFAGOkJkKhzy/OsRkWaBMICqcAl1JDzh9ZSOze9CA==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' react-dom: '>=18' - react-router@7.3.0: - resolution: {integrity: sha512-466f2W7HIWaNXTKM5nHTqNxLrHTyXybm7R0eBlVSt0k/u55tTCDO194OIx/NrYD4TS5SXKTNekXfT37kMKUjgw==} + react-router@7.4.0: + resolution: {integrity: sha512-Y2g5ObjkvX3VFeVt+0CIPuYd9PpgqCslG7ASSIdN73LwA1nNWzcMLaoMRJfP3prZFI92svxFwbn7XkLJ+UPQ6A==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' @@ -3348,8 +3463,8 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - typescript-eslint@8.26.1: - resolution: {integrity: sha512-t/oIs9mYyrwZGRpDv3g+3K6nZ5uhKEMt2oNmAPwaY4/ye0+EH4nXIPYNtkYFS6QHm+1DFg34DbglYBz5P9Xysg==} + typescript-eslint@8.27.0: + resolution: {integrity: sha512-ZZ/8+Y0rRUMuW1gJaPtLWe4ryHbsPLzzibk5Sq+IFa2aOH1Vo0gPr1fbA6pOnzBke7zC2Da4w8AyCgxKXo3lqA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -3365,6 +3480,9 @@ packages: engines: {node: '>=14.17'} hasBin: true + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + undici-types@6.20.0: resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} @@ -3470,6 +3588,10 @@ packages: web-namespaces@2.0.1: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + web-streams-polyfill@4.0.0-beta.3: + resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} + engines: {node: '>= 14'} + webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -3993,7 +4115,7 @@ snapshots: '@emotion/memoize@0.9.0': {} - '@emotion/react@11.14.0(@types/react@19.0.11)(react@19.0.0)': + '@emotion/react@11.14.0(@types/react@19.0.12)(react@19.0.0)': dependencies: '@babel/runtime': 7.26.0 '@emotion/babel-plugin': 11.13.5 @@ -4005,7 +4127,7 @@ snapshots: hoist-non-react-statics: 3.3.2 react: 19.0.0 optionalDependencies: - '@types/react': 19.0.11 + '@types/react': 19.0.12 transitivePeerDependencies: - supports-color @@ -4019,18 +4141,18 @@ snapshots: '@emotion/sheet@1.4.0': {} - '@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.11)(react@19.0.0))(@types/react@19.0.11)(react@19.0.0)': + '@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.0.0))(@types/react@19.0.12)(react@19.0.0)': dependencies: '@babel/runtime': 7.26.0 '@emotion/babel-plugin': 11.13.5 '@emotion/is-prop-valid': 1.3.1 - '@emotion/react': 11.14.0(@types/react@19.0.11)(react@19.0.0) + '@emotion/react': 11.14.0(@types/react@19.0.12)(react@19.0.0) '@emotion/serialize': 1.3.3 '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.0.0) '@emotion/utils': 1.4.2 react: 19.0.0 optionalDependencies: - '@types/react': 19.0.11 + '@types/react': 19.0.12 transitivePeerDependencies: - supports-color @@ -4230,7 +4352,7 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - '@kevisual/container@1.0.0(@emotion/css@11.13.4)(@types/react@19.0.11)(crypto-js@4.2.0)(eventemitter3@5.0.1)(immer@10.1.1)(react@19.0.0)(rollup@4.34.7)(typescript@5.8.2)': + '@kevisual/container@1.0.0(@emotion/css@11.13.4)(@types/react@19.0.12)(crypto-js@4.2.0)(eventemitter3@5.0.1)(immer@10.1.1)(react@19.0.0)(rollup@4.34.7)(typescript@5.8.2)': dependencies: '@emotion/css': 11.13.4 crypto-js: 4.2.0 @@ -4238,7 +4360,7 @@ snapshots: nanoid: 5.1.5 rollup-plugin-dts: 6.1.1(rollup@4.34.7)(typescript@5.8.2) scheduler: 0.23.2 - zustand: 4.5.5(@types/react@19.0.11)(immer@10.1.1)(react@19.0.0) + zustand: 4.5.5(@types/react@19.0.12)(immer@10.1.1)(react@19.0.0) transitivePeerDependencies: - '@types/react' - immer @@ -4246,7 +4368,13 @@ snapshots: - rollup - typescript - '@kevisual/query@0.0.8': {} + '@kevisual/query@0.0.9(ws@8.18.1)': + dependencies: + openai: 4.88.0(ws@8.18.1) + transitivePeerDependencies: + - encoding + - ws + - zod '@kevisual/router@0.0.7': dependencies: @@ -4363,15 +4491,15 @@ snapshots: '@mui/core-downloads-tracker@6.4.8': {} - '@mui/material@6.4.7(@emotion/react@11.14.0(@types/react@19.0.11)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.11)(react@19.0.0))(@types/react@19.0.11)(react@19.0.0))(@types/react@19.0.11)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@mui/material@6.4.7(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.0.0))(@types/react@19.0.12)(react@19.0.0))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@babel/runtime': 7.26.0 '@mui/core-downloads-tracker': 6.4.7 - '@mui/system': 6.4.7(@emotion/react@11.14.0(@types/react@19.0.11)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.11)(react@19.0.0))(@types/react@19.0.11)(react@19.0.0))(@types/react@19.0.11)(react@19.0.0) - '@mui/types': 7.2.21(@types/react@19.0.11) - '@mui/utils': 6.4.6(@types/react@19.0.11)(react@19.0.0) + '@mui/system': 6.4.7(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.0.0))(@types/react@19.0.12)(react@19.0.0))(@types/react@19.0.12)(react@19.0.0) + '@mui/types': 7.2.21(@types/react@19.0.12) + '@mui/utils': 6.4.6(@types/react@19.0.12)(react@19.0.0) '@popperjs/core': 2.11.8 - '@types/react-transition-group': 4.4.12(@types/react@19.0.11) + '@types/react-transition-group': 4.4.12(@types/react@19.0.12) clsx: 2.1.1 csstype: 3.1.3 prop-types: 15.8.1 @@ -4380,19 +4508,19 @@ snapshots: react-is: 19.0.0 react-transition-group: 4.4.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) optionalDependencies: - '@emotion/react': 11.14.0(@types/react@19.0.11)(react@19.0.0) - '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.11)(react@19.0.0))(@types/react@19.0.11)(react@19.0.0) - '@types/react': 19.0.11 + '@emotion/react': 11.14.0(@types/react@19.0.12)(react@19.0.0) + '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.0.0))(@types/react@19.0.12)(react@19.0.0) + '@types/react': 19.0.12 - '@mui/material@6.4.8(@emotion/react@11.14.0(@types/react@19.0.11)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.11)(react@19.0.0))(@types/react@19.0.11)(react@19.0.0))(@types/react@19.0.11)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@mui/material@6.4.8(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.0.0))(@types/react@19.0.12)(react@19.0.0))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@babel/runtime': 7.26.0 '@mui/core-downloads-tracker': 6.4.8 - '@mui/system': 6.4.8(@emotion/react@11.14.0(@types/react@19.0.11)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.11)(react@19.0.0))(@types/react@19.0.11)(react@19.0.0))(@types/react@19.0.11)(react@19.0.0) - '@mui/types': 7.2.24(@types/react@19.0.11) - '@mui/utils': 6.4.8(@types/react@19.0.11)(react@19.0.0) + '@mui/system': 6.4.8(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.0.0))(@types/react@19.0.12)(react@19.0.0))(@types/react@19.0.12)(react@19.0.0) + '@mui/types': 7.2.24(@types/react@19.0.12) + '@mui/utils': 6.4.8(@types/react@19.0.12)(react@19.0.0) '@popperjs/core': 2.11.8 - '@types/react-transition-group': 4.4.12(@types/react@19.0.11) + '@types/react-transition-group': 4.4.12(@types/react@19.0.12) clsx: 2.1.1 csstype: 3.1.3 prop-types: 15.8.1 @@ -4401,29 +4529,29 @@ snapshots: react-is: 19.0.0 react-transition-group: 4.4.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) optionalDependencies: - '@emotion/react': 11.14.0(@types/react@19.0.11)(react@19.0.0) - '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.11)(react@19.0.0))(@types/react@19.0.11)(react@19.0.0) - '@types/react': 19.0.11 + '@emotion/react': 11.14.0(@types/react@19.0.12)(react@19.0.0) + '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.0.0))(@types/react@19.0.12)(react@19.0.0) + '@types/react': 19.0.12 - '@mui/private-theming@6.4.6(@types/react@19.0.11)(react@19.0.0)': + '@mui/private-theming@6.4.6(@types/react@19.0.12)(react@19.0.0)': dependencies: '@babel/runtime': 7.26.0 - '@mui/utils': 6.4.6(@types/react@19.0.11)(react@19.0.0) + '@mui/utils': 6.4.6(@types/react@19.0.12)(react@19.0.0) prop-types: 15.8.1 react: 19.0.0 optionalDependencies: - '@types/react': 19.0.11 + '@types/react': 19.0.12 - '@mui/private-theming@6.4.8(@types/react@19.0.11)(react@19.0.0)': + '@mui/private-theming@6.4.8(@types/react@19.0.12)(react@19.0.0)': dependencies: '@babel/runtime': 7.26.0 - '@mui/utils': 6.4.8(@types/react@19.0.11)(react@19.0.0) + '@mui/utils': 6.4.8(@types/react@19.0.12)(react@19.0.0) prop-types: 15.8.1 react: 19.0.0 optionalDependencies: - '@types/react': 19.0.11 + '@types/react': 19.0.12 - '@mui/styled-engine@6.4.6(@emotion/react@11.14.0(@types/react@19.0.11)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.11)(react@19.0.0))(@types/react@19.0.11)(react@19.0.0))(react@19.0.0)': + '@mui/styled-engine@6.4.6(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.0.0))(@types/react@19.0.12)(react@19.0.0))(react@19.0.0)': dependencies: '@babel/runtime': 7.26.0 '@emotion/cache': 11.14.0 @@ -4433,10 +4561,10 @@ snapshots: prop-types: 15.8.1 react: 19.0.0 optionalDependencies: - '@emotion/react': 11.14.0(@types/react@19.0.11)(react@19.0.0) - '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.11)(react@19.0.0))(@types/react@19.0.11)(react@19.0.0) + '@emotion/react': 11.14.0(@types/react@19.0.12)(react@19.0.0) + '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.0.0))(@types/react@19.0.12)(react@19.0.0) - '@mui/styled-engine@6.4.8(@emotion/react@11.14.0(@types/react@19.0.11)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.11)(react@19.0.0))(@types/react@19.0.11)(react@19.0.0))(react@19.0.0)': + '@mui/styled-engine@6.4.8(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.0.0))(@types/react@19.0.12)(react@19.0.0))(react@19.0.0)': dependencies: '@babel/runtime': 7.26.0 '@emotion/cache': 11.14.0 @@ -4446,72 +4574,72 @@ snapshots: prop-types: 15.8.1 react: 19.0.0 optionalDependencies: - '@emotion/react': 11.14.0(@types/react@19.0.11)(react@19.0.0) - '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.11)(react@19.0.0))(@types/react@19.0.11)(react@19.0.0) + '@emotion/react': 11.14.0(@types/react@19.0.12)(react@19.0.0) + '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.0.0))(@types/react@19.0.12)(react@19.0.0) - '@mui/system@6.4.7(@emotion/react@11.14.0(@types/react@19.0.11)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.11)(react@19.0.0))(@types/react@19.0.11)(react@19.0.0))(@types/react@19.0.11)(react@19.0.0)': + '@mui/system@6.4.7(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.0.0))(@types/react@19.0.12)(react@19.0.0))(@types/react@19.0.12)(react@19.0.0)': dependencies: '@babel/runtime': 7.26.0 - '@mui/private-theming': 6.4.6(@types/react@19.0.11)(react@19.0.0) - '@mui/styled-engine': 6.4.6(@emotion/react@11.14.0(@types/react@19.0.11)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.11)(react@19.0.0))(@types/react@19.0.11)(react@19.0.0))(react@19.0.0) - '@mui/types': 7.2.21(@types/react@19.0.11) - '@mui/utils': 6.4.6(@types/react@19.0.11)(react@19.0.0) + '@mui/private-theming': 6.4.6(@types/react@19.0.12)(react@19.0.0) + '@mui/styled-engine': 6.4.6(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.0.0))(@types/react@19.0.12)(react@19.0.0))(react@19.0.0) + '@mui/types': 7.2.21(@types/react@19.0.12) + '@mui/utils': 6.4.6(@types/react@19.0.12)(react@19.0.0) clsx: 2.1.1 csstype: 3.1.3 prop-types: 15.8.1 react: 19.0.0 optionalDependencies: - '@emotion/react': 11.14.0(@types/react@19.0.11)(react@19.0.0) - '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.11)(react@19.0.0))(@types/react@19.0.11)(react@19.0.0) - '@types/react': 19.0.11 + '@emotion/react': 11.14.0(@types/react@19.0.12)(react@19.0.0) + '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.0.0))(@types/react@19.0.12)(react@19.0.0) + '@types/react': 19.0.12 - '@mui/system@6.4.8(@emotion/react@11.14.0(@types/react@19.0.11)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.11)(react@19.0.0))(@types/react@19.0.11)(react@19.0.0))(@types/react@19.0.11)(react@19.0.0)': + '@mui/system@6.4.8(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.0.0))(@types/react@19.0.12)(react@19.0.0))(@types/react@19.0.12)(react@19.0.0)': dependencies: '@babel/runtime': 7.26.0 - '@mui/private-theming': 6.4.8(@types/react@19.0.11)(react@19.0.0) - '@mui/styled-engine': 6.4.8(@emotion/react@11.14.0(@types/react@19.0.11)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.11)(react@19.0.0))(@types/react@19.0.11)(react@19.0.0))(react@19.0.0) - '@mui/types': 7.2.24(@types/react@19.0.11) - '@mui/utils': 6.4.8(@types/react@19.0.11)(react@19.0.0) + '@mui/private-theming': 6.4.8(@types/react@19.0.12)(react@19.0.0) + '@mui/styled-engine': 6.4.8(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.0.0))(@types/react@19.0.12)(react@19.0.0))(react@19.0.0) + '@mui/types': 7.2.24(@types/react@19.0.12) + '@mui/utils': 6.4.8(@types/react@19.0.12)(react@19.0.0) clsx: 2.1.1 csstype: 3.1.3 prop-types: 15.8.1 react: 19.0.0 optionalDependencies: - '@emotion/react': 11.14.0(@types/react@19.0.11)(react@19.0.0) - '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.11)(react@19.0.0))(@types/react@19.0.11)(react@19.0.0) - '@types/react': 19.0.11 + '@emotion/react': 11.14.0(@types/react@19.0.12)(react@19.0.0) + '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.0.0))(@types/react@19.0.12)(react@19.0.0) + '@types/react': 19.0.12 - '@mui/types@7.2.21(@types/react@19.0.11)': + '@mui/types@7.2.21(@types/react@19.0.12)': optionalDependencies: - '@types/react': 19.0.11 + '@types/react': 19.0.12 - '@mui/types@7.2.24(@types/react@19.0.11)': + '@mui/types@7.2.24(@types/react@19.0.12)': optionalDependencies: - '@types/react': 19.0.11 + '@types/react': 19.0.12 - '@mui/utils@6.4.6(@types/react@19.0.11)(react@19.0.0)': + '@mui/utils@6.4.6(@types/react@19.0.12)(react@19.0.0)': dependencies: '@babel/runtime': 7.26.0 - '@mui/types': 7.2.21(@types/react@19.0.11) + '@mui/types': 7.2.21(@types/react@19.0.12) '@types/prop-types': 15.7.14 clsx: 2.1.1 prop-types: 15.8.1 react: 19.0.0 react-is: 19.0.0 optionalDependencies: - '@types/react': 19.0.11 + '@types/react': 19.0.12 - '@mui/utils@6.4.8(@types/react@19.0.11)(react@19.0.0)': + '@mui/utils@6.4.8(@types/react@19.0.12)(react@19.0.0)': dependencies: '@babel/runtime': 7.26.0 - '@mui/types': 7.2.24(@types/react@19.0.11) + '@mui/types': 7.2.24(@types/react@19.0.12) '@types/prop-types': 15.7.14 clsx: 2.1.1 prop-types: 15.8.1 react: 19.0.0 react-is: 19.0.0 optionalDependencies: - '@types/react': 19.0.11 + '@types/react': 19.0.12 '@nodelib/fs.scandir@2.1.5': dependencies: @@ -4900,10 +5028,19 @@ snapshots: dependencies: '@types/unist': 3.0.3 + '@types/node-fetch@2.6.12': + dependencies: + '@types/node': 22.13.10 + form-data: 4.0.2 + '@types/node-forge@1.3.11': dependencies: '@types/node': 22.13.10 + '@types/node@18.19.80': + dependencies: + undici-types: 5.26.5 + '@types/node@22.13.10': dependencies: undici-types: 6.20.0 @@ -4918,15 +5055,15 @@ snapshots: '@types/prop-types@15.7.14': {} - '@types/react-dom@19.0.4(@types/react@19.0.11)': + '@types/react-dom@19.0.4(@types/react@19.0.12)': dependencies: - '@types/react': 19.0.11 + '@types/react': 19.0.12 - '@types/react-transition-group@4.4.12(@types/react@19.0.11)': + '@types/react-transition-group@4.4.12(@types/react@19.0.12)': dependencies: - '@types/react': 19.0.11 + '@types/react': 19.0.12 - '@types/react@19.0.11': + '@types/react@19.0.12': dependencies: csstype: 3.1.3 @@ -4934,14 +5071,14 @@ snapshots: '@types/unist@3.0.3': {} - '@typescript-eslint/eslint-plugin@8.26.1(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)': + '@typescript-eslint/eslint-plugin@8.27.0(@typescript-eslint/parser@8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) - '@typescript-eslint/scope-manager': 8.26.1 - '@typescript-eslint/type-utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) - '@typescript-eslint/utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) - '@typescript-eslint/visitor-keys': 8.26.1 + '@typescript-eslint/parser': 8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) + '@typescript-eslint/scope-manager': 8.27.0 + '@typescript-eslint/type-utils': 8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) + '@typescript-eslint/utils': 8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) + '@typescript-eslint/visitor-keys': 8.27.0 eslint: 9.22.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 5.3.2 @@ -4951,27 +5088,27 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)': + '@typescript-eslint/parser@8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)': dependencies: - '@typescript-eslint/scope-manager': 8.26.1 - '@typescript-eslint/types': 8.26.1 - '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.8.2) - '@typescript-eslint/visitor-keys': 8.26.1 + '@typescript-eslint/scope-manager': 8.27.0 + '@typescript-eslint/types': 8.27.0 + '@typescript-eslint/typescript-estree': 8.27.0(typescript@5.8.2) + '@typescript-eslint/visitor-keys': 8.27.0 debug: 4.3.7 eslint: 9.22.0(jiti@2.4.2) typescript: 5.8.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.26.1': + '@typescript-eslint/scope-manager@8.27.0': dependencies: - '@typescript-eslint/types': 8.26.1 - '@typescript-eslint/visitor-keys': 8.26.1 + '@typescript-eslint/types': 8.27.0 + '@typescript-eslint/visitor-keys': 8.27.0 - '@typescript-eslint/type-utils@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)': + '@typescript-eslint/type-utils@8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)': dependencies: - '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.8.2) - '@typescript-eslint/utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) + '@typescript-eslint/typescript-estree': 8.27.0(typescript@5.8.2) + '@typescript-eslint/utils': 8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) debug: 4.3.7 eslint: 9.22.0(jiti@2.4.2) ts-api-utils: 2.0.1(typescript@5.8.2) @@ -4979,12 +5116,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.26.1': {} + '@typescript-eslint/types@8.27.0': {} - '@typescript-eslint/typescript-estree@8.26.1(typescript@5.8.2)': + '@typescript-eslint/typescript-estree@8.27.0(typescript@5.8.2)': dependencies: - '@typescript-eslint/types': 8.26.1 - '@typescript-eslint/visitor-keys': 8.26.1 + '@typescript-eslint/types': 8.27.0 + '@typescript-eslint/visitor-keys': 8.27.0 debug: 4.3.7 fast-glob: 3.3.2 is-glob: 4.0.3 @@ -4995,20 +5132,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)': + '@typescript-eslint/utils@8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@9.22.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.26.1 - '@typescript-eslint/types': 8.26.1 - '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.8.2) + '@typescript-eslint/scope-manager': 8.27.0 + '@typescript-eslint/types': 8.27.0 + '@typescript-eslint/typescript-estree': 8.27.0(typescript@5.8.2) eslint: 9.22.0(jiti@2.4.2) typescript: 5.8.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.26.1': + '@typescript-eslint/visitor-keys@8.27.0': dependencies: - '@typescript-eslint/types': 8.26.1 + '@typescript-eslint/types': 8.27.0 eslint-visitor-keys: 4.2.0 '@uiw/codemirror-theme-duotone@4.23.10(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.4)': @@ -5060,13 +5197,13 @@ snapshots: '@xterm/xterm@5.5.0': {} - '@xyflow/react@12.4.4(@types/react@19.0.11)(immer@10.1.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@xyflow/react@12.4.4(@types/react@19.0.12)(immer@10.1.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@xyflow/system': 0.0.52 classcat: 5.0.5 react: 19.0.0 react-dom: 19.0.0(react@19.0.0) - zustand: 4.5.5(@types/react@19.0.11)(immer@10.1.1)(react@19.0.0) + zustand: 4.5.5(@types/react@19.0.12)(immer@10.1.1)(react@19.0.0) transitivePeerDependencies: - '@types/react' - immer @@ -5081,12 +5218,20 @@ snapshots: d3-selection: 3.0.0 d3-zoom: 3.0.0 + abort-controller@3.0.0: + dependencies: + event-target-shim: 5.0.1 + acorn-jsx@5.3.2(acorn@8.14.0): dependencies: acorn: 8.14.0 acorn@8.14.0: {} + agentkeepalive@4.6.0: + dependencies: + humanize-ms: 1.2.1 + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 @@ -5163,6 +5308,8 @@ snapshots: argparse@2.0.1: {} + asynckit@0.4.0: {} + attr-accept@2.2.5: {} autoprefixer@10.4.21(postcss@8.5.3): @@ -5214,6 +5361,11 @@ snapshots: buffer-from@1.1.2: {} + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + callsites@3.1.0: {} caniuse-lite@1.0.30001690: {} @@ -5272,6 +5424,10 @@ snapshots: color-name@1.1.4: {} + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + comma-separated-tokens@2.0.3: {} commander@2.20.3: {} @@ -5494,6 +5650,8 @@ snapshots: dependencies: robust-predicates: 3.0.2 + delayed-stream@1.0.0: {} + dequal@2.0.3: {} detect-libc@2.0.3: {} @@ -5507,6 +5665,12 @@ snapshots: '@babel/runtime': 7.26.0 csstype: 3.1.3 + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + electron-to-chromium@1.5.76: {} engine.io-client@6.6.3: @@ -5534,6 +5698,21 @@ snapshots: dependencies: is-arrayish: 0.2.1 + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + esbuild@0.25.0: optionalDependencies: '@esbuild/aix-ppc64': 0.25.0 @@ -5646,6 +5825,8 @@ snapshots: esutils@2.0.3: {} + event-target-shim@5.0.1: {} + eventemitter3@5.0.1: {} extend@3.0.2: {} @@ -5694,6 +5875,20 @@ snapshots: flatted@3.3.1: {} + form-data-encoder@1.7.2: {} + + form-data@4.0.2: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + mime-types: 2.1.35 + + formdata-node@4.4.1: + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 4.0.0-beta.3 + fraction.js@4.3.7: {} fsevents@2.3.3: @@ -5703,6 +5898,24 @@ snapshots: gensync@1.0.0-beta.2: {} + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 @@ -5717,6 +5930,8 @@ snapshots: globals@16.0.0: {} + gopd@1.2.0: {} + graceful-fs@4.2.11: {} graphemer@1.4.0: {} @@ -5726,6 +5941,12 @@ snapshots: has-flag@4.0.0: {} + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + hasown@2.0.2: dependencies: function-bind: 1.1.2 @@ -5808,6 +6029,10 @@ snapshots: html-void-elements@3.0.0: {} + humanize-ms@1.2.1: + dependencies: + ms: 2.1.3 + i18next-http-backend@3.0.2: dependencies: cross-fetch: 4.0.0 @@ -5986,6 +6211,8 @@ snapshots: marked@15.0.7: {} + math-intrinsics@1.1.0: {} + mdast-util-to-hast@13.2.0: dependencies: '@types/hast': 3.0.4 @@ -6022,6 +6249,12 @@ snapshots: braces: 3.0.3 picomatch: 2.3.1 + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -6042,6 +6275,8 @@ snapshots: natural-compare@1.4.0: {} + node-domexception@1.0.0: {} + node-fetch@2.7.0: dependencies: whatwg-url: 5.0.0 @@ -6056,6 +6291,20 @@ snapshots: object-assign@4.1.1: {} + openai@4.88.0(ws@8.18.1): + dependencies: + '@types/node': 18.19.80 + '@types/node-fetch': 2.6.12 + abort-controller: 3.0.0 + agentkeepalive: 4.6.0 + form-data-encoder: 1.7.2 + formdata-node: 4.4.1 + node-fetch: 2.7.0 + optionalDependencies: + ws: 8.18.1 + transitivePeerDependencies: + - encoding + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -6536,13 +6785,13 @@ snapshots: react: 19.0.0 react-dom: 19.0.0(react@19.0.0) - react-router-dom@7.3.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + react-router-dom@7.4.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: react: 19.0.0 react-dom: 19.0.0(react@19.0.0) - react-router: 7.3.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react-router: 7.4.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react-router@7.3.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + react-router@7.4.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: '@types/cookie': 0.6.0 cookie: 1.0.2 @@ -6810,11 +7059,11 @@ snapshots: dependencies: prelude-ls: 1.2.1 - typescript-eslint@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2): + typescript-eslint@8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.26.1(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) - '@typescript-eslint/parser': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) - '@typescript-eslint/utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) + '@typescript-eslint/eslint-plugin': 8.27.0(@typescript-eslint/parser@8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) + '@typescript-eslint/parser': 8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) + '@typescript-eslint/utils': 8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) eslint: 9.22.0(jiti@2.4.2) typescript: 5.8.2 transitivePeerDependencies: @@ -6826,6 +7075,8 @@ snapshots: typescript@5.8.2: {} + undici-types@5.26.5: {} + undici-types@6.20.0: {} unified@11.0.5: @@ -6930,6 +7181,8 @@ snapshots: web-namespaces@2.0.1: {} + web-streams-polyfill@4.0.0-beta.3: {} + webidl-conversions@3.0.1: {} whatwg-url@5.0.0: @@ -6958,17 +7211,17 @@ snapshots: yocto-queue@0.1.0: {} - zustand@4.5.5(@types/react@19.0.11)(immer@10.1.1)(react@19.0.0): + zustand@4.5.5(@types/react@19.0.12)(immer@10.1.1)(react@19.0.0): dependencies: use-sync-external-store: 1.2.2(react@19.0.0) optionalDependencies: - '@types/react': 19.0.11 + '@types/react': 19.0.12 immer: 10.1.1 react: 19.0.0 - zustand@5.0.3(@types/react@19.0.11)(immer@10.1.1)(react@19.0.0)(use-sync-external-store@1.2.2(react@19.0.0)): + zustand@5.0.3(@types/react@19.0.12)(immer@10.1.1)(react@19.0.0)(use-sync-external-store@1.2.2(react@19.0.0)): optionalDependencies: - '@types/react': 19.0.11 + '@types/react': 19.0.12 immer: 10.1.1 react: 19.0.0 use-sync-external-store: 1.2.2(react@19.0.0) diff --git a/public/locales/en/translation.json b/public/locales/en/translation.json index 113d88a..9c1af99 100644 --- a/public/locales/en/translation.json +++ b/public/locales/en/translation.json @@ -41,5 +41,13 @@ "User List": "User List", "Switch to Org": "Switch to Org", "Login": "Login", - "uploadDirectory": "Upload Directory" + "uploadDirectory": "Upload Directory", + "refresh": "Refresh", + "upload": "Upload", + "app": { + "domain": "Domain", + "version": "Version", + "runtime": "Can run environment" + }, + "Share": "Share" } \ No newline at end of file diff --git a/public/locales/zh/translation.json b/public/locales/zh/translation.json index 2c02253..3d61489 100644 --- a/public/locales/zh/translation.json +++ b/public/locales/zh/translation.json @@ -41,5 +41,13 @@ "User List": "用户列表", "Switch to Org": "切换组织", "Login": "登录", - "uploadDirectory": "上传文件夹" + "uploadDirectory": "上传文件夹", + "refresh": "刷新", + "upload": "上传", + "app": { + "domain": "访问域名", + "version": "版本", + "runtime": "可以运行的环境" + }, + "Share": "分享" } \ No newline at end of file diff --git a/src/App.tsx b/src/App.tsx index ca75d37..dde3d36 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -10,19 +10,30 @@ import { Redirect } from './modules/Redirect'; import { CustomThemeProvider } from '@kevisual/center-components/theme/index.tsx'; import { useTheme } from '@mui/material/styles'; import { ToastContainer } from 'react-toastify'; - -import dayjs from 'dayjs'; import 'dayjs/locale/zh-cn'; +import 'dayjs/locale/en'; import zhCN from 'antd/locale/zh_CN'; +import enUS from 'antd/locale/en_US'; import ConfigProvider from 'antd/es/config-provider'; +import { useTranslation } from 'react-i18next'; +import { useEffect, useState } from 'react'; const AntProvider = ({ children }: { children: React.ReactNode }) => { const theme = useTheme(); const primaryColor = theme.palette.primary.main; const secondaryColor = theme.palette.secondary.main; + const { i18n } = useTranslation(); + const [locale, setLocale] = useState(zhCN); + useEffect(() => { + if (i18n.language === 'en') { + setLocale(enUS); + } else { + setLocale(zhCN); + } + }, [i18n.language]); return ( { }, Tooltip: { zIndexPopupBase: 2000, - } + }, }, }}> {children} diff --git a/src/globals.css b/src/globals.css index de8e005..eb34df8 100644 --- a/src/globals.css +++ b/src/globals.css @@ -57,8 +57,9 @@ h3 { } } - - .cm-editor { @apply h-full; } +#for-message { + z-index: 9999 !important; +} \ No newline at end of file diff --git a/src/modules/message.ts b/src/modules/message.ts index f3cb669..c743ac1 100644 --- a/src/modules/message.ts +++ b/src/modules/message.ts @@ -1,3 +1,2 @@ import { message } from '@kevisual/system-ui/dist/message'; - -export { message }; +export { message }; \ No newline at end of file diff --git a/src/pages/app/edit/AppVersionList.tsx b/src/pages/app/edit/AppVersionList.tsx index f2c78f8..fa444e6 100644 --- a/src/pages/app/edit/AppVersionList.tsx +++ b/src/pages/app/edit/AppVersionList.tsx @@ -2,8 +2,14 @@ import { useNavigation, useParams } from 'react-router'; import { useAppVersionStore } from '../store'; import { useShallow } from 'zustand/react/shallow'; import { useCallback, useEffect, useMemo, useState } from 'react'; -import { Form, Input, Modal, Tooltip } from 'antd'; -import { CloudUploadOutlined, DeleteOutlined, EditOutlined, FileOutlined, LeftOutlined, LinkOutlined, PlusOutlined } from '@ant-design/icons'; +import CloudUploadOutlined from '@ant-design/icons/CloudUploadOutlined'; +import DeleteOutlined from '@ant-design/icons/DeleteOutlined'; +import FileOutlined from '@ant-design/icons/FileOutlined'; +import LeftOutlined from '@ant-design/icons/LeftOutlined'; +import LinkOutlined from '@ant-design/icons/LinkOutlined'; +import PlusOutlined from '@ant-design/icons/PlusOutlined'; +import { useModal } from '@kevisual/center-components/modal/Confirm.tsx'; +import { Tooltip } from '@mui/material'; import { isObjectNull } from '@/utils/is-null'; import { FileUpload } from '../modules/FileUpload'; import clsx from 'clsx'; @@ -13,9 +19,13 @@ import { Button } from '@mui/material'; import { Dialog, DialogContent, DialogTitle, ButtonGroup } from '@mui/material'; import { useTranslation } from 'react-i18next'; import { IconButton } from '@kevisual/center-components/button/index.tsx'; +import { useForm, Controller } from 'react-hook-form'; +import { TextField } from '@mui/material'; +import { pick } from 'lodash-es'; + const FormModal = () => { const { t } = useTranslation(); - const [form] = Form.useForm(); + const { control, handleSubmit, reset } = useForm(); const containerStore = useAppVersionStore( useShallow((state) => { return { @@ -26,62 +36,56 @@ const FormModal = () => { }; }), ); + useEffect(() => { const open = containerStore.showEdit; if (open) { - if (open) { - const isNull = isObjectNull(containerStore.formData); - if (isNull) { - form.setFieldsValue({}); - } else form.setFieldsValue(containerStore.formData); + const isNull = isObjectNull(containerStore.formData); + if (isNull) { + reset({}); + } else { + reset(containerStore.formData); } } }, [containerStore.showEdit]); + const onFinish = async (values: any) => { - containerStore.updateData(values); + const pickValues = pick(values, ['id', 'key', 'version']); + containerStore.updateData(pickValues); }; + const onClose = () => { containerStore.setShowEdit(false); - form.resetFields(); + reset(); }; + const isEdit = containerStore.formData.id; + return ( - containerStore.setShowEdit(false)} - destroyOnClose - footer={false} - width={800} - onCancel={onClose}> -
- - - - - - - - - - - -
-
+ sx={{ + '& .MuiDialog-paper': { + width: '800px', + }, + }}> + {isEdit ? 'Edit' : 'Add'} + +
+ } /> + } /> +
+ + +
+ +
+
); }; @@ -105,7 +109,7 @@ export const AppVersionList = () => { }), ); const navigate = useNewNavigate(); - const [modal, contextHolder] = Modal.useModal(); + const [modal, contextHolder] = useModal(); const [isUpload, setIsUpload] = useState(false); useEffect(() => { // fetch app version list diff --git a/src/pages/app/edit/List.tsx b/src/pages/app/edit/List.tsx index d53214f..142cd8b 100644 --- a/src/pages/app/edit/List.tsx +++ b/src/pages/app/edit/List.tsx @@ -1,7 +1,8 @@ import { useShallow } from 'zustand/react/shallow'; import { useUserAppStore } from '../store'; import { useEffect, useState } from 'react'; -import { Form, Input, Modal, Select, Switch } from 'antd'; +import { useModal } from '@kevisual/center-components/modal/Confirm.tsx'; + import DeleteOutlined from '@ant-design/icons/DeleteOutlined'; import EditOutlined from '@ant-design/icons/EditOutlined'; import LinkOutlined from '@ant-design/icons/LinkOutlined'; @@ -9,26 +10,43 @@ import PlusOutlined from '@ant-design/icons/PlusOutlined'; import UnorderedListOutlined from '@ant-design/icons/UnorderedListOutlined'; import CodeOutlined from '@ant-design/icons/CodeOutlined'; import ShareAltOutlined from '@ant-design/icons/ShareAltOutlined'; - +import { FormControlLabel, Switch } from '@mui/material'; import { isObjectNull } from '@/utils/is-null'; import { useNewNavigate } from '@/modules'; import { DialogActions, Tooltip } from '@mui/material'; import { marked } from 'marked'; import clsx from 'clsx'; import { IconButton } from '@kevisual/center-components/button/index.tsx'; +import { Select } from '@kevisual/center-components/select/index.tsx'; import { iText } from '@kevisual/resources/index.ts'; import { PermissionManager } from '@kevisual/resources/pages/file/modules/PermissionManager.tsx'; import { Button } from '@mui/material'; import { message } from '@/modules/message'; import { Dialog, DialogContent, DialogTitle, ButtonGroup } from '@mui/material'; +import { useTranslation } from 'react-i18next'; +import { TextField, InputAdornment } from '@mui/material'; +import { useForm, Controller } from 'react-hook-form'; +import { pick } from 'lodash-es'; + const FormModal = () => { - const [form] = Form.useForm(); + const defaultValues = { + id: '', + title: '', + domain: '', + key: '', + description: '', + proxy: true, + status: 'running', + }; + const { control, handleSubmit, reset } = useForm({ + defaultValues, + }); const containerStore = useUserAppStore( useShallow((state) => { return { showEdit: state.showEdit, setShowEdit: state.setShowEdit, - formData: state.formData, + userApp: state.userApp, updateData: state.updateData, }; }), @@ -36,121 +54,113 @@ const FormModal = () => { useEffect(() => { const open = containerStore.showEdit; if (open) { - if (open) { - const isNull = isObjectNull(containerStore.formData); - if (isNull) { - form.setFieldsValue({}); - } else form.setFieldsValue(containerStore.formData); + const isNull = isObjectNull(containerStore.userApp); + console.log('isNull', containerStore.userApp); + if (isNull) { + reset(defaultValues); + } else { + reset(containerStore.userApp); } } - }, [containerStore.showEdit]); + }, [containerStore.showEdit, containerStore.userApp]); const onFinish = async (values: any) => { - containerStore.updateData(values); + const pickValues = pick(values, ['id', 'title', 'domain', 'key', 'description', 'proxy', 'status']); + containerStore.updateData(pickValues); }; const onClose = () => { containerStore.setShowEdit(false); - form.resetFields(); + reset(); }; - const isEdit = containerStore.formData.id; + const isEdit = containerStore?.userApp?.id; return ( containerStore.setShowEdit(false)} sx={{ '& .MuiDialog-paper': { - width: '800px', + width: '1000px', }, }}> {isEdit ? 'Edit' : 'Add'} -
- - - - - - - - - - - - - - - - - - + )} + /> +
- - +
+
); }; const ShareModal = () => { - const [form] = Form.useForm(); const [permission, setPermission] = useState(null); + const [runtime, setRuntime] = useState([]); const containerStore = useUserAppStore( useShallow((state) => { return { showEdit: state.showShareEdit, setShowEdit: state.setShowShareEdit, - formData: state.formData, updateData: state.updateData, + userApp: state.userApp, }; }), ); useEffect(() => { const open = containerStore.showEdit; if (open) { - // form.setFieldsValue(containerStore.formData); - const permission = containerStore.formData?.data?.permission || {}; + const permission = containerStore.userApp?.data?.permission || {}; + const runtime = containerStore.userApp?.data?.runtime || []; if (isObjectNull(permission)) { setPermission(null); } else { setPermission(permission); } + setRuntime(runtime); } - }, [containerStore.showEdit]); + }, [containerStore.showEdit, containerStore.userApp]); const onFinish = async () => { const values = { - ...containerStore.formData, + id: containerStore.userApp.id, data: { permission, + runtime, }, }; containerStore.updateData(values); }; const onClose = () => { containerStore.setShowEdit(false); - form.resetFields(); }; + const { t } = useTranslation(); + console.log('runtime', runtime); return ( { }}> {iText.share.title} - { - setPermission(value); - }} - /> - - - - +
+ { + setPermission(value); + }} + /> + { + setRuntime(e.target.value as string[]); + }} + options={[ + { + label: 'Node', + value: 'node', + }, + { + label: 'Browser', + value: 'browser', + }, + ]} + /> + } + /> +
+ + + +
); }; export const List = () => { - const [modal, contextHolder] = Modal.useModal(); - + const [modal, contextHolder] = useModal(); + const { t } = useTranslation(); const userAppStore = useUserAppStore( useShallow((state) => { return { @@ -190,6 +225,7 @@ export const List = () => { setFormData: state.setFormData, deleteData: state.deleteData, setShowShareEdit: state.setShowShareEdit, + getUserApp: state.getUserApp, }; }), ); @@ -206,6 +242,7 @@ export const List = () => { padding: '8px', }} onClick={() => { + userAppStore.setFormData({}); userAppStore.setShowEdit(true); }}> @@ -242,8 +279,14 @@ export const List = () => {
- {item.domain &&
访问域名: {item.domain}
} -
version: {item.version}
+ {item.domain && ( +
+ {t('app.domain')}: {item.domain} +
+ )} +
+ {t('app.version')}: {item.version} +
@@ -273,6 +316,7 @@ export const List = () => {