From 623483ef362a361dd2408bc2a2324cb02eb92c23 Mon Sep 17 00:00:00 2001 From: dengfuping Date: Sun, 7 Apr 2024 14:43:00 +0800 Subject: [PATCH] feat(design): TreeSelect add default placeholder and ConfigProvider support to config it global --- .dumirc.ts | 1 + packages/design/package.json | 3 +- packages/design/src/index.ts | 3 + packages/design/src/locale/index.ts | 2 + .../__snapshots__/placeholder.test.tsx.snap | 435 ++++++++++++++++++ .../__tests__/placeholder.test.tsx | 156 +++++++ .../design/src/tree-select/demo/basic.tsx | 57 +++ .../design/src/tree-select/demo/multiple.tsx | 59 +++ packages/design/src/tree-select/index.md | 20 + packages/design/src/tree-select/index.ts | 1 - packages/design/src/tree-select/index.tsx | 78 ++++ .../design/src/tree-select/style/index.ts | 34 ++ pnpm-lock.yaml | 140 +++++- 13 files changed, 974 insertions(+), 15 deletions(-) create mode 100644 packages/design/src/tree-select/__tests__/__snapshots__/placeholder.test.tsx.snap create mode 100644 packages/design/src/tree-select/__tests__/placeholder.test.tsx create mode 100644 packages/design/src/tree-select/demo/basic.tsx create mode 100644 packages/design/src/tree-select/demo/multiple.tsx create mode 100644 packages/design/src/tree-select/index.md delete mode 100644 packages/design/src/tree-select/index.ts create mode 100644 packages/design/src/tree-select/index.tsx create mode 100644 packages/design/src/tree-select/style/index.ts diff --git a/.dumirc.ts b/.dumirc.ts index ca21db811..cba719be0 100644 --- a/.dumirc.ts +++ b/.dumirc.ts @@ -138,6 +138,7 @@ export default defineConfig({ { title: 'Input 输入框', link: '/components/input' }, { title: 'InputNumber 数字输入框', link: '/components/input-number' }, { title: 'Select 选择器', link: '/components/select' }, + { title: 'TreeSelect 树选择', link: '/components/tree-select' }, ], }, { diff --git a/packages/design/package.json b/packages/design/package.json index 950adcf9c..19f9a2b0c 100644 --- a/packages/design/package.json +++ b/packages/design/package.json @@ -52,7 +52,8 @@ "@babel/preset-env": "^7.24.3", "antd-token-previewer": "^2.0.8", "rc-select": "^14.13.0", - "rc-table": "^7.45.4" + "rc-table": "^7.45.4", + "rc-tree-select": "^5.19.0" }, "peerDependencies": { "react": ">=16.9.0", diff --git a/packages/design/src/index.ts b/packages/design/src/index.ts index dc1023e91..783ecd22c 100644 --- a/packages/design/src/index.ts +++ b/packages/design/src/index.ts @@ -65,6 +65,9 @@ export type { InputProps } from './input'; export { default as Select } from './select'; export type { SelectProps } from './select'; +export { default as TreeSelect } from './tree-select'; +export type { TreeSelectProps } from './tree-select'; + export { default as Tooltip } from './tooltip'; export type { TooltipProps } from './tooltip'; diff --git a/packages/design/src/locale/index.ts b/packages/design/src/locale/index.ts index 49327b813..8366361ee 100644 --- a/packages/design/src/locale/index.ts +++ b/packages/design/src/locale/index.ts @@ -2,6 +2,7 @@ import type { Locale as AntLocale } from 'antd/es/locale'; import type { DrawerLocale } from '../drawer'; import type { InputLocale } from '../input'; import type { SelectLocale } from '../select'; +import type { TreeSelectLocale } from '../tree-select'; import type { TableLocale } from '../table'; export * from 'antd/es/locale'; @@ -10,6 +11,7 @@ export interface Locale extends AntLocale { Drawer?: DrawerLocale; Input?: InputLocale; Select?: SelectLocale; + TreeSelect?: TreeSelectLocale; Table?: TableLocale; } diff --git a/packages/design/src/tree-select/__tests__/__snapshots__/placeholder.test.tsx.snap b/packages/design/src/tree-select/__tests__/__snapshots__/placeholder.test.tsx.snap new file mode 100644 index 000000000..72c1d7aaf --- /dev/null +++ b/packages/design/src/tree-select/__tests__/__snapshots__/placeholder.test.tsx.snap @@ -0,0 +1,435 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`TreeSelect placeholder > ConfigProvider locale.TreeSelect.placeholder should be priority to ConfigProvider locale.global.placeholder 1`] = ` +
+
+ + + + + Select global placeholder + +
+ +
+`; + +exports[`TreeSelect placeholder > ConfigProvider locale.TreeSelect.placeholder should work 1`] = ` +
+
+ + + + + global placeholder + +
+ +
+`; + +exports[`TreeSelect placeholder > ConfigProvider locale.global.placeholder should work 1`] = ` +
+
+ + + + + global placeholder + +
+ +
+`; + +exports[`TreeSelect placeholder > TreeSelect placeholder should be priority to ConfigProvider locale.TreeSelect.placeholder 1`] = ` +
+
+ + + + + custom placeholder + +
+ +
+`; + +exports[`TreeSelect placeholder > TreeSelect placeholder should be priority to ConfigProvider locale.global.placeholder 1`] = ` +
+
+ + + + + custom placeholder + +
+ +
+`; + +exports[`TreeSelect placeholder > custom placeholder should work 1`] = ` +
+
+ + + + + custom placeholder + +
+ +
+`; + +exports[`TreeSelect placeholder > default placeholder should be correct 1`] = ` +
+
+ + + + + Please select + +
+ +
+`; diff --git a/packages/design/src/tree-select/__tests__/placeholder.test.tsx b/packages/design/src/tree-select/__tests__/placeholder.test.tsx new file mode 100644 index 000000000..ca87ce323 --- /dev/null +++ b/packages/design/src/tree-select/__tests__/placeholder.test.tsx @@ -0,0 +1,156 @@ +import React from 'react'; +import { render } from '@testing-library/react'; +import { ConfigProvider, TreeSelect } from '@oceanbase/design'; +import type { TreeSelectProps } from '@oceanbase/design'; + +const TreeSelectTest: React.FC = props => { + const treeData = [ + { + value: 'parent 1', + title: 'parent 1', + children: [ + { + value: 'parent 1-0', + title: 'parent 1-0', + children: [ + { + value: 'leaf1', + title: 'leaf1', + }, + { + value: 'leaf2', + title: 'leaf2', + }, + ], + }, + { + value: 'parent 1-1', + title: 'parent 1-1', + children: [ + { + value: 'leaf3', + title: leaf3, + }, + ], + }, + ], + }, + ]; + return ; +}; + +describe('TreeSelect placeholder', () => { + it('default placeholder should be correct', () => { + const { container, asFragment } = render(); + expect(container.querySelector('.ant-select-selection-placeholder').textContent).toBe( + 'Please select' + ); + expect(asFragment().firstChild).toMatchSnapshot(); + }); + + it('custom placeholder should work', () => { + const { container, asFragment } = render(); + expect(container.querySelector('.ant-select-selection-placeholder').textContent).toBe( + 'custom placeholder' + ); + expect(asFragment().firstChild).toMatchSnapshot(); + }); + + it('ConfigProvider locale.global.placeholder should work', () => { + const { container, asFragment } = render( + + + + ); + expect(container.querySelector('.ant-select-selection-placeholder').textContent).toBe( + 'global placeholder' + ); + expect(asFragment().firstChild).toMatchSnapshot(); + }); + + it('TreeSelect placeholder should be priority to ConfigProvider locale.global.placeholder', () => { + const { container, asFragment } = render( + + + + ); + expect(container.querySelector('.ant-select-selection-placeholder').textContent).toBe( + 'custom placeholder' + ); + expect(asFragment().firstChild).toMatchSnapshot(); + }); + + it('ConfigProvider locale.TreeSelect.placeholder should work', () => { + const { container, asFragment } = render( + + + + ); + expect(container.querySelector('.ant-select-selection-placeholder').textContent).toBe( + 'global placeholder' + ); + expect(asFragment().firstChild).toMatchSnapshot(); + }); + + it('TreeSelect placeholder should be priority to ConfigProvider locale.TreeSelect.placeholder', () => { + const { container, asFragment } = render( + + + + ); + expect(container.querySelector('.ant-select-selection-placeholder').textContent).toBe( + 'custom placeholder' + ); + expect(asFragment().firstChild).toMatchSnapshot(); + }); + + it('ConfigProvider locale.TreeSelect.placeholder should be priority to ConfigProvider locale.global.placeholder', () => { + const { container, asFragment } = render( + + + + ); + expect(container.querySelector('.ant-select-selection-placeholder').textContent).toBe( + 'Select global placeholder' + ); + expect(asFragment().firstChild).toMatchSnapshot(); + }); +}); diff --git a/packages/design/src/tree-select/demo/basic.tsx b/packages/design/src/tree-select/demo/basic.tsx new file mode 100644 index 000000000..f8ea38f2d --- /dev/null +++ b/packages/design/src/tree-select/demo/basic.tsx @@ -0,0 +1,57 @@ +import React, { useState } from 'react'; +import { TreeSelect } from '@oceanbase/design'; + +const App: React.FC = () => { + const [value, setValue] = useState(); + + const onChange = (newValue: string) => { + setValue(newValue); + }; + + const treeData = [ + { + value: 'parent 1', + title: 'parent 1', + children: [ + { + value: 'parent 1-0', + title: 'parent 1-0', + children: [ + { + value: 'leaf1', + title: 'leaf1', + }, + { + value: 'leaf2', + title: 'leaf2', + }, + ], + }, + { + value: 'parent 1-1', + title: 'parent 1-1', + children: [ + { + value: 'leaf3', + title: leaf3, + }, + ], + }, + ], + }, + ]; + + return ( + + ); +}; + +export default App; diff --git a/packages/design/src/tree-select/demo/multiple.tsx b/packages/design/src/tree-select/demo/multiple.tsx new file mode 100644 index 000000000..2839d570c --- /dev/null +++ b/packages/design/src/tree-select/demo/multiple.tsx @@ -0,0 +1,59 @@ +import React, { useState } from 'react'; +import { TreeSelect } from '@oceanbase/design'; + +const App: React.FC = () => { + const [value, setValue] = useState(); + + const onChange = (newValue: string) => { + console.log(newValue); + setValue(newValue); + }; + + const treeData = [ + { + value: 'parent 1', + title: 'parent 1', + children: [ + { + value: 'parent 1-0', + title: 'parent 1-0', + children: [ + { + value: 'leaf1', + title: 'my leaf', + }, + { + value: 'leaf2', + title: 'your leaf', + }, + ], + }, + { + value: 'parent 1-1', + title: 'parent 1-1', + children: [ + { + value: 'sss', + title: sss, + }, + ], + }, + ], + }, + ]; + + return ( + + ); +}; + +export default App; diff --git a/packages/design/src/tree-select/index.md b/packages/design/src/tree-select/index.md new file mode 100644 index 000000000..a495e1c11 --- /dev/null +++ b/packages/design/src/tree-select/index.md @@ -0,0 +1,20 @@ +--- +title: TreeSelect 树选择 +nav: + title: 基础组件 + path: /components +demo: + cols: 2 +--- + +- 🔥 完全继承 antd [TreeSelect](https://ant.design/components/tree-select-cn/) 的能力和 API,可无缝切换。 +- 💄 定制主题和样式,符合 OceanBase Design 设计规范。 +- 📢 默认填充 `placeholder`,并支持通过 ConfigProvider `locale.global.placeholder` 或 `locale.TreeSelect.placeholder` 进行全局配置。 + +## 代码演示 + + + + + +- 详见 antd TreeSelect 文档: https://ant.design/components/tree-select-cn/ diff --git a/packages/design/src/tree-select/index.ts b/packages/design/src/tree-select/index.ts deleted file mode 100644 index d316b32c0..000000000 --- a/packages/design/src/tree-select/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from 'antd/es/tree-select'; diff --git a/packages/design/src/tree-select/index.tsx b/packages/design/src/tree-select/index.tsx new file mode 100644 index 000000000..8c89c6d79 --- /dev/null +++ b/packages/design/src/tree-select/index.tsx @@ -0,0 +1,78 @@ +import { TreeSelect as AntTreeSelect } from 'antd'; +import type { TreeSelectProps as AntTreeSelectProps } from 'antd/es/tree-select'; +import { TreeNode as AntTreeNode } from 'rc-tree-select'; +import type { BaseSelectRef } from 'rc-select'; +import classNames from 'classnames'; +import React, { useContext } from 'react'; +import ConfigProvider from '../config-provider'; +import type { ConfigConsumerProps } from '../config-provider'; +import defaultLocale from '../locale/en-US'; +import useStyle from './style'; + +export * from 'antd/es/tree-select'; + +export interface TreeSelectLocale { + placeholder?: string; +} + +export interface TreeSelectProps extends AntTreeSelectProps { + locale?: TreeSelectLocale; +} + +type CompoundedComponent = React.ForwardRefExoticComponent< + TreeSelectProps & React.RefAttributes +> & { + // need to use AntTreeNode from rc-tree-select to avoid ts error + TreeNode: typeof AntTreeNode; + SHOW_ALL: typeof AntTreeSelect.SHOW_ALL; + SHOW_PARENT: typeof AntTreeSelect.SHOW_PARENT; + SHOW_CHILD: typeof AntTreeSelect.SHOW_CHILD; + _InternalPanelDoNotUseOrYouWillBeFired: typeof AntTreeSelect._InternalPanelDoNotUseOrYouWillBeFired; +}; + +const InternalTreeSelect = React.forwardRef( + ({ locale: customLocale, prefixCls: customizePrefixCls, className, ...restProps }, ref) => { + const { locale: contextLocale, getPrefixCls } = useContext( + ConfigProvider.ConfigContext + ); + const treeSelectLocale: TreeSelectLocale = { + ...defaultLocale.global, + ...contextLocale?.global, + ...defaultLocale.TreeSelect, + ...contextLocale?.TreeSelect, + ...customLocale, + }; + + const prefixCls = getPrefixCls('tree-select', customizePrefixCls); + const { wrapSSR } = useStyle(prefixCls); + const treeSelectCls = classNames(className); + + return wrapSSR( + + ); + } +); + +const TreeSelect = InternalTreeSelect as CompoundedComponent; +const TreeNode = AntTreeSelect.TreeNode; + +TreeSelect.TreeNode = TreeNode; +TreeSelect.SHOW_ALL = AntTreeSelect.SHOW_ALL; +TreeSelect.SHOW_PARENT = AntTreeSelect.SHOW_PARENT; +TreeSelect.SHOW_CHILD = AntTreeSelect.SHOW_CHILD; +TreeSelect._InternalPanelDoNotUseOrYouWillBeFired = + AntTreeSelect._InternalPanelDoNotUseOrYouWillBeFired; + +export { TreeNode }; + +if (process.env.NODE_ENV !== 'production') { + TreeSelect.displayName = AntTreeSelect.displayName; +} + +export default TreeSelect; diff --git a/packages/design/src/tree-select/style/index.ts b/packages/design/src/tree-select/style/index.ts new file mode 100644 index 000000000..200dc5696 --- /dev/null +++ b/packages/design/src/tree-select/style/index.ts @@ -0,0 +1,34 @@ +import type { CSSObject } from '@ant-design/cssinjs'; +import type { FullToken, GenerateStyle } from 'antd/es/theme/internal'; +import { genComponentStyleHook } from '../../_util/genComponentStyleHook'; +import { getWeakenBorderColor } from '../../_util/getWeakenBorderColor'; + +export type SelectToken = FullToken<'Select'>; + +const getMultipleBorderColor = (token: SelectToken) => { + const { componentCls, colorBorder } = token; + return { + [`${componentCls}-selection-item`]: { + borderColor: getWeakenBorderColor(colorBorder), + }, + }; +}; + +export const genSelectStyle: GenerateStyle = (token: SelectToken): CSSObject => { + const { componentCls } = token; + + return { + [`${componentCls}`]: { + ['&-multiple']: getMultipleBorderColor(token), + ['&-multiple&-lg']: getMultipleBorderColor(token), + ['&-multiple&-sm']: getMultipleBorderColor(token), + }, + }; +}; + +export default (prefixCls: string) => { + const useStyle = genComponentStyleHook('Select', (token: SelectToken) => { + return [genSelectStyle(token)]; + }); + return useStyle(prefixCls); +}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 282f76bc1..ceee3f6ee 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -351,7 +351,7 @@ importers: version: 2.10.14(react@18.2.0) antd: specifier: ^5.16.0 - version: 5.16.0(moment@2.30.1)(react-dom@18.2.0)(react@18.2.0) + version: 5.16.0 classnames: specifier: ^2.5.1 version: 2.5.1 @@ -375,7 +375,7 @@ importers: version: 18.2.0(react@18.2.0) react-sticky-mouse-tooltip: specifier: ^0.0.1 - version: 0.0.1(react-dom@18.2.0)(react@18.2.0) + version: 0.0.1 devDependencies: '@babel/cli': specifier: ^7.24.1 @@ -385,13 +385,16 @@ importers: version: 7.24.3(@babel/core@7.24.3) antd-token-previewer: specifier: ^2.0.8 - version: 2.0.8(@babel/core@7.24.3)(@types/react@18.2.74)(antd@5.16.0)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) + version: 2.0.8(@babel/core@7.24.3)(@types/react@18.2.74)(antd@5.16.0)(react-is@18.2.0) rc-select: specifier: ^14.13.0 version: 14.13.0(react-dom@18.2.0)(react@18.2.0) rc-table: specifier: ^7.45.4 version: 7.45.4(react-dom@18.2.0)(react@18.2.0) + rc-tree-select: + specifier: ^5.19.0 + version: 5.19.0(react-dom@18.2.0)(react@18.2.0) packages/icons: dependencies: @@ -4769,7 +4772,7 @@ packages: peerDependencies: react: '>=16.3.0' dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.1 hoist-non-react-statics: 3.3.2 react: 18.1.0 react-is: 16.13.1 @@ -4781,7 +4784,7 @@ packages: peerDependencies: react: '>=16.3.0' dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.1 hoist-non-react-statics: 3.3.2 react: 18.2.0 react-is: 16.13.1 @@ -7277,7 +7280,7 @@ packages: /@umijs/history@5.3.1: resolution: {integrity: sha512-/e0cEGrR2bIWQD7pRl3dl9dcyRGeC9hoW0OCvUTT/hjY0EfUrkd6G8ZanVghPMpDuY5usxq9GVcvrT8KNXLWvA==} dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.1 query-string: 6.14.1 dev: true @@ -8055,6 +8058,33 @@ packages: - react-is dev: true + /antd-token-previewer@2.0.8(@babel/core@7.24.3)(@types/react@18.2.74)(antd@5.16.0)(react-is@18.2.0): + resolution: {integrity: sha512-Dp5a1thv8lHTJdmJAog75Mt8ZXQ9NYXX7WxRy49UeYVeR+kDKbolww+aIQlO974jQBF+swtL/jL0MMgIUg0WKg==} + peerDependencies: + antd: ^5.5.0 + react: '>=16.0.0' + react-dom: '>=16.0.0' + dependencies: + '@ant-design/colors': 6.0.0 + '@ant-design/cssinjs': 1.19.1(react-dom@18.2.0)(react@18.2.0) + '@ant-design/icons': 5.3.6(react-dom@18.2.0)(react@18.2.0) + '@arvinxu/layout-kit': 1.4.0(@babel/core@7.24.3)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) + '@babel/runtime': 7.24.1 + '@ctrl/tinycolor': 3.6.1 + antd: 5.16.0 + classnames: 2.5.1 + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) + react-colorful: 5.6.1(react-dom@18.2.0)(react@18.2.0) + reactflow: 11.10.4(@types/react@18.2.74)(react-dom@18.2.0)(react@18.2.0) + use-debouncy: 4.3.1(react@18.2.0) + vanilla-jsoneditor: 0.16.1 + transitivePeerDependencies: + - '@babel/core' + - '@types/react' + - immer + - react-is + dev: true + /antd@4.24.16(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-zZrK4UYxHtU6tGOOf0uG/kBRx1kTvypfuSB3GqE/SBQxFhZ/TZ+yj7Z1qwI8vGfMtUUJdLeuoCAqGDa1zPsXnQ==} peerDependencies: @@ -8108,6 +8138,65 @@ packages: scroll-into-view-if-needed: 2.2.31 dev: false + /antd@5.16.0: + resolution: {integrity: sha512-2JcZSxTcX5J2Faro5PB85ETAP64cuU91pBqQ2NVHWelmhLXvN3q70R5Qht+E9k3WVsVO8ZbqBJciYqj8K/RbZw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + dependencies: + '@ant-design/colors': 7.0.2 + '@ant-design/cssinjs': 1.19.1(react-dom@18.2.0)(react@18.2.0) + '@ant-design/icons': 5.3.6(react-dom@18.2.0)(react@18.2.0) + '@ant-design/react-slick': 1.1.2(react@18.2.0) + '@babel/runtime': 7.24.1 + '@ctrl/tinycolor': 3.6.1 + '@rc-component/color-picker': 1.5.3(react-dom@18.2.0)(react@18.2.0) + '@rc-component/mutate-observer': 1.1.0(react-dom@18.2.0)(react@18.2.0) + '@rc-component/tour': 1.14.2(react-dom@18.2.0)(react@18.2.0) + '@rc-component/trigger': 2.0.0(react-dom@18.2.0)(react@18.2.0) + classnames: 2.5.1 + copy-to-clipboard: 3.3.3 + dayjs: 1.11.10 + qrcode.react: 3.1.0(react@18.2.0) + rc-cascader: 3.24.0(react-dom@18.2.0)(react@18.2.0) + rc-checkbox: 3.2.0(react-dom@18.2.0)(react@18.2.0) + rc-collapse: 3.7.3(react-dom@18.2.0)(react@18.2.0) + rc-dialog: 9.4.0(react-dom@18.2.0)(react@18.2.0) + rc-drawer: 7.1.0(react-dom@18.2.0)(react@18.2.0) + rc-dropdown: 4.2.0(react-dom@18.2.0)(react@18.2.0) + rc-field-form: 1.44.0(react-dom@18.2.0)(react@18.2.0) + rc-image: 7.6.0(react-dom@18.2.0)(react@18.2.0) + rc-input: 1.4.5(react-dom@18.2.0)(react@18.2.0) + rc-input-number: 9.0.0(react-dom@18.2.0)(react@18.2.0) + rc-mentions: 2.11.1(react-dom@18.2.0)(react@18.2.0) + rc-menu: 9.13.0(react-dom@18.2.0)(react@18.2.0) + rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) + rc-notification: 5.4.0(react-dom@18.2.0)(react@18.2.0) + rc-pagination: 4.0.4(react-dom@18.2.0)(react@18.2.0) + rc-picker: 4.3.0(dayjs@1.11.10) + rc-progress: 4.0.0(react-dom@18.2.0)(react@18.2.0) + rc-rate: 2.12.0(react-dom@18.2.0)(react@18.2.0) + rc-resize-observer: 1.4.0(react-dom@18.2.0)(react@18.2.0) + rc-segmented: 2.3.0(react-dom@18.2.0)(react@18.2.0) + rc-select: 14.13.0(react-dom@18.2.0)(react@18.2.0) + rc-slider: 10.5.0(react-dom@18.2.0)(react@18.2.0) + rc-steps: 6.0.1(react-dom@18.2.0)(react@18.2.0) + rc-switch: 4.1.0(react-dom@18.2.0)(react@18.2.0) + rc-table: 7.45.4(react-dom@18.2.0)(react@18.2.0) + rc-tabs: 14.1.1(react-dom@18.2.0)(react@18.2.0) + rc-textarea: 1.6.3(react-dom@18.2.0)(react@18.2.0) + rc-tooltip: 6.2.0(react-dom@18.2.0)(react@18.2.0) + rc-tree: 5.8.5(react-dom@18.2.0)(react@18.2.0) + rc-tree-select: 5.19.0(react-dom@18.2.0)(react@18.2.0) + rc-upload: 4.5.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) + scroll-into-view-if-needed: 3.1.0 + throttle-debounce: 5.0.0 + transitivePeerDependencies: + - date-fns + - luxon + - moment + /antd@5.16.0(moment@2.30.1)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-2JcZSxTcX5J2Faro5PB85ETAP64cuU91pBqQ2NVHWelmhLXvN3q70R5Qht+E9k3WVsVO8ZbqBJciYqj8K/RbZw==} peerDependencies: @@ -13601,7 +13690,7 @@ packages: /history@5.3.0: resolution: {integrity: sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==} dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.1 dev: true /hmac-drbg@1.0.1: @@ -19977,6 +20066,34 @@ packages: shallowequal: 1.1.0 dev: false + /rc-picker@4.3.0(dayjs@1.11.10): + resolution: {integrity: sha512-bQNB/+NdW55jlQ5lPnNqF5J90Tq4SihLbAF7tzPBvGDJyoYmDgwLm4FN0ZB3Ot9i1v6vJY/1mgqZZTT9jbYc5w==} + 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 + dependencies: + '@babel/runtime': 7.24.1 + '@rc-component/trigger': 2.0.0(react-dom@18.2.0)(react@18.2.0) + classnames: 2.5.1 + dayjs: 1.11.10 + rc-overflow: 1.3.2(react-dom@18.2.0)(react@18.2.0) + rc-resize-observer: 1.4.0(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) + /rc-picker@4.3.0(dayjs@1.11.10)(moment@2.30.1)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-bQNB/+NdW55jlQ5lPnNqF5J90Tq4SihLbAF7tzPBvGDJyoYmDgwLm4FN0ZB3Ot9i1v6vJY/1mgqZZTT9jbYc5w==} engines: {node: '>=8.x'} @@ -20641,7 +20758,7 @@ packages: react: ^16.6.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.6.0 || ^17.0.0 || ^18.0.0 dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.1 invariant: 2.2.4 prop-types: 15.8.1 react: 18.1.0 @@ -20656,7 +20773,7 @@ packages: react: ^16.6.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.6.0 || ^17.0.0 || ^18.0.0 dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.1 invariant: 2.2.4 prop-types: 15.8.1 react: 18.2.0 @@ -20817,14 +20934,11 @@ packages: react-style-proptype: 3.2.2 dev: false - /react-sticky-mouse-tooltip@0.0.1(react-dom@18.2.0)(react@18.2.0): + /react-sticky-mouse-tooltip@0.0.1: resolution: {integrity: sha512-nuKyvolX3Zsu48uoGXkEvEE8oAwl7jaUvJrA/SxCSmBmbzmECNBQp03Z60L6/1ImLUzLFUHh2Wul3GpkEffrPw==} peerDependencies: react: ^16.1.0 react-dom: ^16.1.0 - dependencies: - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) dev: false /react-style-proptype@3.2.2: