From aa6d02dfb78baa385acc0405b77da7176fbe662d Mon Sep 17 00:00:00 2001 From: bietiaop <1527109126@qq.com> Date: Mon, 20 Jan 2025 16:04:03 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/server/api/file/get.ts | 738 +++++------ packages/core/src/server/api/file/set.ts | 2 +- packages/core/src/types/Components/index.ts | 302 ++--- packages/web/package.json | 8 +- packages/web/src/.DS_Store | Bin 8196 -> 8196 bytes packages/web/src/components/dynamic_form.tsx | 299 +++++ packages/web/src/pages/dashboard/about.tsx | 2 +- packages/web/src/pages/dashboard/config.tsx | 590 ++------- packages/web/src/pages/dashboard/index.tsx | 6 +- packages/web/src/pages/dashboard/layout.tsx | 2 +- .../web/src/pages/dashboard/plugins/index.tsx | 57 +- .../web/src/pages/dashboard/sandbox/index.tsx | 2 +- packages/web/src/types/config.ts | 226 ++-- pnpm-lock.yaml | 1117 ++++------------- 14 files changed, 1299 insertions(+), 2052 deletions(-) create mode 100644 packages/web/src/components/dynamic_form.tsx diff --git a/packages/core/src/server/api/file/get.ts b/packages/core/src/server/api/file/get.ts index 7c33a034..9106fbed 100644 --- a/packages/core/src/server/api/file/get.ts +++ b/packages/core/src/server/api/file/get.ts @@ -2,803 +2,815 @@ import { router } from '../router' import { createSuccessResponse } from '@/server/utils/response' import { config, adapter, groups, privates, render, pm2, redis, env } from '@/utils/config' -import type { Component } from '@/types/Components' +import type { FormField } from '@/types/Components' import type { RequestHandler } from 'express' /** - * 数组转输入框 + * 将字符串数组转换为数组配置 */ -export const arrayToInput = (items: string[]): Component[] => { - return items.map((item) => ({ - type: 'input', - required: true, - editable: true, - removable: true, - default: item - })) +const arrayTotext = (items: string[]) => + ({ + type: 'array', + elementType: 'text', + default: items[0] || '', + }) as const +type ConfigValue = + | ReturnType + | ReturnType + | ReturnType + | ReturnType + | ReturnType + | ReturnType + | ReturnType + | ReturnType +type GetConfig = () => { + struct: FormField[] + value: ConfigValue } /** * 获取基本配置 * @returns 基础配置结构 */ -const getBasicConfig = (): Component[] => { +const getBasicConfig: GetConfig = () => { const cfg = config() - const list: Component[] = [ + const list: FormField[] = [ { type: 'section', label: '权限管理', + key: 'permission', children: [ { - type: 'array', + ...arrayTotext(cfg.master), label: '主人列表', - field: 'master', - items: arrayToInput(cfg.master) + key: 'master', }, { - type: 'array', + ...arrayTotext(cfg.admin), label: '管理员列表', - field: 'admin', - items: arrayToInput(cfg.admin) - } - ] + key: 'admin', + }, + ], }, { type: 'section', label: '用户管理', + key: 'user', children: [ { - type: 'array', + ...arrayTotext(cfg.user?.enable_list || []), label: '用户白名单', - field: 'user.enable_list', - items: arrayToInput(cfg.user?.enable_list || []) + key: 'user.enable_list', }, { - type: 'array', + ...arrayTotext(cfg.user?.disable_list || []), label: '用户黑名单', - field: 'user.disable_list', - items: arrayToInput(cfg.user?.disable_list || []) + key: 'user.disable_list', }, - ] + ], }, { type: 'section', label: '好友管理', + key: 'friend', children: [ { - type: 'array', + ...arrayTotext(cfg.friend?.enable_list || []), label: '好友白名单', - field: 'friend.enable_list', - items: arrayToInput(cfg.friend?.enable_list || []) + key: 'friend.enable_list', }, { - type: 'array', + ...arrayTotext(cfg.friend?.disable_list || []), label: '好友黑名单', - field: 'friend.disable_list', - items: arrayToInput(cfg.friend?.disable_list || []) + key: 'friend.disable_list', }, { - type: 'array', + ...arrayTotext(cfg.friend?.log_enable_list || []), label: '好友日志白名单', - field: 'friend.log_enable_list', - items: arrayToInput(cfg.friend?.log_enable_list || []) + key: 'friend.log_enable_list', }, { - type: 'array', + ...arrayTotext(cfg.friend?.log_disable_list || []), label: '好友日志黑名单', - field: 'friend.log_disable_list', - items: arrayToInput(cfg.friend?.log_disable_list || []) - } - ] + key: 'friend.log_disable_list', + }, + ], }, { type: 'section', label: '群管理', + key: 'group', children: [ { - type: 'array', + ...arrayTotext(cfg.group?.enable_list || []), label: '群白名单', - field: 'group.enable_list', - items: arrayToInput(cfg.group?.enable_list || []) + key: 'group.enable_list', }, { - type: 'array', + ...arrayTotext(cfg.group?.disable_list || []), label: '群黑名单', - field: 'group.disable_list', - items: arrayToInput(cfg.group?.disable_list || []) + key: 'group.disable_list', }, { - type: 'array', + ...arrayTotext(cfg.group?.log_enable_list || []), label: '群日志白名单', - field: 'group.log_enable_list', - items: arrayToInput(cfg.group?.log_enable_list || []) + key: 'group.log_enable_list', }, { - type: 'array', + ...arrayTotext(cfg.group?.log_disable_list || []), label: '群日志黑名单', - field: 'group.log_disable_list', - items: arrayToInput(cfg.group?.log_disable_list || []) + key: 'group.log_disable_list', }, - ] + ], }, { type: 'section', label: '频道私信管理', + key: 'directs', children: [ { - type: 'array', + ...arrayTotext(cfg.directs?.enable_list || []), label: '私信白名单', - field: 'directs.enable_list', - items: arrayToInput(cfg.directs?.enable_list || []) + key: 'directs.enable_list', }, { - type: 'array', + ...arrayTotext(cfg.directs?.disable_list || []), label: '私信黑名单', - field: 'directs.disable_list', - items: arrayToInput(cfg.directs?.disable_list || []) + key: 'directs.disable_list', }, { - type: 'array', + ...arrayTotext(cfg.directs?.log_enable_list || []), label: '私信日志白名单', - field: 'directs.log_enable_list', - items: arrayToInput(cfg.directs?.log_enable_list || []) + key: 'directs.log_enable_list', }, { - type: 'array', + ...arrayTotext(cfg.directs?.log_disable_list || []), label: '私信日志黑名单', - field: 'directs.log_disable_list', - items: arrayToInput(cfg.directs?.log_disable_list || []) - } - ] + key: 'directs.log_disable_list', + }, + ], }, { type: 'section', label: '频道管理', + key: 'guilds', children: [ { - type: 'array', + ...arrayTotext(cfg.guilds?.enable_list || []), label: '频道白名单', - field: 'guilds.enable_list', - items: arrayToInput(cfg.guilds?.enable_list || []) + key: 'guilds.enable_list', }, { - type: 'array', + ...arrayTotext(cfg.guilds?.disable_list || []), label: '频道黑名单', - field: 'guilds.disable_list', - items: arrayToInput(cfg.guilds?.disable_list || []) + key: 'guilds.disable_list', }, { - type: 'array', + ...arrayTotext(cfg.guilds?.log_enable_list || []), label: '频道日志白名单', - field: 'guilds.log_enable_list', - items: arrayToInput(cfg.guilds?.log_enable_list || []) + key: 'guilds.log_enable_list', }, { - type: 'array', + ...arrayTotext(cfg.guilds?.log_disable_list || []), label: '频道日志黑名单', - field: 'guilds.log_disable_list', - items: arrayToInput(cfg.guilds?.log_disable_list || []) - } - ] + key: 'guilds.log_disable_list', + }, + ], }, { type: 'section', label: '子频道管理', + key: 'channels', children: [ { - type: 'array', + ...arrayTotext(cfg.channels?.enable_list || []), label: '子频道白名单', - field: 'channels.enable_list', - items: arrayToInput(cfg.channels?.enable_list || []) + key: 'channels.enable_list', }, { - type: 'array', + ...arrayTotext(cfg.channels?.disable_list || []), label: '子频道黑名单', - field: 'channels.disable_list', - items: arrayToInput(cfg.channels?.disable_list || []) + key: 'channels.disable_list', }, { - type: 'array', + ...arrayTotext(cfg.channels?.log_enable_list || []), label: '子频道日志白名单', - field: 'channels.log_enable_list', - items: arrayToInput(cfg.channels?.log_enable_list || []) + key: 'channels.log_enable_list', }, { - type: 'array', + ...arrayTotext(cfg.channels?.log_disable_list || []), label: '子频道日志黑名单', - field: 'channels.log_disable_list', - items: arrayToInput(cfg.channels?.log_disable_list || []) - } - ] - } + key: 'channels.log_disable_list', + }, + ], + }, ] - return list + return { + struct: list, + value: cfg, + } } /** * 获取适配器配置 * @returns 适配器配置结构 */ -const getAdapterConfig = (): Component[] => { +const getAdapterConfig: GetConfig = () => { const cfg = adapter() - return [ - { - type: 'title', - text: '适配器配置' - }, + const list: FormField[] = [ { type: 'section', label: 'Console适配器', + key: 'console', children: [ { type: 'switch', label: '本地访问', description: '是否为只允许本地访问', - field: 'console.isLocal', - checked: cfg.console?.isLocal ?? false + key: 'console.isLocal', }, { - type: 'input', + type: 'text', label: '访问令牌', description: '如果非本地访问,则需要设置token', - field: 'console.token', - required: false, - defaultValue: cfg.console?.token + key: 'console.token', + defaultValue: cfg.console?.token, }, { - type: 'input', + type: 'text', label: '资源地址', description: '打印的资源地址', - field: 'console.host', - required: true, - defaultValue: cfg.console?.host - } - ] + key: 'console.host', + defaultValue: cfg.console?.host, + }, + ], }, { type: 'section', label: 'OneBot适配器', + key: 'onebot', children: [ { - type: 'section', + type: 'object', label: 'WebSocket服务器', - children: [ + key: 'onebot.ws_server', + fields: [ { type: 'switch', label: '启用', description: '是否启用WebSocket服务器', - field: 'onebot.ws_server.enable', - checked: cfg.onebot?.ws_server?.enable ?? false + key: 'enable', }, { type: 'number', label: '超时时间', description: 'OneBot发送请求超时时间', - field: 'onebot.ws_server.timeout', - defaultValue: cfg.onebot?.ws_server?.timeout ?? 5000 - } - ] + key: 'timeout', + defaultValue: cfg.onebot?.ws_server?.timeout ?? 5000, + }, + ], }, { - type: 'array', + type: 'objectArray', label: 'WebSocket客户端', - field: 'onebot.ws_client', - items: [ + key: 'onebot.ws_client', + fields: [ { type: 'switch', label: '启用', - field: 'enable', - checked: false + key: 'enable', + defaultValue: false, }, { - type: 'input', + type: 'text', label: 'WebSocket地址', - field: 'url', - required: true + key: 'url', + required: true, }, { - type: 'input', + type: 'text', label: '鉴权令牌', - field: 'token', - required: true - } - ] + key: 'token', + required: true, + }, + ], }, { - type: 'array', + type: 'objectArray', label: 'HTTP服务器', - field: 'onebot.http_server', - items: [ + key: 'onebot.http_server', + fields: [ { type: 'switch', label: '启用', - field: 'enable', - checked: false + key: 'enable', + defaultValue: false, }, { - type: 'input', + type: 'text', label: 'QQ号', - field: 'self_id', - required: true + key: 'self_id', + required: true, }, { - type: 'input', + type: 'text', label: '服务地址', - field: 'url', - required: true + key: 'url', + required: true, }, { - type: 'input', + type: 'text', label: '鉴权令牌', - field: 'token', - required: true - } - ] - } - ] - } + key: 'token', + required: true, + }, + ], + }, + ], + }, ] + + return { + struct: list, + value: cfg, + } } /** * 获取群聊和频道配置 */ -const getGroupsConfig = (): Component[] => { +const getGroupsConfig: GetConfig = () => { const cfg = groups() - const list: Component[] = [] + const list: FormField[] = [] Object.entries(cfg).forEach(([key, value]) => { list.push({ type: 'section', label: key, + key, children: [ { type: 'number', label: '全局消息冷却', - field: `${key}.cd`, - defaultValue: value.cd + key: `${key}.cd`, + defaultValue: value.cd, }, { type: 'number', label: '用户消息冷却', - field: `${key}.userCD`, - defaultValue: value.userCD + key: `${key}.userCD`, + defaultValue: value.userCD, }, { type: 'radio', label: '响应模式', - field: `${key}.mode`, + key: `${key}.mode`, options: [ - { label: '响应所有消息', value: 0, checked: value.mode === 0 }, - { label: '仅@机器人', value: 1, checked: value.mode === 1 }, - { label: '仅回应管理员', value: 2, checked: value.mode === 2 }, - { label: '仅回应别名', value: 3, checked: value.mode === 3 }, - { label: '别名或@机器人', value: 4, checked: value.mode === 4 }, - { label: '管理员无限制,成员别名或@', value: 5, checked: value.mode === 5 }, - { label: '仅回应主人', value: 6, checked: value.mode === 6 } + { label: '响应所有消息', value: 0 }, + { label: '仅@机器人', value: 1 }, + { label: '仅回应管理员', value: 2 }, + { label: '仅回应别名', value: 3 }, + { label: '别名或@机器人', value: 4 }, + { label: '管理员无限制,成员别名或@', value: 5 }, + { label: '仅回应主人', value: 6 }, ], }, { - type: 'array', + ...arrayTotext(value.alias || []), label: '机器人别名', - field: `${key}.alias`, - items: arrayToInput(value.alias || []) + key: `${key}.alias`, }, { - type: 'array', + ...arrayTotext(value.enable || []), label: '插件白名单', - field: `${key}.enable`, - items: arrayToInput(value.enable || []) + key: `${key}.enable`, }, { - type: 'array', + ...arrayTotext(value.disable || []), label: '插件黑名单', - field: `${key}.disable`, - items: arrayToInput(value.disable || []) + key: `${key}.disable`, }, { - type: 'array', + ...arrayTotext(value.memberEnable || []), label: '成员单独白名单', - field: `${key}.memberEnable`, - items: arrayToInput(value.memberEnable || []) + key: `${key}.memberEnable`, }, { - type: 'array', + ...arrayTotext(value.memberDisable || []), label: '成员单独黑名单', - field: `${key}.memberDisable`, - items: arrayToInput(value.memberDisable || []) - } - ] + key: `${key}.memberDisable`, + }, + ], }) }) - return list + return { + struct: list, + value: cfg, + } } /** * 获取好友和频道私信配置 */ -const getPrivatesConfig = (): Component[] => { +const getPrivatesConfig: GetConfig = () => { const cfg = privates() - const list: Component[] = [] + const list: FormField[] = [] Object.entries(cfg).forEach(([key, value]) => { list.push({ type: 'section', label: key, + key, children: [ { type: 'number', label: '消息冷却', - field: `${key}.cd`, - defaultValue: value.cd + key: `${key}.cd`, + defaultValue: value.cd, }, { type: 'radio', label: '响应模式', - field: `${key}.mode`, + key: `${key}.mode`, options: [ - { label: '响应所有消息', value: 0, checked: value.mode === 0 }, - { label: '仅回应管理员', value: 2, checked: value.mode === 2 }, - { label: '仅回应别名', value: 3, checked: value.mode === 3 }, - { label: '管理员无限制,非管理员别名', value: 5, checked: value.mode === 5 }, - { label: '仅回应主人', value: 6, checked: value.mode === 6 } - ] + { label: '响应所有消息', value: 0 }, + { label: '仅回应管理员', value: 2 }, + { label: '仅回应别名', value: 3 }, + { label: '管理员无限制,非管理员别名', value: 5 }, + { label: '仅回应主人', value: 6 }, + ], }, { - type: 'array', + ...arrayTotext(value.alias || []), label: '机器人别名', - field: `${key}.alias`, - items: arrayToInput(value.alias || []) + key: `${key}.alias`, }, { - type: 'array', + ...arrayTotext(value.enable || []), label: '插件白名单', - field: `${key}.enable`, - items: arrayToInput(value.enable || []) + key: `${key}.enable`, }, { - type: 'array', + ...arrayTotext(value.disable || []), label: '插件黑名单', - field: `${key}.disable`, - items: arrayToInput(value.disable || []) - } - ] + key: `${key}.disable`, + }, + ], }) }) - return list + return { + struct: list, + value: cfg, + } } /** * 获取渲染配置 */ -const getRendersConfig = (): Component[] => { +const getRendersConfig: GetConfig = () => { const cfg = render() - const list: Component[] = [ + const list: FormField[] = [ { type: 'title', - text: '渲染配置' + text: '渲染配置', + key: 'render-title', }, { type: 'section', label: 'WebSocket服务器', + key: 'ws_server', children: [ { type: 'switch', label: '启用', - field: 'ws_server.enable', - checked: cfg.ws_server?.enable ?? false - } - ] - } + key: 'ws_server.enable', + }, + ], + }, ] Object.entries(cfg.ws_client).forEach(([_, value], index) => { list.push({ - type: 'array', + type: 'objectArray', label: `正向ws-${index + 1}`, - field: 'ws_client', - items: [ + key: 'ws_client', + fields: [ { type: 'switch', label: '启用', - field: `ws_client.${index}.enable`, - checked: value.enable + key: `ws_client.${index}.enable`, }, { - type: 'input', + type: 'text', label: 'WebSocket地址', - field: `ws_client.${index}.url`, - required: true + key: `ws_client.${index}.url`, + required: true, }, { - type: 'input', + type: 'text', label: '鉴权令牌', - field: `ws_client.${index}.token`, - required: false - } - ] + key: `ws_client.${index}.token`, + required: false, + }, + ], }) }) Object.entries(cfg.http_server).forEach(([_, value], index) => { list.push({ - type: 'array', + type: 'objectArray', label: `反向http-${index + 1}`, - field: 'http_server', - items: [ + key: 'http_server', + fields: [ { type: 'switch', label: '启用', - field: `http_server.${index}.enable`, - checked: value.enable + key: `http_server.${index}.enable`, }, { - type: 'input', + type: 'text', label: '服务地址', - field: `http_server.${index}.url`, - required: true + key: `http_server.${index}.url`, + required: true, }, { - type: 'input', + type: 'text', label: '鉴权令牌', - field: `http_server.${index}.token`, - required: false - } - ] + key: `http_server.${index}.token`, + required: false, + }, + ], }) }) - return list + return { + struct: list, + value: cfg, + } } /** * 获取pm2配置 */ -const getPM2Config = (): Component[] => { +const getPM2Config: GetConfig = () => { const cfg = pm2() - const list: Component[] = [ + const list: FormField[] = [ { type: 'title', - text: 'PM2配置' + text: 'PM2配置', + key: 'pm2-title', }, { type: 'number', label: '日志最多显示多少行', - field: 'lines', - defaultValue: cfg.lines + key: 'lines', + defaultValue: cfg.lines, }, ] Object.entries(cfg.apps).forEach(([key, value], index) => { list.push({ - type: 'array', + type: 'objectArray', label: `应用名称-${index + 1}`, - field: `apps.${index}`, - items: [ + key: `apps.${index}`, + fields: [ { - type: 'input', + type: 'text', label: '应用名称', - field: 'name', - required: true + key: 'name', + required: true, }, { - type: 'input', + type: 'text', label: '入口文件', - field: 'script', - required: true + key: 'script', + required: true, }, { type: 'switch', label: '自动重启', - field: 'autorestart', - checked: value.autorestart + key: 'autorestart', }, { type: 'number', label: '最大重启次数', - field: 'max_restarts', - defaultValue: value.max_restarts + key: 'max_restarts', + defaultValue: value.max_restarts, }, { - type: 'input', + type: 'text', label: '最大内存重启', - field: 'max_memory_restart', - defaultValue: value.max_memory_restart + key: 'max_memory_restart', + defaultValue: value.max_memory_restart, }, { type: 'number', label: '重启延迟', - field: 'restart_delay', - defaultValue: value.restart_delay + key: 'restart_delay', + defaultValue: value.restart_delay, }, { type: 'switch', label: '合并日志', - field: 'merge_logs', - checked: value.merge_logs + key: 'merge_logs', }, { - type: 'input', + type: 'text', label: '错误日志路径', - field: 'error_file', - defaultValue: value.error_file + key: 'error_file', + defaultValue: value.error_file, }, { - type: 'input', + type: 'text', label: '输出日志路径', - field: 'out_file', - defaultValue: value.out_file - } - ] + key: 'out_file', + defaultValue: value.out_file, + }, + ], }) }) - return list + return { + struct: list, + value: cfg, + } } /** * 获取redis配置 */ -const getRedisConfig = (): Component[] => { +const getRedisConfig: GetConfig = () => { const cfg = redis() - return [ + const list: FormField[] = [ { type: 'title', - text: 'Redis配置' + text: 'Redis配置', + key: 'redis-title', }, { - type: 'input', + type: 'text', label: '连接地址', - field: 'url', + key: 'url', required: true, - defaultValue: cfg.url + defaultValue: cfg.url, }, { - type: 'input', + type: 'text', label: '用户名', - field: 'username', - defaultValue: cfg.username + key: 'username', + defaultValue: cfg.username, }, { - type: 'input', + type: 'text', label: '密码', - field: 'password', - defaultValue: cfg.password + key: 'password', + defaultValue: cfg.password, }, { type: 'number', label: '数据库索引', - field: 'database', - defaultValue: cfg.database - } + key: 'database', + defaultValue: cfg.database, + }, ] + + return { + struct: list, + value: cfg, + } } /** * 获取`.env`配置 */ -const getEnvConfig = (): Component[] => { +const getEnvConfig: GetConfig = () => { const cfg = env() - return [ + const list: FormField[] = [ { type: 'title', - text: '环境变量配置' + text: '环境变量配置', + key: 'env-title', }, { - type: 'input', + type: 'text', label: '是否启用HTTP', - field: 'HTTP_ENABLE', - defaultValue: cfg.HTTP_ENABLE + key: 'HTTP_ENABLE', + defaultValue: cfg.HTTP_ENABLE, }, { - type: 'input', + type: 'text', label: 'HTTP监听端口', - field: 'HTTP_PORT', - defaultValue: cfg.HTTP_PORT + key: 'HTTP_PORT', + defaultValue: cfg.HTTP_PORT, }, { - type: 'input', + type: 'text', label: 'HTTP监听地址', - field: 'HTTP_HOST', - defaultValue: cfg.HTTP_HOST + key: 'HTTP_HOST', + defaultValue: cfg.HTTP_HOST, }, { - type: 'input', + type: 'text', label: 'HTTP鉴权秘钥', - field: 'HTTP_AUTH_KEY', - defaultValue: cfg.HTTP_AUTH_KEY + key: 'HTTP_AUTH_KEY', + defaultValue: cfg.HTTP_AUTH_KEY, }, { - type: 'input', + type: 'text', label: 'WS服务器鉴权秘钥', - field: 'WS_SERVER_AUTH_KEY', - defaultValue: cfg.WS_SERVER_AUTH_KEY + key: 'WS_SERVER_AUTH_KEY', + defaultValue: cfg.WS_SERVER_AUTH_KEY, }, { - type: 'input', + type: 'text', label: '是否启用Redis', description: '关闭后将使用内部虚拟Redis', - field: 'REDIS_ENABLE', - defaultValue: cfg.REDIS_ENABLE + key: 'REDIS_ENABLE', + defaultValue: cfg.REDIS_ENABLE, }, { - type: 'input', + type: 'text', label: '重启是否调用PM2', description: '如果不调用则会直接关机,此配置适合有进程守护的程序', - field: 'PM2_RESTART', - defaultValue: cfg.PM2_RESTART + key: 'PM2_RESTART', + defaultValue: cfg.PM2_RESTART, }, { type: 'radio', label: '运行器', - field: 'RUNNER', + key: 'RUNNER', options: [ - { label: 'Node', value: 'node', checked: cfg.RUNNER === 'node' }, - { label: 'PM2', value: 'pm2', checked: cfg.RUNNER === 'pm2' }, - { label: 'TSX', value: 'tsx', checked: cfg.RUNNER === 'tsx' } - ] + { label: 'Node', value: 'node' }, + { label: 'PM2', value: 'pm2' }, + { label: 'TSX', value: 'tsx' }, + ], }, { - type: 'input', + type: 'text', label: '日志等级', - field: 'LOG_LEVEL', - defaultValue: cfg.LOG_LEVEL + key: 'LOG_LEVEL', + defaultValue: cfg.LOG_LEVEL, }, { - type: 'input', + type: 'text', label: '日志保留天数', - field: 'LOG_DAYS_TO_KEEP', - defaultValue: cfg.LOG_DAYS_TO_KEEP + key: 'LOG_DAYS_TO_KEEP', + defaultValue: cfg.LOG_DAYS_TO_KEEP, }, { - type: 'input', + type: 'text', label: '日志文件最大大小', description: '如果此项大于0则启用日志分割', - field: 'LOG_MAX_LOG_SIZE', - defaultValue: cfg.LOG_MAX_LOG_SIZE + key: 'LOG_MAX_LOG_SIZE', + defaultValue: cfg.LOG_MAX_LOG_SIZE, }, { - type: 'input', + type: 'text', label: 'logger.fnc颜色', - field: 'LOG_FNC_COLOR', - defaultValue: cfg.LOG_FNC_COLOR + key: 'LOG_FNC_COLOR', + defaultValue: cfg.LOG_FNC_COLOR, }, { - type: 'input', + type: 'text', label: 'TSX监察者模式', - field: 'TSX_WATCH', - defaultValue: cfg.TSX_WATCH + key: 'TSX_WATCH', + defaultValue: cfg.TSX_WATCH, }, { - type: 'input', + type: 'text', label: 'ffmpeg路径', - field: 'FFMPEG_PATH', - defaultValue: cfg.FFMPEG_PATH + key: 'FFMPEG_PATH', + defaultValue: cfg.FFMPEG_PATH, }, { - type: 'input', + type: 'text', label: 'ffprobe路径', - field: 'FFPROBE_PATH', - defaultValue: cfg.FFPROBE_PATH + key: 'FFPROBE_PATH', + defaultValue: cfg.FFPROBE_PATH, }, { - type: 'input', + type: 'text', label: 'ffplay路径', - field: 'FFPLAY_PATH', - defaultValue: cfg.FFPLAY_PATH - } + key: 'FFPLAY_PATH', + defaultValue: cfg.FFPLAY_PATH, + }, ] + + return { + struct: list, + value: cfg, + } } /** @@ -806,40 +818,44 @@ const getEnvConfig = (): Component[] => { */ const getFileRouter: RequestHandler = async (req, res) => { const { type } = req.body - - let configStructure: Component[] + let getFunction: GetConfig switch (type) { case 'config': - configStructure = getBasicConfig() + getFunction = getBasicConfig break case 'adapter': - configStructure = getAdapterConfig() + getFunction = getAdapterConfig break case 'groups': - configStructure = getGroupsConfig() + getFunction = getGroupsConfig break case 'privates': - configStructure = getPrivatesConfig() + getFunction = getPrivatesConfig break case 'renders': - configStructure = getRendersConfig() + getFunction = getRendersConfig break case 'pm2': - configStructure = getPM2Config() + getFunction = getPM2Config break case 'redis': - configStructure = getRedisConfig() + getFunction = getRedisConfig break case 'env': - configStructure = getEnvConfig() + getFunction = getEnvConfig break default: res.status(400).json({ error: '不支持的配置类型' }) return } - createSuccessResponse(res, configStructure) + const { struct: configStructure, value: cfg } = getFunction() + + createSuccessResponse(res, { + struct: configStructure, + value: cfg, + }) } -router.post('/get_file', getFileRouter) +router.post('/config/get', getFileRouter) diff --git a/packages/core/src/server/api/file/set.ts b/packages/core/src/server/api/file/set.ts index 9ace2c51..7e93c920 100644 --- a/packages/core/src/server/api/file/set.ts +++ b/packages/core/src/server/api/file/set.ts @@ -68,4 +68,4 @@ const setFileRouter: RequestHandler = async (req, res) => { } } -router.post('/set_file', setFileRouter) +router.post('/config/set', setFileRouter) diff --git a/packages/core/src/types/Components/index.ts b/packages/core/src/types/Components/index.ts index 0cc26580..d9d48281 100644 --- a/packages/core/src/types/Components/index.ts +++ b/packages/core/src/types/Components/index.ts @@ -1,238 +1,168 @@ -/** 组件类型 */ -export type ComponentType = 'input' | - 'number' | - 'switch' | - 'select' | - 'section' | - 'divider' | - 'title' | - 'array' | - 'colorPicker' | - 'radio' | - 'checkbox' - -interface BaseComponent { - /** 组件类型 */ - type: ComponentType +export type Option = { + label: string + value: string | number + disabled?: boolean } -/** 标题 */ -export interface TitleComponent extends BaseComponent { - type: 'title' - /** 标题文本 */ - text: string -} +/** 组件类型 */ +export type FieldType = + | 'text' + | 'number' + | 'switch' + | 'select' + | 'object' + | 'divider' + | 'array' + | 'objectArray' + | 'colorPicker' + | 'radio' + | 'checkbox' + | 'section' + | 'title' -/** 文本输入框 */ -export interface InputComponent extends BaseComponent { - type: 'input' +/** 值类型 */ +export type ValueType = 'string' | 'number' | 'boolean' | 'object' + +interface BaseField { + /** 组件类型 */ + type: FieldType + /** 字段 */ + key: string /** 显示文本 */ label?: string - /** 字段名 */ - field?: string - /** 输入框内容 */ - value?: string - /** 描述 */ - description?: string /** 是否必填 */ required?: boolean + /** 描述 */ + description?: string +} + +/** 文本组件 */ +export interface TextField extends BaseField { + type: 'text' /** 默认值 */ defaultValue?: string - /** 最小长度 */ - minLength?: number - /** 最大长度 */ - maxLength?: number - /** 是否可编辑 */ - editable?: boolean - /** 是否可删除 */ - removable?: boolean - /** 尺寸: 大、默认、小,高度分别为 40px、32px 和 24px */ - size?: 'large' | 'middle' | 'small' - /** 是否允许清空 */ - allowClear?: boolean - /** 是否显示计数 */ - showCount?: boolean } /** 数字输入框 */ -export interface NumberComponent extends BaseComponent { +export interface NumberField extends BaseField { type: 'number' - /** 显示文本 */ - label?: string - /** 字段名 */ - field?: string - /** 输入框内容 */ - value?: number - /** 描述 */ - description?: string - /** 是否必填 */ - required?: boolean /** 默认值 */ defaultValue?: number - /** 最小值 */ - min?: number - /** 最大值 */ - max?: number - /** 步长 */ - step?: number - /** 允许鼠标滚轮改变数值 */ - changeOnWheel?: boolean - /** 尺寸: 大、默认、小,高度分别为 40px、32px 和 24px */ - size?: 'large' | 'middle' | 'small' } /** 开关 */ -export interface SwitchComponent extends BaseComponent { +export interface SwitchField extends BaseField { type: 'switch' - /** 显示文本 */ - label?: string - /** 字段名 */ - field?: string - /** 描述 */ - description?: string - /** 选中时的内容 */ - checkedChildren?: string - /** 未选中时的内容 */ - unCheckedChildren?: string - /** 开关大小,可选值:default small */ - size?: 'default' | 'small' - /** 是否选中 */ - checked?: boolean - /** 是否禁用 */ - disabled?: boolean + /** 默认值 */ + defaultValue?: boolean } /** 下拉框选择器 */ -export interface SelectComponent extends BaseComponent { +export interface SelectField extends BaseField { type: 'select' - /** 显示文本 */ - label?: string - /** 字段名 */ - field?: string - /** 描述 */ - description?: string - /** 是否为多选 */ + /** 是否多选 */ multiple?: boolean - /** 是否展开下拉菜单 */ - open?: boolean - /** 选择框默认文本 */ - placeholder?: string - /** 是否显示搜索框 */ - showSearch?: boolean - /** 是否显示清除按钮 */ - allowClear?: boolean - /** 尺寸: 大、默认、小 */ - size?: 'large' | 'middle' | 'small' /** 选项 */ - options?: { - /** 选项文本 */ - label: string - /** 选项值 */ - value: string | number | boolean - /** 是否禁用 */ - disabled?: boolean - }[] + options?: Option[] + /** 默认值 */ + defaultValue?: string | number } /** 分隔符 */ -export interface DividerComponent extends BaseComponent { +export interface DividerField extends BaseField { type: 'divider' - /** 是否为虚线 */ - dashed?: boolean - /** 分割线是虚线、点线还是实线 */ - variant?: 'dashed' | 'dotted' | 'solid' } -/** 颜色选择器 */ -export interface ColorPickerComponent extends BaseComponent { - type: 'colorPicker' - /** 显示文本 */ - label?: string - /** 允许清除选择的颜色 */ - allowClear?: boolean - /** 默认值 */ - defaultValue?: string - /** 默认格式 */ - defaultFormat?: 'rgb' | 'hex' | 'hsb' - /** 颜色格式 默认hex */ - format?: 'rgb' | 'hex' | 'hsb' - /** 是否展开颜色选择器 */ - open?: boolean - /** 颜色值 */ - value?: string - /** 选择器模式,用于配置单色与渐变 */ - mode?: 'single' | 'gradient' | ('single' | 'gradient')[] - /** 是否禁用透明度选择 */ - disabledAlpha?: boolean -} +// /** 颜色选择器 */ +// export interface ColorPickerField extends BaseField { +// type: 'colorPicker' +// /** 显示文本 */ +// label?: string +// /** 允许清除选择的颜色 */ +// allowClear?: boolean +// /** 默认值 */ +// defaultValue?: string +// /** 默认格式 */ +// defaultFormat?: 'rgb' | 'hex' | 'hsb' +// /** 颜色格式 默认hex */ +// format?: 'rgb' | 'hex' | 'hsb' +// /** 是否展开颜色选择器 */ +// open?: boolean +// /** 颜色值 */ +// value?: string +// /** 选择器模式,用于配置单色与渐变 */ +// mode?: 'single' | 'gradient' | ('single' | 'gradient')[] +// /** 是否禁用透明度选择 */ +// disabledAlpha?: boolean +// } /** 单选框 */ -export interface RadioComponent extends BaseComponent { +export interface RadioField extends BaseField { type: 'radio' - /** 显示文本 */ - label?: string - /** 字段名 */ - field?: string - /** 垂直布局 默认false */ - vertical?: boolean /** 选项 */ - options?: { - /** 选项文本 */ - label: string - /** 选项值 */ - value: string | number | boolean - /** 是否选中 */ - checked?: boolean - /** 是否禁用 */ - disabled?: boolean - }[] + options: Option[] + /** 默认值 */ + defaultValue?: string | number } /** 多选框 */ -export interface CheckboxComponent extends BaseComponent { +export interface CheckboxField extends BaseField { type: 'checkbox' - /** 显示文本 */ - label?: string - /** 字段名 */ - field?: string - /** 是否垂直布局 默认false */ - vertical?: boolean /** 选项 */ - options?: { - /** 选项文本 */ - label: string - /** 选项值 */ - value: string | number | boolean - /** 是否选中 */ - checked?: boolean - /** 是否禁用 */ - disabled?: boolean - }[] + options: Option[] + /** 默认值 */ + defaultValue?: string[] | number[] } /** 数组 */ -export interface ArrayComponent extends BaseComponent { +export interface ArrayField extends BaseField { type: 'array' - /** 显示文本 */ - label?: string - /** 字段名 */ - field?: string - /** 子组件 */ - items?: Component[] + /** 值类型 */ + elementType: 'text' | 'number' + /** 默认值 */ + defaultValue?: string | number +} + +/** 对象 */ +export interface ObjectField extends BaseField { + type: 'object' + /** 子组件配置 */ + fields: FormField[] +} + +/** 对象数组 */ +export interface ObjectArrayField extends BaseField { + type: 'objectArray' + /** 子组件配置 */ + fields: FormField[] } /** 分组 */ -export interface SectionComponent extends BaseComponent { +export interface SectionField extends BaseField { type: 'section' - /** 显示文本 */ - label?: string - /** 字段名 */ - field?: string - /** 是否展开 */ - open?: boolean /** 子组件 */ - children?: Component[] + children: FormField[] +} + +/** 标题 */ +export interface TitleField extends BaseField { + type: 'title' + /** 显示文本 */ + text: string } /** 组件 */ -export type Component = TitleComponent | InputComponent | NumberComponent | SwitchComponent | SelectComponent | DividerComponent | ColorPickerComponent | RadioComponent | CheckboxComponent | ArrayComponent | SectionComponent +export type FormField = + | TextField + | NumberField + | SwitchField + | SelectField + | RadioField + | CheckboxField + | ArrayField + | ObjectField + | ObjectArrayField + | SectionField + | TitleField + | DividerField +// | ColorPickerField diff --git a/packages/web/package.json b/packages/web/package.json index 0881dfc2..31ea1e64 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -10,10 +10,13 @@ "preview": "vite preview" }, "dependencies": { + "@heroui/accordion": "^2.2.8", "@heroui/button": "2.2.9", "@heroui/card": "^2.2.9", + "@heroui/checkbox": "^2.3.9", "@heroui/chip": "^2.2.6", "@heroui/code": "2.2.6", + "@heroui/divider": "^2.2.6", "@heroui/dropdown": "2.3.9", "@heroui/form": "^2.1.8", "@heroui/image": "^2.2.5", @@ -22,6 +25,8 @@ "@heroui/link": "2.2.7", "@heroui/modal": "^2.2.7", "@heroui/navbar": "2.2.8", + "@heroui/popover": "^2.3.10", + "@heroui/radio": "^2.3.9", "@heroui/select": "^2.4.10", "@heroui/snippet": "2.2.10", "@heroui/spinner": "^2.2.6", @@ -30,14 +35,11 @@ "@heroui/tabs": "^2.2.8", "@heroui/theme": "2.4.5", "@heroui/tooltip": "^2.2.7", - "@heroui/popover": "^2.3.10", "@hookform/resolvers": "^3.10.0", "@react-aria/visually-hidden": "3.8.19", "@react-types/shared": "3.27.0", "@reduxjs/toolkit": "^2.5.0", "ahooks": "^3.8.4", - "antd": "^5.23.1", - "@ant-design/icons": "^5.0.0", "axios": "1.7.9", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", diff --git a/packages/web/src/.DS_Store b/packages/web/src/.DS_Store index dd8ad149af87757049020cdca01c8a1bd86630d8..594f3fcfdab79abac15e21a76fff3757ad3d0d20 100644 GIT binary patch delta 42 ycmZp1XmOa}&nUhzU^hRb_+}mfC8o)30>?Ki3kk7qW|#QRGI^cA{LQCD(wP7v!VUcZ delta 39 vcmZp1XmOa}&nUJrU^hRb*k&F9C8kZn?5q['register'] + control: ReturnType['control'] + errors: ReturnType['formState']['errors'] + formConfig: FormField[] +} + +function EmptyTip({ fields }: { fields: unknown[] }) { + return ( + fields.length === 0 && ( +
+ 暂无数据,点击上方按钮添加 +
+ ) + ) +} + +function ArrayField({ + control, + field, + fullPath, + register, +}: { + control: DynamicFormProps['control'] + field: ArrayFieldType + fullPath: string + register: DynamicFormProps['register'] +}) { + const { fields, append, remove } = useFieldArray({ + control, + name: fullPath, + }) + + return ( + + +

{field.label}

+ +
+ + + {fields.map((item, index) => ( +
+ + +
+ ))} +
+
+ ) +} + +function ObjectArrayField({ + control, + field, + fullPath, + renderField, +}: { + control: DynamicFormProps['control'] + field: ObjectArrayField + fullPath: string + renderField: (field: FormField, path: string) => React.ReactNode +}) { + const { fields, append, remove } = useFieldArray({ + control, + name: fullPath, + }) + const safeFields = field.fields || [] + + return ( + + +

{field.label}

+ +
+ + + {fields.map((item, index) => ( +
+ {safeFields.map((subField, subIndex) => ( + + {renderField(subField, `${fullPath}.${index}`)} + + ))} + +
+ ))} +
+
+ ) +} + +// 动态表单组件 +const DynamicForm: React.FC = ({ register, control, errors, formConfig }) => { + // 渲染表单字段 + const renderField = (field: FormField, path: string = '') => { + const fullPath = path ? `${path}.${field.key}` : field.key + const key = fullPath + switch (field.type) { + case 'divider': + return + + case 'title': + return

{field.text}

+ + case 'section': + return ( + + +
+ {field.children.map((subField, subIndex) => ( + + {renderField(subField)} + + ))} +
+
+
+ ) + + case 'text': + return ( + + ) + + case 'number': + return ( + + ) + + case 'switch': + return ( + + {field.label} + + ) + + case 'checkbox': + return ( + + {field.options.map(option => ( + + {option.label} + + ))} + + ) + + case 'radio': + return ( + + {field.options.map(option => ( + + {option.label} + + ))} + + ) + + case 'select': + return ( + + ) + + case 'array': + return ( + + ) + + case 'objectArray': + return ( + + ) + + case 'object': + return ( + + +

{field.label}

+
+ + {field.fields.map((subField, subIndex) => ( + + {renderField(subField, fullPath)} + + ))} + +
+ ) + + default: + return null + } + } + + return <>{formConfig.map(field => renderField(field))} +} + +export default DynamicForm diff --git a/packages/web/src/pages/dashboard/about.tsx b/packages/web/src/pages/dashboard/about.tsx index 11c6d68a..0b6cee6c 100644 --- a/packages/web/src/pages/dashboard/about.tsx +++ b/packages/web/src/pages/dashboard/about.tsx @@ -8,7 +8,7 @@ import { BsTencentQq } from 'react-icons/bs' export default function AboutPage() { return ( -
+
logo

{ + const { + register, + control, + handleSubmit, + formState: { errors }, + reset, + } = useForm() + + const [configStructure, setConfigStructure] = useState([]) + const [activeTab, setActiveTab] = useState('config') + const [loading, setLoading] = useState(false) -/** - * 配置项类型定义 - 使用core包中定义的类型 - */ -type ConfigItem = { - type: 'input' | 'number' | 'switch' | 'select' | 'section' | 'divider' | 'title' | 'array' | 'colorPicker' | 'radio' | 'checkbox' - label?: string - description?: string - required?: boolean - default?: any - text?: string - items?: ConfigItem[] - children?: ConfigItem[] - field?: string - options?: Array<{ - label: string - value: string - checked?: boolean - disabled?: boolean - }> - vertical?: boolean -} + const fetchConfig = async () => { + try { + const res = await request.serverPost< + { + struct: FormField[] + value: Record + }, + { type: string } + >('/api/v1/config/get', { + type: activeTab.toString(), + }) -/** - * 数组配置编辑器组件 - */ -const ArrayConfigEditor = ({ - config, - value = [], - onChange -}: { - config: ConfigItem - value: any[] - onChange: (newValue: any[]) => void -}) => { - const handleAdd = () => { - // 创建一个新的对象,包含所有items中定义的字段的默认值 - const defaultItem = config.items?.reduce((acc, item) => { - if (item.field) { - acc[item.field] = item.default - } - return acc - }, {} as Record) - onChange([...value, defaultItem]) - } + console.log(res) - const handleDelete = (index: number) => { - const newValue = [...value] - newValue.splice(index, 1) - onChange(newValue) - } + setConfigStructure(res.struct) - const handleItemChange = (index: number, field: string, itemValue: any) => { - const newValue = [...value] - newValue[index] = { - ...newValue[index], - [field]: itemValue + reset(res.value) + } catch (error) { + console.error('获取配置失败:', error) + toast.error('获取配置失败') } - onChange(newValue) - } - - return ( -
-
-
-

{config.label}

- {config.description && ( -

{config.description}

- )} -
- -
- -
- {value.map((item, index) => ( - handleDelete(index)} - /> - } - title={`${config.label} ${index + 1}`} - > - {config.items?.map((itemConfig, itemIndex) => ( - { - handleItemChange(index, itemConfig.field || '', newValue) - }} - /> - ))} - - ))} - {value.length === 0 && ( -
- 暂无配置,点击上方按钮添加 -
- )} -
-
- ) -} - -/** - * 获取嵌套对象的值 - */ -const getNestedValue = (obj: any, path: string) => { - if (!path) return obj - const parts = path.split('.') - let value = obj - for (const part of parts) { - if (value === undefined || value === null) return undefined - value = value[part] - } - return value -} - -/** - * 配置项渲染组件 - */ -const ConfigItemRender = ({ - config, - value, - onChange -}: { - config: ConfigItem - value: any - onChange: (newValue: any) => void -}) => { - const getValue = () => { - if (!config.field) return undefined - return config.field.includes('.') - ? getNestedValue(value, config.field) - : value?.[config.field] - } - - const currentValue = getValue() - const processedValue = currentValue ?? config.default ?? [] - - switch (config.type) { - case 'title': - return

{config.text}

- case 'divider': - return
- case 'switch': - return ( -
-
- - {config.label} -
- {config.description && ( -

{config.description}

- )} -
- ) - case 'array': - return ( - - ) - case 'input': - return ( -
-
- - onChange(e.target.value)} - placeholder={`请输入${config.label}`} - /> - {config.description && ( -

{config.description}

- )} -
-
- ) - case 'number': - return ( -
-
- - onChange(Number(e.target.value))} - placeholder={`请输入${config.label}`} - /> - {config.description && ( -

{config.description}

- )} -
-
- ) - case 'section': - return ( - - {config.label} - {config.description && ( - - {config.description} - - )} -
- ), - children: ( -
- {config.children?.map((child, index) => ( - { - if (child.field?.includes('.')) { - const [parent, field] = child.field.split('.') - onChange({ - ...value, - [parent]: { - ...value?.[parent], - [field]: newValue - } - }) - } else { - onChange({ - ...value, - [child.field || '']: newValue - }) - } - }} - /> - ))} -
- ) - } - ]} - /> - ) - case 'colorPicker': - return ( -
-
- - onChange(color.toHexString())} - /> - {config.description && ( -

{config.description}

- )} -
-
- ) - case 'radio': - return ( -
-
- - onChange(e.target.value)} - className={config.vertical ? 'flex flex-col space-y-2' : ''} - > - {config.options?.map((option) => ( - - {option.label} - - ))} - - {config.description && ( -

{config.description}

- )} -
-
- ) - case 'checkbox': - return ( -
-
- - - {config.options?.map((option) => ( - - {option.label} - - ))} - - {config.description && ( -

{config.description}

- )} -
-
- ) - default: - return null } -} - -/** - * 配置页面组件 - */ -const ConfigPage = () => { - const [configStructure, setConfigStructure] = useState([]) - const [configValues, setConfigValues] = useState>({}) - const [activeTab, setActiveTab] = useState('config') - const [loading, setLoading] = useState(false) useEffect(() => { - const fetchConfig = async () => { - try { - const res = await request.serverPost('/api/v1/get_file', { - type: activeTab - }) - console.log('获取配置:', res) - setConfigStructure(res) - - const defaultValues: Record = {} - - /** - * 设置嵌套对象的值 - */ - const setNestedValue = (obj: any, path: string, value: any) => { - const parts = path.split('.') - let current = obj - for (let i = 0; i < parts.length - 1; i++) { - const part = parts[i] - current[part] = current[part] || {} - current = current[part] - } - current[parts[parts.length - 1]] = value - } - - /** - * 递归处理配置项的默认值 - */ - const processConfigItem = (item: ConfigItem) => { - if (item.type === 'title') { - return - } - - console.log('处理配置项:', item) - if (item.field) { - let defaultValue: any - - switch (item.type) { - case 'array': - // 使用后端返回的默认值,如果没有则使用空数组 - defaultValue = item.default || [] - break - case 'switch': - defaultValue = item.default ?? false - break - case 'number': - defaultValue = item.default ?? 0 - break - case 'input': - defaultValue = item.default ?? '' - break - } - - if (defaultValue !== undefined) { - if (item.field.includes('.')) { - setNestedValue(defaultValues, item.field, defaultValue) - } else { - defaultValues[item.field] = defaultValue - } - } - } - - // 递归处理子配置项 - if (item.children) { - item.children.forEach(processConfigItem) - } - } - - // 处理所有配置项 - res.forEach(processConfigItem) - - console.log('初始化的默认值:', defaultValues) - setConfigValues(defaultValues) - } catch (error) { - console.error('获取配置失败:', error) - message.error('获取配置失败') - } - } - fetchConfig() - }, [activeTab]) + }, [activeTab, reset]) - const handleSave = async () => { + const onSubmit = async (data: Record) => { + if (Object.keys(data).length === 0) { + toast.error('表单数据不能为空') + return + } + setLoading(true) try { - setLoading(true) - console.log('保存配置:', configValues) - // await request.serverPost('/api/v1/set_file', { - // type: activeTab, - // data: configValues - // }) - message.success('保存成功') + await request.serverPost }>( + '/api/v1/config/set', + { + type: activeTab.toString(), + data, + }, + ) + toast.success('保存配置成功') + fetchConfig() } catch (error) { - console.error('保存失败:', error) - message.error('保存失败') + console.error('保存配置失败:', error) + toast.error('保存配置失败') } finally { setLoading(false) } } - console.log('当前配置值:', configValues) - console.log('配置结构:', configStructure) - return ( -
-
-
-
-
setActiveTab('config')} - > - 基础配置 -
-
setActiveTab('adapter')} - > - 适配器配置 -
-
- -
+
+
+ + + + +
-
- {configStructure.length === 0 ? ( -
加载中...
- ) : ( - configStructure.map((config, index) => ( - { - setConfigValues(prev => ({ - ...prev, - [config.field || '']: newValue - })) - }} - /> - )) - )} -
-
+ {configStructure.length === 0 ? ( + + ) : ( +
+ + + )} +

) } diff --git a/packages/web/src/pages/dashboard/index.tsx b/packages/web/src/pages/dashboard/index.tsx index d7efe17c..65de9d83 100644 --- a/packages/web/src/pages/dashboard/index.tsx +++ b/packages/web/src/pages/dashboard/index.tsx @@ -90,7 +90,7 @@ function Status() { ) } -function SystemStatusCard() { +function SystemStatusCard() { const [systemStatus, setSystemStatus] = useState() const getStatus = useCallback(() => { try { @@ -197,7 +197,7 @@ function ControlButtons() { export default function IndexPage() { return ( -
+
- + diff --git a/packages/web/src/pages/dashboard/layout.tsx b/packages/web/src/pages/dashboard/layout.tsx index 695abe7b..9ada23a9 100644 --- a/packages/web/src/pages/dashboard/layout.tsx +++ b/packages/web/src/pages/dashboard/layout.tsx @@ -14,7 +14,7 @@ export default function DashboardLayout() {
-
+
diff --git a/packages/web/src/pages/dashboard/plugins/index.tsx b/packages/web/src/pages/dashboard/plugins/index.tsx index fb0626e1..58d0b219 100644 --- a/packages/web/src/pages/dashboard/plugins/index.tsx +++ b/packages/web/src/pages/dashboard/plugins/index.tsx @@ -1,36 +1,45 @@ import { Outlet, useNavigate } from 'react-router-dom' -import { useLocation } from "react-router-dom"; -import {Tabs, Tab} from "@heroui/tabs"; +import { useLocation } from 'react-router-dom' +import { Tabs, Tab } from '@heroui/tabs' import { Card, CardBody } from '@heroui/card' const routes = [ { path: '/plugins', - title: "插件市场" + title: '插件市场', }, { path: '/plugins/local', - title: "已安装" - } + title: '已安装', + }, ] export default function PluginsPage() { - const { pathname } = useLocation(); + const { pathname } = useLocation() const navigate = useNavigate() - return
- { - navigate(key.toString()) - }}> - { - route => { - return - } - } - - - - - - -
+ return ( +
+ { + navigate(key.toString()) + }} + > + {route => { + return + }} + + + + + + +
+ ) } diff --git a/packages/web/src/pages/dashboard/sandbox/index.tsx b/packages/web/src/pages/dashboard/sandbox/index.tsx index 6305ed3d..d5a126f2 100644 --- a/packages/web/src/pages/dashboard/sandbox/index.tsx +++ b/packages/web/src/pages/dashboard/sandbox/index.tsx @@ -11,7 +11,7 @@ export default function SandboxPage() { toast.error('沙箱调试正在开发中,目前不可用') }, []) return ( -
+
diff --git a/packages/web/src/types/config.ts b/packages/web/src/types/config.ts index 3e67bdb0..c6da3b4e 100644 --- a/packages/web/src/types/config.ts +++ b/packages/web/src/types/config.ts @@ -1,81 +1,145 @@ -/** - * 配置类型定义 - */ -export interface Config { - /** 主人列表 */ - master: string[] - /** 管理员列表 */ - admin: string[] - /** 用户管理 */ - user: { - /** 用户白名单 */ - enable_list: string[] - /** 用户黑名单 */ - disable_list: string[] - } - /** 好友管理 */ - friend: { - /** 是否启用好友消息事件 */ - enable: boolean - /** 好友白名单 */ - enable_list: string[] - /** 好友黑名单 */ - disable_list: string[] - /** 好友日志白名单 */ - log_enable_list: string[] - /** 好友日志黑名单 */ - log_disable_list: string[] - } - /** 群管理 */ - group: { - /** 是否启用群消息事件 */ - enable: boolean - /** 群白名单 */ - enable_list: string[] - /** 群黑名单 */ - disable_list: string[] - /** 群日志白名单 */ - log_enable_list: string[] - /** 群日志黑名单 */ - log_disable_list: string[] - } - /** 频道私信管理 */ - directs: { - /** 是否启用私信消息事件 */ - enable: boolean - /** 私信白名单 */ - enable_list: string[] - /** 私信黑名单 */ - disable_list: string[] - /** 私信日志白名单 */ - log_enable_list: string[] - /** 私信日志黑名单 */ - log_disable_list: string[] - } - /** 频道管理 */ - guilds: { - /** 是否启用频道消息事件 */ - enable: boolean - /** 频道白名单 */ - enable_list: string[] - /** 频道黑名单 */ - disable_list: string[] - /** 频道日志白名单 */ - log_enable_list: string[] - /** 频道日志黑名单 */ - log_disable_list: string[] - } - /** 子频道消息管理 */ - channels: { - /** 是否启用子频道消息事件 */ - enable: boolean - /** 子频道白名单 */ - enable_list: string[] - /** 子频道黑名单 */ - disable_list: string[] - /** 子频道日志白名单 */ - log_enable_list: string[] - /** 子频道日志黑名单 */ - log_disable_list: string[] - } -} \ No newline at end of file +export type Option = { + label: string + value: string | number + disabled?: boolean +} + +/** 组件类型 */ +export type FieldType = + | 'text' + | 'number' + | 'switch' + | 'select' + | 'object' + | 'divider' + | 'array' + | 'objectArray' + | 'colorPicker' + | 'radio' + | 'checkbox' + | 'section' + | 'title' + +/** 值类型 */ +export type ValueType = 'string' | 'number' | 'boolean' | 'object' + +interface BaseField { + /** 组件类型 */ + type: FieldType + /** 字段 */ + key: string + /** 显示文本 */ + label?: string + /** 是否必填 */ + required?: boolean + /** 描述 */ + description?: string +} + +/** 文本组件 */ +export interface TextField extends BaseField { + type: 'text' + /** 默认值 */ + defaultValue?: string +} + +/** 数字输入框 */ +export interface NumberField extends BaseField { + type: 'number' + /** 默认值 */ + defaultValue?: number +} + +/** 开关 */ +export interface SwitchField extends BaseField { + type: 'switch' + /** 默认值 */ + defaultValue?: boolean +} + +/** 下拉框选择器 */ +export interface SelectField extends BaseField { + type: 'select' + /** 是否多选 */ + multiple?: boolean + /** 选项 */ + options: Option[] + /** 默认值 */ + defaultValue?: string | number +} + +/** 分隔符 */ +export interface DividerField extends BaseField { + type: 'divider' +} + +/** 单选框 */ +export interface RadioField extends BaseField { + type: 'radio' + /** 选项 */ + options: Option[] + /** 默认值 */ + defaultValue?: string | number +} + +/** 多选框 */ +export interface CheckboxField extends BaseField { + type: 'checkbox' + /** 选项 */ + options: Option[] + /** 默认值 */ + defaultValue?: string[] | number[] +} + +/** 数组 */ +export interface ArrayField extends BaseField { + type: 'array' + /** 值类型 */ + elementType: 'text' | 'number' + /** 默认值 */ + defaultValue?: string | number +} + +/** 对象 */ +export interface ObjectField extends BaseField { + type: 'object' + /** 子组件配置 */ + fields: FormField[] +} + +/** 对象数组 */ +export interface ObjectArrayField extends BaseField { + type: 'objectArray' + /** 子组件配置 */ + fields: FormField[] +} + +/** 分组 */ +export interface SectionField extends BaseField { + type: 'section' + /** 子组件 */ + children: FormField[] +} + +/** 标题 */ +export interface TitleField extends BaseField { + type: 'title' + /** 显示文本 */ + text: string +} + +/** 组件 */ +export type FormField = + | TextField + | NumberField + | SwitchField + | SelectField + | RadioField + | CheckboxField + | ArrayField + | ObjectField + | ObjectArrayField + | SectionField + | TitleField + | DividerField +// | ColorPickerField diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 61ceca9f..662de708 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -165,21 +165,27 @@ importers: packages/web: dependencies: - '@ant-design/icons': - specifier: ^5.5.2 - version: 5.5.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@heroui/accordion': + specifier: ^2.2.8 + version: 2.2.8(@heroui/system@2.4.6(@heroui/theme@2.4.5(tailwindcss@3.4.17))(framer-motion@11.18.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@heroui/theme@2.4.5(tailwindcss@3.4.17))(framer-motion@11.18.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@heroui/button': specifier: 2.2.9 version: 2.2.9(@heroui/system@2.4.6(@heroui/theme@2.4.5(tailwindcss@3.4.17))(framer-motion@11.18.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@heroui/theme@2.4.5(tailwindcss@3.4.17))(framer-motion@11.18.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@heroui/card': specifier: ^2.2.9 version: 2.2.9(@heroui/system@2.4.6(@heroui/theme@2.4.5(tailwindcss@3.4.17))(framer-motion@11.18.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@heroui/theme@2.4.5(tailwindcss@3.4.17))(framer-motion@11.18.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@heroui/checkbox': + specifier: ^2.3.9 + version: 2.3.9(@heroui/system@2.4.6(@heroui/theme@2.4.5(tailwindcss@3.4.17))(framer-motion@11.18.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@heroui/theme@2.4.5(tailwindcss@3.4.17))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@heroui/chip': specifier: ^2.2.6 version: 2.2.6(@heroui/system@2.4.6(@heroui/theme@2.4.5(tailwindcss@3.4.17))(framer-motion@11.18.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@heroui/theme@2.4.5(tailwindcss@3.4.17))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@heroui/code': specifier: 2.2.6 version: 2.2.6(@heroui/theme@2.4.5(tailwindcss@3.4.17))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@heroui/divider': + specifier: ^2.2.6 + version: 2.2.6(@heroui/theme@2.4.5(tailwindcss@3.4.17))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@heroui/dropdown': specifier: 2.3.9 version: 2.3.9(@heroui/system@2.4.6(@heroui/theme@2.4.5(tailwindcss@3.4.17))(framer-motion@11.18.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@heroui/theme@2.4.5(tailwindcss@3.4.17))(framer-motion@11.18.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -207,6 +213,9 @@ importers: '@heroui/popover': specifier: ^2.3.10 version: 2.3.10(@heroui/system@2.4.6(@heroui/theme@2.4.5(tailwindcss@3.4.17))(framer-motion@11.18.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@heroui/theme@2.4.5(tailwindcss@3.4.17))(framer-motion@11.18.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@heroui/radio': + specifier: ^2.3.9 + version: 2.3.9(@heroui/system@2.4.6(@heroui/theme@2.4.5(tailwindcss@3.4.17))(framer-motion@11.18.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@heroui/theme@2.4.5(tailwindcss@3.4.17))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@heroui/select': specifier: ^2.4.10 version: 2.4.10(@heroui/system@2.4.6(@heroui/theme@2.4.5(tailwindcss@3.4.17))(framer-motion@11.18.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@heroui/theme@2.4.5(tailwindcss@3.4.17))(framer-motion@11.18.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -246,9 +255,6 @@ importers: ahooks: specifier: ^3.8.4 version: 3.8.4(react@19.0.0) - antd: - specifier: ^5.23.1 - version: 5.23.1(luxon@3.5.0)(moment@2.30.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) axios: specifier: 1.7.9 version: 1.7.9 @@ -404,50 +410,10 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - '@ant-design/colors@7.2.0': - resolution: {integrity: sha512-bjTObSnZ9C/O8MB/B4OUtd/q9COomuJAR2SYfhxLyHvCKn4EKwCN3e+fWGMo7H5InAyV0wL17jdE9ALrdOW/6A==} - - '@ant-design/cssinjs-utils@1.1.3': - resolution: {integrity: sha512-nOoQMLW1l+xR1Co8NFVYiP8pZp3VjIIzqV6D6ShYF2ljtdwWJn5WSsH+7kvCktXL/yhEtWURKOfH5Xz/gzlwsg==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - '@ant-design/cssinjs@1.22.1': - resolution: {integrity: sha512-SLuXM4wiEE1blOx94iXrkOgseMZHzdr4ngdFu3VVDq6AOWh7rlwqTkMAtJho3EsBF6x/eUGOtK53VZXGQG7+sQ==} - peerDependencies: - react: '>=16.0.0' - react-dom: '>=16.0.0' - - '@ant-design/fast-color@2.0.6': - resolution: {integrity: sha512-y2217gk4NqL35giHl72o6Zzqji9O7vHh9YmhUVkPtAOpoTCH4uWxo/pr4VE8t0+ChEPs0qo4eJRC5Q1eXWo3vA==} - engines: {node: '>=8.x'} - - '@ant-design/icons-svg@4.4.2': - resolution: {integrity: sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==} - - '@ant-design/icons@5.5.2': - resolution: {integrity: sha512-xc53rjVBl9v2BqFxUjZGti/RfdDeA8/6KYglmInM2PNqSXc/WfuGDTifJI/ZsokJK0aeKvOIbXc9y2g8ILAhEA==} - engines: {node: '>=8'} - peerDependencies: - react: '>=16.0.0' - react-dom: '>=16.0.0' - - '@ant-design/react-slick@1.1.2': - resolution: {integrity: sha512-EzlvzE6xQUBrZuuhSAFTdsr4P2bBBHGZwKFemEfq8gIGyIQCxalYfZW/T2ORbtQx5rU69o+WycP3exY/7T1hGA==} - peerDependencies: - react: '>=16.9.0' - '@babel/runtime@7.26.0': resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} engines: {node: '>=6.9.0'} - '@emotion/hash@0.8.0': - resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==} - - '@emotion/unitless@0.7.5': - resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==} - '@esbuild/aix-ppc64@0.23.1': resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} engines: {node: '>=18'} @@ -824,6 +790,15 @@ packages: '@formatjs/intl-localematcher@0.5.10': resolution: {integrity: sha512-af3qATX+m4Rnd9+wHcjJ4w2ijq+rAVP3CCinJQvFv1kgSu1W6jypUmvleJxcewdxmutM8dmIRZFxO/IQBZmP2Q==} + '@heroui/accordion@2.2.8': + resolution: {integrity: sha512-azHolskQ1dNUT+A5h0w7n2DO7WFaafGPPPFfNDQZ3N/HigYjCF8E2MPkR40et+jffojji5/PgKjpIezlPlKsPw==} + peerDependencies: + '@heroui/system': '>=2.4.0' + '@heroui/theme': '>=2.4.0' + framer-motion: '>=11.5.6 || >=12.0.0-alpha.1' + react: '>=18 || >=19.0.0-rc.0' + react-dom: '>=18 || >=19.0.0-rc.0' + '@heroui/aria-utils@2.2.7': resolution: {integrity: sha512-HVkOI7NIbQloj2M1p3KVOLQ5E2PSf5YqoSspasLtWvN6VTC0bYVfDDcJnZ9DWG4LlUoeZu751O9Um7ipBEQFhA==} peerDependencies: @@ -863,6 +838,14 @@ packages: react: '>=18 || >=19.0.0-rc.0' react-dom: '>=18 || >=19.0.0-rc.0' + '@heroui/checkbox@2.3.9': + resolution: {integrity: sha512-R5b2L4BKZ1BSTBJVPl4Ipe/4cG7UacnYPb3BUfTJWrkcrbTxJ+VCkcZQ7s8n9FJpJlp6VWky0LY1E1+UXPcWPQ==} + peerDependencies: + '@heroui/system': '>=2.4.0' + '@heroui/theme': '>=2.4.3' + react: '>=18 || >=19.0.0-rc.0' + react-dom: '>=18 || >=19.0.0-rc.0' + '@heroui/chip@2.2.6': resolution: {integrity: sha512-rzWauGkCQed3vRg6UoN+/Ezkv56mzYnWKvLzVHd2riX3ir0o0pEVa0kFz/SZMl1XNouMJVZZIVdrvH+0UcPoSg==} peerDependencies: @@ -1024,6 +1007,14 @@ packages: react: '>=18 || >=19.0.0-rc.0' react-dom: '>=18 || >=19.0.0-rc.0' + '@heroui/radio@2.3.9': + resolution: {integrity: sha512-ExmEz4obI485TyNnscFJMADHY8cC9CqALg/3aUXHstyPYFIchLeYMCiJQHs2+o76rk8nNJML+t+5SpdQrQ44WA==} + peerDependencies: + '@heroui/system': '>=2.4.0' + '@heroui/theme': '>=2.4.3' + react: '>=18 || >=19.0.0-rc.0' + react-dom: '>=18 || >=19.0.0-rc.0' + '@heroui/react-rsc-utils@2.1.1': resolution: {integrity: sha512-+U/OPqE4HpjRObBhSSLqtUMV5/G+rnf5Xd+ntP1gzC0HTVzN9WG9rRSNyhy7b+fAWGOR2kqOaon1LDZE6zmK6A==} peerDependencies: @@ -1175,6 +1166,11 @@ packages: react: '>=18 || >=19.0.0-rc.0' react-dom: '>=18 || >=19.0.0-rc.0' + '@heroui/use-aria-accordion@2.2.3': + resolution: {integrity: sha512-xyZjCkpUuN1WIphyCqnjuJ9OecuBUHfYN6pQIt1W1jB7xnPXn9gvBbAjVPXZdfJhNY4BZ5x88RIptBOPPW762Q==} + peerDependencies: + react: '>=18 || >=19.0.0-rc.0' + '@heroui/use-aria-button@2.2.4': resolution: {integrity: sha512-UAZPz3hymuYAIPmHiR/b17ZGVPHxlGfb3jkMLRqHR+R60PokSHrbZZ2P3QYOXQ2NP6h9fMRJhhdU94XwwNAoHw==} peerDependencies: @@ -1207,6 +1203,11 @@ packages: peerDependencies: react: '>=18 || >=19.0.0-rc.0' + '@heroui/use-callback-ref@2.1.2': + resolution: {integrity: sha512-wPD0L8vK+FHDvsVGZYCJeEm/WwMJvE6qvcZhzo4n2+318FrsfAPI2N1VQKx176/ZHNl8j7Z44o+eZlI5KwSpeQ==} + peerDependencies: + react: '>=18 || >=19.0.0-rc.0' + '@heroui/use-clipboard@2.1.2': resolution: {integrity: sha512-D0TG7QtS7QetDJAb6h4AnxXcjgFcK1Ldt+H+W3ZPfjANGSGeQTh4WgO4jiTbETJMF8V6Xbplu9IUd6daC+J/YA==} peerDependencies: @@ -1448,66 +1449,16 @@ packages: resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - '@rc-component/async-validator@5.0.4': - resolution: {integrity: sha512-qgGdcVIF604M9EqjNF0hbUTz42bz/RDtxWdWuU5EQe3hi7M8ob54B6B35rOsvX5eSvIHIzT9iH1R3n+hk3CGfg==} - engines: {node: '>=14.x'} - - '@rc-component/color-picker@2.0.1': - resolution: {integrity: sha512-WcZYwAThV/b2GISQ8F+7650r5ZZJ043E57aVBFkQ+kSY4C6wdofXgB0hBx+GPGpIU0Z81eETNoDUJMr7oy/P8Q==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - '@rc-component/context@1.4.0': - resolution: {integrity: sha512-kFcNxg9oLRMoL3qki0OMxK+7g5mypjgaaJp/pkOis/6rVxma9nJBF/8kCIuTYHUQNr0ii7MxqE33wirPZLJQ2w==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - '@rc-component/mini-decimal@1.1.0': - resolution: {integrity: sha512-jS4E7T9Li2GuYwI6PyiVXmxTiM6b07rlD9Ge8uGZSCz3WlzcG5ZK7g5bbuKNeZ9pgUuPK/5guV781ujdVpm4HQ==} - engines: {node: '>=8.x'} - - '@rc-component/mutate-observer@1.1.0': - resolution: {integrity: sha512-QjrOsDXQusNwGZPf4/qRQasg7UFEj06XiCJ8iuiq/Io7CrHrgVi6Uuetw60WAMG1799v+aM8kyc+1L/GBbHSlw==} - engines: {node: '>=8.x'} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - '@rc-component/portal@1.1.2': - resolution: {integrity: sha512-6f813C0IsasTZms08kfA8kPAGxbbkYToa8ALaiDIGGECU4i9hj8Plgbx0sNJDrey3EtHO30hmdaxtT0138xZcg==} - engines: {node: '>=8.x'} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - '@rc-component/qrcode@1.0.0': - resolution: {integrity: sha512-L+rZ4HXP2sJ1gHMGHjsg9jlYBX/SLN2D6OxP9Zn3qgtpMWtO2vUfxVFwiogHpAIqs54FnALxraUy/BCO1yRIgg==} - engines: {node: '>=8.x'} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - '@rc-component/tour@1.15.1': - resolution: {integrity: sha512-Tr2t7J1DKZUpfJuDZWHxyxWpfmj8EZrqSgyMZ+BCdvKZ6r1UDsfU46M/iWAAFBy961Ssfom2kv5f3UcjIL2CmQ==} - engines: {node: '>=8.x'} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - '@rc-component/trigger@2.2.6': - resolution: {integrity: sha512-/9zuTnWwhQ3S3WT1T8BubuFTT46kvnXgaERR9f4BTKyn61/wpf/BvbImzYBubzJibU707FxwbKszLlHjcLiv1Q==} - engines: {node: '>=8.x'} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - '@react-aria/button@3.11.0': resolution: {integrity: sha512-b37eIV6IW11KmNIAm65F3SEl2/mgj5BrHIysW6smZX3KoKWTGYsYfcQkmtNgY0GOSFfDxMCoolsZ6mxC00nSDA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + '@react-aria/checkbox@3.15.0': + resolution: {integrity: sha512-z/8xd4em7o0MroBXwkkwv7QRwiJaA1FwqMhRUb7iqtBGP2oSytBEDf0N7L09oci32a1P4ZPz2rMK5GlLh/PD6g==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + '@react-aria/dialog@3.5.20': resolution: {integrity: sha512-l0GZVLgeOd3kL3Yj8xQW7wN3gn9WW3RLd/SGI9t7ciTq+I/FhftjXCWzXLlOCCTLMf+gv7eazecECtmoWUaZWQ==} peerDependencies: @@ -1598,6 +1549,11 @@ packages: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + '@react-aria/radio@3.10.10': + resolution: {integrity: sha512-NVdeOVrsrHgSfwL2jWCCXFsWZb+RMRZErj5vthHQW4nkHECGOzeX56VaLWTSvdoCPqi9wdIX8A6K9peeAIgxzA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + '@react-aria/selection@3.21.0': resolution: {integrity: sha512-52JJ6hlPcM+gt0VV3DBmz6Kj1YAJr13TfutrKfGWcK36LvNCBm1j0N+TDqbdnlp8Nue6w0+5FIwZq44XPYiBGg==} peerDependencies: @@ -1670,6 +1626,11 @@ packages: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + '@react-stately/checkbox@3.6.10': + resolution: {integrity: sha512-LHm7i4YI8A/RdgWAuADrnSAYIaYYpQeZqsp1a03Og0pJHAlZL0ymN3y2IFwbZueY0rnfM+yF+kWNXjJqbKrFEQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + '@react-stately/collections@3.12.0': resolution: {integrity: sha512-MfR9hwCxe5oXv4qrLUnjidwM50U35EFmInUeFf8i9mskYwWlRYS0O1/9PZ0oF1M0cKambaRHKEy98jczgb9ycA==} peerDependencies: @@ -1715,6 +1676,11 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + '@react-stately/radio@3.10.9': + resolution: {integrity: sha512-kUQ7VdqFke8SDRCatw2jW3rgzMWbvw+n2imN2THETynI47NmNLzNP11dlGO2OllRtTrsLhmBNlYHa3W62pFpAw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + '@react-stately/selection@3.19.0': resolution: {integrity: sha512-AvbUqnWjqVQC48RD39S9BpMKMLl55Zo5l/yx5JQFPl55cFwe9Tpku1KY0wzt3fXXiXWaqjDn/7Gkg1VJYy8esQ==} peerDependencies: @@ -1755,6 +1721,11 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + '@react-types/accordion@3.0.0-alpha.25': + resolution: {integrity: sha512-nPTRrMA5jS4QcwQ0H8J9Tzzw7+yq+KbwsPNA1ukVIfOGIB45by/1ke/eiZAXGqXxkElxi2fQuaXuWm79BWZ8zg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + '@react-types/button@3.10.1': resolution: {integrity: sha512-XTtap8o04+4QjPNAshFWOOAusUTxQlBjU2ai0BTVLShQEjHhRVDBIWsI2B2FKJ4KXT6AZ25llaxhNrreWGonmA==} peerDependencies: @@ -1820,6 +1791,11 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + '@react-types/radio@3.8.5': + resolution: {integrity: sha512-gSImTPid6rsbJmwCkTliBIU/npYgJHOFaI3PNJo7Y0QTAnFelCtYeFtBiWrFodSArSv7ASqpLLUEj9hZu/rxIg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + '@react-types/select@3.9.8': resolution: {integrity: sha512-RGsYj2oFjXpLnfcvWMBQnkcDuKkwT43xwYWZGI214/gp/B64tJiIUgTM5wFTRAeGDX23EePkhCQF+9ctnqFd6g==} peerDependencies: @@ -2407,12 +2383,6 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} - antd@5.23.1: - resolution: {integrity: sha512-rg5xd5LotHw0IRyo/nsiUN/EEV3e+xU4V4UmIb/62hMN9+3APyz1Ohjf17a+fN13jC8sNY1hP1K252SU2Th0xA==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} @@ -2615,9 +2585,6 @@ packages: resolution: {integrity: sha512-ftiMvKgCQK+OppXcvMieDoYlYLYWhScK6yZRFBrrlHQRbm4k6Gr+yDgu/wt3V0k1/jtNbuiXAsRmuAFcD0Tx5Q==} engines: {node: '>=18'} - classnames@2.5.1: - resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} - clean-css@4.2.4: resolution: {integrity: sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==} engines: {node: '>= 4.0'} @@ -2702,9 +2669,6 @@ packages: resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} engines: {node: '>=18'} - copy-to-clipboard@3.3.3: - resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} - cron-parser@4.9.0: resolution: {integrity: sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==} engines: {node: '>=12.0.0'} @@ -3752,9 +3716,6 @@ packages: json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - json2mq@0.2.0: - resolution: {integrity: sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==} - json5@1.0.2: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} hasBin: true @@ -4285,234 +4246,6 @@ packages: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} - rc-cascader@3.33.0: - resolution: {integrity: sha512-JvZrMbKBXIbEDmpIORxqvedY/bck6hGbs3hxdWT8eS9wSQ1P7//lGxbyKjOSyQiVBbgzNWriSe6HoMcZO/+0rQ==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - rc-checkbox@3.5.0: - resolution: {integrity: sha512-aOAQc3E98HteIIsSqm6Xk2FPKIER6+5vyEFMZfo73TqM+VVAIqOkHoPjgKLqSNtVLWScoaM7vY2ZrGEheI79yg==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - rc-collapse@3.9.0: - resolution: {integrity: sha512-swDdz4QZ4dFTo4RAUMLL50qP0EY62N2kvmk2We5xYdRwcRn8WcYtuetCJpwpaCbUfUt5+huLpVxhvmnK+PHrkA==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - rc-dialog@9.6.0: - resolution: {integrity: sha512-ApoVi9Z8PaCQg6FsUzS8yvBEQy0ZL2PkuvAgrmohPkN3okps5WZ5WQWPc1RNuiOKaAYv8B97ACdsFU5LizzCqg==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - rc-drawer@7.2.0: - resolution: {integrity: sha512-9lOQ7kBekEJRdEpScHvtmEtXnAsy+NGDXiRWc2ZVC7QXAazNVbeT4EraQKYwCME8BJLa8Bxqxvs5swwyOepRwg==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - rc-dropdown@4.2.1: - resolution: {integrity: sha512-YDAlXsPv3I1n42dv1JpdM7wJ+gSUBfeyPK59ZpBD9jQhK9jVuxpjj3NmWQHOBceA1zEPVX84T2wbdb2SD0UjmA==} - peerDependencies: - react: '>=16.11.0' - react-dom: '>=16.11.0' - - rc-field-form@2.7.0: - resolution: {integrity: sha512-hgKsCay2taxzVnBPZl+1n4ZondsV78G++XVsMIJCAoioMjlMQR9YwAp7JZDIECzIu2Z66R+f4SFIRrO2DjDNAA==} - engines: {node: '>=8.x'} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - rc-image@7.11.0: - resolution: {integrity: sha512-aZkTEZXqeqfPZtnSdNUnKQA0N/3MbgR7nUnZ+/4MfSFWPFHZau4p5r5ShaI0KPEMnNjv4kijSCFq/9wtJpwykw==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - rc-input-number@9.4.0: - resolution: {integrity: sha512-Tiy4DcXcFXAf9wDhN8aUAyMeCLHJUHA/VA/t7Hj8ZEx5ETvxG7MArDOSE6psbiSCo+vJPm4E3fGN710ITVn6GA==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - rc-input@1.7.2: - resolution: {integrity: sha512-g3nYONnl4edWj2FfVoxsU3Ec4XTE+Hb39Kfh2MFxMZjp/0gGyPUgy/v7ZhS27ZxUFNkuIDYXm9PJsLyJbtg86A==} - peerDependencies: - react: '>=16.0.0' - react-dom: '>=16.0.0' - - rc-mentions@2.19.1: - resolution: {integrity: sha512-KK3bAc/bPFI993J3necmaMXD2reZTzytZdlTvkeBbp50IGH1BDPDvxLdHDUrpQx2b2TGaVJsn+86BvYa03kGqA==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - rc-menu@9.16.0: - resolution: {integrity: sha512-vAL0yqPkmXWk3+YKRkmIR8TYj3RVdEt3ptG2jCJXWNAvQbT0VJJdRyHZ7kG/l1JsZlB+VJq/VcYOo69VR4oD+w==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - rc-motion@2.9.5: - resolution: {integrity: sha512-w+XTUrfh7ArbYEd2582uDrEhmBHwK1ZENJiSJVb7uRxdE7qJSYjbO2eksRXmndqyKqKoYPc9ClpPh5242mV1vA==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - rc-notification@5.6.2: - resolution: {integrity: sha512-Id4IYMoii3zzrG0lB0gD6dPgJx4Iu95Xu0BQrhHIbp7ZnAZbLqdqQ73aIWH0d0UFcElxwaKjnzNovTjo7kXz7g==} - engines: {node: '>=8.x'} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - rc-overflow@1.4.1: - resolution: {integrity: sha512-3MoPQQPV1uKyOMVNd6SZfONi+f3st0r8PksexIdBTeIYbMX0Jr+k7pHEDvsXtR4BpCv90/Pv2MovVNhktKrwvw==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - rc-pagination@5.0.0: - resolution: {integrity: sha512-QjrPvbAQwps93iluvFM62AEYglGYhWW2q/nliQqmvkTi4PXP4HHoh00iC1Sa5LLVmtWQHmG73fBi2x6H6vFHRg==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - rc-picker@4.9.2: - resolution: {integrity: sha512-SLW4PRudODOomipKI0dvykxW4P8LOqtMr17MOaLU6NQJhkh9SZeh44a/8BMxwv5T6e3kiIeYc9k5jFg2Mv35Pg==} - engines: {node: '>=8.x'} - peerDependencies: - date-fns: '>= 2.x' - dayjs: '>= 1.x' - luxon: '>= 3.x' - moment: '>= 2.x' - react: '>=16.9.0' - react-dom: '>=16.9.0' - peerDependenciesMeta: - date-fns: - optional: true - dayjs: - optional: true - luxon: - optional: true - moment: - optional: true - - rc-progress@4.0.0: - resolution: {integrity: sha512-oofVMMafOCokIUIBnZLNcOZFsABaUw8PPrf1/y0ZBvKZNpOiu5h4AO9vv11Sw0p4Hb3D0yGWuEattcQGtNJ/aw==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - rc-rate@2.13.0: - resolution: {integrity: sha512-oxvx1Q5k5wD30sjN5tqAyWTvJfLNNJn7Oq3IeS4HxWfAiC4BOXMITNAsw7u/fzdtO4MS8Ki8uRLOzcnEuoQiAw==} - engines: {node: '>=8.x'} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - rc-resize-observer@1.4.3: - resolution: {integrity: sha512-YZLjUbyIWox8E9i9C3Tm7ia+W7euPItNWSPX5sCcQTYbnwDb5uNpnLHQCG1f22oZWUhLw4Mv2tFmeWe68CDQRQ==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - rc-segmented@2.7.0: - resolution: {integrity: sha512-liijAjXz+KnTRVnxxXG2sYDGd6iLL7VpGGdR8gwoxAXy2KglviKCxLWZdjKYJzYzGSUwKDSTdYk8brj54Bn5BA==} - peerDependencies: - react: '>=16.0.0' - react-dom: '>=16.0.0' - - rc-select@14.16.6: - resolution: {integrity: sha512-YPMtRPqfZWOm2XGTbx5/YVr1HT0vn//8QS77At0Gjb3Lv+Lbut0IORJPKLWu1hQ3u4GsA0SrDzs7nI8JG7Zmyg==} - engines: {node: '>=8.x'} - peerDependencies: - react: '*' - react-dom: '*' - - rc-slider@11.1.8: - resolution: {integrity: sha512-2gg/72YFSpKP+Ja5AjC5DPL1YnV8DEITDQrcc1eASrUYjl0esptaBVJBh5nLTXCCp15eD8EuGjwezVGSHhs9tQ==} - engines: {node: '>=8.x'} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - rc-steps@6.0.1: - resolution: {integrity: sha512-lKHL+Sny0SeHkQKKDJlAjV5oZ8DwCdS2hFhAkIjuQt1/pB81M0cA0ErVFdHq9+jmPmFw1vJB2F5NBzFXLJxV+g==} - engines: {node: '>=8.x'} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - rc-switch@4.1.0: - resolution: {integrity: sha512-TI8ufP2Az9oEbvyCeVE4+90PDSljGyuwix3fV58p7HV2o4wBnVToEyomJRVyTaZeqNPAp+vqeo4Wnj5u0ZZQBg==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - rc-table@7.50.2: - resolution: {integrity: sha512-+nJbzxzstBriLb5sr9U7Vjs7+4dO8cWlouQbMwBVYghk2vr508bBdkHJeP/z9HVjAIKmAgMQKxmtbgDd3gc5wA==} - engines: {node: '>=8.x'} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - rc-tabs@15.5.0: - resolution: {integrity: sha512-NrDcTaUJLh9UuDdMBkjKTn97U9iXG44s9D03V5NHkhEDWO5/nC6PwC3RhkCWFMKB9hh+ryqgZ+TIr1b9Jd/hnQ==} - engines: {node: '>=8.x'} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - rc-textarea@1.9.0: - resolution: {integrity: sha512-dQW/Bc/MriPBTugj2Kx9PMS5eXCCGn2cxoIaichjbNvOiARlaHdI99j4DTxLl/V8+PIfW06uFy7kjfUIDDKyxQ==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - rc-tooltip@6.3.2: - resolution: {integrity: sha512-oA4HZIiZJbUQ5ojigM0y4XtWxaH/aQlJSzknjICRWNpqyemy1sL3X3iEQV2eSPBWEq+bqU3+aSs81z+28j9luA==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - rc-tree-select@5.27.0: - resolution: {integrity: sha512-2qTBTzwIT7LRI1o7zLyrCzmo5tQanmyGbSaGTIf7sYimCklAToVVfpMC6OAldSKolcnjorBYPNSKQqJmN3TCww==} - peerDependencies: - react: '*' - react-dom: '*' - - rc-tree@5.13.0: - resolution: {integrity: sha512-2+lFvoVRnvHQ1trlpXMOWtF8BUgF+3TiipG72uOfhpL5CUdXCk931kvDdUkTL/IZVtNEDQKwEEmJbAYJSA5NnA==} - engines: {node: '>=10.x'} - peerDependencies: - react: '*' - react-dom: '*' - - rc-upload@4.8.1: - resolution: {integrity: sha512-toEAhwl4hjLAI1u8/CgKWt30BR06ulPa4iGQSMvSXoHzO88gPCslxqV/mnn4gJU7PDoltGIC9Eh+wkeudqgHyw==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - rc-util@5.44.3: - resolution: {integrity: sha512-q6KCcOFk3rv/zD3MckhJteZxb0VjAIFuf622B7ElK4vfrZdAzs16XR5p3VTdy3+U5jfJU5ACz4QnhLSuAGe5dA==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - rc-virtual-list@3.17.1: - resolution: {integrity: sha512-n9rKy6BB/Hi/LsOJr9ILpeFxDJfAIYzFYX1famZb0KLQrlsdxNBDsBjBY9lblJ35MTRJwi06ohv5ma9uTUeLog==} - engines: {node: '>=8.x'} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - react-dom@19.0.0: resolution: {integrity: sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==} peerDependencies: @@ -4542,9 +4275,6 @@ packages: react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - react-is@18.3.1: - resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - react-redux@9.2.0: resolution: {integrity: sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==} peerDependencies: @@ -4723,9 +4453,6 @@ packages: scroll-into-view-if-needed@3.0.10: resolution: {integrity: sha512-t44QCeDKAPf1mtQH3fYpWz8IM/DyvHLjs8wUvvwMYxk5moOqCzrMSxK6HQVD0QVmVjXFavoFIPRVrMuJPKAvtg==} - scroll-into-view-if-needed@3.1.0: - resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==} - semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -4851,9 +4578,6 @@ packages: resolution: {integrity: sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==} engines: {node: '>=8.0'} - string-convert@0.2.1: - resolution: {integrity: sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==} - string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -4912,9 +4636,6 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - stylis@4.3.5: - resolution: {integrity: sha512-K7npNOKGRYuhAFFzkzMGfxFDpN6gDwf8hcMiE+uveTVbBgm93HrNP3ZDUpKqzZ4pG7TP6fmb+EMAQPjq9FqqvA==} - sucrase@3.35.0: resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} engines: {node: '>=16 || 14 >=14.17'} @@ -4974,10 +4695,6 @@ packages: thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - throttle-debounce@5.0.2: - resolution: {integrity: sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==} - engines: {node: '>=12.22'} - tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} @@ -4989,9 +4706,6 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - toggle-selection@1.0.6: - resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} - toidentifier@1.0.1: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} @@ -5351,63 +5065,10 @@ snapshots: '@alloc/quick-lru@5.2.0': {} - '@ant-design/colors@7.2.0': - dependencies: - '@ant-design/fast-color': 2.0.6 - - '@ant-design/cssinjs-utils@1.1.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': - dependencies: - '@ant-design/cssinjs': 1.22.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@babel/runtime': 7.26.0 - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - - '@ant-design/cssinjs@1.22.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': - dependencies: - '@babel/runtime': 7.26.0 - '@emotion/hash': 0.8.0 - '@emotion/unitless': 0.7.5 - classnames: 2.5.1 - csstype: 3.1.3 - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - stylis: 4.3.5 - - '@ant-design/fast-color@2.0.6': - dependencies: - '@babel/runtime': 7.26.0 - - '@ant-design/icons-svg@4.4.2': {} - - '@ant-design/icons@5.5.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': - dependencies: - '@ant-design/colors': 7.2.0 - '@ant-design/icons-svg': 4.4.2 - '@babel/runtime': 7.26.0 - classnames: 2.5.1 - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - - '@ant-design/react-slick@1.1.2(react@19.0.0)': - dependencies: - '@babel/runtime': 7.26.0 - classnames: 2.5.1 - json2mq: 0.2.0 - react: 19.0.0 - resize-observer-polyfill: 1.5.1 - throttle-debounce: 5.0.2 - '@babel/runtime@7.26.0': dependencies: regenerator-runtime: 0.14.1 - '@emotion/hash@0.8.0': {} - - '@emotion/unitless@0.7.5': {} - '@esbuild/aix-ppc64@0.23.1': optional: true @@ -5664,6 +5325,29 @@ snapshots: dependencies: tslib: 2.8.1 + '@heroui/accordion@2.2.8(@heroui/system@2.4.6(@heroui/theme@2.4.5(tailwindcss@3.4.17))(framer-motion@11.18.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@heroui/theme@2.4.5(tailwindcss@3.4.17))(framer-motion@11.18.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@heroui/aria-utils': 2.2.8(@heroui/theme@2.4.5(tailwindcss@3.4.17))(framer-motion@11.18.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@heroui/divider': 2.2.6(@heroui/theme@2.4.5(tailwindcss@3.4.17))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@heroui/dom-animation': 2.1.2(framer-motion@11.18.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)) + '@heroui/framer-utils': 2.1.7(@heroui/theme@2.4.5(tailwindcss@3.4.17))(framer-motion@11.18.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@heroui/react-utils': 2.1.4(react@19.0.0) + '@heroui/shared-icons': 2.1.2(react@19.0.0) + '@heroui/shared-utils': 2.1.3 + '@heroui/system': 2.4.6(@heroui/theme@2.4.5(tailwindcss@3.4.17))(framer-motion@11.18.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@heroui/theme': 2.4.5(tailwindcss@3.4.17) + '@heroui/use-aria-accordion': 2.2.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/button': 3.11.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/focus': 3.19.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/interactions': 3.22.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/utils': 3.26.0(react@19.0.0) + '@react-stately/tree': 3.8.6(react@19.0.0) + '@react-types/accordion': 3.0.0-alpha.25(react@19.0.0) + '@react-types/shared': 3.26.0(react@19.0.0) + framer-motion: 11.18.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + '@heroui/aria-utils@2.2.7(@heroui/theme@2.4.5(tailwindcss@3.4.17))(framer-motion@11.18.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@heroui/react-rsc-utils': 2.1.1(react@19.0.0) @@ -5751,6 +5435,27 @@ snapshots: react: 19.0.0 react-dom: 19.0.0(react@19.0.0) + '@heroui/checkbox@2.3.9(@heroui/system@2.4.6(@heroui/theme@2.4.5(tailwindcss@3.4.17))(framer-motion@11.18.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@heroui/theme@2.4.5(tailwindcss@3.4.17))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@heroui/form': 2.1.9(@heroui/system@2.4.6(@heroui/theme@2.4.5(tailwindcss@3.4.17))(framer-motion@11.18.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@heroui/theme@2.4.5(tailwindcss@3.4.17))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@heroui/react-utils': 2.1.4(react@19.0.0) + '@heroui/shared-utils': 2.1.3 + '@heroui/system': 2.4.6(@heroui/theme@2.4.5(tailwindcss@3.4.17))(framer-motion@11.18.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@heroui/theme': 2.4.5(tailwindcss@3.4.17) + '@heroui/use-callback-ref': 2.1.2(react@19.0.0) + '@heroui/use-safe-layout-effect': 2.1.2(react@19.0.0) + '@react-aria/checkbox': 3.15.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/focus': 3.19.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/interactions': 3.22.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/utils': 3.26.0(react@19.0.0) + '@react-aria/visually-hidden': 3.8.18(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-stately/checkbox': 3.6.10(react@19.0.0) + '@react-stately/toggle': 3.8.0(react@19.0.0) + '@react-types/checkbox': 3.9.0(react@19.0.0) + '@react-types/shared': 3.26.0(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + '@heroui/chip@2.2.6(@heroui/system@2.4.6(@heroui/theme@2.4.5(tailwindcss@3.4.17))(framer-motion@11.18.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@heroui/theme@2.4.5(tailwindcss@3.4.17))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@heroui/react-utils': 2.1.3(react@19.0.0) @@ -6061,6 +5766,24 @@ snapshots: react: 19.0.0 react-dom: 19.0.0(react@19.0.0) + '@heroui/radio@2.3.9(@heroui/system@2.4.6(@heroui/theme@2.4.5(tailwindcss@3.4.17))(framer-motion@11.18.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@heroui/theme@2.4.5(tailwindcss@3.4.17))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@heroui/form': 2.1.9(@heroui/system@2.4.6(@heroui/theme@2.4.5(tailwindcss@3.4.17))(framer-motion@11.18.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@heroui/theme@2.4.5(tailwindcss@3.4.17))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@heroui/react-utils': 2.1.4(react@19.0.0) + '@heroui/shared-utils': 2.1.3 + '@heroui/system': 2.4.6(@heroui/theme@2.4.5(tailwindcss@3.4.17))(framer-motion@11.18.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@heroui/theme': 2.4.5(tailwindcss@3.4.17) + '@react-aria/focus': 3.19.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/interactions': 3.22.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/radio': 3.10.10(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/utils': 3.26.0(react@19.0.0) + '@react-aria/visually-hidden': 3.8.18(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-stately/radio': 3.10.9(react@19.0.0) + '@react-types/radio': 3.8.5(react@19.0.0) + '@react-types/shared': 3.26.0(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + '@heroui/react-rsc-utils@2.1.1(react@19.0.0)': dependencies: react: 19.0.0 @@ -6304,21 +6027,34 @@ snapshots: react: 19.0.0 react-dom: 19.0.0(react@19.0.0) - '@heroui/use-aria-button@2.2.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@heroui/use-aria-accordion@2.2.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@heroui/shared-utils': 2.1.2 + '@react-aria/button': 3.11.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@react-aria/focus': 3.19.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@react-aria/interactions': 3.22.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/selection': 3.21.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@react-aria/utils': 3.26.0(react@19.0.0) - '@react-types/button': 3.10.1(react@19.0.0) + '@react-stately/tree': 3.8.6(react@19.0.0) + '@react-types/accordion': 3.0.0-alpha.25(react@19.0.0) '@react-types/shared': 3.26.0(react@19.0.0) react: 19.0.0 transitivePeerDependencies: - react-dom - '@heroui/use-aria-button@2.2.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@heroui/use-aria-button@2.2.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@heroui/shared-utils': 2.1.3 + '@heroui/shared-utils': 2.1.2 + '@react-aria/focus': 3.19.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/interactions': 3.22.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/utils': 3.26.0(react@19.0.0) + '@react-types/button': 3.10.1(react@19.0.0) + '@react-types/shared': 3.26.0(react@19.0.0) + react: 19.0.0 + transitivePeerDependencies: + - react-dom + + '@heroui/use-aria-button@2.2.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@heroui/shared-utils': 2.1.3 '@react-aria/focus': 3.19.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@react-aria/interactions': 3.22.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@react-aria/utils': 3.26.0(react@19.0.0) @@ -6373,6 +6109,11 @@ snapshots: '@heroui/use-safe-layout-effect': 2.1.1(react@19.0.0) react: 19.0.0 + '@heroui/use-callback-ref@2.1.2(react@19.0.0)': + dependencies: + '@heroui/use-safe-layout-effect': 2.1.2(react@19.0.0) + react: 19.0.0 + '@heroui/use-clipboard@2.1.2(react@19.0.0)': dependencies: react: 19.0.0 @@ -6586,75 +6327,6 @@ snapshots: '@pkgr/core@0.1.1': {} - '@rc-component/async-validator@5.0.4': - dependencies: - '@babel/runtime': 7.26.0 - - '@rc-component/color-picker@2.0.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': - dependencies: - '@ant-design/fast-color': 2.0.6 - '@babel/runtime': 7.26.0 - classnames: 2.5.1 - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - - '@rc-component/context@1.4.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': - dependencies: - '@babel/runtime': 7.26.0 - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - - '@rc-component/mini-decimal@1.1.0': - dependencies: - '@babel/runtime': 7.26.0 - - '@rc-component/mutate-observer@1.1.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': - dependencies: - '@babel/runtime': 7.26.0 - classnames: 2.5.1 - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - - '@rc-component/portal@1.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': - dependencies: - '@babel/runtime': 7.26.0 - classnames: 2.5.1 - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - - '@rc-component/qrcode@1.0.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': - dependencies: - '@babel/runtime': 7.26.0 - classnames: 2.5.1 - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - - '@rc-component/tour@1.15.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': - dependencies: - '@babel/runtime': 7.26.0 - '@rc-component/portal': 1.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@rc-component/trigger': 2.2.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - classnames: 2.5.1 - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - - '@rc-component/trigger@2.2.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': - dependencies: - '@babel/runtime': 7.26.0 - '@rc-component/portal': 1.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - classnames: 2.5.1 - rc-motion: 2.9.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-resize-observer: 1.4.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - '@react-aria/button@3.11.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@react-aria/focus': 3.19.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -6669,6 +6341,23 @@ snapshots: transitivePeerDependencies: - react-dom + '@react-aria/checkbox@3.15.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@react-aria/form': 3.0.12(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/interactions': 3.23.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/label': 3.7.14(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/toggle': 3.10.11(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-stately/checkbox': 3.6.10(react@19.0.0) + '@react-stately/form': 3.1.1(react@19.0.0) + '@react-stately/toggle': 3.8.1(react@19.0.0) + '@react-types/checkbox': 3.9.1(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) + '@swc/helpers': 0.5.15 + react: 19.0.0 + transitivePeerDependencies: + - react-dom + '@react-aria/dialog@3.5.20(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@react-aria/focus': 3.19.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -6862,6 +6551,22 @@ snapshots: react: 19.0.0 react-dom: 19.0.0(react@19.0.0) + '@react-aria/radio@3.10.10(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@react-aria/focus': 3.19.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/form': 3.0.12(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/i18n': 3.12.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/interactions': 3.23.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/label': 3.7.14(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/utils': 3.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-stately/radio': 3.10.9(react@19.0.0) + '@react-types/radio': 3.8.5(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) + '@swc/helpers': 0.5.15 + react: 19.0.0 + transitivePeerDependencies: + - react-dom + '@react-aria/selection@3.21.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@react-aria/focus': 3.19.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -7004,6 +6709,15 @@ snapshots: react: 19.0.0 react-dom: 19.0.0(react@19.0.0) + '@react-stately/checkbox@3.6.10(react@19.0.0)': + dependencies: + '@react-stately/form': 3.1.1(react@19.0.0) + '@react-stately/utils': 3.10.5(react@19.0.0) + '@react-types/checkbox': 3.9.1(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) + '@swc/helpers': 0.5.15 + react: 19.0.0 + '@react-stately/collections@3.12.0(react@19.0.0)': dependencies: '@react-types/shared': 3.27.0(react@19.0.0) @@ -7068,6 +6782,15 @@ snapshots: '@swc/helpers': 0.5.15 react: 19.0.0 + '@react-stately/radio@3.10.9(react@19.0.0)': + dependencies: + '@react-stately/form': 3.1.1(react@19.0.0) + '@react-stately/utils': 3.10.5(react@19.0.0) + '@react-types/radio': 3.8.5(react@19.0.0) + '@react-types/shared': 3.27.0(react@19.0.0) + '@swc/helpers': 0.5.15 + react: 19.0.0 + '@react-stately/selection@3.19.0(react@19.0.0)': dependencies: '@react-stately/collections': 3.12.1(react@19.0.0) @@ -7130,6 +6853,11 @@ snapshots: '@swc/helpers': 0.5.15 react: 19.0.0 + '@react-types/accordion@3.0.0-alpha.25(react@19.0.0)': + dependencies: + '@react-types/shared': 3.27.0(react@19.0.0) + react: 19.0.0 + '@react-types/button@3.10.1(react@19.0.0)': dependencies: '@react-types/shared': 3.27.0(react@19.0.0) @@ -7201,6 +6929,11 @@ snapshots: '@react-types/shared': 3.27.0(react@19.0.0) react: 19.0.0 + '@react-types/radio@3.8.5(react@19.0.0)': + dependencies: + '@react-types/shared': 3.27.0(react@19.0.0) + react: 19.0.0 + '@react-types/select@3.9.8(react@19.0.0)': dependencies: '@react-types/shared': 3.27.0(react@19.0.0) @@ -7910,64 +7643,6 @@ snapshots: ansi-styles@6.2.1: {} - antd@5.23.1(luxon@3.5.0)(moment@2.30.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@ant-design/colors': 7.2.0 - '@ant-design/cssinjs': 1.22.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@ant-design/cssinjs-utils': 1.1.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@ant-design/fast-color': 2.0.6 - '@ant-design/icons': 5.5.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@ant-design/react-slick': 1.1.2(react@19.0.0) - '@babel/runtime': 7.26.0 - '@rc-component/color-picker': 2.0.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@rc-component/mutate-observer': 1.1.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@rc-component/qrcode': 1.0.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@rc-component/tour': 1.15.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@rc-component/trigger': 2.2.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - classnames: 2.5.1 - copy-to-clipboard: 3.3.3 - dayjs: 1.11.13 - rc-cascader: 3.33.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-checkbox: 3.5.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-collapse: 3.9.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-dialog: 9.6.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-drawer: 7.2.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-dropdown: 4.2.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-field-form: 2.7.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-image: 7.11.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-input: 1.7.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-input-number: 9.4.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-mentions: 2.19.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-menu: 9.16.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-motion: 2.9.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-notification: 5.6.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-pagination: 5.0.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-picker: 4.9.2(dayjs@1.11.13)(luxon@3.5.0)(moment@2.30.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-progress: 4.0.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-rate: 2.13.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-resize-observer: 1.4.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-segmented: 2.7.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-select: 14.16.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-slider: 11.1.8(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-steps: 6.0.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-switch: 4.1.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-table: 7.50.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-tabs: 15.5.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-textarea: 1.9.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-tooltip: 6.3.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-tree: 5.13.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-tree-select: 5.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-upload: 4.8.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - scroll-into-view-if-needed: 3.1.0 - throttle-debounce: 5.0.2 - transitivePeerDependencies: - - date-fns - - luxon - - moment - any-promise@1.3.0: {} anymatch@3.1.3: @@ -8244,8 +7919,6 @@ snapshots: napi-macros: 2.2.2 node-gyp-build: 4.8.4 - classnames@2.5.1: {} - clean-css@4.2.4: dependencies: source-map: 0.6.1 @@ -8306,10 +7979,6 @@ snapshots: cookie@1.0.2: {} - copy-to-clipboard@3.3.3: - dependencies: - toggle-selection: 1.0.6 - cron-parser@4.9.0: dependencies: luxon: 3.5.0 @@ -9744,10 +9413,6 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} - json2mq@0.2.0: - dependencies: - string-convert: 0.2.1 - json5@1.0.2: dependencies: minimist: 1.2.8 @@ -10298,326 +9963,6 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 - rc-cascader@3.33.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@babel/runtime': 7.26.0 - classnames: 2.5.1 - rc-select: 14.16.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-tree: 5.13.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - - rc-checkbox@3.5.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@babel/runtime': 7.26.0 - classnames: 2.5.1 - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - - rc-collapse@3.9.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@babel/runtime': 7.26.0 - classnames: 2.5.1 - rc-motion: 2.9.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - - rc-dialog@9.6.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@babel/runtime': 7.26.0 - '@rc-component/portal': 1.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - classnames: 2.5.1 - rc-motion: 2.9.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - - rc-drawer@7.2.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@babel/runtime': 7.26.0 - '@rc-component/portal': 1.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - classnames: 2.5.1 - rc-motion: 2.9.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - - rc-dropdown@4.2.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@babel/runtime': 7.26.0 - '@rc-component/trigger': 2.2.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - classnames: 2.5.1 - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - - rc-field-form@2.7.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@babel/runtime': 7.26.0 - '@rc-component/async-validator': 5.0.4 - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - - rc-image@7.11.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@babel/runtime': 7.26.0 - '@rc-component/portal': 1.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - classnames: 2.5.1 - rc-dialog: 9.6.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-motion: 2.9.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - - rc-input-number@9.4.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@babel/runtime': 7.26.0 - '@rc-component/mini-decimal': 1.1.0 - classnames: 2.5.1 - rc-input: 1.7.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - - rc-input@1.7.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@babel/runtime': 7.26.0 - classnames: 2.5.1 - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - - rc-mentions@2.19.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@babel/runtime': 7.26.0 - '@rc-component/trigger': 2.2.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - classnames: 2.5.1 - rc-input: 1.7.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-menu: 9.16.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-textarea: 1.9.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - - rc-menu@9.16.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@babel/runtime': 7.26.0 - '@rc-component/trigger': 2.2.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - classnames: 2.5.1 - rc-motion: 2.9.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-overflow: 1.4.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - - rc-motion@2.9.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@babel/runtime': 7.26.0 - classnames: 2.5.1 - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - - rc-notification@5.6.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@babel/runtime': 7.26.0 - classnames: 2.5.1 - rc-motion: 2.9.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - - rc-overflow@1.4.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@babel/runtime': 7.26.0 - classnames: 2.5.1 - rc-resize-observer: 1.4.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - - rc-pagination@5.0.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@babel/runtime': 7.26.0 - classnames: 2.5.1 - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - - rc-picker@4.9.2(dayjs@1.11.13)(luxon@3.5.0)(moment@2.30.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@babel/runtime': 7.26.0 - '@rc-component/trigger': 2.2.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - classnames: 2.5.1 - rc-overflow: 1.4.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-resize-observer: 1.4.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - optionalDependencies: - dayjs: 1.11.13 - luxon: 3.5.0 - moment: 2.30.1 - - rc-progress@4.0.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@babel/runtime': 7.26.0 - classnames: 2.5.1 - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - - rc-rate@2.13.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@babel/runtime': 7.26.0 - classnames: 2.5.1 - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - - rc-resize-observer@1.4.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@babel/runtime': 7.26.0 - classnames: 2.5.1 - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - resize-observer-polyfill: 1.5.1 - - rc-segmented@2.7.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@babel/runtime': 7.26.0 - classnames: 2.5.1 - rc-motion: 2.9.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - - rc-select@14.16.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@babel/runtime': 7.26.0 - '@rc-component/trigger': 2.2.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - classnames: 2.5.1 - rc-motion: 2.9.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-overflow: 1.4.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-virtual-list: 3.17.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - - rc-slider@11.1.8(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@babel/runtime': 7.26.0 - classnames: 2.5.1 - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - - rc-steps@6.0.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@babel/runtime': 7.26.0 - classnames: 2.5.1 - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - - rc-switch@4.1.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@babel/runtime': 7.26.0 - classnames: 2.5.1 - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - - rc-table@7.50.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@babel/runtime': 7.26.0 - '@rc-component/context': 1.4.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - classnames: 2.5.1 - rc-resize-observer: 1.4.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-virtual-list: 3.17.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - - rc-tabs@15.5.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@babel/runtime': 7.26.0 - classnames: 2.5.1 - rc-dropdown: 4.2.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-menu: 9.16.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-motion: 2.9.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-resize-observer: 1.4.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - - rc-textarea@1.9.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@babel/runtime': 7.26.0 - classnames: 2.5.1 - rc-input: 1.7.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-resize-observer: 1.4.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - - rc-tooltip@6.3.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@babel/runtime': 7.26.0 - '@rc-component/trigger': 2.2.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - classnames: 2.5.1 - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - - rc-tree-select@5.27.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@babel/runtime': 7.26.0 - classnames: 2.5.1 - rc-select: 14.16.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-tree: 5.13.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - - rc-tree@5.13.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@babel/runtime': 7.26.0 - classnames: 2.5.1 - rc-motion: 2.9.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-virtual-list: 3.17.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - - rc-upload@4.8.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@babel/runtime': 7.26.0 - classnames: 2.5.1 - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - - rc-util@5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@babel/runtime': 7.26.0 - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - react-is: 18.3.1 - - rc-virtual-list@3.17.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@babel/runtime': 7.26.0 - classnames: 2.5.1 - rc-resize-observer: 1.4.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - rc-util: 5.44.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - react-dom@19.0.0(react@19.0.0): dependencies: react: 19.0.0 @@ -10642,8 +9987,6 @@ snapshots: react-is@16.13.1: {} - react-is@18.3.1: {} - react-redux@9.2.0(@types/react@19.0.7)(react@19.0.0)(redux@5.0.1): dependencies: '@types/use-sync-external-store': 0.0.6 @@ -10859,10 +10202,6 @@ snapshots: dependencies: compute-scroll-into-view: 3.1.1 - scroll-into-view-if-needed@3.1.0: - dependencies: - compute-scroll-into-view: 3.1.1 - semver@6.3.1: {} semver@7.6.3: {} @@ -11018,8 +10357,6 @@ snapshots: transitivePeerDependencies: - supports-color - string-convert@0.2.1: {} - string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -11122,8 +10459,6 @@ snapshots: strip-json-comments@3.1.1: {} - stylis@4.3.5: {} - sucrase@3.35.0: dependencies: '@jridgewell/gen-mapping': 0.3.8 @@ -11202,8 +10537,6 @@ snapshots: dependencies: any-promise: 1.3.0 - throttle-debounce@5.0.2: {} - tinyexec@0.3.2: {} tinyglobby@0.2.10: @@ -11215,8 +10548,6 @@ snapshots: dependencies: is-number: 7.0.0 - toggle-selection@1.0.6: {} - toidentifier@1.0.1: {} tr46@1.0.1: