diff --git a/client/admin/pages_settings.tsx b/client/admin/pages_settings.tsx
index 882a338..1beba6a 100644
--- a/client/admin/pages_settings.tsx
+++ b/client/admin/pages_settings.tsx
@@ -481,22 +481,26 @@ export const ThemeSettingsPage = () => {
{/* 配色方案选择 */}
- {Object.entries(COLOR_SCHEMES[form.getFieldValue('theme_mode') as ThemeMode]).map(([key, scheme]) => (
-
- ))}
+ {(() => {
+ const themeMode = (form.getFieldValue('theme_mode') as ThemeMode) || ThemeMode.LIGHT;
+ const schemes = COLOR_SCHEMES[themeMode] || {};
+ return Object.entries(schemes).map(([key, scheme]) => (
+
+ ));
+ })()}
diff --git a/client/admin/test/theme_setting_page.test.tsx b/client/admin/test/theme_setting_page.test.tsx
index 6fbf17c..176d8d8 100644
--- a/client/admin/test/theme_setting_page.test.tsx
+++ b/client/admin/test/theme_setting_page.test.tsx
@@ -1,61 +1,116 @@
import { JSDOM } from 'npm:jsdom'
import React from 'react'
+import 'npm:jsdom-global'
import {render, fireEvent, within, screen} from '@testing-library/react'
import { ThemeSettingsPage } from "../pages_settings.tsx"
import { ThemeProvider } from "../hooks_sys.tsx"
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
+import {
+ assertEquals,
+ assertExists,
+ assertNotEquals,
+ assertRejects,
+} from "https://deno.land/std@0.217.0/assert/mod.ts";
const queryClient = new QueryClient()
-const dom = new JSDOM(``, { runScripts: "dangerously" , pretendToBeVisual: true });
+const dom = new JSDOM(``, {
+ runScripts: "dangerously",
+ pretendToBeVisual: true,
+ url: "http://localhost"
+});
-// The script will be executed and modify the DOM:
-// console.log(dom.window.document.getElementById("root").innerHTML); // 1
+// 模拟浏览器环境
globalThis.window = dom.window;
globalThis.document = dom.window.document;
-const customScreen = within(document.body)
-// console.log(dom.window.document.getElementById("root").innerHTML); // 1
-// const div = globalThis.document.createElement("div");
-// div.innerHTML = "主题设置";
-// globalThis.document.getElementById("root")?.appendChild(div);
+// 定义浏览器环境所需的类
+globalThis.Element = dom.window.Element;
+globalThis.HTMLElement = dom.window.HTMLElement;
+globalThis.ShadowRoot = dom.window.ShadowRoot;
+globalThis.SVGElement = dom.window.SVGElement;
-// render();
+// 模拟 getComputedStyle
+globalThis.getComputedStyle = (elt) => {
+ const style = new dom.window.CSSStyleDeclaration();
+ style.getPropertyValue = () => '';
+ return style;
+};
-// const testMessage = 'Test Message'
-// render({testMessage})
-// console.log('document.body.innerHTML', document.body.innerHTML);
-// const customScreen = within(document.body)
+// 模拟matchMedia函数
+globalThis.matchMedia = (query) => ({
+ matches: query.includes('max-width'),
+ media: query,
+ onchange: null,
+ addListener: () => {},
+ removeListener: () => {},
+ addEventListener: () => {},
+ removeEventListener: () => {},
+ dispatchEvent: () => false,
+});
-// screen.debug()
+// 模拟动画相关API
+globalThis.AnimationEvent = globalThis.AnimationEvent || dom.window.Event;
+globalThis.TransitionEvent = globalThis.TransitionEvent || dom.window.Event;
-// // // query* functions will return the element or null if it cannot be found
-// // // get* functions will return the element or throw an error if it cannot be found
-// console.log('queryByText', customScreen.queryByText(testMessage))
+// 模拟requestAnimationFrame
+globalThis.requestAnimationFrame = globalThis.requestAnimationFrame || ((cb) => setTimeout(cb, 0));
+globalThis.cancelAnimationFrame = globalThis.cancelAnimationFrame || clearTimeout;
-// // // the queries can accept a regex to make your selectors more resilient to content tweaks and changes.
-// fireEvent.click(customScreen.getByLabelText(/show/i))
+// 设置浏览器尺寸相关方法
+window.resizeTo = (width, height) => {
+ window.innerWidth = width || window.innerWidth;
+ window.innerHeight = height || window.innerHeight;
+ window.dispatchEvent(new Event('resize'));
+};
+window.scrollTo = () => {};
-// screen.debug()
+const customScreen = within(document.body);
-// // // .toBeInTheDocument() is an assertion that comes from jest-dom
-// // // otherwise you could use .toBeDefined()
-// console.log('getByText', customScreen.getByText(testMessage).innerHTML.includes(testMessage))
+// 使用异步测试处理真实API调用
+Deno.test('主题设置页面测试', async (t) => {
+ // 渲染组件
+ const {findByRole, debug} = render(
+
+
+
+
+
+ )
-// // console.log(globalThis.document.body.innerHTML);
-// // console.log(screen.debug());
-// // screen.findByText("主题设置");
+ debug(await findByRole('radio', { name: /浅色模式/i }))
-render((
-
-
-
-
-
-))
+ // 测试1: 渲染基本元素
+ await t.step('应渲染主题设置标题', async () => {
+ const title = await customScreen.findByText(/主题设置/i)
+ assertExists(title, '未找到主题设置标题')
+ })
-screen.debug()
+ // 测试2: 表单初始化状态
+ await t.step('表单应正确初始化', async () => {
+ // 检查主题模式选择
+ const lightRadio = await customScreen.findByRole('radio', { name: /浅色模式/i })
+ assertExists(lightRadio, '未找到浅色模式单选按钮')
+
+ // 检查主题模式标签
+ const themeModeLabel = await customScreen.findByText(/主题模式/i)
+ assertExists(themeModeLabel, '未找到主题模式标签')
+
+ // // 检查主题模式选择器 - Ant Design 使用 div 包裹 radio 而不是 radiogroup
+ // const themeModeField = await customScreen.findByTestId('theme-mode-selector')
+ // assertExists(themeModeField, '未找到主题模式选择器')
+ })
-// screen.findByText("主题设置")
+ // 测试3: 配色方案选择
+ await t.step('应显示配色方案选项', async () => {
+ // 查找预设配色方案标签
+ const colorSchemeLabel = await customScreen.findByText('预设配色方案')
+ assertExists(colorSchemeLabel, '未找到预设配色方案标签')
+
+ // 查找配色方案按钮
+ const colorSchemeButtons = await customScreen.findAllByRole('button')
+ assertNotEquals(colorSchemeButtons.length, 0, '未找到配色方案按钮')
+ })
+})
diff --git a/deno.lock b/deno.lock
index f1ad35a..5e6e13a 100644
--- a/deno.lock
+++ b/deno.lock
@@ -7,9 +7,11 @@
"npm:@testing-library/react@16.3.0": "16.3.0_@testing-library+dom@10.4.0_react@19.1.0_react-dom@19.1.0__react@19.1.0",
"npm:@testing-library/user-event@*": "14.6.1_@testing-library+dom@10.4.0",
"npm:@types/node@*": "22.12.0",
+ "npm:antd@*": "5.24.6_react@19.1.0_react-dom@19.1.0__react@19.1.0_dayjs@1.11.13",
"npm:global-jsdom@*": "26.0.0_jsdom@26.0.0",
"npm:j@*": "1.0.0",
"npm:js@*": "0.1.0",
+ "npm:jsdom-global@*": "3.0.2_jsdom@26.0.0",
"npm:jsdom@*": "26.0.0",
"npm:react@*": "19.1.0"
},
@@ -22,6 +24,68 @@
"@adobe/css-tools@4.4.2": {
"integrity": "sha512-baYZExFpsdkBNuvGKTKWCwKH57HRZLVtycZS05WTQNVOiXVSeAki3nU35zlRbToeMW8aHlJfyS+1C4BOv27q0A=="
},
+ "@ant-design/colors@7.2.0": {
+ "integrity": "sha512-bjTObSnZ9C/O8MB/B4OUtd/q9COomuJAR2SYfhxLyHvCKn4EKwCN3e+fWGMo7H5InAyV0wL17jdE9ALrdOW/6A==",
+ "dependencies": [
+ "@ant-design/fast-color"
+ ]
+ },
+ "@ant-design/cssinjs-utils@1.1.3_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-nOoQMLW1l+xR1Co8NFVYiP8pZp3VjIIzqV6D6ShYF2ljtdwWJn5WSsH+7kvCktXL/yhEtWURKOfH5Xz/gzlwsg==",
+ "dependencies": [
+ "@ant-design/cssinjs",
+ "@babel/runtime",
+ "rc-util",
+ "react",
+ "react-dom"
+ ]
+ },
+ "@ant-design/cssinjs@1.23.0_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-7GAg9bD/iC9ikWatU9ym+P9ugJhi/WbsTWzcKN6T4gU0aehsprtke1UAaaSxxkjjmkJb3llet/rbUSLPgwlY4w==",
+ "dependencies": [
+ "@babel/runtime",
+ "@emotion/hash",
+ "@emotion/unitless",
+ "classnames",
+ "csstype",
+ "rc-util",
+ "react",
+ "react-dom",
+ "stylis"
+ ]
+ },
+ "@ant-design/fast-color@2.0.6": {
+ "integrity": "sha512-y2217gk4NqL35giHl72o6Zzqji9O7vHh9YmhUVkPtAOpoTCH4uWxo/pr4VE8t0+ChEPs0qo4eJRC5Q1eXWo3vA==",
+ "dependencies": [
+ "@babel/runtime"
+ ]
+ },
+ "@ant-design/icons-svg@4.4.2": {
+ "integrity": "sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA=="
+ },
+ "@ant-design/icons@5.6.1_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-0/xS39c91WjPAZOWsvi1//zjx6kAp4kxWwctR6kuU6p133w8RU0D2dSCvZC19uQyharg/sAvYxGYWl01BbZZfg==",
+ "dependencies": [
+ "@ant-design/colors",
+ "@ant-design/icons-svg",
+ "@babel/runtime",
+ "classnames",
+ "rc-util",
+ "react",
+ "react-dom"
+ ]
+ },
+ "@ant-design/react-slick@1.1.2_react@19.1.0": {
+ "integrity": "sha512-EzlvzE6xQUBrZuuhSAFTdsr4P2bBBHGZwKFemEfq8gIGyIQCxalYfZW/T2ORbtQx5rU69o+WycP3exY/7T1hGA==",
+ "dependencies": [
+ "@babel/runtime",
+ "classnames",
+ "json2mq",
+ "react",
+ "resize-observer-polyfill",
+ "throttle-debounce"
+ ]
+ },
"@asamuzakjp/css-color@3.1.1_@csstools+css-parser-algorithms@3.0.4__@csstools+css-tokenizer@3.0.3_@csstools+css-tokenizer@3.0.3": {
"integrity": "sha512-hpRD68SV2OMcZCsrbdkccTw5FXjNDLo5OuqSHyHZfwweGsDWZwDJ2+gONyNAbazZclobMirACLw0lk8WVxIqxA==",
"dependencies": [
@@ -77,6 +141,99 @@
"@csstools/css-tokenizer@3.0.3": {
"integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw=="
},
+ "@emotion/hash@0.8.0": {
+ "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow=="
+ },
+ "@emotion/unitless@0.7.5": {
+ "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg=="
+ },
+ "@rc-component/async-validator@5.0.4": {
+ "integrity": "sha512-qgGdcVIF604M9EqjNF0hbUTz42bz/RDtxWdWuU5EQe3hi7M8ob54B6B35rOsvX5eSvIHIzT9iH1R3n+hk3CGfg==",
+ "dependencies": [
+ "@babel/runtime"
+ ]
+ },
+ "@rc-component/color-picker@2.0.1_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-WcZYwAThV/b2GISQ8F+7650r5ZZJ043E57aVBFkQ+kSY4C6wdofXgB0hBx+GPGpIU0Z81eETNoDUJMr7oy/P8Q==",
+ "dependencies": [
+ "@ant-design/fast-color",
+ "@babel/runtime",
+ "classnames",
+ "rc-util",
+ "react",
+ "react-dom"
+ ]
+ },
+ "@rc-component/context@1.4.0_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-kFcNxg9oLRMoL3qki0OMxK+7g5mypjgaaJp/pkOis/6rVxma9nJBF/8kCIuTYHUQNr0ii7MxqE33wirPZLJQ2w==",
+ "dependencies": [
+ "@babel/runtime",
+ "rc-util",
+ "react",
+ "react-dom"
+ ]
+ },
+ "@rc-component/mini-decimal@1.1.0": {
+ "integrity": "sha512-jS4E7T9Li2GuYwI6PyiVXmxTiM6b07rlD9Ge8uGZSCz3WlzcG5ZK7g5bbuKNeZ9pgUuPK/5guV781ujdVpm4HQ==",
+ "dependencies": [
+ "@babel/runtime"
+ ]
+ },
+ "@rc-component/mutate-observer@1.1.0_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-QjrOsDXQusNwGZPf4/qRQasg7UFEj06XiCJ8iuiq/Io7CrHrgVi6Uuetw60WAMG1799v+aM8kyc+1L/GBbHSlw==",
+ "dependencies": [
+ "@babel/runtime",
+ "classnames",
+ "rc-util",
+ "react",
+ "react-dom"
+ ]
+ },
+ "@rc-component/portal@1.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-6f813C0IsasTZms08kfA8kPAGxbbkYToa8ALaiDIGGECU4i9hj8Plgbx0sNJDrey3EtHO30hmdaxtT0138xZcg==",
+ "dependencies": [
+ "@babel/runtime",
+ "classnames",
+ "rc-util",
+ "react",
+ "react-dom"
+ ]
+ },
+ "@rc-component/qrcode@1.0.0_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-L+rZ4HXP2sJ1gHMGHjsg9jlYBX/SLN2D6OxP9Zn3qgtpMWtO2vUfxVFwiogHpAIqs54FnALxraUy/BCO1yRIgg==",
+ "dependencies": [
+ "@babel/runtime",
+ "classnames",
+ "rc-util",
+ "react",
+ "react-dom"
+ ]
+ },
+ "@rc-component/tour@1.15.1_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-Tr2t7J1DKZUpfJuDZWHxyxWpfmj8EZrqSgyMZ+BCdvKZ6r1UDsfU46M/iWAAFBy961Ssfom2kv5f3UcjIL2CmQ==",
+ "dependencies": [
+ "@babel/runtime",
+ "@rc-component/portal",
+ "@rc-component/trigger",
+ "classnames",
+ "rc-util",
+ "react",
+ "react-dom"
+ ]
+ },
+ "@rc-component/trigger@2.2.6_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-/9zuTnWwhQ3S3WT1T8BubuFTT46kvnXgaERR9f4BTKyn61/wpf/BvbImzYBubzJibU707FxwbKszLlHjcLiv1Q==",
+ "dependencies": [
+ "@babel/runtime",
+ "@rc-component/portal",
+ "classnames",
+ "rc-motion",
+ "rc-resize-observer",
+ "rc-util",
+ "react",
+ "react-dom"
+ ]
+ },
"@testing-library/dom@10.4.0": {
"integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==",
"dependencies": [
@@ -144,6 +301,62 @@
"ansi-styles@5.2.0": {
"integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="
},
+ "antd@5.24.6_react@19.1.0_react-dom@19.1.0__react@19.1.0_dayjs@1.11.13": {
+ "integrity": "sha512-xIlTa/1CTbgkZsdU/dOXkYvJXb9VoiMwsaCzpKFH2zAEY3xqOfwQ57/DdG7lAdrWP7QORtSld4UA6suxzuTHXw==",
+ "dependencies": [
+ "@ant-design/colors",
+ "@ant-design/cssinjs",
+ "@ant-design/cssinjs-utils",
+ "@ant-design/fast-color",
+ "@ant-design/icons",
+ "@ant-design/react-slick",
+ "@babel/runtime",
+ "@rc-component/color-picker",
+ "@rc-component/mutate-observer",
+ "@rc-component/qrcode",
+ "@rc-component/tour",
+ "@rc-component/trigger",
+ "classnames",
+ "copy-to-clipboard",
+ "dayjs",
+ "rc-cascader",
+ "rc-checkbox",
+ "rc-collapse",
+ "rc-dialog",
+ "rc-drawer",
+ "rc-dropdown",
+ "rc-field-form",
+ "rc-image",
+ "rc-input",
+ "rc-input-number",
+ "rc-mentions",
+ "rc-menu",
+ "rc-motion",
+ "rc-notification",
+ "rc-pagination",
+ "rc-picker",
+ "rc-progress",
+ "rc-rate",
+ "rc-resize-observer",
+ "rc-segmented",
+ "rc-select",
+ "rc-slider",
+ "rc-steps",
+ "rc-switch",
+ "rc-table",
+ "rc-tabs",
+ "rc-textarea",
+ "rc-tooltip",
+ "rc-tree",
+ "rc-tree-select",
+ "rc-upload",
+ "rc-util",
+ "react",
+ "react-dom",
+ "scroll-into-view-if-needed",
+ "throttle-debounce"
+ ]
+ },
"aria-query@5.3.0": {
"integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
"dependencies": [
@@ -184,6 +397,9 @@
"supports-color"
]
},
+ "classnames@2.5.1": {
+ "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow=="
+ },
"codepage@1.15.0": {
"integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA=="
},
@@ -211,6 +427,9 @@
"commander@13.1.0": {
"integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw=="
},
+ "compute-scroll-into-view@3.1.1": {
+ "integrity": "sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw=="
+ },
"concat-stream@2.0.0": {
"integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==",
"dependencies": [
@@ -220,6 +439,12 @@
"typedarray"
]
},
+ "copy-to-clipboard@3.3.3": {
+ "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==",
+ "dependencies": [
+ "toggle-selection"
+ ]
+ },
"crc-32@1.2.2": {
"integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ=="
},
@@ -233,6 +458,9 @@
"rrweb-cssom"
]
},
+ "csstype@3.1.3": {
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
+ },
"data-urls@5.0.0": {
"integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==",
"dependencies": [
@@ -240,6 +468,9 @@
"whatwg-url"
]
},
+ "dayjs@1.11.13": {
+ "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg=="
+ },
"debug@4.4.0": {
"integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
"dependencies": [
@@ -413,6 +644,12 @@
"commander@1.1.1"
]
},
+ "jsdom-global@3.0.2_jsdom@26.0.0": {
+ "integrity": "sha512-t1KMcBkz/pT5JrvcJbpUR2u/w1kO9jXctaaGJ0vZDzwFnIvGWw9IDSRciT83kIs8Bnw4qpOl8bQK08V01YgMPg==",
+ "dependencies": [
+ "jsdom"
+ ]
+ },
"jsdom@26.0.0": {
"integrity": "sha512-BZYDGVAIriBWTpIxYzrXjv3E/4u8+/pSG5bQdIYCbNCGOvsPkDQfTVLAIXAf9ETdCpduCVTkDe2NNZ8NIwUVzw==",
"dependencies": [
@@ -439,6 +676,12 @@
"xml-name-validator"
]
},
+ "json2mq@0.2.0": {
+ "integrity": "sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==",
+ "dependencies": [
+ "string-convert"
+ ]
+ },
"keypress@0.1.0": {
"integrity": "sha512-x0yf9PL/nx9Nw9oLL8ZVErFAk85/lslwEP7Vz7s5SI1ODXZIgit3C5qyWjw4DxOuO/3Hb4866SQh28a1V1d+WA=="
},
@@ -486,12 +729,398 @@
"dependencies": [
"ansi-regex",
"ansi-styles@5.2.0",
- "react-is"
+ "react-is@17.0.2"
]
},
"punycode@2.3.1": {
"integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="
},
+ "rc-cascader@3.33.1_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-Kyl4EJ7ZfCBuidmZVieegcbFw0RcU5bHHSbtEdmuLYd0fYHCAiYKZ6zon7fWAVyC6rWWOOib0XKdTSf7ElC9rg==",
+ "dependencies": [
+ "@babel/runtime",
+ "classnames",
+ "rc-select",
+ "rc-tree",
+ "rc-util",
+ "react",
+ "react-dom"
+ ]
+ },
+ "rc-checkbox@3.5.0_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-aOAQc3E98HteIIsSqm6Xk2FPKIER6+5vyEFMZfo73TqM+VVAIqOkHoPjgKLqSNtVLWScoaM7vY2ZrGEheI79yg==",
+ "dependencies": [
+ "@babel/runtime",
+ "classnames",
+ "rc-util",
+ "react",
+ "react-dom"
+ ]
+ },
+ "rc-collapse@3.9.0_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-swDdz4QZ4dFTo4RAUMLL50qP0EY62N2kvmk2We5xYdRwcRn8WcYtuetCJpwpaCbUfUt5+huLpVxhvmnK+PHrkA==",
+ "dependencies": [
+ "@babel/runtime",
+ "classnames",
+ "rc-motion",
+ "rc-util",
+ "react",
+ "react-dom"
+ ]
+ },
+ "rc-dialog@9.6.0_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-ApoVi9Z8PaCQg6FsUzS8yvBEQy0ZL2PkuvAgrmohPkN3okps5WZ5WQWPc1RNuiOKaAYv8B97ACdsFU5LizzCqg==",
+ "dependencies": [
+ "@babel/runtime",
+ "@rc-component/portal",
+ "classnames",
+ "rc-motion",
+ "rc-util",
+ "react",
+ "react-dom"
+ ]
+ },
+ "rc-drawer@7.2.0_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-9lOQ7kBekEJRdEpScHvtmEtXnAsy+NGDXiRWc2ZVC7QXAazNVbeT4EraQKYwCME8BJLa8Bxqxvs5swwyOepRwg==",
+ "dependencies": [
+ "@babel/runtime",
+ "@rc-component/portal",
+ "classnames",
+ "rc-motion",
+ "rc-util",
+ "react",
+ "react-dom"
+ ]
+ },
+ "rc-dropdown@4.2.1_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-YDAlXsPv3I1n42dv1JpdM7wJ+gSUBfeyPK59ZpBD9jQhK9jVuxpjj3NmWQHOBceA1zEPVX84T2wbdb2SD0UjmA==",
+ "dependencies": [
+ "@babel/runtime",
+ "@rc-component/trigger",
+ "classnames",
+ "rc-util",
+ "react",
+ "react-dom"
+ ]
+ },
+ "rc-field-form@2.7.0_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-hgKsCay2taxzVnBPZl+1n4ZondsV78G++XVsMIJCAoioMjlMQR9YwAp7JZDIECzIu2Z66R+f4SFIRrO2DjDNAA==",
+ "dependencies": [
+ "@babel/runtime",
+ "@rc-component/async-validator",
+ "rc-util",
+ "react",
+ "react-dom"
+ ]
+ },
+ "rc-image@7.11.1_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-XuoWx4KUXg7hNy5mRTy1i8c8p3K8boWg6UajbHpDXS5AlRVucNfTi5YxTtPBTBzegxAZpvuLfh3emXFt6ybUdA==",
+ "dependencies": [
+ "@babel/runtime",
+ "@rc-component/portal",
+ "classnames",
+ "rc-dialog",
+ "rc-motion",
+ "rc-util",
+ "react",
+ "react-dom"
+ ]
+ },
+ "rc-input-number@9.4.0_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-Tiy4DcXcFXAf9wDhN8aUAyMeCLHJUHA/VA/t7Hj8ZEx5ETvxG7MArDOSE6psbiSCo+vJPm4E3fGN710ITVn6GA==",
+ "dependencies": [
+ "@babel/runtime",
+ "@rc-component/mini-decimal",
+ "classnames",
+ "rc-input",
+ "rc-util",
+ "react",
+ "react-dom"
+ ]
+ },
+ "rc-input@1.7.3_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-A5w4egJq8+4JzlQ55FfQjDnPvOaAbzwC3VLOAdOytyek3TboSOP9qxN+Gifup+shVXfvecBLBbWBpWxmk02SWQ==",
+ "dependencies": [
+ "@babel/runtime",
+ "classnames",
+ "rc-util",
+ "react",
+ "react-dom"
+ ]
+ },
+ "rc-mentions@2.19.1_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-KK3bAc/bPFI993J3necmaMXD2reZTzytZdlTvkeBbp50IGH1BDPDvxLdHDUrpQx2b2TGaVJsn+86BvYa03kGqA==",
+ "dependencies": [
+ "@babel/runtime",
+ "@rc-component/trigger",
+ "classnames",
+ "rc-input",
+ "rc-menu",
+ "rc-textarea",
+ "rc-util",
+ "react",
+ "react-dom"
+ ]
+ },
+ "rc-menu@9.16.1_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-ghHx6/6Dvp+fw8CJhDUHFHDJ84hJE3BXNCzSgLdmNiFErWSOaZNsihDAsKq9ByTALo/xkNIwtDFGIl6r+RPXBg==",
+ "dependencies": [
+ "@babel/runtime",
+ "@rc-component/trigger",
+ "classnames",
+ "rc-motion",
+ "rc-overflow",
+ "rc-util",
+ "react",
+ "react-dom"
+ ]
+ },
+ "rc-motion@2.9.5_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-w+XTUrfh7ArbYEd2582uDrEhmBHwK1ZENJiSJVb7uRxdE7qJSYjbO2eksRXmndqyKqKoYPc9ClpPh5242mV1vA==",
+ "dependencies": [
+ "@babel/runtime",
+ "classnames",
+ "rc-util",
+ "react",
+ "react-dom"
+ ]
+ },
+ "rc-notification@5.6.3_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-42szwnn8VYQoT6GnjO00i1iwqV9D1TTMvxObWsuLwgl0TsOokzhkYiufdtQBsJMFjJravS1hfDKVMHLKLcPE4g==",
+ "dependencies": [
+ "@babel/runtime",
+ "classnames",
+ "rc-motion",
+ "rc-util",
+ "react",
+ "react-dom"
+ ]
+ },
+ "rc-overflow@1.4.1_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-3MoPQQPV1uKyOMVNd6SZfONi+f3st0r8PksexIdBTeIYbMX0Jr+k7pHEDvsXtR4BpCv90/Pv2MovVNhktKrwvw==",
+ "dependencies": [
+ "@babel/runtime",
+ "classnames",
+ "rc-resize-observer",
+ "rc-util",
+ "react",
+ "react-dom"
+ ]
+ },
+ "rc-pagination@5.1.0_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-8416Yip/+eclTFdHXLKTxZvn70duYVGTvUUWbckCCZoIl3jagqke3GLsFrMs0bsQBikiYpZLD9206Ej4SOdOXQ==",
+ "dependencies": [
+ "@babel/runtime",
+ "classnames",
+ "rc-util",
+ "react",
+ "react-dom"
+ ]
+ },
+ "rc-picker@4.11.3_dayjs@1.11.13_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-MJ5teb7FlNE0NFHTncxXQ62Y5lytq6sh5nUw0iH8OkHL/TjARSEvSHpr940pWgjGANpjCwyMdvsEV55l5tYNSg==",
+ "dependencies": [
+ "@babel/runtime",
+ "@rc-component/trigger",
+ "classnames",
+ "dayjs",
+ "rc-overflow",
+ "rc-resize-observer",
+ "rc-util",
+ "react",
+ "react-dom"
+ ]
+ },
+ "rc-progress@4.0.0_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-oofVMMafOCokIUIBnZLNcOZFsABaUw8PPrf1/y0ZBvKZNpOiu5h4AO9vv11Sw0p4Hb3D0yGWuEattcQGtNJ/aw==",
+ "dependencies": [
+ "@babel/runtime",
+ "classnames",
+ "rc-util",
+ "react",
+ "react-dom"
+ ]
+ },
+ "rc-rate@2.13.1_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-QUhQ9ivQ8Gy7mtMZPAjLbxBt5y9GRp65VcUyGUMF3N3fhiftivPHdpuDIaWIMOTEprAjZPC08bls1dQB+I1F2Q==",
+ "dependencies": [
+ "@babel/runtime",
+ "classnames",
+ "rc-util",
+ "react",
+ "react-dom"
+ ]
+ },
+ "rc-resize-observer@1.4.3_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-YZLjUbyIWox8E9i9C3Tm7ia+W7euPItNWSPX5sCcQTYbnwDb5uNpnLHQCG1f22oZWUhLw4Mv2tFmeWe68CDQRQ==",
+ "dependencies": [
+ "@babel/runtime",
+ "classnames",
+ "rc-util",
+ "react",
+ "react-dom",
+ "resize-observer-polyfill"
+ ]
+ },
+ "rc-segmented@2.7.0_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-liijAjXz+KnTRVnxxXG2sYDGd6iLL7VpGGdR8gwoxAXy2KglviKCxLWZdjKYJzYzGSUwKDSTdYk8brj54Bn5BA==",
+ "dependencies": [
+ "@babel/runtime",
+ "classnames",
+ "rc-motion",
+ "rc-util",
+ "react",
+ "react-dom"
+ ]
+ },
+ "rc-select@14.16.6_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-YPMtRPqfZWOm2XGTbx5/YVr1HT0vn//8QS77At0Gjb3Lv+Lbut0IORJPKLWu1hQ3u4GsA0SrDzs7nI8JG7Zmyg==",
+ "dependencies": [
+ "@babel/runtime",
+ "@rc-component/trigger",
+ "classnames",
+ "rc-motion",
+ "rc-overflow",
+ "rc-util",
+ "rc-virtual-list",
+ "react",
+ "react-dom"
+ ]
+ },
+ "rc-slider@11.1.8_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-2gg/72YFSpKP+Ja5AjC5DPL1YnV8DEITDQrcc1eASrUYjl0esptaBVJBh5nLTXCCp15eD8EuGjwezVGSHhs9tQ==",
+ "dependencies": [
+ "@babel/runtime",
+ "classnames",
+ "rc-util",
+ "react",
+ "react-dom"
+ ]
+ },
+ "rc-steps@6.0.1_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-lKHL+Sny0SeHkQKKDJlAjV5oZ8DwCdS2hFhAkIjuQt1/pB81M0cA0ErVFdHq9+jmPmFw1vJB2F5NBzFXLJxV+g==",
+ "dependencies": [
+ "@babel/runtime",
+ "classnames",
+ "rc-util",
+ "react",
+ "react-dom"
+ ]
+ },
+ "rc-switch@4.1.0_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-TI8ufP2Az9oEbvyCeVE4+90PDSljGyuwix3fV58p7HV2o4wBnVToEyomJRVyTaZeqNPAp+vqeo4Wnj5u0ZZQBg==",
+ "dependencies": [
+ "@babel/runtime",
+ "classnames",
+ "rc-util",
+ "react",
+ "react-dom"
+ ]
+ },
+ "rc-table@7.50.4_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-Y+YuncnQqoS5e7yHvfvlv8BmCvwDYDX/2VixTBEhkMDk9itS9aBINp4nhzXFKiBP/frG4w0pS9d9Rgisl0T1Bw==",
+ "dependencies": [
+ "@babel/runtime",
+ "@rc-component/context",
+ "classnames",
+ "rc-resize-observer",
+ "rc-util",
+ "rc-virtual-list",
+ "react",
+ "react-dom"
+ ]
+ },
+ "rc-tabs@15.5.2_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-Hbqf2IV6k/jPgfMjPtIDmPV0D0C9c/fN4B/fYcoh9qqaUzUZQoK0PYzsV3UaV+3UsmyoYt48p74m/HkLhGTw+w==",
+ "dependencies": [
+ "@babel/runtime",
+ "classnames",
+ "rc-dropdown",
+ "rc-menu",
+ "rc-motion",
+ "rc-resize-observer",
+ "rc-util",
+ "react",
+ "react-dom"
+ ]
+ },
+ "rc-textarea@1.9.0_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-dQW/Bc/MriPBTugj2Kx9PMS5eXCCGn2cxoIaichjbNvOiARlaHdI99j4DTxLl/V8+PIfW06uFy7kjfUIDDKyxQ==",
+ "dependencies": [
+ "@babel/runtime",
+ "classnames",
+ "rc-input",
+ "rc-resize-observer",
+ "rc-util",
+ "react",
+ "react-dom"
+ ]
+ },
+ "rc-tooltip@6.4.0_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-kqyivim5cp8I5RkHmpsp1Nn/Wk+1oeloMv9c7LXNgDxUpGm+RbXJGL+OPvDlcRnx9DBeOe4wyOIl4OKUERyH1g==",
+ "dependencies": [
+ "@babel/runtime",
+ "@rc-component/trigger",
+ "classnames",
+ "rc-util",
+ "react",
+ "react-dom"
+ ]
+ },
+ "rc-tree-select@5.27.0_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-2qTBTzwIT7LRI1o7zLyrCzmo5tQanmyGbSaGTIf7sYimCklAToVVfpMC6OAldSKolcnjorBYPNSKQqJmN3TCww==",
+ "dependencies": [
+ "@babel/runtime",
+ "classnames",
+ "rc-select",
+ "rc-tree",
+ "rc-util",
+ "react",
+ "react-dom"
+ ]
+ },
+ "rc-tree@5.13.1_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-FNhIefhftobCdUJshO7M8uZTA9F4OPGVXqGfZkkD/5soDeOhwO06T/aKTrg0WD8gRg/pyfq+ql3aMymLHCTC4A==",
+ "dependencies": [
+ "@babel/runtime",
+ "classnames",
+ "rc-motion",
+ "rc-util",
+ "rc-virtual-list",
+ "react",
+ "react-dom"
+ ]
+ },
+ "rc-upload@4.8.1_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-toEAhwl4hjLAI1u8/CgKWt30BR06ulPa4iGQSMvSXoHzO88gPCslxqV/mnn4gJU7PDoltGIC9Eh+wkeudqgHyw==",
+ "dependencies": [
+ "@babel/runtime",
+ "classnames",
+ "rc-util",
+ "react",
+ "react-dom"
+ ]
+ },
+ "rc-util@5.44.4_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-resueRJzmHG9Q6rI/DfK6Kdv9/Lfls05vzMs1Sk3M2P+3cJa+MakaZyWY8IPfehVuhPJFKrIY1IK4GqbiaiY5w==",
+ "dependencies": [
+ "@babel/runtime",
+ "react",
+ "react-dom",
+ "react-is@18.3.1"
+ ]
+ },
+ "rc-virtual-list@3.18.5_react@19.1.0_react-dom@19.1.0__react@19.1.0": {
+ "integrity": "sha512-1FuxVSxhzTj3y8k5xMPbhXCB0t2TOiI3Tq+qE2Bu+GGV7f+ECVuQl4OUg6lZ2qT5fordTW7CBpr9czdzXCI7Pg==",
+ "dependencies": [
+ "@babel/runtime",
+ "classnames",
+ "rc-resize-observer",
+ "rc-util",
+ "react",
+ "react-dom"
+ ]
+ },
"react-dom@19.1.0_react@19.1.0": {
"integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==",
"dependencies": [
@@ -502,6 +1131,9 @@
"react-is@17.0.2": {
"integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="
},
+ "react-is@18.3.1": {
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="
+ },
"react@19.1.0": {
"integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg=="
},
@@ -523,6 +1155,9 @@
"regenerator-runtime@0.14.1": {
"integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
},
+ "resize-observer-polyfill@1.5.1": {
+ "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg=="
+ },
"rrweb-cssom@0.8.0": {
"integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw=="
},
@@ -541,12 +1176,21 @@
"scheduler@0.26.0": {
"integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA=="
},
+ "scroll-into-view-if-needed@3.1.0": {
+ "integrity": "sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==",
+ "dependencies": [
+ "compute-scroll-into-view"
+ ]
+ },
"ssf@0.11.2": {
"integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==",
"dependencies": [
"frac"
]
},
+ "string-convert@0.2.1": {
+ "integrity": "sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A=="
+ },
"string_decoder@1.3.0": {
"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
"dependencies": [
@@ -559,6 +1203,9 @@
"min-indent"
]
},
+ "stylis@4.3.6": {
+ "integrity": "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ=="
+ },
"supports-color@7.2.0": {
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dependencies": [
@@ -568,6 +1215,9 @@
"symbol-tree@3.2.4": {
"integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="
},
+ "throttle-debounce@5.0.2": {
+ "integrity": "sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A=="
+ },
"tldts-core@6.1.85": {
"integrity": "sha512-DTjUVvxckL1fIoPSb3KE7ISNtkWSawZdpfxGxwiIrZoO6EbHVDXXUIlIuWympPaeS+BLGyggozX/HTMsRAdsoA=="
},
@@ -577,6 +1227,9 @@
"tldts-core"
]
},
+ "toggle-selection@1.0.6": {
+ "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ=="
+ },
"tough-cookie@5.1.2": {
"integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==",
"dependencies": [