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": [